Almost every night in the past two weeks, I’ve gone out and talked to beginners about their experiences learning to code.
I heard many stories of struggle: the pharmacy student who’d excitedly signed up for the HTML/CSS track at Codecademy last summer, but then had gotten stuck and quit. The financial analyst who had some entrepreneurial ideas, but then tried and failed to figure out how to turn her idea into reality. The graduating business student anxious about picking up marketable skills for the job market next year. The business director who wanted to be able to understand the language of some of his co-workers better. The PHD candidate in biology interested in learning how to analyze big data with python.
I began to wonder: what were the stories of people who were able to successfully learn how to code? What frustrations did they face when they were just starting out, and how did they get past them? What advice would they give to beginners?
My goal was to interview people with a wide range of experience levels. But when I reached out to my network of friends and acquaintances, I was surprised by the diversity of responses I got back.
I am incredibly grateful to Lenny, Darrell, Henry, Betsy, and Felicia for sharing their stories with me.
About the interviewer:
Linda Peng (@lpnotes) works at actionkit.com, blogs at this blog, plays violin when she’s not geeking out about web development, and has started spending her weekends experimenting with codebuddies.org to help people learning from code tutorials get un-stuck faster via virtual study groups.
Lenny Bogdonoff is a developer at The New Yorker and currently working on the New Public Arts Foundation. You can follow him @rememberlenny.
Betsy Cannon is a product engineer at Tumblr, Hacker School alumna, and collector of forks. She posts about math and forks at forklady42.tumblr.com.
Felicia O’Garro is a developer evangelist at NineFold and co-founder of Code Crew, a meetup in NYC for people learning to code. You can follow her @feliciaogarro.
1. When did you first start learning to code, and what technologies are you most familiar with?
LENNY: “I learned everywhere on the Internet. I got my first exposure to learn to program when I was in elementary school. My parents sent me to a computer summer camp. Basically it was a group of anti social geeks and a group of uber geeks. The uber geeks were instructed to teach the underlings how to walk through a week-long programming course. During the camps, I think I played more Starcraft than anything else. I went to that camp for three years. During one point I learned how to make a website on Dreamweaver.
I didn’t remember anything. The takeaway I had was stupid computer security stuff I learned. I learned how to install Trojan horses and access unprotected network settings on other people’s computers. This wasn’t so much programming as figuring out how stuff worked.
In high school I made a website associated with web comics. I liked Worms 2, the game, and started blogging on my own site. I remember being impressed by my Table layout skills and Sprite making abilities. The site I made back then Is still embarrassingly on angelfire. Link from 2004: http://www.angelfire.com/oz/tomato/HOME.html
Oddly enough, I didn’t touch programming during high school. I went through a rebellious phase and defined that I was computer literate. I decided to pursue art and design oriented subjects. Looking back, this was a great idea. I came back around to the programming by the end of college. I was working a series of hourly paid jobs and decided there must be some better way. I got familiar with WordPress, learned the rules of front end development, familiarized myself with HTML/CSS, and began from there.”
BETSY: “I first started learning to code in 2007 when my high school required me to take a Java class. I love data science (analysis and machine learning) but am also comfortable with back-end development.”
DARRELL: “Prior to actually learning to code, I started making websites with WordPress (2010). I would use pre-made themes and then spend hours trying to get the site to look how I wanted it to but usually I just ended up frustrated. I decided I needed a more fundamental understanding of what was going on under the hood. I started with Codecademy and then watched a lot of video tutorials on Lynda.com. But something just wasn’t clicking. I couldn’t conceptualize how everything actually worked together. Less than a year ago (Fall 2013), I decided to take the plunge and signed up for the Front End Web Development (FEWD) course at General Assembly and haven’t looked back. Following FEWD, I also took their Back End Web Development course. However, I still feel most comfortable on the front end.
HENRY: “I technically first started learning to code in Visual Basic when I was in middle school, but I did not really grok programming until I took my first CS class at Duke, where we learned to write simple 2D games using the Fang library.”
2. What was a turning point/lightbulb moment for you when you first started learning?
LENNY: “The turning point was when I realized people would pay me to learn. I could incentivize myself by getting people to pay me to work on their projects. I went on Craigslist and looked for people who wanted a website. I reached out to a few people and found someone who would pay me to make their website.
I told them I had no idea what I was doing and they could pay me less than they would a professional. The result was the ability to incentivize myself to learn. It worked really well. I have repeated this formula throughout my career.”
BETSY: “Recursion was one of the first times that I realized the power of code. Before that I would use loops and logic to brute force whatever I was working on. Recursion made me realize how much just one of two lines of code could contain.”
DARRELL: “The turning point for me was when I realized professional developers don’t actually know everything. They simply know how to find out what they don’t know. Learn the fundamentals, then learn how to break a problem down into its parts. Once you have a general idea of what you’re trying to accomplish with each step, chances are someone on Stackoverflow has already asked a similar question.
HENRY: “The closest thing for me is probably realizing that I could step through code one line at a time, or even one machine instruction at a time using a debugger. That is because reading code and understanding it has always been harder than writing the code to implement an idea.”
FELICIA: “My lightbulb moment was when I first started prematurely interviewing for full-time developer/engineer positions in May of 2013. During this period I learned that there was so much more for me to learn to become a proficient professional web developer including but not limited to the connection between the client and server side, more about object oriented programming, version control, testing and how to use client-side frameworks.”
3. What tutorials did you use when you were learning X, Y, or Z?
LENNY: “I started understanding the web through WordPress. It was a lot of trial and error. I didn’t really know where I could learn the foundation, so I took what I could get. I did tutorials, read smashing magazine articles, read through the documentation, and skipped a lot of stuff that didn’t make sense.
The best way I learned WordPress was through the example of other peoples work. I would use the same wordpress theme from WooThemes as my base and then I would expand from there. I got to the point where I would need to modify something and get stuck. That’s when I would go back to googling.
I remember being really stuck on how the wp_query function and the wp_walker class worked. I thought the code was pretty difficult and never really understood it. I would make alterations to the working code and stop when I got the preferred result.
I eventually started listening to all the podcasts I could find. Chris Coyier became an asset: I loved the ShopTalk show. Another thing that helped a lot was the history of the web. The more I understood the history of where web browsers used to be, the better I would understand why tuning where the way they were.
One thing that always stuck with me was something I read about successful programmers. The idea was that good programmers didn’t know the syntax any better, but instead were more likely to reuse code they wrote in the past. From this I started focusing my effort on learning frameworks.
When I moved away from rote memorization and started manipulating existing frameworks, I learned the most.”
BETSY: “After I had been programming for a few years, I decided I wanted to learn a functional language. I used Learn You Some Erlang for Great Good, which was a great resource, though I also recommend getting out of the tutorials and playing around the language some on your own pretty quickly and then going back to work through the exercises once you get the feel of the basics.”
DARRELL: “Codecademy started it all. I then moved on to Lynda.com for more in-depth topics. General Assembly’s Dash is pretty cool too. These all helped with the basics. However, I feel learning this way you miss out on a lot of the fundamentals. For a more fundamental understanding I would recommend an in-person class or, believe it or not, real books. There are lots of great programming books out there.”
HENRY: “The book that really helped me understand Objects and Object-Oriented programming was Head First Java. Topcoder exercises helped a great deal in understanding how to turn algorithms into running code.”
FELICIA: “I like reading books and watching tutorials afterwards to reinforce concepts. Some of the resources that really helped me in the beginning:
Chris Pine’s Learn to Program
Michael Hartl’s Ruby on Rails tutorial
Treehouse’s Front-End and Rails tracks
Code School’s Three for Five and jQuery tracks
Codecademy’s Ruby track”
4. What’s been the most frustrating thing about learning to code or being a developer (if you work as one professionally)?
LENNY: “As a freelancer, it’s understanding what the customer wants. As a designer, it’s coming to terms that what you make will not look the same. As a developer, it’s a middle ground between feeling like the problem is interesting enough to solve.”
BETSY: “Code only improves with review and by getting other people’s feedback, so I have to fight my perfectionist tendency to keep my code to myself until I’m absolutely happy with it and it’s exactly what I want to be. Products end up being better when you receive feedback early on and remain flexible.”
DARRELL: “When something isn’t working that should be! Spending hours reviewing your code only to find out you missed a bracket, comma or worse, spelled something wrong. Ugh, how annoying! However, that feeling when it works makes it all better!”
HENRY: “Dealing with poor APIs and poorly-documented APIs. The normal way that I learn an API is to skim the documentation to find the functionality I am trying to invoke, and then write a toy program to exercise the parts of the API I am interested in.
This helps me ensure that I understand the API. When the API’s are not well-documented, and I need to read the API’s source code to understand how it works and how to invoke it correctly, that wastes a lot of time.”
FELICIA: “I would say the most frustrating thing about learning how to code and being a developer is that nothing ever works the way you want it to. However, the good side of that is that there is never a dull moment and you learn a lot debugging.”
5. What advice would you give to someone just starting out?
LENNY: “Figure out what incentivizes you. Don’t give up. Show people what you make. Give yourself time to learn. Even if you don’t think you are learning, if you go through the motions you will absorb something. That’s a starting point.”
BETSY: “Choose a project to make something that you always wished existed, or something that you think is the most exciting problem ever. It’s easier to persevere when you have a clear goal that you’re excited about rather than the abstract learning for learning’s sake. You’ll pick up skills along the way and even more importantly, learn how to fit those skills together.”
DARRELL: “Don’t get intimidated. There is so much to learn and that alone can be overwhelming. I know it was for me, actually it still is. Learn to be process-oriented, not goal-oriented. There is no end point; there is no way you will ever learn everything that is out there to learn and that’s OK. If you know more today than you did yesterday that is all that matters. Baby steps really add up.”
HENRY: “a) Learn how to isolate bugs and create a Minimum, Complete, Verifiable Example. The ability to do this will enable you to ask proper questions on StackOverflow, which will enable you to get unblocked much more quickly when you get stuck.
b) Learn to use the command line to compile and run programs, before you decide to be permanently married to your IDE. There will come a time when you will need the command line to debug, even if you end up using an IDE for your day-to-day work. Learn to use Linux, even if you use Windows or OS X in your daily life. Unless you plan to work for a Microsoft shop for the rest of your life, you will be glad that you learned LInux.
c) There are (at least) two broad types of programming. One involves building applications and systems and the expertise is focused around designing and using API’s, as well as system architecture. The other involves writing programs to efficiently solve mathematical problems. Do not assume that being good at one means you will be good at the other.”
FELICIA: “Don’t compare yourself to others. Also, know that the learning-how-to-code journey is a life-long journey if you’re serious. A lot of people beat themselves up in the beginning, thinking ‘I’m so dumb’ and ‘I’ll never get there.’ But if you take the time to learn and focus, and think ‘If i don’t get it today I’ll get it tomorrow,’ you’ll get there. Also: ask questions, find a mentor, and don’t be afraid to get involved in the community.
I meet a lot of people who are intimidated to go to meetups like Code Crew even though we have an audience primarily for beginners. I’ve met people who don’t like to go to other meetups because they’re not as comfortable or good enough. Some people feel like you have to be at a certain level before you come out, and that’s totally not true.
Leading sessions for study groups and being an instructor/mentor has also been extremely helpful for me. When you’re stuck in a position where you actually have to teach someone something, you really need to know the topic.”
6. Why do you keep doing it?
LENNY: “I love it. I’m making things that people can use. It’s like art. But there’s a lot of practical value associated to what you can do. It’s always changing. There’s never a shortage of topics to learn. And you can infinitely create value.”
BETSY: “It’s fun! Being able to ask a question and then quickly distill an answer from hundreds of thousands of data points still blows my mind.”
DARRELL: “Every time I sit down to make something, I’m amazed with what I can accomplish. There are very few careers where you can continually amaze yourself.”
HENRY: “I carry the hope that some day, in some small way, I will create systems and tools that will make the world a more productive place.”
FELICIA: “I’ve always wanted to find a career that I enjoyed and that challenged me. I love to code, I love learning, and I feel a void when I’m not doing it. It’s a journey for me. Also, meeting folks is fun. You become a life-long learner.”
UPDATE #1: Over 30 retweets and 300 upvotes so far! Thanks to everyone who shared or upvoted!