How I got into software development
I got my first personal computer when I was thirteen. It wasn’t a regular pc bought in a computer shop, I built it from scratch. My grandma tried to motivate me to have good marks in school and gave me some money so that I start saving them. She promised that if I will get good marks she will be giving me more so that eventually, I could sell enough so that I could buy a PC.
Building my first computer
Things didn’t go as intended — instead of waiting for more money I sold almost anything I could from my possessions — lego parts, gaming console with games, Gameboy and few other things to get enough money to build a PC from spare parts. I scoured ads about used and discounted hard drives, graphics cards, and monitors for weeks and finally got everything I need. My PC was looking terrible like a Frankenstein created from parts that don’t belong together, but it worked. I remember the time I first installed Windows 95 system on it and the magical sound the system played when it booted. I learned to hate that sound in the coming years.
I spent the next few years pushing my pc to the limits. I customized the desktop, edited the registry, wrote automated batch files and did pretty much anything a kid could do without any specialized knowledge. I think at 15 I learned HTML because a friend of mine built a simple website with an image gallery of our skateboarding gang. I was fascinated — you could create something so quickly and immediately share your creation with others.
Diving into the open source community
At the time I was a big fan of hacker-themed stuff. I was a reader of slashdot and other related websites that I don’t even remember now. I read Neuromancer a few times, and the idea of the network where everyone is connected and where you a hacker can get unrestricted access was feeling like a dream. From those online communities, I learned about opensource initiative and existence of a system called FreeBSD that is so hardcore that every hacker needs to use one.
When I was fifteen, I managed to buy a disc with a FreeBSD distribution. I managed to buy a separate hard drive and started the installation. The process was so different from installing Windows. There were many options to choose from and lots of packages to install. That was my next big moment after HTML. What excited me most of all after the installation is that there was a ton of documentation. If I didn’t know how something worked there were extensive manual and the link to author’s website. I was a kid and had plenty of time, so I just read through everything.
While my friends spent time skateboarding, dating and having fun I was having fun on my own. I learned how to make a ppp connection using a script, how to set up and customize Windowmaker desktop environment and make it show a transparent terminal window with green text over my desktop. One thing that bothered me was that there was a lot of open source software that was not available to FreeBSD. I switched to Linux because the community was more prominent and there were much more tools available (who wouldn’t want to try 20 different terminals and shells). I tried few distributions (in Linux world anyone can create their flavor of the system) and then learned about Linux From Scratch. LFS was a set of very detailed instructions on how to build the whole system from nothing. That was my third moment. I spend three weeks building my own system, and there was no turning back after that.
Dropping out of college
I was in love with that technology. A lot of very skilled developers from the whole world gathered together online and created a system that I could use. Moreover, they left all the doors open — the source code of every program or library was right there, I could change whatever I want, peek into how things worked and even understand something. The code was very comprehensive and well documented, the manuals were just on point and covered everything I needed. And all was available right away for free. That felt so different from the restricted windows world of shareware.
During that time my grades at school worsened. I was barely studying because real life for me was at home in front of the computer. I managed to finish high school somehow and went to college to get a degree in finance. I dropped off after the first semester. Nothing was exciting there for me. I decided to focus on what seemed important — learning to program with C++. It was the year 2003 in Russia. I was living with my grandparents who were taking care of me. Software development and “computer stuff” was considered as something close to electrical engineering or plumbing, so my grandparents decided that I was on the slippery slope and decided to motivate me.
I was seventeen at that time, and they told me that if I’m not willing to do what they tell me (notably — study in college), I have to prepare to live on my own. I was scared to the bones — not only I didn’t know how to live alone, but I also had no idea where to live and how to get money for food. I made another attempt to go to college, to get a CS degree. I succeeded, but within a few months, it became clear that nobody is going to teach me actual programming. We spent days on linear algebra and geometry, and I started to lose interest again. By the end of 2003, before my birthday, I dropped off again. That was the tipping point for my grandparents, and they told me that I have to move out.
They probably thought that I wouldn’t have anywhere to go and will have to do whatever they told me. But things didn’t go as expected again and I found a place to rent and happened to have a bit of money I saved from reselling computer parts to pay from a few months, so I moved out. It’s hard to say if my love with computers destroyed my relationships with the family or it was me. I was selfish, probably even rude, and took everything for granted. On the other hand, I would probably never have the guts to tell my kid to move out. It was mere luck that I didn’t end up in a bad company with substance abuse.
In a way, computers saved me because that was all I cared about. I didn’t even realize how big of a family conflict it was at the time. I was just happy that no one will bother me saying that I’m staring at the monitor for too long. I could pull all-nighters every day, and nobody nagged me anymore, what else could I wish? But there was a critical aspect of independent life that became clear — I had to earn money to pay rent, buy food and pay for the internet. I guess I realized that way earlier than a lot of my peers.
Getting my first job
I started to apply to different jobs. I even went to my first day working as a data entry guy in the supermarket. They’ve put me in front of the computer and told me to scan barcodes and enter product names. I think I spent about an hour doing so and went away never looking back. My other job interview was much more successful — local ISP my apartment was connected to was looking for the junior system administrator. It was a small company, and their CEO just dropped by and visited me at home. He was so fascinated by the setup I had (I think I had three or four Linux servers at home that I was experimenting with) that we immediately hired me.
So there I was, an eighteen-year-old that just moved out from parents, working as system administrator from home. It felt like a dream. I was the coolest guy among my friends because they could hang out at my place without any restriction. It was a great time.
First paid web development job
After a few months working, I got my first programming assignment. Clients of the ISP had to pay monthly and sometimes forgot to make payment on time. The company needed a way to credit balance of their account per request so that they could pay later while continuing to use the service. The problem was that our billing system did not support that. And who’s the best person to do this kind of job? Of course system administrator.
The billing system was written in Perl, so I thought that it would be natural that I’d use the same language. At the time the only language I knew was C++, so Perl looked revolutionary to me. C++ is a compiled programming language. To use the program you have to compile it for a specific system and then run the binary code. Perl is an interpreted language, and it allows you to run applications on any system without compilation. The benefit was that you could edit the program and see changes right away. The program I wrote was a CGI script that took user input on a web page and made changes in the billing system. I was blown away. Within a month I was able to create a real application that users were using and that had a lot of value.
That was the time when something clicked inside of me. While working on that program a lot of questions came up. How do I make a nice interface? How do I make sure that the script continues to work after I make changes? How do I make sure that I do everything on time? How do I make sure that understood the task? It’s those questions that got me hooked up on software development. I’m still looking for answers, but I hope to share those that I already found.