A few years ago, at the very beginning of summer 2012, back when Skyrim had just started to hit the peak of its popularity, I decided to build a computer.

At this point, my laptop had fried itself, so I was borrowing my parents’ laptops intermittently to do homework. I needed a computer I could work on, but more importantly, a gaming rig I could play the best games of the year on. So I set about finding all of the parts I needed: a top-of-the-line CPU that could handle Mathematica in parallel efficiently, enough RAM to let me keep my standard assortment of 30-or-so Chrome tabs, at least one of which was Netflix, on one display and whatever game I was playing on the other, and of course a graphics card powerful enough to handle two displays, at least one of which was guaranteed to have a processor-intensive game running on it.

I spent days on Amazon, Newegg, and Tom’s Hardware, reading reviews and carefully updating my build specs, until finally, after about a month of planning, I settled upon the perfect design. After that, the actual assembly was a piece of cake -- no one ever tells you this, but building a (standard) computer is like putting together a Lego set, except with far more expensive Legos (and a lot more wires). And soon, my dream setup was good to go, and I spent the vast majority of my summer break that year bingeing on old TV shows on Netflix while playing the best games of the year at the same time.

Unfortunately, when I moved to Austin, I quickly discovered that the process of taking my computer back and forth between Houston and Austin, while easier than what it would be if I was going to school out of state, was still a hassle -- even once I got it out of the house, getting it to Austin, since I rarely drove, usually involved finding a friend willing to lug around a 60-pound tower in their car, or paying almost $200 to ship it between the two cities. And so, as my friend and I were lugging my tower into my parents’ car before winter break, I decided to rebuild it in a much smaller form factor.

Rebuilding a computer, I discovered, is far more difficult than building one from scratch. Manufacturers, as it turns out, don’t really stress backwards compatibility, so I ended up having to replace a lot more parts than I was hoping. In order to go to the smaller form factor, I needed a smaller motherboard, which needed to be from a new sequence of motherboards. So I got a new motherboard, but despite being from the newer sequence of motherboards, didn’t have a USB 3.0 header (the connection on the motherboard that accepts I/O from USB 3.0 ports on the case), so I had to get an even newer motherboard, which was recent enough that my processor was too old for it -- and so on and so forth, until I ended up replacing the processor, RAM, motherboard, and case just to build a smaller version of a computer I already had.

I could have saved myself a lot of trips to MicroCenter and returned boxes to Amazon and Newegg if I had spent anywhere close to the same amount of time checking compatibility as I did when I built my computer for the first time. But I reasoned that since I knew the basics -- how to make sure the processor works, where the RAM goes, etc. -- and had already built a computer once, I could just as easily build another one without any forethought. And as the number of trips I had to make to the local USPS showed, I was very wrong.

The same principle, I’ve found, applies to coding. Writing a large program -- large being a relative term, of course -- is very similar to building a computer. Just like you can spend hundreds of dollars on a top-tier, overclockable, 16-core monstrosity of an i7 processor, you can spend hours or days trying to optimize one particular algorithm or subroutine. More importantly, as I discovered, you can very easily spend a lot of money buying a great set of parts, only to find out none of them are compatible with each other -- just like how you can, over the course of writing a large program, discover that you expect data in a JSON format in one part of the program but send it in XML in another. It’s important to spend a nontrivial amount of time just planning out your program to ensure you don’t have headaches later on.

At any rate, after a lot of swapping of parts, my computer is now about 20% of the original weight and easily half the size, and is now sitting in my dorm room, acting as a source for my TV. Eventually, when it comes time to replace the graphics card (which is now 2.5 years old and struggling to push out Skyrim at 30 fps on 4K), or when I decide that I want to try a different case, I’ll have my compatibilities triple-checked before I place my first order -- and hopefully, if I’m very lucky, it’ll be just as easy as the first time I ever decided to build a computer. 


The views, opinions and positions expressed by the authors and those providing comments on these blogs are theirs alone, and do not necessarily reflect the views, opinions or positions of UT Computer Science, The University of Texas or any employee thereof.