Alli Rense taught herself HTML at age 12 and never looked back. Since then, she worked in web development and project management for the US House of Representatives (please don’t hold that against her), nonprofits, and startups. She cofounded a hackerspace in 2008 and put her English degree to use with the blog formerly known as Hot Guys Reading Books which gave her 15 minutes of internet fame.

“Everyone should learn to code!” exclaimed the Internet in 2013. While some disagreed, services like Codecademy and Code School are making the learning-to-code experience different from the days of reading thick programming books and attending classes.

But even with these friendly UIs and encouragement from the community, learning new concepts in coding–new languages, patterns, frameworks, or just learning to code at all–can be daunting, particularly when it comes to making your new knowledge stick. Here’s a crash course in how to prepare.

You Can’t Build A House Without A Foundation

Even seasoned coders can relate: Sometimes a new job or project requires learning an entire new language. This often comes along with a deadline, limited learning time, and additional pressure when something big (a job! a raise! a product launch!) is at stake. Most coders prefer the “dive right in” approach to new languages, which can lead to problems if the coder is missing essential information on the new language.

This can cause frustration, particularly when the new language just doesn’t seem to work the way the old one did, and programmers using new languages often follow patterns from the languages they already know, creating bad code that will need to be refactored later.
Experienced programmers do have a leg up on the n00bs, however: a frame of reference. They’ve hopefully already learned concepts of programming and have been thinking in if/else statements and other hallmarks of computer logic for some time, and they can apply those pieces of knowledge to learning the new language. The new online tools for learning programming emphasize the same “code first, learn later” approach that experienced coders prefer. While this approach does provide a way for learners to get over their initial fears of actually writing code and getting their feet wet, it doesn’t build the new skills onto any existing knowledge, which may make it more difficult to stick in a learner’s long-term memory.

In order to retain new skills, new and experienced programmers need to follow the principle of Elaborative Rehearsal, encoding new concepts by building on top of existing knowledge.

When I learned my first programming language, JavaScript, the only knowledge I already had to relate these new concepts I was learning came mostly from fuzzy memories of 9th-grade geometry class. Object-oriented JavaScript didn’t fit in with the bits and pieces of JavaScript I’d previously used to add little effects to websites. I would often learn something, gain what I thought was an understanding of it, and then completely forget what I’d learned a week later and become frustrated by the experience. Even after I had a solid grasp of the language, concepts not present in JavaScript (like “compiling”) would come up in conversations with the programming community and leave me confused.

The next language I attempted was SCHEME, for no other reason than my local hackerspace was starting up a group to study MIT’s SICP book. At first I loved it; the book covered some of those principles of programming I’d missed when learning JavaScript. But eventually I became so bogged down trying to figure out all the math they used for their examples I couldn’t keep up. I was drowning in Calculus. I didn’t have the prerequisite knowledge for the information, and I found the entire experience frustrating.

The information I did manage to pick up from SICP proved useful recently when I took it upon myself to begin learning Objective-C. Not only did I understand concepts like variables and functions from learning JavaScript, but I now understood the purpose of a compiler and I’d brushed up on math I hadn’t thought about since high school. Learning Objective-C was much easier than learning JavaScript because I had more information to build my new knowledge upon.

That said, some of the differences between the two languages tripped me up at times when I wanted to fall back into familiar JavaScript territory. I was still thinking like a JavaScript developer and trying to force the new language to fit into my existing knowledge, in other words, trying to code in Objective-C using a JavaScript pattern. If I’d had more experience with logical and abstract thinking, math, and communication I would have been able to attach concepts in Objective-C back to that solid framework of knowledge instead of trying to force the Objective-C shaped peg into the JavaScript-shaped hole.

I identified logical thinking, abstract thinking, math, and communication as the skills that build a framework for learning to code. Resources for learning programming languages are abundant, and resources for building a framework exist as well. You just need to know where to look. I’ve compiled a list of resources for each of the building blocks.

If You Can Think Logically, Then You Can Write Code

Computers are dumb. They do exactly what you tell them to do, no more and no less. Often when a computer isn’t behaving the way I expect, I remind myself it all boils down to ones and zeros. Reminding myself that the computer’s behavior is pure logic helps me gain perspective. Programming languages are based on logic, and understanding how an if-else statement works before attempting to code is essential. Forall x is an excellent resource for learning the concepts of logic. For more practice, play games like chess, soduku, and logic puzzles. A large portion of the LSAT includes logic puzzles, and you can find practice puzzles all over the Internet.

[Read More]

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s