My coding evolution
This page describes my journey learning various programming languages.
My Dad told me I wrote my first program when I was 5 years old. Probably printing something like "Hello World". I am not surprised, given my memories of computers as a child, but I cannot say I remember it.
The first device I remember writing code on was a TRS-80 Color Computer that was plugged into our TV.
Someone had given it to my Dad for me to play with, along with a cassette recorder to save and load programs and a book teaching BASIC.
I remember going through the book and writing up programs using the command line input that required you to start each line with a number. You had to enter a command to list the code and reuse a number to replace a line. It was encouraged to use steps of 10, in case you needed to insert a line later.
At the end of the book was a certificate stating "You are now a computer programmer!"
The first major jump for me was getting a computer running MS-DOS, which included a copy of QuickBASIC.
Finally an editor where I could read and edit my code at the same time!
I continued to label each line with a number, and used GOTO statements for control flow.
I started writing graphical games, as opposed to ASCII art, in glorious 640 x 480, 16 colour resolution!
I only recall finishing 1 game during this time: a side-scrolling shooter with multiple weapons and aliens in space ships. One of my friends enjoyed it for a bit at least.
My first experiences with HTML were creating very basic websites, using frames and font tags.
I still stuck to BASIC because I could use it to make games.
On reaching year 12, I got to attend my first programming class, learning Java.
I continued to write all my code in Notepad, but later discovered the Eclipse editor.
During the year, I made a version of Snake as a side project.
My end of year project was a game of Battleships that put the player against an AI player. The AI would shoot randomly until finding a boat, then it would fire around the boat to find the direction, then fire in a line until it was sunk.
All code was written as Java applets, that were embedded in HTML pages.
During University, I learned to create command line programs using C.
I did a 3D modelling course during my final year that involved creating an animation with C and OpenGL.
My marker commended me as one of the few students to use destructors.
Another University course involved learning PHP. The recommended approach at the time was to use tables for layout.
PHP was the only server-side language I used until I started work at the Australian Antarctic Division.
My first job out of University required me to learn Python.
This was the second most significant point in my learning, because it introduced me to a language that spans many disciplines and has a passionate community.
During this time I got to see the release of Python 3 and then view the very slow conversion rate. It was only after the release of Python 3.4 that I switched over for all my code.
Starting at the Australian Antarctic Division required me to learn ColdFusion and Oracle databases.
I will hold back on further comments here, apart from saying I think the Railo team are doing some nice work, at least if you need to use ColdFusion.
I started playing with Node.js around 2012, initially with Express. But the lack of Oracle drivers at the time made it impossible to use for AAD work.
I continued to play with Node.js using CoffeeScript, Jade and Stylus for personal projects.
After PyCon Australia 2013, I started learning Django and decided that it was the way forward for the Data Centre.
It allowed me to use my Python skills, that I had been maintaining on side projects, and use an ORM that worked with Oracle and avoided increasingly complex SQL statements.
This all seemed great during 2013 and the start of 2014.
Static HTML and APIs
Trying to find a host for my personal website ended with me using GitHub pages. This required I create a static website, with no server side code.
I have returned to the Node.js/io.js ecosystem, using NPM and the Unix philosophy of chaining modular, single-purpose tools.
I am still learning CouchDB, PouchDB and Elasticseach. The more I learn of these, the more I am excited about this approach.
Using CoffeeScript, Jade and Stylus, along with Markdown, is keeping me happy.
I am also keeping an eye on web components as a possible extension of my use of Jade mixins.