Your message is highly valuable for us. One of our experts will follow up with you within 1-2 business days to discuss your request or to inquire for additional information if needed.
I am often asked this question by all and everyone: my relatives, friends, friends’ children, and even strangers. Everyone has their goals: someone wants to change profession, someone just chooses a university, and someone wants to persuade themselves that “these lazybones get paid for nothing.” What should I answer to this question?
Honestly, of course, the first thing I would like to do is to thrust out my chest and to give a speech about fact that along with inhuman brain and 10 years of training in mathematics it requires natural talent and 24-hour slaving-away… But somewhere at the third minute of this fascinating speech, the brain and sound skepticism start their work and require to be silent and to think for a while. And is it really difficult?
Coders vs programmers
Somehow, it became a custom in the IT world to separate coders from programmers. The former, so to speak, simply crank out something following dome templates and orders from above; while the latter CREATE. I have never liked this division. Anyone can sometimes get a stupid and boring task. To write a simple code doesn’t mean you are dumb or lazy, but it can mean, for instance, that you are either young or just studying, or you want to change your profession. Moreover, the sign programmer on your identity card, even with the fact that you must create and not code, means nothing either. It happens that programmers write something that makes one wonder whether they used their brains at all while working, or vice versa, an ordinary employee automates a thingamabob in such a way that the result impresses everybody. Conclusion: the formal name of the position does not determine the complexity of work.
Focused vs general specialization
There are programmers of focused and general specializations. The former know the exact parameter X in method Y of class Z for the code to work effectively in task W. The latter can have no clue not only about parameter X, method Y and class Z, but also about task W. The former have spent a lot of time and effort to grow in this area; they sweated in training, however, now they bleed less in “war”. The latter have also studied diligently and hard, however, they dedicated more time to general principles, universal languages and common tasks. It was easier for them in training, but every new day offers them new challenges. Some of them can be shifted to dedicated colleagues, but the majority of them they will have to solve by themselves. Is it better to work when young for the “future” and rest in the sum of one’s knowledge or to face a new challenge every day “smearing” the difficulties in time? I don’t know. On the one hand, it is easier to study when young, but the focused specialization can lose its relevance. On the other hand, it is a bit humiliating to spend lots of brain’s effort every day on the thing that an expert can do in a minute. Everyone decides for themselves!
To think or not to think?
Unfortunately, programmer’s work sometimes resembles that of parachute rigger’s: no one have ever complained about the result. Either everything is good and everyone is a good fellow, or all has gone to the dogs, however, it appears the deadlines have been badly calculated, and the budget and manning have been insufficient, the has been stupid, the customer has been bad, and 150 other reasons. A good programmer will always explain why the given task cannot be done. Programmer’s profession often sets a dilemma: to think or not to think? A bug was fixed with some kind of crutch. Is it ok or should I think to make it better? The system seems to be stable at 10 queries a second. Should I think or not what will happen at 100? Make a refactoring or not? Reinvent the wheel or use the generally accepted solution? Make an architecture with a margin or leave if as is for now?
At every stage there’s a temptation to soldier. A weak in spirit programmer will be that. A lot of people don’t want to make an extra effort to think and, strangely enough, they will think constantly how to achieve it. There’s a choice either to complicate one’s life or not. Everyone decides for themselves!
Limitations of mind
There is a joke that the nature has distributed the mind among people, because some people complain about their unruly hair, an ugly shape of their ears or a long nose, but no one ever complains that they are narrow-minded. So, it’s all nonsense. Personally, I complain about my narrow-mindness. I remember only a limited quantity of information, so I have to make constant notes. I am desperately jealous of computers that, for some hundred bucks, can be equipped with a new processor doubling their speed. To understand an algorithm, I spend thousand and million times more time than a computer needs to perform it. Sometimes, I come across impossible tasks and give up. Sometimes, I underestimate deadlines. And at times I simply drag my feet! That is why I have rather frequent difficulties due to my narrow-mindness. I envy those who have slightly bigger noses and perfectly good mind.
Should a good programmer have any difficulties at all?
Many years ago to be a good programmer meant to be able to write efficient algorithms, to squeeze an extra clock speed, to save a dozen bites of memory. Nowadays, it is different. All basic algorithms have excellent implementation in all possible languages, tons of various useful information is gathered in good and reliable libraries. Currently, the key quality of a good programmer is the ability to build a program from ready-made blocks, minimizing its complexity (thus its reliability and speed increase , and support costs decrease). Minimizing complexity is crucial today. Come to think of it, all that was created in programming in the last decades serves this purpose. What is OOP needed for? To make it more simple and more understandable. What is UML needed for? To minimize chaos. Interfaces? Controlled languages? MVC? MVVM? All for the same purpose. It turns out that skillfully using modern tools, a programmer should write only simple, compact and understandable codes, isn’t it? It turns out that a good programmer should have no difficulties, because if he does it means he has not mastered the tools that will make his work simple and clear, isn’t’ it? Right? No it isn’t. The use of all the above made it possible to build systems that couldn’t have been created before. Windows 8 and iOS6 were created in 2012 not because 20 years ago it was impossible to design them or there was no proper hardware. The thing is that all those programming methods, management methodologies and approaches to code writing couldn’t produce a system of such high complexity as the current OS. People were stretched to limits but eventually they made much more simple systems. Today, programmers are also stretched to limits. And definitely, in 20 years’ time, people will laugh at both Windows 8 and iOS6, pointing at their primitiveness and deficiencies. Let us believe that they will also understand that today’s programmers are doing their best.
Is it difficult for you?
- I don’t switch my head at all at work
- More often, it’s easy
- More often, it’s hard
- It is so difficult, that it drives me mad
- I don’t understand what I’m doing