I’ll come out and say it: programming is cool right now. And as much fun as it is to be a tech hipster, I have to admit that before I got to college I couldn't've cared less about coding and was actually slightly afraid of computers. (My $300 Toshiba would take so long to boot up I ended up writing a comical number of my college application essays on my phone.) I was lucky enough to transfer into computer science in the Fall of 2013 right before things got weird (refer to the remnant steam in the UTCS Facebook group for more details). So I wasn’t here before it blew up. Despite that, I rode the hacker bandwagon all the way to San Francisco for a summer and all the way back to Austin in anticipation of this bubble thing people keep bringing up. Here’s a little nugget of what I’ve learned.
Just as I was, everyone looking to get a slice of the programming pie now. Whether it’s a MakerSquare alum, a stay-at-home mom on Treehouse, or President Obama, everyone seems to think we should learn to code so we can learn to think. But how were we learning to think before we learned to code? If I were to describe to you the precise way in which I want you to do a complex task—say rob a bank—how much room for error would my instructions have? If we could have you test out my instructions in a number of alternate realities, how, why, and in what scenarios would you fail? What are the steps involved in this robbery? How many cars, bags, and people do we need? How can we make sure this happens as fast as possible? Which bank is the best to rob for our needs? There’s a tradeoff between reliability of the operation and the cash payout. There’s a tradeoff between number of people involved and the speed at which it can be done. Just like there’s a tradeoff between performance and memory usage. Just like there’s a tradeoff between redundancy and storage size. Programming is so much more than pushing keys on a keyboard and crying after the thirty-fourth build fail. Programming is economics. It’s dealing with scarcity and maximizing efficiency. It’s a different way of solving problems that you solve in your daily life.
Hopefully, you don’t rob banks—at least not everyday. But surely you do laundry maybe at a laundromat or at the laundry room in your building. Your all-time low moment arrives when your West Campus lifestyle has lead you to need to do all of your laundry in the next 90 minutes before your homebound bus leaves for Thanksgiving Break. It takes 30 minutes to wash, 60 to dry. You have 15 quarters, 3 loads, and little time to do too many calculations. Concurrency, batch processing, throughput, latency are all concepts and considerations underlying the way you’d go about solving this problem. A timer (interrupt) on your phone tells you when to move clothes from one machine to the next while you do other chores. I’m sure you’ve packed clothing in a suitcase before. Were there ways to eliminate wasted space? Could you reduce internal fragmentation by stuffing your shoes with socks? Did some folded configurations work better than others?
The point is: if you’re already anxious about how awful this semester’s going to be (especially if you’re taking OS lord have mercy on your soul) take a step back, breathe into a paper bag, have a breakfast taco, and realize that most problems that you’ll be solving in the next few months are problems that in some way or another you’ve seen and solved before. You've been solving your problems in a programmatic way long before "Hello World!" You don't have to have programmed all your life to be a good programmer now. Besides, if you’ve made it to this point, you’re probably better at this than you think.