Last night I caught myself (once more) discussing developer career advice. Today, I took the time to write down some thoughts on the topic. I hope you are familiar with the perils of advice. Use with caution.
Master the fundamentals, ignore the rest
Such a simple idea. Yet we ignore it.
Study the few basic resources that make hundreds of others irrelevant.
No matter the concept you are learning (eg. Dependency Injection) this is how it usually goes down:
Option 1: Sporadically read blog posts, browse library documentation, and watch conference videos: months for medium-quality knowledge
Option 2: Read the single best resource: a few days for high-quality knowledge
Learn your fundamentals
Master your language. Master your framework. Find and read the single best resources on both.
Learn your tools
Learn your IDE. You will be using it every day. Also, please learn git. Otherwise, you will keep shooting yourself in the foot. Start with Ry’s Git Tutorial and read Pro Git for more depth.
With fundamentals and tools under your belt, you are ready to deliver. Now let’s get you ahead of most people.
Learn the cross-domain fundamentals
It’s time to expand your knowledge. Study the fundamental concepts across domains. The best material will often be in another language. But do not worry. Once you read a couple of books you will not even care.
Some foundational resources that worked for me:
Dependency Injection: Dependency Injection in .NET
Domain Modelling: Domain Driven Design
Testing: The Art of Unit Testing && Growing Object-Oriented Software
Legacy Code: Working Effectively with Legacy Code
Functional Programming: Learn You a Haskell
Design Patterns: I no longer like this idea. I find design patterns rigid structures that fail to match reality and are heavily object-oriented. Look for universal patterns instead.
Universal Patterns: The closest thing I can point to is James Koppel's course.
Concurrency: I tried several books on the topic. Nothing stuck with me. But it is an area you need to grasp.
“That’s a lot” you might be thinking. But a handful of books can get you ahead of 90% of the people. If you think it through, it is a bargain.
A valuable non-technical skill
Work on your communication skills. All day long you will be discussing with your team. You will also be writing—documentation, feature analysis, decision records, blog posts, and the list goes on. Try to be precise. Say nothing less. Say nothing more.
Clear communication is a skill. As with any skill, it can be improved. The best way to improve is through writing.
A good team matters
Work with people better than you. This is how you learn. You also need feedback to know if you are improving. Look for a strong, sharing team. High-quality code reviews are a good sign.
But even if you are alone, you can still get feedback with some techniques.
The “copywriting” technique
A technique commonly used by writers. I find it translates well to coding.
Find code you admire online. Type it in yourself. As you go reflect on why the author made the decisions he made.
The “10x reps” technique
Redo the same task following different paths:
Tests first. Tests after.
Code outside in. Code inside out.
Use reactive programming. No reactive programming.
Have your state in one construct. Scatter your state across multiple variables.
You get the point.
Hunt for the team you want
Actively work on finding a great team. Stalk the team you like. Follow their meetups and their blog posts. Learn how they work. Learn their practices. Reach out and suggest something useful to them. They will remember you when they open a position.
Make yourself a recession-proof graduate.
Show your work
Share your work online. It doesn’t have to be great. But it shouldn’t be sloppy.
Sharing is the best way to increase your luck surface area.
It could also be a ticket to skip the line.
Skip the line
Do something to stand out from the crowd.
Do open-source work. Write posts. Present. Reach out to people you admire. Help others without expecting something back. So many people do what everyone else does. Standing out is easier than you think.
Do what everyone else does, and you will get what everyone else has. - Stephen Richards