Learning Computer Science Will Make You a Better (and More Expensive) Engineer

Software engineering and computer science are not the same. Computer scientists are not always software engineers, and unfortunately, many software engineers don’t know much about computer science. Software engineers focus on building products and writing maintainable code and architecture. Computer Science is the fundamental math and theory of computation that software engineering is built upon.

The more we understand about Computer Science, the better developers we’ll be. That’s why we built Qvault, to help developers who are struggling to find work or struggling to improve as developers to fill their missing CS knowledge gaps without having to spend so much time and money going back to school.

Software engineering is the process of analyzing user needs and designing, constructing, and testing end-user applications that will satisfy these needs through the use of software programming languages

Techopedia

Computer Science is the science that deals with the theory and methods of processing information in digital computers, the design of computer hardware and software, and the applications of computers.

dictionary.com

A Shift in Front End Development

Front-end development has really come into the limelight over the last decade, with frameworks like React, Angular, and Vue.js championing that movement. Server-rendered template pages previously provided a lot of functionality (PHP, Django, Rails) that now exists as a decoupled front-end bundle.

This is fantastic news for a couple of reasons. Firstly, I’m of the mindset that this decoupling is a good architectural decision. Then finally, it means that front-end developers take on more responsibility, which allows them to become better engineers and earn more monies.

Years ago, when front-end work was more HTML and CSS and less Javascript, front-end development was less development and more design. For that reason, to work on the front-end developers didn’t need as much of a background in computing as they did in design.

Nowadays, front end developers need to have strong logic and programming skills not only because they will be required to handle more logic in the browser, but because there is a high chance they will be asked to do server work in Node.

Learning the Fundamentals – Where to Start?

There are millions of topics in the computer science field, and no one understands them all, but below I’ve listed some good starting points. You could even spend years just studying history of computer science, but if you’re looking for a job in tech, your time will be better spent learning the actual concepts.

In the following list, we’ll give a quick breakdown of the most important concepts to study, though we have a more detailed list in our comprehensive guide to learning CS online if you’re interested in that.

1. Big-O and Algorithms

Big-O deals with time complexity. In other words, how to keep programs fast. By learning about algorithm speed, we understand how to sort data for display, utilize databases for better performance, make applications more responsive, and so much more! We recently released a course of our own on the subject called Big-O Algorithms. Take a look if you want to learn more about writing performant code.

2. Memory Management

computer science comic

What are the stack and the heap? Pointers? Memory leaks? If you have never worked in a compiled language like C++ or Go, I would recommend doing a pet project or two. We have a new course that focuses on learning Go from the ground up, Go Mastery. Give the course a try if you are interested in learning the quirks of the language.

For those who work primarily in memory managed languages like JavaScript or Python, it is important to understand how memory works under the hood. Even though the interpreter (which was likely written in C++) handles memory management, we can still run into problems by not understanding the fundamentals.

3. Processor Architecture

How does a processor know to take the expression:

5 + 3;

and compute the result of 5 plus 3?

Who taught the processor to understand the Arabic numerals? The answer of course is that it doesn’t, processors only work bitwise, on binary numbers.

Javascript is run by an interpreter (Node.js or the browser) which itself is a compiled program. The interpreter was written in a compiled language, like C, Rust, or Go, but then compiled into raw byte code that the CPU understands. To get a better handle on how computers actually, you know, compute things, writing assembly code can be very helpful.

Assembly is the native language of the processor, and writing a bit of it can really help us understand how the CPU processes stuff. Because assembly is so tightly coupled to CPU architecture, the language changes depending on the processor type. I recommend starting in ARM, it has a more elegant syntax than x86 in my opinion.

4. Threading

Ever wondered how computers do multiple things at once? In most programs we write, there is a simple flow of logic, everything happens sequentially. If we are writing code that runs in the browser, then most code is fired based on events, but the fact remains that two instructions are never ran at the exact same time.

Threading is the practice of utilizing multiple processors, or processor cores, to do computations at the same time. It is a powerful but dangerous art. Threading allows us to speed up our programs by using the computer’s architecture to our advantage. However, can introduce bugs like deadlocks or race conditions.

Writing a toy program in Go and making use of virtual threads, called goroutines, is a great way to get your feet wet with threading. Read our article on the differences between multithreading in Rust and Go if you want to learn more.

Thanks for reading, now take a course!

Interested in a high-paying job in tech? Land interviews and pass them with flying colors after taking my hands-on coding courses.

Questions?

Follow and hit me up on Twitter @q_vault if you have any questions or comments. If I’ve made a mistake in the article be sure to let me know so I can get it corrected!

Subscribe to my newsletter for more coding articles delivered straight to your inbox.