Nov 15, 2011

Looking back at my professional life

I am 38, which is an age when people start looking back and see what they went through and evaluate their path. So do I. I am a software developer and I was like that for all past years. Have a look back with me.

My first contact with computers was at the first year of the university. We had a course about programming with 45 minutes computer access of two persons to one computer. That makes roughly 22 minutes per week. We were studying various complex numeric methods and made trivial programs for them using Microsoft FORTRAN language. If you do not know what FORTRAN is, you are lucky because it is a very primitive language. You can guess how primitive it is, if I tell you that variables named i, j, k, l, m, n are integer and the rest is floating point numbers. This is why the whole world uses "i" as a cycle variable. That came from FORTRAN.
So I had about 22 minutes to complete the program. Computers we used were a Soviet versions of IMB PC XT (a photo in Wikipedia). They had Borland Turbo Pascal: a far more advanced, strictly typed language with a very fast compiler and a great debugger. I think every current IDE and visual debugger takes roots in the Turbo Pascal IDE.
I was very fascinated with computers. I learned Turbo Pascal through a book, which cost be half of my scholarship (which was about $8, by the way). So I had 22 minutes to complete the formal assignment and could spend time doing whatever I want. Most people in our group used that time to think and type the program to the computer. Since I wanted to do it faster, I wrote my code on paper. I had to make sure that it works from the first time if I am to spend time playing with Pascal. So I learned to create code on paper (including comments and built-in compiler options to speed up compilation about 1/3). Usually my code worked from the first time because I re-read it multiple times before it was time to type it. I remember myself, sitting for an hour in the Soviet train at 6:00 in the morning with no heating and -20 outside, breathing on my pen trying to make it work and write another piece of code for half a minute and, at the same time, scanning already written code on pieces of thin A4-sized paper. I had a thick book 2kg named "Programming Windows" by Charles Petzold in my bag and used to make writing better. In breaks between course sessions in the university, I read that book with a dictionary on the top floor where there were least students to pass by.
That time taught me several most important lessons in my life.
Firsts, I found out that the first solution is never the best one. When a solution comes to your mind, you should blindly follow that idea. Sleep on it. Think about it. You will see flows. You will see a better way. But I do not see that in the work of many people. Usually people take a beer and code a "new advanced super cool" whatever-it-is. It kinda works but it neither complete, nor it is ready for the real life.
Secondly, I found that I should try more than once. It improves the result. Some time ago I read an article that confirmed this. The article says that Apple built about a hundred prototypes of the MacBook before they released it. And it was perfect. I never saw anybody making several prototypes of solutions, be it visual design or code design. No surprise that most solutions are mediocre.
Thirdly, I learned to be highly practical. While our teacher taught us that dividing 2.0 by 1.0 does not produce 2.0, I showed him my program, which did that. Yes, in FORTRAN if you divide 2.0 by 1.0 you get 1.99999999(...). Turbo Pascal handled floating point much better and with greater precision. I was told that I am wrong despite showing my code and results. So I learned that there are people, who neither want to learn new stuff, nor they would accept crude reality that do not leave by their expectation and outdated knowledge. Such people would rather follow their own romantic delusions than accept that game rules has changed and they were wrong.
Time went on. Starting from the third grade my colleagues regularly drank beers near the university. Instead of drinking beer, I went to individual learning and was spending time in the library. Yes, I liked that. I like to learn and I learn all my life. individual learning ment I could choose my subjects freely given that some of them are required subjects for my profession. If I remember correctly, there was only another student like this in a nearly 200 students of our grade. We did talk because we preffered to read but we signalled to each other upon entering the library. He was a radar guy, I focused on information security and programming. At that time I started to create convenient interfaces for programs. I was the first one in out university, who started to write programs for Windows. That happened when I was accepted to a Samsung membership for students.
Samsung had a research center in Moscow. When I was a student, they sponsored about 20 students to learn programming and potentially join Samsung in future. My task was to create a Windows driver to send faxes from software for Samsung's internal systems. I believe Samsung used my code for a couple of years after I left the company. May be there are still traces of my driver somewhere.
I was the only one, who joined Samsung. All others either quit in half a year time or were fired for failing to turn up with reports about their activities. Samsung required serious work in exchange for about $20 extra scholarship.
I worked in Samsung after finishing the university. We had a ruthless team leader. Remember, "Devil wears Prada"? Yes, a leader like that. I actually liked it. I like hard work. I am not a party person. Doing hard stuff is what I best in. The work was hard but it taught me to be even more practical. No useless researches, no academically interesting studies, drop anything that does not lead to solving the problem in the most efficient way. I had to produce results fasts, with zero bugs and take full responsibility for failures. That was a great school. Thank you, Konstantin Vyaznikov, for this!
In 2000 I left Samsung and went from Moscow to Finland. I started to work at Nokia under supervision of Eduardo Casais, who was a swiss professor with highly educated, highly motivated but also highly practical mind. I never met another person like him in my life. At that time Nokia was not what it is now. There were great minds, hard tasks. We made a software used by huge telecom operators (can't name them, sorry!). Performance was one of the key things. Every millisecond ment a lot. Stability was important as well. We had three days of performance and seven days of stability tests. Those were run on Sun and HP server by a LoadRunner software, which bombarded our servers with all kinds of requests (valid and invalid). Failure at the end of the 6th day was a failure, we had to investigate and start all tests again. It was that tough. I remember working several days 14h per day with meetings every two hours for a status update on the huge stability issues with our code on HP servers. We won in a week time and we made shipping in time.
I started at Nokia as a software engineer, than became a quality engineer and finally a chief engineer for the product. It happened so that I had to leave Nokia due to family reasons. I was working on going to project leading but that did not happen, unfortunately.
I'll skip other years because they were not very interesting or fascinating. There were some very interesting and challenging projects but I have not rights to speak about them in public.
It is nice to look back and realize that tough life conditions and tough jobs can teach you a lot. Of all things I value most the practical approach in everything. I was never able to understand abstract puzzles or fancy concepts. I am always for taking practical, simple and clean approaches to any problem that I face. There is a problem and there is solution, which is fast, clean and efficient. That's what I did and do.
What I cannot understand is when people focus on secondary problems instead of solving primary ones. I can't understand how can people release a code that half-works. I can't understand how people can write the code, which is dirty and say that they will refactor later. I cannot understand how people can write slow code only because they think they use a modern technology with a fancy name.
My life and career taught me to be real. This is a great thing. It helps me to live and survive. I wish everybody could be practical and responsible in their work.

3 comments:

  1. Nice one Dmitry.



    We can see clearly why you're such a PITA sometimes and why it's also a quality. :-)



    Very inspiring. I'm a practical guy too...



    Patrick

    ReplyDelete
  2. Dmitry, thanks for sharig your story!

    I admire you vision of programming a lot! I have to confess that your article is right about me... That part about write quick and dirty and refactor later is especially recognizable.

    ReplyDelete