(Like this article? Read more Wednesday Wisdom!)
I regularly come across senior software engineers who seem to have lost the ability to code. I find that …. odd.
I often come across these kind of engineers in interview situations. There I find it doubly odd. You know you are going to do a set of interviews, and you know that there are going to be coding interviews. Prepare for crying out loud! Buy the latest and greatest copy of Cracking The Coding Interview and solve three to four problems a day for a few weeks. Make an account on leetcode.com and practice questions there. Practice really makes, if not perfect, then at least better.
“But Jos,” I hear many of you think, “don’t we all know that coding interviews are terrible? Why should I, a senior engineer with many years of experience, practice coding? My strengths are architectural and visionary.”
To paraphrase former Dutch prime minister Mark Rutte: “If I want vision, I’ll go to the optician.”
My response? It doesn’t matter that you think that coding interviews are useless. It doesn’t even matter if you are right or not. What matters is that the people who are interviewing you, and who are deciding if you are going to get the job, think good performance on a coding interview is important. If you want the job, you better make sure you pass the coding interviews and that means that you have to be able to code yourself out of a wet paper bag. There is really no excuse for failing a coding interview because you are rusty and out of practice.
I know many interviewers are bad and that consequently many coding interviews are suboptimal. But they are a fact of life. It’s great if you can pass a great coding interview, but I will hold that a good coder can also pass a terrible coding interview. And passing is what matters; you attendance to the coding interview is not a quality review in which you are both equal participants.
I have over 35 years of professional coding experience, and I practice extensively before going to a coding interview.
Worse than meeting a senior software engineer who can’t code during an interview, is encountering one in the workplace.
Now I know that the workplace conspires against you to code as little as possible. The more senior you get, the more time you are spending reading documents, writing documents, and talking about documents in meetings. That’s not necessarily terrible; that’s often the way you get to exert influence over a bigger part of the organization and over more people and projects. But how are the documents that you write going to make sense if you don’t know how to code? How are you going to understand designs and postmortems if you have no hands-on experience? How are you going to review a project plan if you have no real hands-on grasp of the technology they are using?
I do not trust a design written by someone who couldn’t implement the system themselves.
Code is the cornerstone of our digital world. The ability to code is essential if you want to have an in-depth understanding of what is going on. And the only way to maintain the ability to code is …. to code.
I know that technology moves fast and that you are constantly exposed to new and different languages, frameworks, platforms, and infrastructure. It is a blight onto this industry. But the only way to keep up is … to keep up. That means coding in every language that is in use in your world and using all the tools that are in use. I know it takes time, but it really serves a lot of purposes, most importantly of which is that it makes you a better engineer.
As a senior software engineer you often don’t get time to code. Make that time! Pick up small projects. Assign yourself parts of bigger projects. Research new languages and technologies. Code in your spare time.
Do you think that music composers and conductors don’t maintain proficiency in playing instruments? Do you know any great engineers who lost the ability to code?
If you can’t code, how are you going to get the details right of any system you design?
Do you think junior engineers are going to respect you if you can’t do what they can do, but better?
Without the ability to code, you will lose an essential craft and you will become less and less effective. Is there anything sadder than working with a senior engineer who used to be good but whose only frame of reference are the languages and systems of decades ago?
There is a fallacy out there that states that a good theoretical and abstract knowledge of a thing is enough to contribute at a high level. Is this really true though? Can you really contribute in a worthwhile way to a system if you have no hands-on experience with the underlying technology? Can you say meaningful things about code quality if you have no hands-on experience with the language? Can you really design a good system that handles all the edge cases well if you have no practical experience with the infrastructure used for hosting your code, passing messages around, and storing data?
With only a high level overview you can contribute something, but the difference between an average system design and a great one is that the great design gets the details and the edge cases right, and in order to do that the designer has to know how everything behaves at a very low level and in all circumstances. That in turn requires in-depth knowledge and experience, which can only be obtained by getting your hands dirty.
But, perhaps most importantly, for a senior software engineer coding is still supposed to be fun! I want every senior engineer to code because they think it is still cool, fun, interesting, and exciting. Coding is not a chore. I want you to feel guilty when you are coding during work time because you feel you are having too much fun at work and you should really be doing something more worthwhile.
Don’t have that feeling. Even for a senior engineer, coding is worthwhile. Just don’t do it so often and so much that there is no difference between you and a more junior engineer…
Your point about composers and conductors summarised it brilliantly! What a travesty it would be if a conductor could only remember playing their favourite instrument!
Sorry to see you're a Go fan. I'm C# myself, and along with Postgres and AWS I have a nice current gig. I've been coding professionally for 23 years and hope to do 20 more.