Each profession has its own drawbacks, but often people learn about them only after some time. Let’s see which the disadvantages of the programmer profession newbie should be ready for.
High entry threshold and the complexity of the profession itself
At first glance, it seems that everything is simple – learn a programming language and you will row money with a shovel, at least that’s what novice developers often think. However by as you dive, it turns out that everything is completely wrong. The more complicated and confusing the code, the more unpredictable it behaves. Compilers throw errors, exceptions pop up unexpectedly, you need to keep in mind a huge number of small details so as not to miss anything. At some point, the compiler/interpreter begins to seem alive and it seems to resist desperately. From the theory information point of view any complex program containts mistakes. It’s hard to put up with.
On the other hand, a feeling of satisfaction is incomparable when the problem is conquered and the code begins to work out as it was intended. It turns out the compiler/interpreter simply followed the instructions given by the programmer, boldly and thoughtlessly.
To make entrance to the profession easier you need to read a lot about best practices, preferably at English, try to work in a team with professionals and constantly learn, learn and learn – both in theory and in practice.
Cost of mistake
Few ones realize that the cost of a developer mistake can be huge amounts. Imagine the loss of an online store where you can’t do anything to order. Or what kind of loss will bring the failed software of stock exchange.
Feeling of responsibility presses on developers, although they do not generally bear any direct risk of punishment. Here you can recommend using the best CI/CD practices (continuous integration / continuous deployment) with automated testing, pair programming and code review practices, which will minimize such risks and gain a sense of confidence and peace over time.
No feedback or overly active feedback
It turns out that highly introverted people usually go into the profession of a programmer – people with maximum level of self-immersion and with high ability to analyze. At first life seems beautiful – you have to interact with a team lead only or, in worst case, with a manager. The rest of people are not seen or heard by developer. But then the shortcomings of this situation begin to appear. Tasks come weird, they have to be redone several times and the programmer begins to dream of getting more detailed tasks, to hear the direct feedback from customers and users. But real life is not that simple.
As you grow into role of team leader or manager, active communications become to be mandatory and the former developer is gradually starting to understand the reasons of the confusion from which he had suffered before. Now he/she dreams to be left alone.
These flaws you can only understand and accept. Make your choice at which level to work with customers/clients and work in companies where such level is supported.
There are two problems.
Every code very soon requires to be refactored – rewrited it in such a way so the code become beautiful and flexible, with no errors and as easy to maintain as possible. But there is a problem – the more code, the more time it takes to refactor it up, up to the point when it is faster and cheaper to completely rewrite code than to optimize it.
And here it conflicts with the realities of the business, for which refactoring is just additional cost that does not bring any value. Business in every possible way postpones or directly prohibits doing it, while not agreeing that errors might occur more often and their consequences might be much more serious.
It requires good teamwork, in which developers honestly highlight only the truly necessary code optimizations, and the manager sells them to the business in one way or another.
Second problem lies in the fact that the market often does not tolerate laggards. And it spills out into a constant race in which developers are involuntarily drawn into. It seems to be a good practice not to make deployments on Friday evening, but what to do if the task itself was taken on Thursday, and on the weekend everything should work? At the same time task might come described only at high-level, because business is also involved in constant race and there is not enough time and/or specialists to think through all the screens and their interactions.
This problem can be solved only by choosing a job in an industry where business is not changing too dynamicly and there is an opportunity to do everything slowly and in the proper way.
Sooner or later many developers starting to face a choice: to be highly specialized in a particular technology or to be skilled in many different technologies, but more superficially.
Different people make different choices. Someone is trying to cover the maximum of everything, gradually becoming a full-stack developer, someone refuses to study additional technologies from the very beginning and grows in its own stack only . Both approaches have their own pros and cons.
People that are skilled in many technologies can help colleagues with many tasks, it highlights them in the eyes of managers, it’s easier for them to find a job by selling only those skills that are required by employer, they grow into managers easier and faster. On the other hand it’s harder for them to make really high-quality code in a certain technology stack and it’s harder to speak the same language with professional developers whlie growing to manager role.
Highly skilled in one specific techonology specialists perform their direct duties better, can get into best companies and earn more, since professionals are highly appreciated. On the other hand, a much higher risk to be marginalized if technology becomes obsolete, which leads us to the following problem of profession.
Industry development speed
In my point of view a key flaw of the profession is that new technologies constantly raise, they expand and improve, simplify and complicate at the same time. At first glance this race excites and breathtakes, but with age it’s recognized as exhausting challenge.
First keeping it up is not that difficult: you can read numerous articles, choose employers, who either use advanced technologies or do not restrict their choice, write articles by your experience and participate in development communities.
Over the years, one wants to use the accumulated knowledge, he/she don’t want to continue learning non-stop, but it is almost impossible to achieve. Sooner or later any developer faces a choice: either grow horizontally, “stiffen” in a specific set of technologies and carry the risk of their gradual obsolescence and extinction, or grow vertically – to relearn and go into management, where skills become obsolete much slower – in years, and some of them do not become obsolete at all, such as managing people, negotiations and many others.
The profession of the developer, oddly enough, has its drawbacks, but it does have many serious advantages that, although are not covered by this article, nevertheless, are definitely worth it to go into this profession and overcome everything described above.