My 10 years of programming

I’ve started to learn to program 10 years ago, on 19th September 2008, only two weeks after first Google Chrome release, a few days after Stack Overflow has been launched, several months before Python 3, year before Go, two years before Rust and five years before Docker according to Wikipedia. In less informative, yet not so tangled Web.

One of the first thing I’ve read after finding a programming course was:

The journey of a thousand miles begins with one step.

My journey has been pretty long and interesting indeed, and has been started by a game, as it often happens.

Games

I’ve been playing video games since I was 3 year old and for a long time it has been my only interest in computers. I got my first PC in 2002 (along with Diablo 2, which is still my favourite game) and internet connection during the next year (56kb/s up to 128kb/s after a few months). Although I’ve heard about “programming” around 4th grade, for me it seemed to be an activity for eggheads, not a thing that you can teach a child in a primary school. Being the only nerd around and not being able to even read in English (I’ve just started learning that language) did the thing much harder. As I lived in a very small village, there wasn’t any programming class around or programming course. It’s great that situation is much better nowadays (I’d have probably at least an experience with code.org at the same age) :).

It could last very long and, since I hadn’t any “dream job” or “vision” about my future, I could end up doing something completely different. But I had a luck to hit on that game.

Coolio Niato and light-bot

I’ve continued playing games, solving logical puzzles, learning maths and English. In those days Adobe Flash was almost everywhere… and of course it has been used to create games. In middle school (not so long ago in Poland we had primary/middle/high schools, now it’s primary/high) I hadn’t as much time as in primary school, so around one hour long games embedded on websites were the very good choice. One day I’ve stumbled upon Kongregate. It was much smaller than today (it has been “beta” for very long time, ~5 years or so :D) and any good game after reaching “the top” was very likely to be found by people that came there occasionally. I’ve created an account on 17th August 2008 and after a month I’ve found light-bot game (it’s still there) created by Coolio Niato aka Danny Yaroslavski. That was it, after solving all 12 levels, I saw this screen:

programmer-heart

…and reminded myself about the “programming”. I thought “if a programming game I’m successfully playing suggests learning a programming language, I shouldn’t be scared and I should give it a try” (fortunately I didn’t start with Turing - I haven’t seen any real code in it and most likely I’d resign early because of the lack of learning materials).

Warsztat and Xion

When I was 15, my English was good enough to roughly understand what’s going on in games or to use some software (or, as it turned out, install Linux), but it wasn’t sufficient to learn a completely new topic. Looking for learning materials in Polish, I’ve found Warsztat, a community of game developers, with a plenty of articles about programming and “Megatutorial” written by Karol Kuczmarski aka Xion, which is comprehensive guide to C++98/03. That was my main source of knowledge for a few months. I’ve read it many times and I’ve rewritten plenty of code from it. I’ve played mindlessly with my own programs as I tried to play games 10 years earlier without understanding the rules. That was pretty hard and a few times slower than it would be with a teacher, but it was fun and quickly became the most entertaining thing to do for me.

Linux

By the end of 2008 I was able to write simple games or very simple text processing programs. And I mostly knew, how my programs’ flow looks like (loops, conditionals, functions) and I was sure why does it work (definitely more sure than I’m often today :D). I knew that object programming is something like presenting the real world inside the computer. But my whole learning process happened inside Visual Studio 2005 under Windows XP that for me was nothing more than MS Office and games platform (and it seems that’s still quite common view today).

I knew that “the code” is used to create system, but I wasn’t aware, how it could happen - how you can move from this little console programs to writing, for example, a disk driver; how does operating system works; what’s a “memory” I’m using in my programs (OS Development wiki is a good of resource on that topic).

Then my cousin showed me Ubuntu (8.04 at that time, with a great GNOME 2 environment). At first, it looked fresh. After a while I realize that it just looks a bit different from Windows, but I cannot run programs I’m using on my original system. I’ve switched back to the Windows XP to try again in March 2009. I’ve installed Ubuntu and then switched to more “advanced” distributions. I was able learn very, very much just by reading tutorials, wikis, guides and installing Debian, Slackware, Gentoo, Arch and Linux From Scratch.

GNU, Free/Open Source Software and hackers

Of course, it’s not “Linux”, but “GNU/Linux” ;)! Software history, traditions and culture became an important part of my education as a programmer since the very beginning. E.g. “Free as in Freedom”, Eric S. Raymond’s writings, “Just for Fun: The Story of an Accidental Revolutionary”, “The Joys of the Craft “ and also films like “REVOLUTION OS” showed me that it doesn’t have to be just 9-5 job, that there’s actual community of like-minded creative people connected by the Net, with rich history and great achievements. Community that co-created the Internet and other things I’m using now.

At that time I felt I’d like to be a part of “that group” and after some time I’d be able to use my skills to give some code back.

High school - algorithms and data structures

Just before high school, during holidays, I’ve felt ready for another challenge, the second programming language. Again I was limited to materials in Polish and one of the first books I’ve found were translations of A Byte of Python and Dive Into Python. Python allowed me to learn, beside sole programming language, things like basics of databases, networking, data formats and game programming (I did some SDL programming, but with pygame it was much easier at that time). In high school I’ve started using version control systems, focusing on git. Next, I’ve joined GitHub (unfortunately I didn’t save any of my first programs :<):

joining-github

I was also lucky to have bits of real computer science in high school. Data structure and algorithms basics I got during three years and loads of problems I’ve solved using online judges like SPOJ gave me a lot and proved useful many times during a more professional part of my “journey”.

first-spoj

University, first job and real problems

I love programming and reading about software. After four years it filled my free time almost completely as football and games in primary school. But it was just a hobby (that I’m really passionate about) and it still is. In school I’ve almost always felt like a misfit and I never really liked being there. I didn’t want to spoil my passion by being “forced” to do things I’m not necessarily interested in. Instead of computer science, I’ve chosen mathematics major, thinking that it could be a great brain training, contributing to my problem solving skills. In hindsight I think that wasn’t as bad decision as people told me ;).

During studies I’ve slowly moved from writing relatively small programs that just build and solve just basic cases to software engineering. I contributed to a few open source projects, starting with minor fixes in Minix:

first-contribution-minix

I took, among others, compilers, evolutionary algorithms, databases, image processing and photogrammetry courses, which helped me create interesting advanced projects using mathematics I’ve learnt.

In my first (and second) job I learnt a lot about tools and environments I’m programming with/for. I’ve experienced real, serious projects and sensed, what does it mean to develop production-ready software that runs non-stop for thousands of users.

Recently I’ve participated in several hackathons to test my communication, design and programming skills (that was great, I’ll definitely do it again).

Next 10 years

During last 10 years I went from tinkering with a code from tutorials through university courses and internship focused mostly on testing up to developing the “real software”. I feel comfortable with C++, Python and Bash, I’m writing more and more Go and Rust, I’ve got a bit of experience with JavaScript, PHP, Ruby, Haskell and Java. Finally, I’ve become a programmer I dreamt to be 10 years ago. New technologies doesn’t scare me any more and I’m able to pick up many projects that felt overwhelming several years ago.

I also feel that’s after long years of trying and learning the basics of different things like operating systems, networking, web, databases and graphics it’s a right moment to specialize. It’s the moment to choose my own adventure with a hope that next 10 years will be even more interesting.


Similar stories:


“After three days without programming, life becomes meaningless”

I like a lot “The Tao of Programming”, which with a dose of hyperboles and stereotypes depicts “Master Programmers”, professional software development and remarks on corporate environment. I read it from time to time since 2009 or so. You can find it here.