Is it difficult to work as a programmer?

This question is often asked around me. Relatives, friends, children of friends and generally strangers ask. All of their goals are - someone wants to change their occupation, someone just chooses where to go to study, and someone wants to convince themselves first of all that "here, these loafers are paid money for nothing." What to answer this question? Honestly, the first thing, of course, I want to push my chest out with a wheel and start talking about the fact that, beside the inhuman mind and 10 years of deep mathematical preparation, you still 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 included, requiring a moment to shut up and think a bit.
Is it really difficult?
Coders vs programmers
Somehow it happened historically that in the IT world itself it is customary to separate “coders” from “programmers”. Say, the first stupidly rivet something according to the patterns and directions from above, but the second - CREATE. I never liked this separation. Anyone can sometimes get stupid and tedious work. You can write a simple code not because you are stupid or lazy, but because, for example, you are young and just study or want to change your type of activity. Moreover, the inscription “programmer” on the badge itself, even with the fact that you seem to be just “creating” and not “coding,” also means nothing. It happens that “programmers” write such a thing that it seems like they didn’t turn on their brains at all during the work, but it happens the other way around - the ordinary hard worker will automate something like that - and now everyone is looking at the result with enthusiasm. Conclusion:
Narrow specialization vs wide
There are programmers with a narrow profile, and there are programmers with a wide profile. The former know exactly what parameter X should be in the Y method of class Z in order for the code to work optimally when performing task W. The latter may not be aware of not only the parameter X, method Y and class Z, but even the existence of task W. The former spent a lot of time and effort on improving in their field, it was hard for them to learn, but now it’s easy in battle. The second also studied diligently and diligently, but more - the general principles, universal languages and common tasks. It was easier for them to study, but every new day throws them new challenges. Some of them can be thrown to highly specialized colleagues, but most will have to be decided by ourselves. Which is better - to work in youth "for the future" and rest on the laurels of their knowledge, or engage in a new battle every day, “spreading” complexity over time? I do not know. In youth, it is easier to learn, but the subject area may cease to be relevant. On the other hand, spending a ton of brain effort every day 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 stacker: no one complained about the result. Either everything is good and all well done, or “everything was lost” - but then it turns out that the deadlines were poorly calculated, and there was no budget, there were few people, the task was stupid, and the customer was bad and 150 more reasons. "A good programmer will always explain why it is impossible to do the task given." The profession of a programmer often puts a person before a choice: to think or not to think? The bug fixed with a crutch. To think how to do better, or will it work? The system seems to be stable at 10 requests per second. To think what will happen at 100 or not to think? Do refactoring or well it? Your bike or a universally accepted solution? To lay the architecture with a margin - or for now, and so will it?
At every step there is a temptation to evade. A weak-minded programmer will do this. Many people do not want to think again and (here's a paradox!) Will constantly think how to achieve this. There is a choice: complicate your life, or not do it. Everyone decides for himself.
Limited ability of the mind
There is such a joke that, they say, nature distributed the mind between people in the best way, since people often complain about unruly hair, an ugly shape of their ears or a long nose, but no one ever complains that he has not enough mind. So, this is all nonsense. I’m personally complaining that I just got a little mind. I remember only a limited amount of information, because of which I constantly have to write something down somewhere. I desperately envy computers in which for some ridiculous hundred bucks you can put a new processor, doubling its speed. I spend thousands, millions of times more time understanding an algorithm than a computer does it. I sometimes encounter impossible tasks - and retreat. I sometimes underestimate the timing of tasks. Yes, I just frankly slow down sometimes! And so yes it is often difficult for me precisely because of the limitations of my mind. I envy those who have just a long nose, but with the head everything is just right.
But should it be difficult for a good programmer at all?
Many years ago, “being a good programmer” meant being able to write efficient algorithms, squeeze out an extra processor clock, and 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. Today, the main property of a “good programmer” is to be able to build a program out of ready-made cubes, minimizing its complexity (thereby reliability will increase, and the speed of work, and the cost of maintenance will decrease). It is the reduction in complexity that is most important today. If you think about it, everything that has been invented in the software industry over the past couple of decades, serves precisely this purpose. 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 understandable code? It turns out that a good programmer should not be difficult, because if it is difficult for him, then he just has not yet mastered the tools that will make his work simple and understandable? So? But no. The use of all of the above tools made it possible to build systems that could not be created before. Windows 8 and iOS 6 were not created in 2012 because 20 years ago they could not draw their design or there was no suitable hardware. The thing is that those methods of creating programs, those methodologies for managing programmers, and those approaches to writing code simply could not produce a system of such high complexity as the current OS. People worked to the limit, but in the end they made much simpler systems. Today's programmers also work to the limit. And it’s absolutely certain that in 20 years people will laugh at both Win8 and iOS 6, pointing out how primitive and imperfect they were. Let's believe that they will also understand that modern programmers tried as best they could.
Only registered users can participate in the survey. Please come in.
Is it difficult for you?
- 4% I don’t turn on my head at work 212
- 29.1% More often than just 1519
- 45.4% More common 2372
- 7.6% It's so hard that I almost go crazy 397
- 13.7% I don’t understand what I’m doing 719