When I was in kindergarten, my mother found out that there was no full-time computer lab teacher at my school. This was Austin in the early ‘90s, and we had a lot of parents who worked at tech firms like IBM and Dell, but kids were only learning how to touch-type. My mother and another woman got together and ultimately ran the computer lab full-time.
At some point, the city moved all the kids in my neighborhood to another school that was marginally closer, and my mother appealed to the school district for a transfer back to my original school. I got the transfer, probably only because she was a teacher there. At the time, I wanted to stay there, but I thought it was unfair that I couldn’t take a bus like the rest of the kids. My mother or one of the other parents who also managed to get a transfer, would carpool every day to get us to school.
At the end of every day, I waited in the computer lab for my mom to be ready to leave. I spent so much time in the labs, and around computers generally, that at times my teachers would even ask me for technical support. My story is probably a lot like many of my peers in computer science. An INTJ who knew he loved computers at first sight, and couldn’t learn enough about them. I was also lucky enough to have all the time in the world to spend with them.
I realized just how uncommon my experience was in middle school. Most kids had never had the same exposure to computers. I couldn’t believe that anyone wouldn’t know how to use Microsoft Word or Excel, or wouldn’t type at at least 50 words per minute (I was pushing 80-100 by the end of middle school). Most of the people I considered my close friends in high school were people I’d never met in person. I spent almost all of my time on the internet on IRC, forums, or some other pre-Twitter social network. In my junior year, I got a cell phone for the first time. I saved 7 numbers in it, one of which was my own.
I found programming earlier than most, I loved it, and I poured countless hours into it. But that’s not for most people. I spent my childhood in front of a computer screen. For most, that’s a tragedy. For me, it’s a guaranteed job when I graduate, and a passion I’ll never grow tired of. But you don’t have to be that dedicated to benefit from learning programming.
Fast forward a little ways to college. I was ready to drop the computer nerd thing, and do something else with my college career. I was accepted to the University of Texas as an undeclared Liberal Arts student, where I bounced around between a lot of different theoretical majors within the Liberal Arts department, without ever picking one. Philosophy, psychology, economics, government. They all interested me at one time or another, but ultimately I couldn’t see the path to a career with any of them.
I truly value the time I spent in the Liberal Arts. I read Nietzsche. I translated the Aeneid. I wrote essays every week. I learned about Maslow’s Hierarchy of Needs. I even had a class where I role-played in ancient Athens, and delivered persuasive speeches. It was fun. I used to answer questions from my professors all the time, and even get in animated discussions with them in the middle of class if I disagreed with them. I’ve never had such an engaging classroom experience since switching to computer science. I’ve often thought back on this, and wondered if I made a mistake by leaving.
Just like writing, painting, or movie-making, programming is a means of creative expression to me. It’s a means of producing something that other people can see and enjoy.
You wouldn’t know it from the classes computer science students are forced to take, though. Algorithms. Operating systems. Advanced systems architecture. Logic. These classes beat you over the head with something that drives me insane: the idea that there is a list of criteria that you must learn to be initiated into the cult of computer science. If you don’t know what the Big-O of Quicksort is, or why the hell you’d ever want to know that information in the first place, you’re made to feel like an idiot.
I made my first website in second grade. I started a Photoshop tutorial site in sixth. One time in high school when I joined an IRC channel full of people I wanted to meet, but who only spoke French, I spent the afternoon writing an IRC bot to translate for us. I hate to say it, but I was better at computer science than my computer science teacher in high school. I am the quintessential computer geek. But no one gave me permission, nor did anyone make me memorize a bunch of formulas or stupid logic problems. I just did it because I wanted to learn how to make stuff. I didn’t care if it was a little ugly looking, at least I was making something. Sometimes I write shitty code. But most of the time, no one dies!
Don’t idealize being the programmer with all the degrees and certifications in the world. For God’s sake, please don’t go to college to learn Java and work at Google just because of the paycheck. We need biology students, musicians, writers, politicians, surgeons, and thousands of other kinds of people. When you have other areas of expertise and passion, and you also know something about programming, that’s when things get sexy.
I will distill down for you what I’ve gotten from my college computer science education: I’ve been given the Strunk & White of computer science. (If you don’t know what Strunk & White is, you were definitely never a liberal arts major) I have all the grammatical rules, usages, and style tips for how to write code. But as anyone who’s ever read Strunk & White knows, it doesn’t exactly put the pen in your hand and make you write. You learn everything about writing in a very succinct, clear style. Yet somehow those memoirs don’t just flow on their own.
Let me say this another way: If I ever run a company, I will never hire a single person who thinks their CS GPA is their best asset on their resume. I will hire people with CS degrees, but only if they show their dedication to it outside school. Why? Because those are the people who I guarantee know how to create real-world value with what they do. If you don’t graduate with a CS degree, but you build a bunch of cool stuff along the way, you’ll have 1) made things that you can be proud of on their own merits and 2) learned how to make something from scratch, without anyone giving you permission or forcing you to do it.
I often hear people who aren’t programmers say, “I really want to get into web design, but I just don’t have the time/don’t know where to start/don’t think I’m cut out for it.” Here’s a little secret: web design is fuck-all simple to learn the basics of. If you can write a sentence, you can write code. I’ve literally taught a friend of mine the basics of HTML in a few hours. It’s just like almost every other skill in life: 10% learning about it, 90% doing it.
And soon enough, if you aren’t able to understand at least the basics of coding, you’ll be as fucked as you would’ve been 100 years ago if you didn’t know how to work in a factory. Why is that? Well, in our age of sound bites, algorithms, and 1’s and 0’s, efficiency is key. If you can write code, you can do things that go beyond your natural human abilities, because you’ve made something that can create on its own. Why pay someone to enter numbers into an Excel spreadsheet if I can just write a piece of code one time that does it? If everyone else is doing it, you’re lagging behind if you aren’t.
Learn a little about programming as soon as possible. Try it out for yourself to see what it’s about, and if you really hate it, move on to painting, writing, chemistry, rocket science, or anything else that strikes your fancy. But at least get some fundamentals. You’ll kick yourself in 20 years if you don’t.
I want to demystify programming for people. I want to make it clear that anyone can do it.I’ve learned exponentially more in my own free time doing side projects, and web developement internships, than my college classes. The only real thing that college provided me was the pretense to get my first internship at a great company. Don’t think for a second that because you don’t have a computer science degree, that you can’t code. It’s a lie, and deep down you know it.
I’ve worked with robots playing soccer, an RC car you could control from your smartphone, and now an interface to take voice commands and translate them into commands for a robotic hand. I’m at the end of my undergraduate career at a top CS school, and yet, every piece of code I’ve written in my whole life, you could learn how to do for free on the internet.
I’m obviously biased, but I’m not the only one who believes you should learn programming. Reddit co-founder Alexis Ohanian described coding as “the most important skill you can learn today” when he came to our campus last week. I also really like Chris Bosh’s newest Wired editorial where he encourages kids to learn programming, and reveals he was in a computer graphics club in high school. Another awesome story I heard about was an artist learning to code by the JFDI (just fucking do it) method, making 180 websites in 180 days, and making them public for anyone to see. I have to give her a lot of credit. I would never have done that.
Check out w3schools, Code Academy, Python Challenge, Howtocode.io, or if you’re lucky enough to live in Austin, sign up for Maker’s Square. If you get lost, Google it. If that doesn’t help, Stack Overflow it. Get on some IRC channels and Google+ groups. If none of that works, reach out to me on Twitter!
Update: Here’s a spreadsheet of hundreds of learn-to-code programs that might be right for you! H/T @mkapor.
Use programming to enrich the life you already live, and the passions you already have. I know you can learn how, because I did. Don’t write code just to write it — write it when it demands to be written.