Becoming expert vs great programmer

Just a month ago I have changed my job. After almost 4 years in a big company I realised, that I have to move forward. It become clear because of many factors but one of most important was the title of this post: becoming expert vs great programmer.

Becoming expert

When you start new job, specially on middle or junior level, you learn a lot. You gain experience really fast and you feel satisfied. After some time you are proficient enough to handle almost all kind of task by yourself. At that moment in time you know architecture of your project, tools and techniques used during development. Of course there are cases when you need to ask more experienced developers/architects about some solutions, but you are quite confident about your skill and abilities to handle those tasks.

From that point you wave usually couple of directions in your career:

  1. Practice your craftsmanship and master in detains all nuances of language/framework used in your project.Basically it is great to become expert in usage of some framework or programming language, but it is possible that after 5-10 years nobody will use this framework anymore (just for example look what happen to YUI – Yahoo decided to stop development of this framework, because front-end development went in different direction and big, good for everything frameworks are not cool nowadays).
  2. Focus on gaining more business knowledge.That is also good if your are really interested in some area, but after time passes by developers are usually bored and in longer terms are not good business analysts. Developers are people who need technical challenges. Working as business analysts requires more focus on human relations and understanding needs of customers. Gaining more business knowledge gives you also a chance to become Lead or Manager, but there are not so many programmers, who are good as managers. Usually when they start managing they have poor results.
  3. Start looking for new job where you can learn other languages/frameworks.That solution is quite interesting. The problem is that it is not easy to get job for which you don’t fullfil requirements. There aren’t many companies, which are willing to hire and train developers. Usually interesting companies are looking for senior level developers, because it is most cost efficient.

Becoming great developer

So what to do, when you feel a little bit bored in your current job and looking for challenges? In my opinion there are couple of things worth mentioning:

  1. Read books about programming in general, like: Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin), The Clean Coder: A Code of Conduct for Professional Programmers (Robert C. Martin), Refactoring to Patterns (Addison-Wesley Signature)
    etc. Those books will help you become better developer without being tidied to particular language/framework.
  2. Learn designs patters (Design patterns : elements of reusable object-oriented software
  3. Learn Test Driven Development (Test Driven Development (The Addison-Wesley Signature Series) and Behaviour Driven Development.
  4. If you have some gaps in you basic knowledge – fix that. Many times on interviews I ask people if they know how HTTPS works, what is the difference between TCP and UDP or between functional and procedural programming . It is surprising how many developers don’t have wider background. I know that it may look that this knowledge is not important during day to day development. But it is really important if you want to understand nature of some problems.
  5. Focus you work on creating solution with great quality and treat all of your tasks as exercises in applying things learned from points above.
  6. Learn some new languages/frameworks by going through tutorials and some pet projects.

Those steps will lead you to a place, where languages and frameworks are only tools and you focus on finding solution to a problem. From here you can switch your tools and be quite proficient in any other technology. Maybe you will not become expert in it in one week, but you will be able to create clean, maintainable solutions. And if you look from other perspective – stakeholder are not interested if you know how JVM handles integers smaller than 128. They are interested in getting their problems solved.

In my opinion great developer is a person who knows, that some tools better feet some problems. But in order to see this you have to get wide knowledge and this is harder if you focus only on business area or only on one language.
Moreover in the time of microservices and lean development, it is important for each developer to be able to switch tools as requirements change. It is fine if you are great Java developer, but maybe next week your boss will tell you to use Python to build a REST service. Are you able to learn new language and develop clean, maintainable solution after few days?

I think that way for becoming great developer somehow relates to Dreyfus learning model. In this model Expert is a person, who wants to get context in order to talk about some problem. He doesn’t use hammer and doesn’t see all problems as nails. He is free from thinking by his tools. He thinks about problems and solutions. I will come back to this model in future, but for now you can read more about this: here.

Becoming expert is not bad, but how many COBOL experts do you know today?