Whether you’ve been programming for years or if you’re just now learning how to code, it’s natural to ask yourself: what does it take to become a great developer? I’m going to start off by saying that there is no right or wrong answer to this question. If you ask 100 experienced software engineers this question, you’ll get 100 different responses. The reason why there’s no clear cut answer is because development is truly an art form. Therefore asking this question about programming is similar to asking what makes a great artist.
Even though the idea of becoming a great developer may seem like a daunting task, there is a practical process that you can follow in order to attain your development goals.
Tips for Becoming a Great Developer
In preparation for this post I’ve asked various developers, read blog posts, and listened to a number of podcasts discussing the topic. As I expected the components of becoming a great programming are extensive. In this guide I want to give an overview of the processes and requirements that I’ve found the most effective. The following are six traits that encapsulate the key characteristics found among great developers. I’ve also included some practical strategies for working with each of these attributes on a regular basis.
Working Through Difficult Features
Starting off with one of the most challenging traits, I’ve found that the only way I improve as a developer is to work through challenging concepts. I find it disturbingly easy to fall into a routine where I only perform the same tasks again and again. I’ve been working as a developer for a number of years and I therefore have a nice arsenal of tools and features that I’m comfortable building. However I’ve discovered that if I simply keep building features that I’m already comfortable creating, I won’t grow as a developer. It’s only when I bear down and dedicate myself to work through a difficult task that I’ve never performed before that I become better myself.
Having the requirement of working through difficult practice isn’t a concept related solely to development. The book Peak researched peak performers in music, athletics, and essentially every other skilled profession. The results of the research revealed that individuals only show improvement when working through challenging concepts. This means that if concert violists played the same music day after day and never challenged themselves, their skill would stagnate. The same concept holds true for developers. If you want to become a great developer you need to work through difficult topics constantly.
If you don’t know where to start with finding challenging features to build, visit some of your favorite websites. You could look at Twitter, or AirBnB, or Pinterest. From there you can compile a list of advanced features that you’ve never built before. Examples would be components such as: infinite scrolling, asynchronous notifications, or multi page authentication.
With the growth of the programming industry, the open source community has expanded exponentially. The most popular languages and frameworks in the world, such as Python and Ruby, were created not by corporations, but by programmers interested in the common good.
Depending on your level of experience, community contributions will vary pretty widely. If you’re a senior level engineer, you could build an open source code library or build a feature for a programming language. However, even if you barely have any experience you can still contribute. New developers can assist other individuals who are just starting to code.
As great as it is to give back to the developer community, there are also significant benefits to contributing. If you’re building a code library that other developers will see, you’ll most likely be very careful to ensure that the codebase is properly tested and functions properly. This type of development will make you an even better programmer and will help you in the long run.
When it comes to development, it’s easy to get caught up in the day to day minutia of a project and forget that, at its core, programming is an art. In order for code to be artistic, it must be elegant, and for it to be elegant, it must be simple. Some of the most best projects that I’ve worked on ended up having the most straightforward codebases. However writing simple code is not as easy as you may think. Sandi Metz said this about simple code.
“Novice programmers don’t yet have the skills to write simple code”
Einstein said this about simplicity.
“If you can’t explain it to a six year old, you don’t understand it yourself.”
This may seem like an odd concept, however if you’ve ever attempted to build a complex project that maintained an easy to follow code design you know it to be true. The more you improve as a developer, the most straightforward your work should be.
Craftsmanship is closely related to artistry, however there is an important distinction. When you’re a craftsman you truly take pride in your work. Through the years I’ve met all kinds of developers. From programmers who simply treated each project like a widget on an assembly line, to developers who made sure that every code file they worked on looked like a piece of art. Personally I’ve found a cross between the two concepts to be the most effective.
Like many other concepts, craftsman is not isolated to programming. Growing up my Dad, who was a Major League baseball player and is now a coach, always taught me to have what he called a Spirit of Excellence. This meant that no matter what I did or what I was working on, I had to take pride in it. He would tell me that if I was taking the time to perform a task, I might as well do it properly.
While I feel that I take pride in my work, craftsmanship is one of the concepts that I struggle with the most. I find this principle challenging because it can be difficult to find the balance between well written code and perfect code. As the saying goes, “perfection is the enemy of great”. Therefore it’s important to ensure that you work hard to properly design your codebase. However don’t pressure yourself to achieve perfection.
It’s also important to have the mindset that no project is ever truly completed. This means that if you attempt to achieve perfection you’ll constantly be frustrated. Mainly due to the fact that you will never reach a stage where your codebase will ever be considered done.
Steve Jobs Craftsmanship
When it comes to craftsmanship, few have taken the same level of pride in their work as Steve Jobs. This is what he had to say about craftsmanship.
“When you’re a carpenter making a beautiful chest of drawers, you’re not going to use a piece of plywood on the back, even though it faces the wall and nobody will ever see it. You’ll know it’s there, so you’re going to use a beautiful piece of wood on the back. For you to sleep well at night, the aesthetic, the quality, has to be carried all the way through.” – Steve Jobs
Adapting to Change
If you’ve worked on any real world code projects you can attest that there is only one true constant: change. Great developers set themselves apart from novices by how they adjust to changing requirements for an application. There are two ways that new coders struggle with change.
- No flexibility with the code design. This means that when a new requirement is added to the project, they will need to completely reconfigure the code in order to allow for the additional functionality.
- Planning for the wrong future. A developer may have developed a mental model of what the end project will look like, however that estimation rarely matches reality. Imagine that you’re building an accounting application and you think the client is going to eventually ask for the system to be completely project based. You will make design decisions based on the workflow hierarchy that you have in your mind. However if you’re wrong, you will be forced to reconfigure the entire application.
Both of these pitfalls are normal to come across on a coding journey. However a great developer finds the balance between no design and premature design. By building well constructed codebases, the great programmer writes modules that have flexible interfaces that can adapt to change. They also understand that project requirements change and that the code they write has low coupling. This means that changes to one feature in the application should have little to no impact on other parts of the program. For example, back with the accounting application. If a change is required to the payroll module, it shouldn’t require you to rewrite the personnel management feature.
Lastly, in answering the question of “What Does it Take to Become a Great Programmer?” I’m going to discuss the importance of tireless learning. One of the most important factors in reaching your development goals is having a thirst for knowledge. Thankfully you have 100% control over this requirement. Regardless of how much experience you have as a programmer you won’t ever reach a stage where you should stop learning. There will always be improved processes, new frameworks, and new languages to learn.
I’ve asked some senior developers that I work with how they organize their learning methods. They gave the following recommendations.
- Learn one new language or framework each year. This should also mean that you’re building a production application during that year. It’s easy to follow tutorials and build “hello world” applications. However when you create a real world program you’ll be forced to work through challenging constructs.
- Read multiple books daily. I personally have over a dozen books that I read daily related to development. In fact, many of the topics that I discuss on this show come out of what I’m reading during a particular week.
- Follow advanced tutorials. Many of the developers that I work with admitted that they prefer to learn new coding techniques by reading blogs from other programmers. There are a number of guides available online that you can go through that will teach you how to build advanced features into your applications.
I hope that this has been a helpful guide and will help you answer the question of “What Does it Take to Become a Great Programmer?”