Here’s a random assortment of things I learned this week at Hacker School (HS from here on out). You can probably apply some of these to yourself as well (just substitute ‘I’ for ‘you’), but I’m not gonna make that kind of assumption about you. (No, Vice, I’m NOT too old to make small talk, and it’s rude to assume that about me. You don’t know me.)

  1. I’m not as unknowledgeable as I think, even about something as new to me as programming.
  2. I know more about some things, and less about other things, than other people. 100% of the time. (Example: I knew how to take the NYC subway. Many others did not, but they did know a lot more about programming. We learned from each other!)
  3. Corollary - Because of this, it’s okay to ask questions. (Like, what’s a corollary? It’s “a statement that follows readily from the previous statement.” Was it necessary that I use this to make a point? Probably not.)
  4. I am not as smart as I think (or thought, before I started). There is so much more to learn - specifically about programming, but that can probably be generalized too.
  5. Other people are by far the best source of learning. And they are willing to help - everyone feels like they don’t know enough about something and has been in that position. (Could be a generalization, but I think it’s a fair one.)
  6. Teaching someone else about something - big or small - is just as terrific for learning. It helped me to actually talk out loud about concepts I’d learned, and pinpoint what I didn’t understand.
  7. “Programming” can mean a lot of things. When I started learning, I thought about programming in relation to Codecademy courses, my favorite websites/apps, or specific programming languages. Turns out it’s so much broader than that - with Python (the language I’m focusing on at the moment) you can build hugely popular apps, create the system underlying the best-known visual effects studio out there, forecast the weather, or just do some math. I’m barely scratching the surface, and that’s one language, of dozens, all of which are implementing complex and often non-intuitive core computer science concepts. It’s a hard and extremely broad discipline - but because of that is much more fascinating than I’d expected.
  8. Related - learning a programming language is a lot easier for me than learning to be a programmer. It’s kind of like learning Spanish (or any language) - I learned all of the words and syntax, I know how to string them together to make basic sentences, and I can find a library in Spain. But I could not hold a single conversation with another person in Spanish, or live in Spain, or write a book in Spanish. (The analogy doesn’t fully hold, but it’s close enough. There’s a lot more to programming than the language - the language is just a means to solve problems.)
  9. Reading about something in a book felt like I was just absorbing knowledge - it’s a powerful feeling. I spent much of the first two days reading textbooks and typing out code. But it was so much easier than trying to solve a problem using what I’d learned. And it’s doubly easier than working with another person on that problem. But it was vastly more valuable for me to work with other people - usually of very different levels of understanding (and usually more experienced than me). And like I said, learning from and teaching other people was a great source of learning for me.
  10. I learned so much from trying to build my own simple version of Git, and working with others on it, than anything else this week. So much so that it could be one or several blog posts. A small project - even/especially one that isn’t shiny or fully-functional - can be such an incredible way to learn how you work, what you need to improve, and how much really goes into building real programs. (If you’re unfamiliar with Git - and even if you aren’t, it’s still a confusing tool - it’s basically a way to track changes in your code over time. There’s a lot more to it, which is why it’s so hard to build, but that’s the general idea.)
  11. Related - and this is definitely something HS emphasizes - it’s so much more important to understand the underlying technology than how to implement it. There are a lot of web frameworks - essentially, a collection of code that makes developing complex websites easier - out there. They are often intricate/seemingly impossible to understand. I tried to learn and use one (Django) on my own, before I started at HS - it would’ve been such a better use of my time to understand what it’s actually doing than try to first make something with it. Had I known all of what it actually did, I would’ve used something simpler (like Flask, which I am learning about now.) This is also a general life thing I’ve learned about myself - I’m much more comfortable understanding something from the ground up than accepting something works and not knowing what to do when it doesn’t.
  12. These two simple blog posts have been amazing just for processing what I’m doing and learning. Even if I’m the only person who ever reads them, it’s a worthwhile endeavor.
  13. It’s really hard for me to organize my thoughts. I could use some help there. (e.g., Is it lazy that I just threw it in a list, and didn’t formulate thought-out paragraphs about it? Maybe. Just wait a few months, and I’ll be the next Buzzfeed/Vice/Upworthy/Dose.)

Also if you’re new to programming, HS has a great manual - ostensibly for people going to HS, but I think it can be applied to anyone at any level interested in programming.