Inspired by a blog post from Julia Evans with an identical title, here is how I learned to program.
Unlike Julia, I learned most of my programming from my own hacks and projects. I feel like the jobs I had where plateaus in my learning curve rather than spikes.
I must have stared somewhere mid-’00, before which I was raised without much technology in my life. I did not watch TV, smartphones where not invented yet, and I did not have my own computer.
I’m really fuzzy about the timeline, but several different things happened, seemingly independently of each other. I did not consider myself a programmer during any of this.
My brother likes to take apart computers, so we kind of grew into the system administrators of our tiny school, recombining and configuring donated hardware into usable computers.
Back when Game Maker was still owned by Mark Overmars, I made a lot of silly games with friends. Later we also used an RPG thing called Elysium, which ceased to exist.
This got me in touch with a guy who wanted to make a clone in Java. This lead me to read Head First Java, to date the only programming book I read extensively, including all the exercises.
I always played with LEGO, but at some point I got a LEGO RCX for my birthday, and built a lot of robots with it. Like Game Maker, it was programmed by dragging blocks around.
A guy at my school taught me and a friend some Basic. Nothing much came of this.
I did a course in web development. I learned HTML and a tiny bit of CSS, but not how to use classes and ID’s, so for a while, I would just style tag names, and use frames for layout.
Later a woman at my school who was a web designer taught me and the same friend proper HTML and CSS and introduced us to PHP.
So at this point in time I know some Java and PHP. What follows is a period where I teach myself a lot of things, do a lot of crazy hacks, and get more serious about programming.
I learned JS, Python, and Clojure by reading things on the web, and just building random stuff with it.
I used to have a folder of projects and ideas. But this was before I knew version control, and before Github. At some point I tried moving the whole thing into SVN, but I messed it up. This whole folder and its ~50 projects is lost in time.
It contained crazy things like a site that was only text. The background was a PHP-generated text image, the borders where text images, the text was text. They where only distinguished by color. I also had a memo app when local storage was new. And a HTML editor with a circular context menu.
The only thing that remains form this era is my first blog. This is your only chance to see code I wrote in 2009.
I did an internship with Oblivion, where I did some CSS and HTML prototypes. Then I did an internship with Eight media where I did Django projects.
I also started doing my first paid jobs for this designer at the school. Followed by Wordpress websites for other people.
Now we are getting to “recent history” where I know dates and stuff is on Github. By this time I was doing freelance webdev an knew several programming languages quite well.
So far, I did not have many peers. All of my friends that where interested in technology moved on to television, photography, theatre, and other things.
This changed radically in 2012, when I went to Hacker School, where I learned a ton of things and met a ton of people who where interested in the same kind of things as me. Amongst many other things, I learned C and Haskell.
After Hacker School I started living on my own and tried having a job at Silk where I did some Haskell and JS things. This did not work out very well, so I went back to freelancing.
Around this time I got a LEGO NXT. This time I programmed it using Not Exactly C. I also learned how to make NXT sensors using PICAXE. Later, when Arduino became a thing, I moved my hardware hacking to that platform.
In 2013 I did some freelance work for Freenom, who then hired me to do Python stuff. I worked there for over a year.
This brings me to today. I quit Freenom to see some more of the world. Visit far places, take on odd projects, find weird jobs. Help in this area is highly appreciated.