Learning to Code (for 2019)
1. The initial programming language(s) you learn should align with your goals
You’ll sometimes see senior engineers encourage others to try and first learn a language like C because they’ll gain a better understanding of important computer science concepts. The problem with this is that you can in fact learn how to code and get a software engineering job without needing to know C.
2. Computer science ≠ software engineering
One could argue that a great software engineer understands some fundamental computer science topics such as data structures, memory allocation, how a parser works, caching, database indexes, etc. While these are all very important concepts in the field of computer science, when it comes to building software, some of these concepts matter less than you would expect. Chuck Connell, in his essay Software Engineering ≠ Computer Science,” writes:
Software engineering has an essential human component. Software maintainability, for example, is the ability of people to understand, find, and repair defects in a software system. The maintainability of software may be influenced by some formal notions of computer science… But maintainability crucially involves humans, and their ability to grasp the meaning and intention of source code.
This is why there are plenty of engineers and software developers that focused on solving a problem with a set of tools, even when they didn’t have a formal educational background, and now have engineering jobs at notable companies. Sebastian McKenzie, for example, created Babel without having a formal education in topics like language grammars, parsers, or programming language design.
Computer science and software engineering go hand in hand, but you don’t need to understand hundreds of advanced computer science topics to get a software development job (you’ll learn the most on the job anyway). I’ve worked with plenty of engineers that came from backgrounds in economics, art, and writing, and they were no less an engineer than someone with a CS degree who can solve binary tree challenges in their sleep. I would argue though that you should have a good understanding of the following topics:
- Basic data structures/algorithms
- Git/version control
- Terminal/UNIX commands
- How a database and indexes work
- MVC concepts (back-end vs. front-end)
Takeaway: Don’t become overwhelmed with advanced computer science concepts. It’s more important to build software and constantly be learning and challenging yourself. Don’t think you need to read through an advanced computer architecture book or TAOCP to call yourself a “real” software engineer.
3. Technical interviews aren’t perfect
Technical interviews are just a hot topic among the community, and because companies do them differently, you need to understand that just because some companies reject you doesn’t mean you aren’t cut out to be a software engineer. There are countless examples of engineers being rejected from some top companies, and then they land a job somewhere else or they even start their own company.
Takeaway: Technical interviews are riddled with issues of elitism (withcolleges especially) and signaling, but being rejected doesn’t necessarily mean you aren’t a good software engineer. Keep practicing and learning and eventually you’ll get to where you want to be.
This article was written by Daniel Borowski on October 7th. If you would like to read the full article, click HERE .