Perhaps you’re looking to equip yourself with the necessary tools and know-how to establish your own tech startup. Maybe you want to stand at the frontline of defense against cybercrime. You might be interested in constructing your own programs or algorithms. It could be that you have an affinity for data mining and analysis.
In any case, computer science is the way forward.
If you want to learn the subject, you probably have a few questions.
- What programming languages should I be learning?
- Are there any other skills that I need to know?
- Where can I learn all of this?
There’s a decent amount of information online, but it can be difficult to ferret out the facts from the fluff. Let’s make things easier by mapping the path to mastering computer science and understanding a little more about what you can expect working in the industry.
The ICT Sector at a Glance
According to the Government of Canada’s 2018 ICT Sector Snapshot, the industry in question earned $193 billion in revenue in 2018 and experienced a 5.9% growth in size and 4.6% growth in employment. The latter growth rate has consistently outpaced the overall national economy since 2012.
Average earnings for employees in computer science was over $77,800 per year and has undoubtedly risen since then. The median annual salary is almost 50% higher than the economy-wide average. More specialized roles earn far more.
To sum it up, you can expect a great salary, high job security, and plenty of advancement opportunities working in this sector. But you need to know your stuff. Moreover, you need proof. Here’s how you can achieve that.
Phases of Computer Science
We can separate the learning process of computer science into three consecutive phases, namely:
- Computer Science
This distinction is not necessarily a universal way forward. See it instead as a guideline that you can follow to get a better idea of what steps to take and when.
For most software engineers, it was coding that kick-started their career. Learning to understand and speak the language of machines is foundational knowledge. It’s also the easiest phase, so if you struggle or find it uninteresting, you may want to consider shifting your career path to something more suitable.
If you choose to stay in this stage (many software engineers do), you can only really expect an entry-level position. Regardless, it’s paramount that you gain a strong grasp of what is taught here.
Your first step will be to choose a programming language.
The specific language you opt for is not as important as the principle of learning it, which is to understand the concepts that hold true across the board. Over time, your proficiency will increase to a point where you can learn new languages within a few weeks or less, so there’s no need to fret over finding the “perfect language.”
With that said, here are the two most widely recommended options:
One of the biggest reasons for Python being a top choice among aspiring programmers is how easy it is to learn. It’s also a high-level language that allows you to create functioning applications with a small amount of code. This means that you’ll quickly reach the point where you’re developing large projects.
There are several ways to learn Python. You can take the traditional route and read a few books while experimenting on your desktop. A more hands-on (and arguably more enjoyable and effective) approach is to learn through online courses. Codecademy, Coursera, Udemy and Khan Academy are popular sites.
Aside from being a valuable addition to your resume, Java can teach you concepts that Python doesn’t. For instance, the former is statically-typed, while Python is dynamically-typed. Both languages are in high demand, so it’s good to know them. Once you do, it will be time to move on to the next phase.
The main focus here is being able to write code that’s efficient and error-free. Here are five skills that you should learn during the programming phase:
- Knowing how any code can be made into something that is legible and executable.
- Awareness of a system’s limitations and building software accordingly.
- Understanding data structures and algorithms.
- Identifying inefficient code.
- Proficiency with quality and testing procedures.
At this phase, you can expect to land a job at one of Silicon Valley’s residents. The likes of Google, Facebook, and Uber are more interested in your abilities as a programmer, not a coder.
It’s often suggested to begin your reading with a book called The Elements of Computing Systems. This will provide essential information, specifically regarding the software stack.
Introduction to Algorithms is another worthwhile read. The material will give you a better understanding of algorithms and data structures. This is key to gaining awareness of system limitations and writing code that is fast and light on resources. At this point, it’s worth noting that your programs will seldom run on a single computer.
That’s why it’s important to learn about networks, as our increasingly connected world requires code that can speak to other machines. A well-written source of knowledge here is Computer Networking: A Top-Down Approach.
Your final step before moving on to the third phase will be to gain a deep understanding of operating systems. It’s a dense topic, so try to focus on the fundamentals and avoid getting lost in the details.
Now that you’ve mastered programming, you can start becoming an architect who considers projects in their entirety as opposed to looking at minute details. Much of this phase involves using your knowledge to build scalable, error-tolerant systems capable of handling large loads.
Here, you’re always learning and staying on top of new trends. That’s part of what makes computer science exciting. Most professionals at this phase are in charge of entire projects, managing other programmers, and overseeing their work. Having strong social and leadership skills will be to your advantage here.
We can break up your learning into two distinct subjects:
This refers to building scalable and tolerant software, which requires being able to foresee the potential problems and challenges the program will face and coding for them accordingly. A search engine is a simple example. You need to ensure that it can handle high numbers of requests, as well as what it should do if the host fails.
Mobile computing is a major trend right now, but it’s not without its challenges, as explained in this post at Wilfrid Laurier Online. This is one area that highlights the importance of understanding distributed systems. The university also offers a Master’s in Computer Science, which is naturally a must-have at this phase of your career.
If you’ve spent any time online in the past few years, you’ve probably heard about machine learning. This field can be classified as interdisciplinary, as it involves not only computer science but also statistics and mathematics. Having a strong understanding of the latter two subjects is paramount to your progress.
Aside from obtaining a degree, you can speed up your learning through online courses during your spare time. But having accredited and recognized certification of your competence is necessary for landing any jobs, as recruiters are unlikely to just take your word for it.
With some prior knowledge of mathematics and probability, you can take on a book such as An Introduction to Statistical Learning to strengthen your foundation.
The above-listed points can be dissolved into nine key subjects. The most common recommendation is to spend between 100 and 200 hours on each, revisiting your favorites as you gain a better understanding of what you enjoy most. Here are said subjects:
- Computer Architecture
- Data Structures and Algorithms
- Operating Systems
- Distributed Systems
- Languages and Compilers
This may seem like a ton of work, but it will be split up throughout your career. As you move up the ranks, you can dedicate some spare time to learning new subjects before obtaining recognition of your knowledge and taking the next step forward.
Why Master Computer Science?
So, why go this far? Well, let’s say that there are two types of software engineers:
- Those who get by with their understanding of high-level concepts.
- Those who know computer science well enough to enjoy challenging and innovative projects.
Both are rightfully software engineers and earn roughly at the same paycheck, at least towards the beginning of their careers. However, the latter enjoy more fulfilling and higher-paying work, driving breakthroughs, and taking the field to new heights. Doing that requires a dedication to lifelong learning. It takes discipline, but it’s far more rewarding.
If you’re still closer to the first phase of computer science mastery, it’s safe to say that you still have a long way to go. But don’t let this discourage you. Reaching the top takes time, effort, and dedication for a reason. Once you’re there, you’ll only gain more opportunities and your career will be more prosperous than you could ever imagine. So, get to work.