About Nathan

A personal account of becoming a programmer.

This is me. Right now I serve as a part-time employee at a small consulting company, doing front-end and back-end web development for a variety of clients. I am the primary author of Get Programming with Go, which was published in 2018.

January 2014 marks the first Edmonton Go meetup, which I continue to organize today. I occasionally volunteer as a mentor with Canada Learning Code and I am responsible for maintaining several open source projects.

Outside of my career, the characteristics that define me are that of a Christ-follower, plant-eater, and pedestrian. Hobbies include photography, board games, cooking, and nature walks.

What follows is my personal account of becoming a programmer and what I’m excited for next.

Childhood

Playing Atari Games

I grew up on Lego, Dr. Seuss, and Berenstain Bears in an Alberta village. After my parents divorced, an Atari Computer found its way into our home. As far as I knew, its sole purpose was to play video games.

Then one day the school library held a book fair where I found a colourful book filled with short BASIC programs (likely published by Usborne).

When my Dad saw my interest, he gave me a coil-bound manual to really learn BASIC. I got to use his Kaypro IV on the weekends. It came with BASIC and several games, including text adventures like Colossal Cave and Hitchhiker’s Guide to the Galaxy.

My first computer was a Commodore 16 from a garage sale, tape drive and all! I wrote a historic text adventure where your character wandered Israel in search of Jesus. It wasn’t necessarily sophisticated or well-researched, but one of my first computer projects.

Teens

By junior high, our school upgraded the lab from Apple IIs to amber-screened XTs. Thankfully there was one computer with a colour screen, plus our neighbours let me use their PC after school. Progressing from GW-BASIC to QBasic, I wrote remakes of Star Traders and Atlantis.

In addition to lawn-mowing income, I earned money tutoring people with computers. When I had enough saved, I went to Programmers Guild to buy Turbo C 2.0. Unfortunately Turbo C wasn’t the most approachable:

  • A simple syntax error would dump a dozen seemingly unrelated errors.
  • I found the IDE confusing, the keys reminded me of WordStar!

QuickBASIC 4.5 turned out to be a much better investment.

While in Grade 9, my Mom helped me pay for a correspondence course from NRI (McGraw-Hill Education). The three-year course covered computer programming in five languages and came with a 386 SX.

Resolved in my future career path, I wrote a letter to Nintendo and received a genuine response encouraging me in my studies to become a programmer.

Playing Atari Games

So, inspired by Galaga and other SHMUPs, my brother and I set out to make Firebirds. It had timing issues on faster computers and the “scrolling” and collision system were amateurish. While not exactly Raptor, it was a complete game, with title screens, difficulty levels, 2-players, sound effects, and both mouse and keyboard control. We distributed it through local Bulletin Board Systems (BBS).

My high school needed an application to do timed typing tests, so I wrote one. The first version of Trial Type was a DOS application written in QuickBasic. I registered Lynx Software as a sole proprietorship and licensed the software to a number of schools.

QuickBasic also allowed me to build a custom database for an alarm installation company. I was proud of the text-based UI, but unfortunately I knew nothing of B-trees. It got slow with more data.

Trial Type 2

Eventually I gave Turbo C another try, using DOS edit and the command-line compiler instead of that wretched IDE. Borland C++ allowed me to make a Windows version of Trial Type and the far less successful Graphematics (think graphing calculator).

Apps were making me money, but I still really wanted to make games. By now I was using C and Assembler and experimenting with Mode X, VESA and EMS/XMS memory. 640K really wasn’t enough. I bought Watcom C/C++ so I could use DOS4GW. It was wondrous!

The Internet turned out to be quite useful. I was able to assemble a team of artists to work on a real-time strategy game entitled Galaxy. We got a prototype up and running, but it was difficult to maintain the initial momentum. The rise of DirectX brought the question of whether to continue or switch technologies. In the end, the prototype was as far as we got.

Career

At that time the web was still relatively new. I remember reading the HTML 2.0 specification, one of the few resources available to learn it.

HyperProcess

It wasn’t long before I wrote a command-line tool to make HTML easier to work with. HyperProcess was a preprocessor for HTML. It supported file includes and other features, while also serving to lint and compress my HTML. Think static-site generator sans-Markdown.

HyperProcess came in handy at my first web development job, but at my next job I discovered Server Side Includes and eventually ColdFusion. By the turn of the century, familiarity with SQL, ColdFusion, and JavaScript made for a platform where I could do “real programming.”

I stuck to ColdFusion for eight years across three jobs. Then Ruby on Rails came along, enticing me with its ORM and organized file layout. It didn’t hurt that I have a certain fondness for trains (my Dad worked for CN Rail when I was young). Ruby became my primary language for the next eight years across another three jobs.

By some bizarre coincidence, ColdFusion, Java, JavaScript, PHP, and Ruby were all released in 1995, the same year I graduated High School. Impeccable timing for the budding web developer.

When I began this career, I didn’t know the web would become this open platform for building apps, or that the SaaS model would become a predominate way to distribute software. I fell into web development, and I’m really glad I did!

Next

Let’s talk about the next generation of developers, programming languages, and software.

As I reminisce of the people and authors who got me to where I am, I think about the next generation of web developers. While I’ve taken to writing what I learn and mentor occasionally, there is so much more to do.

JavaScript and CSS rule the front-end, alongside derivatives like TypeScript and Sass. There are many more options on the server-side. After evaluating several languages and paradigms, I settled on Go as my back-end language of choice. The emphasis on productivity, efficiency, and simplicity appeals to me. My open source involvement has increased. I want to help grow the available libraries and the community.

Get Programming with Go is my first technical book, a beginner’s guide to the Go programming language, focused on the language itself. I’m not finished yet. Through writing, volunteering, and other efforts, I intend to empower the next generation of developers.

Nathan Youngman

Software Developer and Author

[email protected]