When I was a schoolchild, I was attracted to computers and it was interesting for me to find out how they work. The choice of job was obvious. “I want to be a programmer!” At that time I had no accurate picture of what programming actually was. The computer science classes made it a little bit clearer soon, but not much, as it wasn’t quite exciting to write the programs which added numbers together in a console.
In the 11th grade I took a fancy to Delphi, so within a year I wrote a small text editor and finally understood that the sphere was attractive for me.
My first 3 years at the university I was more attracted to system administration. I even worked as a technician at my university network engineering lab. That was a unique opportunity to get some background in computer networks, server hardware and in Unix systems, of course. Even though all of those things were far from programming itself, it gave me some basic knowledge which was very useful later in, for instant, web development.
As many other students, at university I used mostly Java or .Net. But my first job I got thanks to PHP, which I worked with during my free time. We were creating online book store on 1C-Bitrix. My salary was something like 10k roubles for a part-time job. I could work from home and at any convenient time; the main requirement was to do everything well and in due course. But there were some disadvantages as well: I had nobody to teach me. Nobody could check my code, explain how to implement some feature or what book to read.
After a year working with PHP, I was fed up with it. I wanted something more ‘serious’ (as I thought at that moment), so I combined my work with learning Ruby. I also had some notion about Java SE/EE, so I set a goal to find a Ruby or Java job by the time I’d have finished my third year.
As it turned out, no Java company wanted to have a trainee/Junior developer that summer, they all advised to wait till autumn. But I was absolutely crazy about working in a ‘serious’ company and wanted to be educated by professionals so much, that I started as a trainee in Evrone.com. So that’s how it happened and since then I never came back to Java :)
I guess the most difficult thing in a programmer’s life is the fact that you always have to study. Only the sky is the limit, so the more you find out, the more you still don’t know. So it’s crucial to read a lot, try things out and think. It’s preferable to have a mentor, which can help you and give advice in a tough situation. Sad to say, I didn’t have such a person, so I had to get information bit by bit and only by myself, by trial and error. Reading a book about a new technology before using it is never enough. You need to discover the best-practices, so you won’t spend your time on a priori ineffective ways.
When I was finishing my master’s program at the university, I was invited to work as a part-time professor. I had to teach computer studies to freshmen, sophomores and juniors. It wasn’t paid well in comparison to my actual salary at that moment, but I agreed as I was interested in trying out something new. I vividly remembered the feeling when I had nobody to ask in an unknown situation, so I was ready to help the ones who wanted to learn how to program and become professionals.
Later in some of the companies I worked for I had a chance to be a mentor, so it freshened my memories about the importance of the mentorship again. When you’re helping anyone, you, first of all, learning something too and also have a feeling that you’re do something important for the society. That’s why I decided to try myself as a mentor on mkdev.
Can you give some advice that is usually considered to be controversial?
You shouldn’t skip some fundamental things. Students often get engaged in some trendy technologies, frameworks and whatnot during their studies and do not pay attention to fundamental things such as algorithms, mathematics and low-level system software. Some basic knowledge will help you to master any ‘trendy’ technology faster.
How do you maintain your skills to be relevant? How do you grow and get better as a developer?
I always have some pet-projects and try to use there everything that I can’t on my main job. Some of them become something substantial, some are always kept in my laptop only, but anyway they provide me with some new experience and background.
Your top 3 books for a newbie?
Your top 3 sites/newsletters/information sources that every developer should read?
Your working area photo
For now I don’t have my own desk, so I work anywhere. Here’s the photo of my desktop: