A Matter of Programming


This is a work in progress. It will likely become a book at some point.

A Matter of Programming #

I’ve started to put a lot of thought into writing this and in many senses it will be the columniation of 26 years of experience in technology. The experiences have ranged from electronics and math, to building a simple computer out of logic gates when I was 11, to programming professionally since 2009 when I was 25. I hope you find everything in here to be enlightening.

This is dedicated to my parents. They made many sacrifices for me to have these experiences.

Foreward #

The very first computer I touched was the Commodore 64. I was still crawling around in my diapers, but was incredibly intrigued by this device which held my brother so wrapt in the glow of the monitor. I didn’t realize its prompt was actually a BASIC interpreter until I started learning programming 9 years later. In the course of the intervening time, I spent more than my fair share of time playing Frogger — trying to jump across logs and traffic and inevitably getting squished by traffic.

My parents and I were walking though the mall and my dad saw this Packard Bell 386SX with a 16MHz 386 processor. I could tell it was an important juncture in our life by how my parents talked about it. My mom saw the price tag and immediately protested how expensive it was. I vaguely remember my father reassuring my mom that we had the money — though in all honesty we probably shouldn’t have bought it. We moved the van around to loading dock, loaded the box into the van, and then unloaded the house. It had a whole stack of 3.5" — not too floppy — floppy disks to install both MS DOS & MS Windows 3.1. I remember sitting in anticipation with my dada waiting for every single bit of data on those disks to copy over to the hard drive and get inflated. After we finally installed Windows, we typed win and watched this amazing graphical logo pop up as Windows 3.1 started up. The first thing my dad did was start up Minesweeper and Solitaire. It was late and and bedtime. Installing MS Office had to wait until the next evening.

It was around this time that my dad started teaching my about electronics. We built some simple circuits which made LEDs blink in various orders. We made timer circuits. We ever made an electronic “organ”, but playing it involved a jumper wire and dealing with the differences in sound quality caused by using different types of capacitors. After that, I started learning digital electronics and got interested in Boolean logic.

It was also around this time that I discovered some of the more technical entries in the Encylclopaedia Brittanica, like Optimization Theory, Game Theory, Magneto Hydrodynamics, and General Relativity. I couldn’t understand the equations and the way the section on Calculus was written didn’t make any sense to me yet since I hadn’t studied algebra yet (and it was the Encyclopaedia Brittanica where understanding the technical subjects requires first understanding the technical subjects.). I had no way of learning these things when I was 7, but yet I’d stare at them devotedly from time to time as though they were sacred, mystical inscriptions. This ended up ruining my scholarly endeavors in high school, because I would gain access to the internet and find MIT’s online class materials for calculus and vector calculus. Eventually, I borrowed my music teacher’s book on differential equations and, while I didn’t study the prereqs enough to solve the problems in the book, I grasped it conceptually.

One of the most interesting things we had, besides the Encyclopaedia Brittanica, my dad’s old medical texts, and his electronics books, was a book called “DOS for Dummies.” It was something we bought sometime after we got the computer. I worked my way through that book when I was 8 years old. After working through that, I found the MS DOS 5.0 manual and proceeded to work through it. I learned about batch scripting and learned how to modify our CONFIG.SYSand AUTOEXEC.BAT. Then the qbasic command caught my eye around the time I turned 9. The MS DOS manual was incredibly vague about it. It mentioned looking at the on-line help and left it at that (this was before I knew about the Internet and the internet was definitely not required). With slight hesitation, I typed in the command unsure of what it could do to the system. A blue screen came up and announced Welcome to MS-DOS QBasic.

After realizing how extensive the “Survival Guide” was and learning to program, I realized there was so much more to read through. There was online help for MS Office and while reading through that, I came across this thing called Visual Basic for Applications. I was intrigued by being able to write applications that executed in an Excel worksheet. Eventually we got another computer with Windows 95 and a Cyrix 6x86 processor. When we would frequent the book stores at the mall, I started reading various books on programming. I started reading through books on C, C++, and other books like “Tricks of the Game-Programming Gurus” and “Upgrading and Repairing PCs”. Then I moved onto magazines like Dr. Dobb’s and Visual Basic Programmer Journal. I never had a compiler and the only assembler I had was debug which was much more of a diassembler, but it did let me write a few simple assembly programs. So I stuck to Visual Basic for Applications and writing C++ programs on paper.

Things changed when web development started be a thing. There were even magazines about it. One magazine was this oversized quarterly with a CD-ROM. That’s how I first learned HTML + CSS in 1996. I also found out that I could program the browser in VBScript, but quickly found out that JavaScript was the up and coming language. When my parents would go shopping at Price Club (before it was CostCo), I’d go over to the computers and play around with the browsers and see what kinds of interesting things I could code up while my parents were shopping.

Some of you might be looking at me, squinting, wanting to ask, “Why couldn’t you do that at home?” The version of Internet Explorer we had was too old and it wasn’t until I figured out how to get a Internet Explorer 4 installation CD that I was abe to mess around with other things, like tables and JavaScript. We still didn’t have the internet, so I had to make do with a version of MS IIS that I found to be able to host my own local site.

Eventually, I got a book on C++ that included a crippled version of MS Visual C++, but I was never really able to master Windows programming in C++ because I didn’t have all of the requisite knowledge and I couldn’t afford books on it. I probably could have taken copius notes at the bookstore, but I had gotten in trouble at one of the bookstores before for taking notes like that. Things changed when I found out about Java and found ways to download it at my parents friends houses so that I could install it on my computer at home. I learned it from the docs and a couple of articles from Dr. Dobb’s. I started building UIs in Java and realized that it was a lot more verbose compared to building web applications with HTML or building apps with Visual Basic and its form editor.

In junior high, I was the most knowledgeable on computers.I “volunteered” to set up the computer labs. At the time I didn’t mind doing those things for free, because I also had no idea how much my skills were worth. I high school, after working on the farm for a few months, I managed to get a job helping out setting up new computerlabs in the dorms and upgrading our old computer lab in the main building. Because of that interest, our music teacher set up a coputer club and, in that club, I learned about Linux and how to set up a webserver on it. I college, my friends and I would come up with an idea to host a show on the computer network. We would come up topics for “The Show” (yes, it was that good) and film it. I would make the website, edit some of the audio, make title screens, and serve the show from my computer in my dorm room. This was all in 2004, one year before YouTube.

After college, I’d set up a system to help livestream the audio of my friend’s restuarant’s music shows. I also ended up building him a Point of Sale system which I think he still uses. Then I got involved with a start-up which only paid me $200/mo at most while I was living out of a friend’s house surviving off food stamps and generosity. That pattern continued until 2012, while I was starting to learn to navigate the business and tech worlds. Eventually, I “made it” by getting the jobs currently in my resume.

Over the course of all that time, I learned PHP, C#, Python, Ruby, Ada, Coffee Script, Clojure, Objective C, Scala, Haskell, Go, and I’ve looked at a lot of other languages. I keep seeing the same patterns creep up all the time. We keep repeating ourselves over and over again. Though I’ve faltered a few times, my goal is eventually make sure the only programming I ever have to do is write new code that does something that has never been done before. Perhaps it is unreachable. It is probably up there, in terms of lofty goals eventually excluded from possibility, with the complete axiometization of all mathematics by Russell and Whitehead.


What is Programming About?
A historical look at the origin of programming.
Analyzing the State of the Art
Here we analyze a fairly standard architecture.