Getting Into Computer Science
Introduction
This page is for those who would like to get into Computer Science, with a focus on programming.
It's for people who would like to: create websites that actually do things instead of looking pretty, create games/applications, or those interested in AI.
It's also a valuable understanding to have, to know the inner workings of the technology weuse and rely on every day.
To really perform at any tasks involving programming, you need to know what the hell you're doing.
Programming isn't like art where you can just "wing it" and creatively slap things around.
It requires a lot of organization and patterns you must follow in order to make something that actually works, and most importantly, continues to work.
To put it simply, that really is all there is to creating good code - know the patterns you should follow.
The Problem
The difficulty lies in finding where you're supposed to learn these.
As we know the internet is full of information, and most of it is low quality.
Here's what to stay away from when learning programming:
- Javascript. The entire thing. The ecosystem has been an absolute mess from the start, being more like an experimental playground for a bunch of bored silicon valley kids rather than anything that has any longevity or practicality. Apart from my personal distaste for it, the educational material tend to skip a lot of theory and you end up unaware of the inner workings of most things here.
- YouTube videos or resources made by anyone with a fade haircut. They are soulless entrepreneurs who are just looking for Twitter followers and YouTube revenue and don't actually care about the subject matter or any real learning. I'd recommend being away from YouTube for this subject overall, though.
Planning
Comp Sci is a huge and mystical thing, so doing a few months on YouTube by yourself isn't really going to cut it when you don't have the foundations.
You'd get constantly stuck, and pushing yourself to do something as painful as learning is very hard if you are truly on your own.
You need:
- A mentor. Having someone you can ask questions to and someone you can fear disappointing if you drop the ball
- A community of people going through the same pain as you at the same time. This helps you gage how "difficult" the material is by seeing what kind of questions pop up, and helps you keep motivated.
The best way for both of these is to attend a certified course. This might be at a college or training school. This may cost money depending on your country. Even if you don't plan to attend these, definitely do take a look at your local courses and look at their curriculum to see what specific units are being taught.
The best way is for you is to attend an in-person course. And it would be best to commit yourself into doing this.
But if you really really really really really can't, then you're going to have to do some kind of organized course like Harvard's CS50.
This course should teach you:
- At least two languages, and the basics of:
- Data Structures
- Algorithms
- Performance
- AI
- Linux use
- Computer Networks
- Databases
- Version Control
- IDE use
The Timeline
- Watch Harvard's CS50 Lecture 0
- Complete your chosen course
- Follow walkthroughs
- Additional topics
- Additional reading
- Passive knowledge vacuum
Walkthroughs
The course you go through is crucial to get the theory part of Comp Sci.
These courses usually don't go through too much practicals though, so here's where you get to actually go out there and make things that interest you.
Following complete walkthroughs of apps will open up your mind to what's out there, and gives you some easy experience and portfolio items.
Try to stick to new/updated tutorials, since the tech space changes very fast, making a lot of content and its information hopelessly outdated.
Some recommended walkthroughs:
- Django to teach you web technologies, how to host a website, how to store data through a website. Basically will get you enough information to create your own Twitter or Instagram
- Windows Form Application to learn how to create a windows executable program
- Unity video game engine to learn how to "extend" an existing set of large libraries
- Mobile Apps with React Native or Flutter to learn what true masochism is
- If you use Discord, creating a Discord bot
Walkthroughs can be found on online course websites, or YouTube.
These walkthroughs will get you familiar with:
- Using existing libraries to make your life easier
- Online package management
- Compilation/Deployment
- Version Control
- Technologies not taught in courses, such as putting a website online, what it takes to put an app on a store, possible costs involved, up-to-date frameworks used in the real world
Additional (But Important) Topics
There are topics that both courses and walkthroughs do not cover, but are crucial to advancing your programming.
Those are:
- Design Patterns
- SOLID Principles
Additional Reading
Computer Science books are surprisingly fun to read.
Here are the top recommendations:
Passive Knowledge Vacuum
The IT space moves, and moves fast.
While you shouldn't let this be a source of anxiety for you, it's good practice to roam around some techy spaces at your leisure.
This should be a relaxing thing, and not a stressful study session.
Recommended places are tech news sites or tech communities.
I would not recommend microblogging social media sites such as Twitter, as those are unhealthy to use overall.
The sources of your passive knowledge vacuum should give you, overtime, some exposure to:
- General attitude of IT workers (what they like, what they dislike)
- Significant people in tech
- Awareness of libraries and languages, even if you don't plan to use them
- Tech news
What I strongly recommend is the front page of HackerNews and Codrops Collective.
Spending 5 minutes a day before work taking a look at these will net you a lot of general IT culture and practical knowledge.
A lot of it may seem complicated or irrelevant at first, but you'll get used to it after some time.
Closing Thoughts
Computer Science is a very rewarding path to stick to, not just in terms of career path, but in the satisfying sense of mastery and expertise you feel from committing yourself to it over time.
With a constantly changing landscape, there is always something more to learn and experiment with, and best of all, it's almost always free.
It really is an open space of passionate, dedicated people, where your wealth, class, location does not matter.
Good luck, have fun.