Computer Science. It’s one of the most popular Degrees, and one of the highest paying after graduation, and with a job growth of at least 15% predicted by 2029, it’s one of the fastest growing job markets out there. But Computer Science is unique.
It’s one of the only areas of technical expertise you can get into without actually having the degree. Prove you can code, engineer and design better than others through practical projects, and you’ve every chance of being hired. Good luck achieving that with any other Engineering or high-paying profession. It’s kind of hard to get practical experience as a Surgeon or Petroleum Engineer lacking a degree, without doing some horrifically unethical, in any case.
But I’m certainly not saying it’s easy. I firmly believe anyone can do it, that you can do it. But it’s not going to be a cakewalk. Proving that you’re as good and as deserving to be hired as the freshly graduated Computer Science student is a monumentally difficult task, but it’s also monumentally rewarding.
There’s a reason Computer Science is so often pursued as a career path for people to swap into when they find the tedium of their pointless current job too much to handle, and that’s because it’s fun.
To make this perfectly clear, you have to enjoy learning, and improving yourself. You have to relish in the challenge of the unknown. You must see a difficult roadblock as something you simply enjoy finding a way around.
However, if that’s you, and you set yourself on the path of Computer Science? There will be no problem you cannot solve. That’s what I love, and what is totally unique to the Computer Science profession. See a problem, solve it. The most satisfying job on the planet.
This guide is for people that don’t want to take a 12 week boot-camp and somehow expect to know enough to get hired, it’s for people that know a shortcut is just that, and want to properly understand the world of computing and how it all links together.
Nerdy rant over, it’s important to first decide what you want to get out of learning Computer Science or programming without a degree. We have to know what we want before we could ever dream of knowing how to get it.
Why do you want to learn Computer Science?
This is a critically important question, because what you want to achieve will change how you want to tackle this.
I want to build a specific project/learn a specific language
If you have one aim in mind, such as learning how to build a certain gadget, or you want to learn how to automate tasks in python, without caring about the how or the why. Then I would suggest finding specific tutorials on those topics and coming back to this guide if you decide you want to learn how those things work in the background.
If you want to build a specific project/complete a task but enjoy all the theory behind how it works, then I would suggest reading on and picking out the topics relevant to what you want to achieve.
Attempting to learn all of these topics if you’re looking to only delve into one aspect or language will likely result in burnout, which is enemy of all learning. Instead find the section that enables you to build what you want and go from there.
I want to get a job in Computer Science
You may be thinking that it’s impossible to get the same education as someone that has done a 3 or 4 year degree focused on just this topic. But if you’re seeking to learn Computer Science without a degree, despite all the warnings I’ve just thrown at you, you’re already at an advantage. You may be surprised to learn that many CS graduates fresh out of College or University can’t program. They don’t understand how everything links together, they don’t know how to even begin building a project on their own. I’ve heard this from both employers and students themselves, be it that they weren’t at the point in their lives they actually wanted to try, or that the curriculum failed them.
This is where you need to do better than them.
To beat someone that has the backing of a degree to an employer, you need to show your backing is stronger, through practical projects. Through understanding how it all links together. Do all that, and the fresh graduate that can’t solve FizzBuzz is going to look like a fish out of water.
The resources I’ve sourced and will be suggesting treat it as though you are doing your own Computer Science degree, if you properly go through them and do practical projects when possible, you’ll be covering all the same topics and theory someone that pays an extortionate sum will.
You need to make sure you build a portfolio of projects that demonstrate all the competencies usually shown by that slip of degree paper. You will need to network and market yourself as early on as you can, and it may at times weigh upon your mind that everything would be okay if only you’d taken the right career or degree at the start.
Don’t worry.
You’re never too old. The question of whether it’s too late to get into Programming or Computer Science is the most common question on any beginner forum, and the answer is always a resounding “No”.
I want to learn as a hobby/for fun
Firstly, welcome to the strange and elusive club of people that learn for enjoyment, I salute you and be proud.
I would suggest you start wherever you like the sound of the most, bearing in mind more advanced topics may have prerequisites, but these can be seen in individual sections.
If you’re like me and enjoy learning from the base up instead of skipping around, go at it like the learning path suggests for getting a job, just don’t feel like you have to complete projects. Do the ones you want, but don’t worry about building a portfolio, unless you also find that fun! The networking, marketing and proving yourself sections are really only necessary for those wanting to break into a career via learning Computer Science from scratch.
The Learning Roadmap
There are different skills that I would recommend you develop in tandem (depending on the time you have available), similar to a real degree.
These are: Theory and Practical Skills
If you want to get a job as quick as possible, learn the Introduction to Coding topic from Theory, focus on the Practical Skills to develop real projects, and then come back to learn Theory either once you have a job or during your spare time. Theory is what will make you a truly exceptional Developer, but it’s a lot to learn and a minority of it will actually be used in a Development day job, just like most degrees…
Practical skills will be the most useful in real life, and let you develop a proper portfolio. This is what most Computer Science students are missing when they graduate. Pick the area of specialism that you like, whether it’s listed here or not, and get solving problems.
Computer Science Theory
The theory is what a Computer Science degree will usually contain. This is what the exams are on, and what the average graduate will come out with an understanding of. It’s the knowledge that will impress an interviewer, and give you the ability to understand the Practical applications with in-depth detail.
It is also however much less applicable than simply learning a programming language, or bashing your head against a project until you get it to work. I would suggest learning this as you complete practical projects, regardless of your final aim. It’s incredibly useful long-term but takes time to show what it’s usefulness actually is.
Each topic has a course and book to go with it. In many cases the courses are sufficient, but the books will fill important gaps and are always useful as a reference when you need one. I would suggest reading and doing the course at the same time, picking out important chapters from the book as needed. I’ve listed where to buy them, but many are available online for free. I won’t be showing where for obvious reasons, but if you prefer a hardcopy like I do (to scribble all over obviously), they’re all available on Amazon.
Core Topics
The core topics included in most Computer Science courses are below:
Topic | Course | Book |
---|---|---|
Introduction to Coding | Harvard: CS50 on edX | Amazon: Code: The Hidden Language of Computer Hardware and Software |
Mathematics for Coding | MIT 1: Single Variable Calculus MIT 2: Mathematics for Computer Science If you struggle use Khan Academy to learn a difficult topic | MIT eBook : Mathematics for Computer Science |
Computer Hardware + Architecture | MIT 1: Computation Structures MIT 2: Computer System Architecture | Amazon: Computer Organisation and Design Amazon: Computer System Architecture |
Databases | MIT 1 Option: Computer System Engineering MIT 2:Database Systems YouTube Option: Stanford Databases | Amazon: Principles of Computer System Design Part 1 MIT eBook: Principles of Computer System Design Part 2 Amazon: Database Management Systems |
Algorithms & Data Structures | MIT: Introduction to Algorithms | Amazon: Introduction to Algorithms |
Computational Theory | YouTube: Theory of Computation | Amazon: Introduction to the Theory of Computation |
If you study each of these topics to even a basic level, you’ll be on par with the theory that many Computer Science graduates have. If you complete the projects that are included in courses, and come up with your own for ones that don’t include projects, you’ll be far ahead on the practical side as well.
Optional Topics
In every Computer Science course there are also optional modules that allow the student to specialise in their interests. Learning these can be useful if you want to do the same thing, and are pretty much a requirement for getting a specialist job in the area. You’re likely not going to get one of these right off the bat however, so feel free to delve deeper into these optional topics either just for fun, or once you’re working and know what career you want.
Topic | Course | Book |
---|---|---|
Basic Electronics | MIT 1: Introduction to Electrical Engineering and Computer Science MIT 2: Electricity and Magnetism | MIT eBook: Introduction to Electrical Engineering Amazon: Foundations of Analog and Digital Electronic Circuits |
Advanced Electronics | MIT 1: Digital Communication Systems MIT 2: Micro/Nano Processing Technology MIT 3: Microelectronic Devices and Circuits | MIT eBook: Microelectronic Devices and Circuits |
Cryptography | YouTube: Cryptography Course | |
Networks | YouTube: Network Engineering Course YouTube Option 2: Network Engineering Course | |
Compilers | MIT: Computer Language Engineering | Amazon: Compilers, Principles, Techniques, and Tools |
Distributed Systems | Amazon: Distributed Systems | |
Operating Systems | Amazon: Modern Operating Systems | |
Artificial Intelligence and Machine Learning | Harvard: CS50s Introduction to Artificial Intelligence with Python | Amazon: Artificial Intelligence, A Modern Approach |
The only real, concrete requirement to get hired however, are the Practical Skills.
Practical Skills
There are so many avenues to take in Software Development and Computer Science nowadays that it’s quite possibly impossible to keep up.
I will constantly be reviewing and working on improving this section, and it may eventually be too huge to fit on our pitiful website servers.
Once you have completed the basic Theory section of Introduction to Coding, I would suggest that you look through all of the options here, pick what you’re most interested in, and find a course/book/project you want to complete, to try it out. See if you like it before buckling down, and then start developing projects in line with the skills you want to develop. Some are easier than others, and some involve much less code than others.
I’m not versed in every topic here, I’d have to of been programming since the invention of the very computer I’m typing on, but I can certainly give an overview of the possibilities, and put them in some kind of order of coding knowledge required. Bearing in mind this is totally opinion.
As I continue to learn, or if anyone else wants to contribute, I’ll continue to improve this section. But for now here are the Practical skills you could choose to focus on!
Front-End Development
This is a developer who specializes in the programming of visual user interfaces, including its aesthetics and layouts. A front-end developer code runs on a web browser, on the computer of the user of the site.
Very saturated, due to being the easiest to learn, in theory.
Involves a lot of ascertaining customer requirements and attempting to bring their vision to life. Less code-focused than many others.
- HTML, CSS, Javascript, React, Node
- Many other frameworks for UI/UX
Back-End Development
This is a developer who specializes in the design, implementation, functional core logic, performance and scalability of a piece of software or system running on machines that are remote from the end-user.
- MongoDB, Ruby, Python, PHP, SQL
DevOps
Developer familiar with technologies required for the development of systems to build, deploy, integrate and administer back-end software and distributed systems.
- Kubernetes, Docker, Jenkins
Desktop Development
This is a developer who works on software applications that run natively on desktop operating systems (such as Mac OS, Windows, and Linux/Ubuntu).
On a noticeable decline in popularity and job availability, but who knows what the future holds.
- Visual Studio, Visual Basic
Mobile Development
This is a developer who writes code for applications that run natively on consumer mobile devices such as smartphones and tablets. This used to be considered Embedded Development but is rapidly growing to be one of the largest sectors.
- Java, Swift, Objective-C
Graphics Development
This is a type of developer specialized in writing software for rendering, lighting, shadowing, shading, culling, and management of scenes. These developers are often responsible for integrating technologies in the gaming and video production industry.
- DirectX, OpenGL, Unity3D, C, C++, Assembly
Data Science
This type of developer writes software programs to analyse data sets. They are often in charge of statistical analysis, machine learning, data visualization, and predictive modelling.
Much less coding than other development roles for the most part, but a very good understanding of statistical analysis and data visualisation is usually required.
Highly sought after role currently, due to the booming growth of companies like Facebook, Google, Instagram, that rely heavily on user data for advertising profit.
- SQL, R, Python
Game Development
Game developers can fall into one of the other categories of developers, but they often have specific knowledge and skills in designing and implementing engaging and interactive gaming experiences. One of the most competitive and highest stress out of all the options.
- C#, C, C++, Java, Swift
Big Data
This type of developer writes software programs to store and retrieve large amounts of data in systems such as ETL (Extract Transform Load) systems, data warehouses, relational databases, data lakes management systems, etc.
- MapReduce, Hadoop, Spark, SQL, Java, Python, R
Embedded Development
These developers work with hardware that isn’t commonly classified as computers. Microcontrollers, real-time systems, electronic interfaces, set-top boxes, consumer devices, iOT devices, hardware drivers, and serial data transmission fall into this category. This can actually be much more interesting and varied then it sounds.
- C, C++, Assembly, Java, proprietary technologies
Ethical Hacking/Pen Testing/Red Team
Develops systems, methods and procedures to test the security of a software system, in order to exploit and highlight flaws that need to be fixed. Often called a “white hat” ethical hacker, or a pen tester.
Cybersecurity/Blue Team
Similar to a pen tester but working on the defence side, a very up and coming role due to recent large scale breaches in cybersecurity. Works with networks and pen testers to determine the best way to defend from possible attacks.
This article is very much a work in progress and will be continually updated as I receive feedback and delve into my own research into the topic. Any questions feel free to ask in a comment, or send me an email at:
Lastly, if you made it this far you’re a much more diligent reader than me, and you’re clearly going to go far simply for that reason. Good luck out there and please let me know if this helped you!
To read more about the site: Go here
If you want to read more about us: Click here