Hacker School Reflections
Fri 30 May 2014
When I arrived at Hacker School, I laid out the following goals for myself:
While I'm here, I want to:
Fill in some gaps (learn a statically typed language, use git correctly),
Finish a 'real' project,
Explore some cool stuff (right now I'm curious about algorithms, the Linux kernel, and distributed computing),
Generally sharpen my skills (I wrote in my application that I wanted to become a Python ninja).
So... how'd I do?
Learning a statically typed language
I set this goal for myself because I felt like, having worked mostly in Python, I wouldn't be a real programmer until I could use something besides a scripting language.
At Hacker School, I learned to read and write a little bit of Arduino code (a close cousin of C++), and I started learning about low-level concepts like pointers memory allocation (it helped that I read Code - a great book! - just before arriving). But I didn't spend nearly as much time on this as I would have liked because I got distracted by solving problems that arose in my existing projects.
Using git correctly
I've had some scares (most recently, I accidentally created a duplicate copy of every single commit in a repository), but overall I'm much more confident in my git abilities than I was when I arrived at Hacker School.
Finishing a 'real' project
I did that! I finished my Seating Chart Creator application and handed it off to my 'client' (the work was pro-bono and open source) earlier this month.
Learning algorithms
I set this goal because algorithms problems always seemed to involve solving fun puzzles, and I like doing that. I felt like I had missed out on something by failing to study algorithms during undergrad and then taking a less-than-satisfying course on them afterwords.
At Hacker School, I became intimately acquainted with simulated annealing, but I didn't really study other algorithms. I think I turned away from them because it felt too much like being a 'student' and not enough like being a 'real person'. After what feels like a lifetime of studying things that have no immediate application, I was ready to focus on more applied skills.
Exploring the Linux kernel and distributed computing
No and no. Maybe another session at Hacker School is in my future?
Becoming a Python ninja
Well, I wouldn't say I'm a ninja (aside: I hate that word. Why did I use it?) but I'm definitely much more well-versed in Python. I'm comfortable writing idiomatic code, know a bit of what's going on under the covers, and am comfortable diving into the source code when I need to know more.
My most satisfying Python learning moment? When I finally understood the syntax of doubly-nested list comprehensions:
x = [[1, 0], [0, 2]]
print [b for a in x for b in a if b != 0]
# prints [1, 2]
What else did I do?
So if I didn't convincingly achieve all of my goals, what did I do?
- Built an Arduino RC car
- Made a simple web app with Node.js and Angular
- Wrote a bunch of blog posts (never intended to do that!)
- Whiteboarded ideas for reducing a program's execution time
- Heard great tech talks from residents and visiting companies
- Got over my fears of asking for help on IRC and Stack Overflow
- Played other Hacker Schoolers' video games, then learned how they worked
- Received lots of great life/career advice from more experienced Hacker Schoolers, facilitators, and alums
- Went on many walks along the West Side greenway
- Made tons of great friends
- Became confident I could move to New York if I wanted to
Most of these 'accomplishments' are intangible, but I'm okay with that. When you're working, most things have some sort of deliverable that needs to be delivered at some specific time. Hacker School gave me the luxury of focusing on the journey itself.