What are the traits of a great software developer?
Author: Jovan Kanevche
“I choose a lazy person to do a hard job. Because a lazy person will find an easy way to do it.” ― Bill Gates
A manager with no experience in the industry may even prove worse at hiring than a junior developer, who at least has some experience.
That’s why I created this simple article to explain the traits of a great software developer.
Video - Silicon Valley - “What Gilfoyle Does”
Ability to handle abstraction
The whole computer industry is built upon an abstraction on top of an abstraction on top of an abstraction… A good software engineer should be able to handle a lot of abstraction as being too concrete or detail oriented can actually destroy the persons ability to be think in more general terms. Abstraction is useful way of thinking because it simplifies the developers thought process which allows him to be truly productive.
Abstract vs Concrete
A software developer should be more on the abstract side for developing generic solutions. Abstraction can be a double edged sword, where too much abstraction can make your system difficult to develop and esoteric, but too little abstraction can make your developers unproductive. So a great software developer should know how much abstract is needed for each case. A good rule is if a part of the code repeats more than 2 times it is a good idea to abstract that part of the code into a function. Also one should delay the architecture decisions for as long as they can, because the abstraction the developer builds before he knows all the details might not be optimal. (over engineered or under engineered)
The easiest way to understand is thinking abstractly is to study the basics of category theory. Category theory is the most abstract part of mathematics, which help you understand what is going through the mind of a programmer more easily. I am linking a simple video explanation for category theory down below.
Video - Category Theory
Ability to write readable code
I am always surprised when people tell me that they think you need mathematics to be a software engineer. I would say that software engineering is closer to poetry than to mathematics, because the code each software engineer writes will be read many more times than it will be written and we’re not making one off calculations here. This is why writing readable code and good documentation is key for a great software engineer.
If people can’t understand what you’ve written, this will cause a lot more headaches in the future! Writing great code isn’t just about racing to the finish line, but developing empathy for those who will be reading it!
A software engineer is writing the code for a specific audience, that audience is the team that is working or will be working on this project. Writing readable code requires empathy and an ability for the software engineer to determine the average skill level of every engineer on the project.
This is what the coding tests should test for, but most of them don’t. Actually most coding tests are total waste of time. The ability to solve problems and to write readable code is crucial for being a great software engineer.
The stereotypical image of an a social software developer, locked in their room is no longer applicable, at least to those who want to succeed. A good software developer should not just be developing code, but their interpersonal skills too. They should understand what the client needs, but also be able to speak up and intervene when there is a problem, rather than letting problems grow.
Culture can change the communication style of the company. We need to recognize that work is an interconnected environment and if the working culture doesn’t encourage communication, it will inevitably fail.
Understanding the business
Understanding the business you are working with is incredibly important for software developers. It’s enough to simply know the specific job requirements, but a knowledge of the business’s goals and overall strategy will help the developer know why they are doing what they are doing. This may lead to unexpected but helpful insights that will not only help the business but will help the developer gain a reputation for being an essential part of any project.
Of course this also requires, organizations themselves to play a part in educating developers in the wider picture.
When developers do not know why they are doing what they are doing, everything seems pointless and they are demoralized, which leads to lower productivity. It is a huge problem in large corporations.
This is why you need to explain why each task is being done and exactly it is supposed to accomplish.
Video - Simon Sinek start with the why!
We can see that choosing the right programmer can be counter intuitive. I hope that this article opened your mind on what kinds of developers exist, and what kinds of developers you should hire.
Next article will be on “How to become a 1000x Developer” so make sure to subscribe to the mailing list!