Two things are infinite: the universe and human stupidity; and I’m not sure about the universe.Albert Einstein
Programming is a people pursuit.
Almost since the first programs were constructed we have realised that programming is not a solely technical challenge. It is also a social challenge. Software development is a pastime that involves writing code with other people, for other people to understand. It means working with other people’s code, joining and leaving software teams, working under your boss’ supervision, managing developers (which is rather like herding cats), and so on.
Many of the most enduring programming tomes are devoted to the people problem, for example, The Mythical Man Monthfootnote::[Frederick P. Brooks Jr., The Mythical Man Month (Boston: Addison Wesley, 1995).] and Peopleware.footnote::[Tom Demarco and Timothy Lister, Peopleware (New York: Dorset House Publishing, 1999).]
Just as the people working with a codebase will inevitably shape the code they produce, the people who work with you will inevitably shape you.
Purposefully place yourself beside excellent programmers.
That is, if you want to be an exceptional programmer, then you must consciously place yourself daily amongst people who are exceptional programmers. It’s a really simple but profound way to make sure that you improve your skills and attitudes.
We are products of our environment, after all. Just as plants need good soil, fertiliser, and the correct atmosphere to grow healthily, so do we.
Spending too long with depressing people will make you feel depressed. Spending too long with run-down people will make you feel tired and lethargic. Spending too long with sloppy workers will encourage you to work sloppily yourself—why bother trying if no one else is? Conversely, working with individuals who are passionate about good code and strive to make better software will encourage you to do the same.
By immersing yourself in the environment of excellent programmers, you will treat yourself to:
Find people like that and marinate yourself in their company. Consciously seek out the people who care about good code, and about writing it well. In that kind of environment, you won’t fail to be nurtured and encouraged.
By working with high calibre developers you will gain far more than technical knowledge; although that knowledge itself is very valuable. You’ll enjoy positive reinforcement of good programming habits and attitudes. You’ll be encouraged to grow, and be challenged to improve in your weaker areas. This isn’t always comfortable or easy, but it is worthwhile.
So make a point of seeking out the best programmers and work with them. Design code with them. Pair program with them. Socialise with them.
You could make this kind of relationship formal with mentorship; indeed many good workplaces try to put mentorship schemes into practice formally. Carve out specific chunks of time to work together.
Or you may pursue it informally: get yourself assigned on the same projects as great programmers. Change jobs to work with them. Go to conferences, talks, or user groups to meet with them. Or just make a point of hanging out with other great programmers.
As you do this, learn from them. Watch out for:
How they think and solve puzzles
How they plan a route into problems
The attitude they adopt when things get hard
How they know to keep pushing on a problem, when to take a break, or when try a different approach
Their specific coding skills and techniques that you don’t yet understand
Consider carefully what you think an excellent programmer looks like.
You specifically don’t want to get alongside people who work too hard, filling all the hours God sends with code. Those people are almost certainly not the exceptional programmers! Managers often think that employees who spend every waking hour on a project are the programming heroes, but often this really hints at their lack of ability. They can’t get things right the first time, so they have to spend many more hours getting the code to “work” than was actually necessary.
Experts make it look easy and get things done on time.
As I look back over my career, I realise that the most enjoyable and personally productive times I’ve encountered have been when I’ve been working alongside excellent, motivated, interesting developers. And because of this, I will now always attempt to place myself alongside people like that.
I’ve learnt that they make me better at what I do, and I have more fun whilst I’m doing it.
An interesting and beneficial side effect of working with good coders is that you are far more likely to end up working with good code.
Questions
Are you around people you think are excellent programmers right now? Why? Or why not?
How can you move yourself nearer better coders? Can you move to a new project or team? Is it time to look for a new job with a different company?
How can you tell who is an excellent developer, and who isn’t?
See also
Relish the Challenge Seek out good colleagues who can encourange and challenge you.
It’s the Thought That Accounts Become accountable to them.
Speak Up! Learn to communicate well; listening is essential if you are to learn.
An Ode to Code Not every colleague is a saint.
Identify some “coding heroes” you’d like to learn from, and plan a way to work alongside them. Consider asking to be mentored by them.