
What a good programmer our Vasya! Always neatly dressed, polite and helpful, a good family man and the soul of the company. What? How does he actually program? Hmm ... Wait ... And we do not know. Nobody ever really saw the results of his work. So, Vasya is not a very good programmer? Okay.
Here Petya is definitely a good spec. Its code really exists, compiles, does something. Indicator? Indicator. True, Petya does not work on what the project needs, but on what he finds in his head. Sometimes it coincides with common goals, but more often it does not. It turns out, and our Peter - not ideal? It turns out like this.
And who else do we have?
Well, Kohl - Kohl always very precisely fulfills the instructions of the leadership, works precisely on what he has been instructed, no self-will. Well, the perfect developer, right? True, for some reason, he did the last task for 50 lines of the elementary code for almost half a year ... No, this is not an exemplary programmer.
')
Sergey - he copes with the tasks quickly. Well done. He, perhaps, will be appointed the winner. True, it turns out it is only when working alone. And in the team Seryozha our mumble, can neither answer the question nor ask her. He is unable to work in large projects - but where is the small one to take now? Delete from our list and Sergey.
But Masha is just born to communicate. Talk to anyone, anytime, discuss everything
, get everything. Well done Masha! True, if does not differ from for. Good Masha, but not our programmer.
Anton is fluent in a bunch of programming languages, but it complicates the most elementary code with a mountain of patterns, making its support incredibly complex.
Slavik writes an extremely simple and understandable code, avoiding everything new and clever. And as a result, does not use any of the achievements of the software industry of the last decade.
Eugene, on the contrary, tries to throw away 90% of the existing solution and in some funny couple of years to rewrite everything in Haskell / Lisp / Prolog.
Or, for example ... What? No more people on our team? Are over?
And who are we as a result a good programmer?
Not a single criterion (or even their combination) can guarantee that a person will work normally. At all interviews there they ask how one pattern is different from another and why multiple inheritance is bad. It's funny, really. A good theorist can be a bad practitioner, an experienced programmer is lazy, the owner of a heap of certificates is a cram without understanding the essence of things. Plus, a specialist in general of any level of coolness can suffer from delusions of grandeur, alcoholism, melancholy and other unpleasant things.
The closest thing I have come to, which seems to me the best approximation to the term “good programmer”, is the answer of the person himself to the questions: “Do I need it or not? Is it important for me or not? ”
Yes or no? There is no third. If a person is really important and necessary, what he does is - everything else can be largely ignored. And it does not matter even why and why he needs it. For the sake of money, fame, knowledge, career, the conquest of the world - all the same.
If Vasya had really important his project - he would not only be well dressed and affable, but also do something real. If Petya would have considered his work necessary, he would have done what brings it closer to success, and not what would come to mind. If Kolya did not care, he would have found ways to learn how to work at an acceptable speed. Sergey could offer some convenient way of communication, Masha - to learn at least the basics of programming, Anton - to stop cradling out of the blue, and Slavik with Eugene - to return to reality and start, finally, to do something necessary with the right tools.
A person who does not like the outcome of his work will always find the strength to change, learn something new, finish the task to an acceptable state, overcome laziness, listen to and understand colleagues, find a compromise, etc. He is less prone to blues or boredom. Lack of experience, knowledge or resources can always somehow be filled, these are solvable problems. Get a good result from a person who does not care about this result, you will never be.
Look at yourself, your colleagues, ask them or yourself about work (or imagine what was asked). How often do you get the answer “yes, I don’t really like it anyway,” “we’ll wait, somehow it will be”, “it doesn’t matter”, “it’s not my task”, “and it works somehow”, “I I don’t know why it’s done this way. ” Should these answers be continued in the spirit of “but I will figure it out and answer in more detail,” “but I think it would be right to do that,” “I’ll clarify,” “but I need to think about how to do better”, “but I would like to change it -So ”,“ I thought about it and I think that ... ”?
It is the presence / absence of such answers, it seems to me, that separates a good programmer from a bad one. That is what you need to understand in yourself and colleagues first. It is this understanding of the need and importance of their work that needs to be developed by all means (even if at the cost of changing the project / work / field of activity). All the rest does not matter.