
This question is often asked around me. They are set by relatives, friends, children of friends and strangers in general. All of their goals - someone wants to change the type of activity, someone just chooses where to go to study, and someone wants to convince himself first of all that “they also pay these idlers for nothing.” What to answer this question? Honestly, the first thing, of course, I want to push my chest out with a wheel and move it, saying that, around the inhuman mind and 10 years of deep mathematical training, you need to have natural talent and plow around the clock ... But somewhere in the third minute of this fascinating text brains and healthy skepticism are involved, requiring silence and a little thought for a while.
Is it really hard?
Coders vs programmers
Somehow, historically, in the IT world itself, it is customary to separate “coders” from “programmers”. Say, the first stupidly rivet something on patterns and instructions from above, and here the second - CREATE. I never liked this division. Anyone can sometimes get stupid and tedious work. You can write simple code not because you are stupid or lazy, but because, for example, that you are young and just learn or want to change the type of activity. Moreover, by itself the inscription “programmer” on the badge, even with the fact that you seem to have to “create” and not “codify”, also does not mean anything. It happens that the “programmers” write this, that it seems as if they didn’t turn on their brains at all while working, and sometimes it happens the other way around - an ordinary hard worker will automate something - and now everyone looks at the result with delight. Conclusion: the formal title of the position does not determine the degree of complexity of the work.
')
Narrow specialization vs wide
There are programmers of a narrow profile, and there are programmers of a wide profile. The first ones know exactly how the parameter X should be in the method Y of the class Z, so that the code works optimally when performing the task W. The second can guess not only the parameter X, the method Y and the class Z, but even the existence of the task W. The first ones spent a lot of time and energy on improving in their field, it was hard for them to learn, but now it is easy in battle. The latter also studied diligently and diligently, but more so - general principles, universal languages ​​and common tasks. It was easier for them to study, but each new day gives them new challenges. Some of them can be thrown at highly specialized colleagues, but most will have to decide for themselves. What is better - to work in youth "for the future" and rest on the laurels of your knowledge, or every day to enter into a new battle, "smearing" the complexity in time? I do not know. In his youth, it is easier to learn, but the subject area may cease to be relevant. On the other hand, every day to spend a lot of brain effort on what a specialist in this area would do in a minute is slightly humiliating. Everyone decides for himself.
I want to think or do not want
Unfortunately, the work of a programmer sometimes resembles the work of a parachute handler: no one complained about the result. Either everything is good and everything is great, or “everything is lost” - but then it turns out that the dates were poorly calculated, there was no budget, there were few people, and the task was stupid, and the customer was bad and there were 150 more reasons. "A good programmer will always explain why the task given out cannot be done by any means." The profession of a programmer often puts a person before a choice: to think or not to think? The bug was fixed with a crutch. Thinking how to do better, or will it do? The system seems to work stably at 10 requests per second. To think what will happen at 100 or not to think? Do refactoring or him? Your bike or a recognized solution? Lay the architecture with a margin - or until it already comes down?
At every step there is a temptation to shirk. A weak-minded programmer will do this. Many people do not want to think once again and (here's a paradox!) They will constantly think how to achieve this. There is a choice: to complicate your life, or not to do so. Everyone decides for himself.
Limitations of the mind
There is such a joke that nature supposedly distributed the mind between people in the best way, because people often complain about naughty hair, an ugly shape of the ears or a long nose, but no one will ever complain that he got a little intelligence. So, it's all nonsense. I personally complain that I somehow got a little crazy. I remember only a limited amount of information, which is why I constantly have to write something somewhere. I desperately envy computers in which for some ridiculous hundred bucks you can put a new processor, doubling its speed. I spend thousands of times on understanding some algorithm, millions of times more time than a computer on its execution. I sometimes encounter impossible tasks - and retreat. I sometimes underestimate the timing of tasks. Yes, I simply frankly sometimes brake! And so, yes, I often find it difficult precisely because of the limitedness of my mind. I envy those who have only a long nose, but everything is just right with his head.
But should it be hard for a good programmer at all?
Many years ago, “being a good programmer” meant being able to write efficient algorithms, squeeze out extra processor tact, save a dozen bytes of memory. Today it is not. All basic algorithms have excellent implementations in all possible languages, a lot of various useful things are collected in good, proven libraries. To date, the main feature of a “good programmer” is to be able to build a program from ready-made cubes, minimizing its complexity (thus, reliability will increase, and the speed of work, and the cost of maintenance will decrease). It is precisely the reduction of complexity that is the most important today. If you think about it, everything that was invented in the software industry over the past couple of decades serves precisely this goal. What is OOP for? To make it easier and more understandable. Why do you need UML? Reduce chaos. Interfaces? Managed languages? MVC? MVVM? All on the same altar. It turns out that skillfully applying modern tools, the programmer should write only simple, compact and clear code? It turns out that a good programmer should not be difficult, because if it is difficult for him, then he simply has not yet mastered the tools that will make his work simple and understandable? So? And no. The use of all the above tools has made it possible to build such systems that could not be created before. Windows 8 and iOS 6 were created in 2012, not because 20 years ago they could not draw their design or there was no suitable hardware. The thing is that those ways of creating programs, those methodologies for managing programmers and those approaches to writing code simply could not yield a system as complex as the current OS. People worked on the limit of power, but in the end they made much simpler systems. Today's programmers also work on the limit of power. And it’s absolutely certain that in 20 years time people will laugh at both Win8 and iOS 6, indicating how primitive and imperfect they were. Let us believe that they, too, will understand that modern programmers have tried as best they could.