Misframe

Jul 9, 2014

People-taught.

I started programming in 9th grade. It wasn’t completely new to me. I knew how to make websites with simple HTML and CSS, and I knew how to code simple things like menus in Flash using Actionscript. I also spent a lot of time working with VMs, content management systems (Joomla, etc), and LAMP in middle school. I was not new to doing stuff with Bash, either.

I went to a magnet high school. And that fact was very clear on the first day of my computer science class (an accelerated CS class – I thought I had a decent background), after I got zeroes on all three quizzes. That was a shock. I’m pretty sure I was always intimidated by that class. Everyone seemed to be ahead of me. I remember someone asked (during orientation!) what version of Java we would be using in class. I remember thinking, “am I supposed to know about that already?!” The only thing I knew about Java was it had a coffee mug logo. I felt like I was trying to catch up the entire time.

Tenth grade was a bit easier. I took AP Computer Science, and learned a lot about queues, lists, trees, and more. This is when I was taught (but didn’t really understand) Big-O. By the end of APCS, I had most of the fundamentals down.

In 11th grade, I was supposed to take two semesters of parallel programming. The first was taught using C, and I learned about pthreads, pointers, segfaults (fun!), and all kinds of low-level goodness. My teacher, for some reason, decided to change Parallel II to “Web Programming.” I was a bit annoyed. Parallel II was supposed to be about running programs across multiple computers. I got over it pretty quickly, though. I liked web stuff. I was going to actually learn PHP and JavaScript!

It was great timing. I learned how to use JavaScript, found out about Node.js, and found MongoDB. JavaScript everywhere! And did you see how easy it was to write a web server?! WHOA! It was life-changing. I grew up thinking Apache, lighttpd, and nginx were how web servers were written, and that they were all incredibly complicated.

I’m really glad I learned web programming that semester. The following summer I started interning at a local digital media agency doing lots of JavaScript stuff.

I didn’t take a computer science “class” during my senior year. It was a class dedicated to working on my tech lab project. I called it a “Heterogeneous JavaScript-based Distributed Computing Platform” or something like that. Basically, you take CouchDB’s map-reduce stuff and inject it into a web browser. Yes, it was really silly :).

The following summer I took my Node.js-fanboy-ism over to FoundationDB where I worked on the Node.js client bindings. First (and last!) time I used C++, and I got to understand V8, libuv, and Node.js much, much better.

I learned a lot of CS in school, but I stopped taking computer science classes over three years ago. And my internships were usually only a summer long. So, did I learn everything else on my own? Am I self-taught?

No, I am not self-taught. I am people-taught.

I spent years on WebHostingTalk (I signed up on 07-13-07, but I used to lurk often) reading through posts. I saw people asking and answering questions about problems I didn’t have, but found myself having later on. I remember opening a support ticket with my hosting provider telling them two of my hosts couldn’t talk to each other. That’s when I was told subnet masks actually matter :-). I have dozens of support tickets with my current provider asking what now seem to be the silliest questions. I drew diagrams and asked, “would this work?” I didn’t take a single class on networking or Linux administration, but by now I think I have a better grasp of this stuff than anyone who learns this as an undergrad.

A few weeks ago, it took me half a week to replace a storage engine in a database. Yeah! The fact that I was able to do it is mind-blowing, since I never really looked at a storage engine before. But it wasn’t entirely foreign to me. Many of the concepts I used came from a couple of months at FoundationDB.

I think I’m learning a lot more from others right now than ever before. I’m getting lots of code reviews at work, I’m always finding excellent blog posts, videos, meetups, and conferences, and learning new things. And it’s a lot of fun. I feel like I’m given maps and directions from people and I just go out and explore new locations.

So, yeah. I’m not self-taught. Most of the neat stuff I know most often came from someone saying, “check this out,” or simply mentioning it briefly. Pretty cool, right?

Next read these: