Standard programmer

    About a week ago, he took part in the Microsoft open job contest. And failed. A week passed, the thoughts in my head (how could it be? It couldn’t be!) Subsided a bit and I made some conclusions from this experience, which I want to share with the harazhitami.

    4 years ago, when I graduated from university, I did not know at all who I want to be. Since I was a system administrator when I was a student, I took part mainly in contests for a similar position. Quite by accident, on the advice of a friend, I ended up in a fairly large Novosibirsk company for an interview for the position of C ++ developer. At the interview, they asked me very different questions (what is inheritance for? Do you know stl?), 90% of which I did not answer, but I remembered well only one: “how to turn the line around?”. I thought and wrote pseudocode in a kernel mix of C ++, Pascal and PHP. They said to me: "Well, fine ... and now without a buffer storing the position of the middle of the line ..." I still thought, thought, thought and gave up. They told me: “We are taking you. Get out to work on Monday. ”

    How my future team leader was able to discern in me an intelligent (not modest, huh?) Developer, for me the mystery is still there. I asked him later, and he said that others were just worse, and I was not so bad either. Now, if I were in his place, I probably would not 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 was not bad at operating with the C ++ language. In addition, I mastered debugging tools, search for memory leaks, profiling, unit testing.

    Then I had many more jobs ... My current job is the 5th in a row, including the freelance period.

    And the more I understood various software systems (from a banal website to CDN, from a VoIP gateway to a CRM system), the more I hated the people who wrote it. Especially fiercely I hated mehmat graduates and former olympiads. I didn’t understand why I needed to implement binary sorting myself, I didn’t understand why to implement a linked list, why to write a hand-made messaging service using the hand-made protocol. And then I had to deal with these self-made decisions and support them.

    In order not to spoil my karma and not cause hatred of colleagues, I tried to solve any standard problem in a standard way. To implement data storage in the DBMS, I used the standardORM (Hibernate, Doctrine) and never even tried to write his own. 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 mail sending, I used standard libraries for this (Java Mail API, Zend Framework). I know 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. Apply standard solutions to standardtasks. And the more such solutions he knows, the better the programmer.

    ... and all this led to the fact that I forgot how to think. For any technical question I’m looking for an answer in Google. When I was asked at an interview at Microsoft how to select from int ar [n] = {...} n-1 elements so that the product of the selected ones was maximum, for a while I fell into a stupor. The first question that arose in my head: " What the fuck? 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 problem, but apparently not as easily as the interviewer expected.

    I'm not a bad standard programmer, able to quickly solve standardtasks. I never apply a non-standard solution until I study all of Google’s results to the last page. I don’t like writing executable code at all, because I constantly make mistakes in it, which then need to be searched and corrected. I like to add the xml-th configs coming in a package from the developer.

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

    Also popular now: