📜 ⬆️ ⬇️

Standard Programmer

About a week ago I took part in the competition for an open vacancy of Microsoft. And failed. A week passed, the thoughts in my head (how could it be? It can not be!) Settled down a bit and I made some conclusions from this experience, with which I want to share with the masters.

4 years ago, when I graduated from university, I didn’t know who I wanted to be. Since when I was a student, I worked as a system administrator, I took part mainly in competitions for a similar position. Quite by chance, on the advice of a friend, I got into a rather large Novosibirsk company for an interview for a C ++ developer position. At the interview I was asked very different questions (why do I need inheritance? Did you know stl?), 90% of which I did not answer, but I only remembered well one: “how to turn the string?”. I thought and wrote pseudocode on a nuclear mixture of C ++, Pascal and PHP. They said to me: “well, normally ... and now without a buffer storing the position of the middle of the line ...” I was told: “We take you. Get off at work on Monday. ”

How my future team leader was able to discern in me an intelligent (not modest, yes?) Developer, it's still a mystery to me. I asked him later, and he said that the others were just worse, and I was not so bad. Now, if I were in his place, I probably wouldn't have taken anyone.

The company in which I worked, I liked. We were given time to raise our own professional level, reading books. We (greens, yesterday's students) attended seminars where we were told about design patterns, object-oriented design, and much more. After half a year, I have already operated badly with the C ++ language. In addition, I mastered debugging, memory leak detection, profiling, unit testing.
')
Then I had a lot of places to work ... My current place of work is the 5th in a row, including the freelance period.

And the more I understood various software systems (from a banal web site to a CDN, from a VoIP gateway to a CRM system), the more I hated the people who wrote this. Especially fiercely, I hated graduates of mekhmat and former Olympiad students. I did not understand why I needed to implement the binary sorting myself, did not understand why to implement a coherent list, why write a handwriting messaging service using the same protocol. And then I had to deal with these self-made solutions and support them.

In order not to spoil my karma and not to hate my colleagues, I tried to solve any standard problem in a standard way. To implement data storage in a DBMS, I used a standard ORM (Hibernate, Doctrine) and never even tried to write mine. If it was necessary to design a new part of the system, I used standard and simple design patterns from the classics. If it was necessary to implement sending mail, I used standard libraries for this (Java Mail API, Zend Framework). I know quite a lot of such standard solutions (and I continue to look for them every day) in order to solve almost any problem. I, as a good cook, who can cook a large number of various dishes, knowing a large number of various recipes.

And I got the impression that a good programmer should be just that. Use standard solutions for standard tasks. And the more such solutions he knows, the better the programmer is.

... and all this led to the fact that I have forgotten how to think. For any technical question, I look for the answer in Google. When at the Microsoft interview I was asked how to select from the int ar [n] = {...} n-1 elements so that the product of the selected was the maximum, for a while I fell into a stupor. The first question that arose in my head: " On * ya? Why?" Then I tried to recall a similar algorithm from some standard library, which I know more than one ... and could not. In the end, I solved the task, but apparently not as easily as the interviewer had expected.

I'm not a bad standard programmer who can quickly solve standard problems. I never apply a non-standard solution, until I study the entire issue of Google to the last page. I don’t like to write executable code at all, because I constantly make mistakes in it that need to be searched and corrected. I like to add xml-configs that come in a package from the developer.

I am a standard programmer. And this is perhaps not even bad. But I cannot solve non-standard engineering tasks as easily as 4 years ago with a completely empty head, not loaded with tens of thousands of pages of various books and manuals.

Source: https://habr.com/ru/post/92303/


All Articles