Programming is one of the easiest parts of a developer’s job.
I tweeted that sentence on Saturday morning, and there was a strong reaction. Dozens of retweets and favorites. Many replies – a few that disagreed but many who agreed.
A UK developer by the name of Simon Donaldson sums up how I feel quite nicely: “The more you code, the easier it gets. The rest of the job gets harder.”
When I first started as a professional programmer, I’d go home nearly every day mentally fatigued. Leaving work, I had almost surely tired out both my reasoning capability and ability to focus.
On some days, it might be on a single bug fix. On other days, it might be writing a couple new functions with a design pattern I was learning. Many days, I wouldn’t even have to communicate with another human being. Just me, the text editor and the interpreter. Still, returning home I would notice my brain power drawing on reserves.
Then, I would go to sleep and recharge. Dreams would be about writing code. Sometimes I would wake up and realized I had solved a problem I was having – while sleeping. Then I would get up the next day and write more code.
Over time however, things got easier – and more enjoyable. After thousands of hours, you start waking up and writing code with what seems like less effort. You can write code that is simple yet powerful, reusable and extendable. Experience leads to the ability to make sure the details line up with the bigger picture. And it’s fun to do that.
Now there is less need to write code in terms of time spent. And you probably don’t write as much code. And you learn that sometimes the best code is no code. Your personal programming productivity increases greatly.
However, even if you are working on a small project, this means there are many more levels to spend time thinking about. Increasing the overall productivity of the project requires numerous other skills.
For example, you may need the ability better organize the resources available – both human and technological. The division of labor in a project.
Or the system architecture – stack choices and making those pieces fit seamlessly. You can keep an eye out on improved tools, patterns and techniques.
What about navigating a bureaucracy to get the resources you need?
It becomes inevitable that you will eventually have to communicate with other people.
Even if you just want to work as a programmer – with the best, on the best – you will have communicate well. Those people will be other engineers and project managers. And you can’t just simply write very good code at this level. You will have to communicate and defend your decisions – both conceptually and at the “nuts and bolts” level. This is a skill set that is important and not to be taken lightly. I have learned the hard way in the past that you will be shut out from working for the “best of the best” on important things if you cannot be rock solid at this.
And what about freelance?
Sure – the IT world is full of bullshit artists and consultants who spend time telling their potential clients what they want to hear. Then they go and subcontract the cheapest programmers available to get the actual work done. These types of people though, always end up operating at the clueless level. If you have good communication AND good programming skills – you can and should avoid this. The clueless level, by the nature of its low barrier to entry, is a crowded field. It is also a miserable place due to the lack of a clue. I mean, there are good developers who make a living simply cleaning up the messes left by bullshit artists. But certainly it makes sense to avoid this level – simply do great work for great clients for great pay – which is actually a less crowded field.
Either way, as you progress as a developer – you will find a host of other skills that are necessary to further your ability to get important things done.