[Book Summary] The Coding Career Handbook by Shawn "swyx" Wang
A guide of principles and strategies to become a great coding professional
The Coding Career Handbook aims to be a a book of guidance for all of those who want to become better programmers: from complete newbies who are striving to get a job in tech, to more senior level coders who pretend to be working in the programming industry for a long period of time.
The author, Shawn “swyx” Wang, is a former hedge fund analyst re-converted into a self-made Software Engineer who has worked at Netlify, AWS and Temporal. Always talking from his own experience, but backing it up with tons of examples, he is willing to share what he thinks are the recipes to become a great coding professional, no matter at what stage you are.
MAIN LEARNINGS
From Newbie to Senior
Shawn starts the book by mentioning the five career stages that, to him, exist in the development world. Each of these stages have their own ups and downs but, most importantly, you must be eager enough to take a leap forward in regards to Shawn’s recommendations:
Code Newbies
At this stage, you want to focus all your efforts on building your raw skills.
There are plenty of ways to achieve this, let it be learning the lingo (podcasts and others’ blogging), gamifying the learning experience, exploring paid learning alternatives, committing publicly so you don’t feel alone in the journey, finding a tribe or a community, and teaching what you have to learnt.
Finally, focusing solely on what one needs will help newcomers to stay on the line and not get lost by the amusing amount of new technologies that emerge every day.
Your (first) Job Hunt
“Focus on systems rather than goals”: what you need to do in order to get the job, instead of focusing merely on getting the job per se.
Do the work and have a strategy mainly focused on networking by talking to alumni groups, to friends, to friends of friends. Asking for intros and attending meetups definitely help too.
Keeping well-thought time-splits during the day; and using social pressure for your benefit, like explaining to your friends and family what did you do during the day, will help you stay motivated.
When the interview arrives, because it will, make sure you have practiced several times with mock interviews. There are plenty of resources online on how to tackle both personal and technical interviews, so we will not be covering this here. Anyway, preparation is key.
Junior Dev
“Build competence and ability to execute”: it is time to not know anything and ask good questions.
As a junior developer, you should be mainly working on your problem solving skills and understanding how seniors can help you. It is usual, nonetheless, that juniors fall into the Dunning-Kruger effect, in which people tend to overestimate their knowledge on a given domain - the less they know, the more I think I know -. Do not fall in love with your code, always ask for feedback instead.
Making mistakes and learning from them is also something you should be doing at this stage, since you will be able to grow your skillset thoroughly and properly add value to the company you work for.
From Junior to Senior
At this point, and re-using the Dunning-Kruger Effect, you are probably laying at the Valley of Despair (see image below): you know what you know, and you know what you don’t yet know.
You will need to demonstrate a solid technical expertise based upon a great command of fundamentals. The Dreyfus Model is a great 5-stage roadmap to lookup.
Nevertheless, if you do not market yourself consistently people will not be able to give credit to all the accomplishments you have achieved. Therefore, a strong portfolio and Proof of Work will be your best allies.
Juniors collect solutions. Seniors collect patterns.
Juniors learn to find right answers. Seniors learn to ask right questions.
Juniors seek The Best. Seniors love the Good Enough.
Juniors must earn trust. Seniors inspire trust.
Senior Dev
Solutions vs Patterns. Knowing when to use your tools is important, but at this stage you should know when it is better not to use them. A deep and general understanding on design patterns will help you learn faster the more you learn.
Velocity vs Maintainability. Again, Good Enough is better than Best.
Tech Debt. Being completely aware of technical debt and the different kinds that exist will let you figure out how to pay it down while still delivering business objectives.
Mentorship is a consequence that comes along with being Senior. You will probably be the go-to, looked-up person for those newcomers trying to lift their skills and expertise.
Finally, Business Impact. You are expected to understand the bigger picture, and that prioritizing outcomes over features.
Always-On Principles to empower careers
In this part of the read, Shawn emphasizes the importance of Principles that are thought to help you thrive in a quite demanding, high-turnover career.
Learning in Public (LiP). Open sourcing your knowledge to an extent where you attract a community of peers, mentors and supporters, and you are making the things you wish you had found when you were learning them.
Know your tool. Get to know and deeply understand the fundamentals, upsides and downsides, the why’s and the who’s of your tech-stack.
Specialize in the new. Find a niche that motivates you and become an expert on that new framework/language/etc.
Good Enough is better than Best. Apply the 80/20 rule: what can I do with 20% of the time that might solve 80% of the problem.
Treat others as you want to be treated. Simple yet effective decency principle.
Write, a lot. As a programmer, you will have to deal with a lot of writing: your own code, documentation, code reviews, preparing interviews and proposals for projects, among many other things.
Pick up what others put down. The One Percent Rule says that 90% of the people view content passively, 9% of the people modify/share the content, and only 1% of the people actually create content.
Big, one-off decisions for ambitious developers
"The essence of strategy is choosing what not to do." Michael E. Porter
A common question that comes to mind often when working as a developer is whether you should be a Generalist or a Specialist, but what we usually don’t bear in mind is that a specialist may look like a generalist from an outside point of view (and vice versa).
Generally, specialists benefit from leverage while generalists bright because of their self-sufficiency. This means that there is no better choice since both profiles can be essential depending on the situation, but when in doubt, specializing might give you a competitive advantage, since by nature everybody tend to have a wide range of interests anyway.
On the other hand, betting on technology is something you might come up many times during your career, and you must be diligent enough to find out how useful a specific tech is for the industry’s needs. Developer surveys or npm downloads are good proxies but, in the end, a pragmatic, well-informed approach is always desired.
With time, you will learn to focus on the stuff that matters to you, and that will ultimately drive purpose towards your coding career. Nevertheless, it is important to find a sweet spot between what matters to you and to others as well, so being strategically aware of new technologies and trends is quite key.
It’s much easier and faster to become an expert in a subject still young and evolving, and people are actively looking for new voices to listen to.
— Charity Majors
Small, repeated actions to advance both your skills and your network
First and foremost, Negotiating as the highest-ROI tactical skill for devs. The author states that when negotiating, there is a huge information imbalance between the company and you: they know way more than you do! There is a lot negotiating literature out there, but Patrick McKensie’s Salary Negotiation and Haseeb Qureshi’s Ten Rules for Negotiating will have you covered.
Secondly, learning to improve and to get more out of what we consume, even though it sounds like a no brainer, makes complete complete sense taking into account how much information we consume online. Follow people over content sources, read books cover to cover, read source code, take lots of notes (see Building a Second Brain), and spaced repetition and deliberate practice (as seen in Learning How To Learn) are some of the tactics discussed in the book.
Finally, working on side projects offers you a great way to constantly learn by doing since you can apply what you learn directly, work in an environment where breaking things is not a constraint, and build-up your resume by working with new technologies.
CONCLUSION
As mentioned at the beginning of this post, this book covers some of the main principles and skillsets a coding professional should be aware of. It is all based on personal experiences, meaning that it should not serve as the only way to thrive as a programmer.
Nevertheless, and taking into account the amount of resources in the book, I would use it as a very practical and pragmatic roadmap to become a better professional in general, and to know what people will be expecting of you in the different stages of the career ladder.
Most of the stuff mentioned above can be applied since day one, so why don’t you give it a try and see what happens?
Do you fancy receiving a book summary every week right into your email inbox? If so, do not forget to subscribe, it is completely free!