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.
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?
"Education is what people do to you. Learning is what you do to yourself… what you need to learn, is how to learn." - @Joi— Ilya Grigorik (@igrigorik) July 9, 2014