My friend, the director of a large company, complains: “Imagine, I can not find a programmer to maintain a working system. I invite, show. If you rewrite from scratch - agree for half the salary. If you support - do not agree for two.
This is a very revealing situation. In Russia, programmers consider programming as an art. And no one can dissuade them of this. Marketers do not believe that their work is an art, nor do directors, salespeople, accountants, architects, and many other professionals, feel comfortable with their vocation. But do not confuse creativity in work and attitude to work as an art to the detriment of the goals and objectives of this work.
For example, for most artists it is very important to pursue their own creative growth. But life is so arranged that it does not work all the time to work for yourself and your ideas. In order to develop, artists devote themselves time to work, to implement their ideas. But when an artist works to order, for the most part, he must complete the task and “hear” the customer’s wishes, realize them creatively and artistically, but realize exactly what the client wants.
The programmer is almost always in a state of creative growth. He always wants to learn, learn new technologies, write on the newest toolkit, rewrite the application to a new language or version of the system, update his computer, development environment, install patches, flash a new version of bios ... The added program is immediately obsolete.
')
And the programmer himself says with sincere confidence that he is learning in order to apply this knowledge on a new project or a new job. But the programmer changes his job or just comes to a new project, and ... again he chooses for himself the next new technology for implementation. Why? Because I want to study it and try to make a project on it already. It is trying to do, because the result for him does not matter much. The result has nothing to do with learning, right? To himself, he exposes an internal assessment not by the achieved result, but by a creative masterpiece, a studied layer of documentation or a code created. The result — it’s just like a random gift — may or may not happen (probability 1/2). But the result usually does not excite the programmer to accomplishments, the process of professional growth or the illusion of growth are more interesting.
Of course, not all programmers are like that, but 99% of those who leave the university are like that. And I was exactly like that when I graduated from university.
Interestingly, I think now why I, at the university, no teacher said that when I came to work, we should implement the company's business task most accurately and use the most effective tools for this implementation ... Or maybe they did, but I did not believe it or not heard like everyone else?
In the first bank, which I made happy with my presence, the banking software was written by Inversion on FoxPro with DBF files. But it seemed to me humiliating, precisely humiliating, to write on FoxPro and append someone else's program. I thought it was for cowards — like, a real professional programmer doesn't write like that.
I took the C ++ compiler, found it and rewrote it under Win32, used multithreading (why I ask the library for working with DBF, I wrote my report parser, which later I received a lot of reports for the bank. I simply studied at the bank’s expense, let's say honestly. Moreover, no one at the bank was against such a form of training, they simply did not understand. The leaders and managers of the organization understood that their business depends on IT, but they didn’t understand at all what criteria its measure to read and evaluate (and now the situation is not particularly better.) Of course, the application died with my departure two years later, since the new programmer proved with conviction that this was all “garbage” and began writing the same “garbage” in Java (started to enter into fashion then).
But in this bank I already learned one lesson. I have always been interested in SQL databases and global networks. Having made a parser in C ++, I sat down to learn SQL. But there was no SQL server at hand. And I took Excel and through ODBC the driver began to write SQL queries to the DBF files of the database of the bank. Found and application. For a couple of weeks, I’ll make a complete set of CB-shnoy bank statements for Excel, and so beautiful, for those times, well, just horror :) Excel spreadsheets are an outstanding thing. The tool and the truth turned out great, the user simply put the date and received the desired report. Moreover, I found a funny effect: I created reports that other programmers began to use, began to edit them and make their modifications based on them. The technology turned out to be very cheap, bright and efficient in support for the bank. Even after I left, reports and tools continued to be used. But I must admit, again, the correct effect was not planned at all. It was a random by-product of my study of SQL technologies.
Next on my working path was Investbank. That's where my head and right. Already in those days of general FoxPro, Oracle, UNIX servers already worked in this bank ... All applications were written on Oracle Forms and the banking day was developed by Fors (first implementations). Let's face it, visually it is not particularly attractive forms. And I, of course, could not help but begin to speak out about the fact that everything should be rewritten on Win, that Oracle is not the best solution, and of a lot of other nonsense.
I take this opportunity to say thanks to Alexey Yezhkov, IT Director, Tatyana Kudina, the then head of the Oracle development department, Sergey Archipenko, my manager. They smiled at my naivety and asked questions about my cost of ownership, training of specialists, independent IT auditing for the bank, software certification and other normal questions that I myself hadn’t thought of for some reason. I can not say that they taught me in some way. They just thought so, they lived in a different way and did not understand how it could be. They were IT business professionals. I think that the word Professional is applicable to them. And it changed my view of things in many ways.
Maybe learning is the solution of personal problems and career growth? Unfortunately not. Training is an attempt to gain confidence that you can do something. But as long as the programmer does not aim at solving the business problem of the organization in which he works, all his training efforts go without a trace, like water in the sand. Without a trace for him personally, since he does not acquire confidence, as well as fame and money. There are no new lines in the summary that would be valuable for other companies. By the way, for this reason, many programmer resumes very often look like a listing of all known technologies. :) We often get these, and every time it causes a smile. Technologies change very quickly, you understand that over time you will get tired of learning new languages, platforms, commands ... without a goal ... and the age is no longer a student. Learning without a goal is not a big deal. But understanding comes with time. And how I would like to receive this knowledge immediately and so convincingly, so as not to doubt and not to check the hard way.
Yes, our system of training programmers contains a system defect: programmers are never taught that they come to a company in order to realize the company's objectives. We do not have in the program of training programmer training on the optimal solution of the problem of the organization using these or other tools, taking into account the existing capabilities of the company. By the way, I saw similar courses and questions in one of the Microsoft certification programs (of course, taking into account their decisions). But learning something like this is worth it.
And yet, art or craft?
I think that ALL professions, including programming, are both creativity, craft, and art. And it is very important to learn, to be always at the peak of your profession. But it is also important to understand what “professionalism” of your profession is. For programmers, professionalism is not the number of studied technologies, but, as for any other profession, the criterion for professionalism of a programmer is the professional fulfillment of the task!
The company sets the task, and the professional chooses the most effective solutions for its solution. Indeed, tasks are set not always “correctly” from the point of view of a specialist and are not always complete. "I want a house, 1000 m2 should be the total area, I have so much money, I have so much land ..." to think for the customer questions that he does not understand and will never understand. Will the architect choose new materials for the work just because he has never worked with them before, and he is interested in building such a house? And then it will not turn out that not a single standard sofa can be brought into the house because it doesn’t go down the stairs?
And regardless of the profession, all people are divided into those who KNOWS how to do projects, and those who actually DO projects.
Everything that you know and have studied, everything that you still learn, you need not as an end in itself, but as a means to achieve a result! And everything else will follow: money, fame, women, cars and apartments. The company itself will pull you up, because any company, like air, needs people producing a result. Even if you are not a genius, but you are making a result, you are already a genius!
And there are many reasons to write the following article on the same topic in order to better
explore the mystery of "programming."