pictured above: A diagram of new tools developed with BPF by Brendan Gregg
Computer Science is without a doubt one of the most deep fields of study a person can undergo. A common theme of computer science students after graduating is to jump right into programming. The leap into programming makes sense, as it has the most shallow barrier of entry. You can fire up a console or REPL in your terminal or browser and start hacking away. There are coding platforms to help you with algorithms and data structures, videos, MOOCS. You name it, theres way to get into programming for everyone, so much that it became a meme.
As I get to the later rounds of hiring for a new job, I’ve had time to think about this process. I’ve spent about 5-6 weeks going through technical tests, interviews, code reviews, the whole gamut. What I’ve been thinking about during this time is all the questions they didn’t ask me. This and the other candidates, some of which are surely more experienced and more talented than I am. As I said before, Computer Science is quite deep. Off the top of my head there are several subjects that don’t directly fall under the realm of programming. Within programming you have: algorithms & data structures, mathematics and databases. Outside of it you have: Computer Architecture, Operating Systems, Computer Networking, Compilers and Distributed Systems to name a few. While all of these correlate under the name of Computer Science, companies don’t seem to understand that having a developer with an expertise in any of these domains, strengthens the comapany’s ability and raises the potential of your engineering team.
There are two types of developers, those who understand computer science well enough to do innovative work and those who just enough about their tools to get by. The latter focuses on developing CRUD operation features, while the former has the opportunity to greatly affect the product through innovation or produce high-quality inidividual contributions.
The global SMS system does around 20bn messages a day. WhatsApp is now doing 42bn. With 57 engineers.
This is a tweet by Benedict Evans shows whats possible with a group of engineers who understand computer science on a deep level.
What happens to my knowledge of distributed systems, compilers, networking? It doesn’t get much use while I’m finding out why the Redux store isn’t holding the correct state. I understand that this is the job I signed up for and if I wanted to contribute more to the company, I should work at startup. I have and its great, Paul Graham agrees that you should too. The problem with startups is the instability and infrastructure that I won’t get into in this post.
There are two problems, hiring and management. With the way we hire today, we try to put round developers in square holes and hope that it works out for the best. This is one the reasons why you see so much churn in the industry. One of the many reasons developers leave is because of burnout. Burnout happens through a combination of management pressure and lack of passion towards the product or a lack of appreciation or understanding between management and employee. A lack of passion could be caused by under utilization of the engineer’s capabilities or an over utlization of them. The key idea is to keep the engineer in a sweet spot of challenging and accomplishable tasks.
The aforementioned sweet spot is where all the magic happens. I’ve witnessed developers whose contributions to the project were ‘on par’, thats to say they were not struggling nor overachieving look like 10xers during sprints of glory. These men and women were given a new project or assignment that pushed what they were capable of at the time. They reached a new level of development skill and their motivations were refreshed. This ‘rub’ was contagious and spread to other teams and engineers. The overall morale of the team was raised considerably.
Its important for computer science people to keep pushing the boundaries of what they know. Its important to go back and read the fundamental texts, build on new platforms and refresh your knowledge of what you don’t know. You need to be invested in the long game, there too many disgruntled programmers on r/cscareerquestions who are either not commiting to the study of the computer science programming by not throwing enough hours into algorithms and data structure questions or trying to chase a mid six-figure salary at a FAANG company while contributing the very minimum to their projects. Both are not paths to long term growth in this industry.
My advice is to really think about if you love this game. In Cal Newport’s book ‘So Good They Can’t Ignore You’ he makes 3 major points:
- Don’t do what you love, learn to love what you do.
- Become a craftsman to collect the skills you need.
- Say no to a raise to keep control of your work.
While the first two you can control. They are important to future students and today’s. Cal says in his book ‘If I work hard, practiced a lot and kept acquiring new skills. He would eventually learn and love his work.’ Keep this mind if you find yourself either burning out or chasing something unreasonable in your career.
So stick to it and put hours into your field of knowledge. It might the only way to get satisfaction in your career. Try new things, go out and build something that thought you couldn’t and I promise that you will be compensated fairly for your efforts. If not now, but sometime down the road.