On Self-Directed Learning and Learning to Code

When I was doing my undergrad some years ago, I initially enrolled as a Chemistry major. As I’ve alluded to before, I realized early on that it wasn’t for me, but I soldiered on for a year and took some of the Chemistry major’s required classes that looked like they might be useful. One of those classes ended up being “Intro to Computing”, which should really have been called “Intro to Object-Oriented Programming” or “Intro to Java”. For a semester I slogged through lectures and assignments, spent hours trying to figure out why my stuff wouldn’t compile, and cursed my version of Eclipse (which tended to crash just before I hit command+S). In the end, the class went ‘okay’, but certainly didn’t help my GPA (it didn’t hurt as badly as the F I got in Ordinary Differential Equations in the same semester, but that is another story), and I didn’t really feel like it was something that I would/could use in general day-to-day life.

Fast forward five or six years… a friend sent me a postcard at my parents’ house, and because writing post cards that your friends’ parents might read can be awkward, he wrote it in ROT-13, helpfully starting with “Dear Allison” and signing his name at the end. Decoding it by hand (since I hadn’t thought to google and find rot13.com) was kind of a pain, and I wanted to impress my friend, so I broke out my old java textbook and wrote myself a (very) simple decoder. All the punctuation was wonky (because I couldn’t really think of how to deal with it), but it did a reasonably good job, and I was super proud (as was my friend). Looking back at the code, I’m still mightily impressed at past Allison’s skills!

I’d always been interested in programming, and enjoyed playing around with computer, but I’d never really understood how people learn these things, how one comes up with ideas to tinker with, and how to get started. Since the original ill-fated adventure with Java, I’d pretty much written off programming as something other people did. Once I had a reason to use it, and discovered how satisfying it was to solve a problem with something I’d made, my tune changed. Since then, I’ve learned Python by hacking in Starbucks next to Paul (while he learned it next to me), and since moving to Toronto last year, I’ve taken a bunch of Ladies Learning Code workshops and expanded my skill set. I’ve also discovered I really like programming.

That said, I still find self-directed learning tricky: I try to think up ‘stuff’ to do that’s manageable at my skill level, and I get stuck. Programming Challenges always seemed too hard or obscure or mysterious for me (though now that I’m a relatively adept Python programmer the Python Challenge seems much more accessible). I’m super lucky to live with a programmer who also has a teaching background, who can suggest ‘stuff’ for me to tinker with, and ways to expand what I’m doing as I learn more. When we were learning Python together, he was writing code to do complicated load testing stuff, while I was making a text-based lemonade stand game; now that I’m trying to sink my teeth into PHP, he’s proposed a race-across-Canada game, with a variety of parameters for me to start with, and a bunch of ideas for ways I can add complexity as I get more comfortable. A lot of coders seem to be self-taught, and maybe they’re just more creative than I am, or maybe they decide to learn something because they need it, rather than learning because they want to know stuff… I don’t know, but I’m glad to have some direction in my self-directed learning, and I hope as I become more adept I’ll be able to help others with theirs.