Clarifications and advice for first-time programmers

A lot of first-time programmers ask me for “getting started” advice.

The need for advice is perfectly reasonable. Though resources like Codeacademy are fantastic, learning to program can be a daunting task.

The goal of this post is not to convince you of the importance of programming. Instead, I want to clarify some context and offer a few points of advice to first-time programmers. Think of it as a perspective that I wish someone had shared with me when I first started to code.

Clarifying the context

I sometimes refer to computer science, programming, and hacking interchangably, but I want to briefly note the difference among the three. Computer science is the most fundamental. It is the study of machines that perform computations– rooted in mathematics and electrical engineering, but drawing from the methods of the natural sciences. Programming is the craft of writing software. Good programmers are often good computer scientists; they keep memory, complexity, and other important considerations in mind when writing code. Hacking is the ability to write code quickly and resourcefully to solve a problem. You may not have to be good at computer science to be a hacker if you leverage a lot of libraries and search Stack Overflow. But, the greatest hackers are those who can write code quickly and truly understand computer science.

Entrepreneurship and startups have become lumped together with hackathons and programming in popular discussion, so here is my perspective on the differences. Entrepreneurship is not programming; it is the practice of bringing resources together to add value to society. There are some cool things to note about this definition. First, it includes social entrepreneurship, which also adds value to society. It includes non-profits, because it doesn’t explicitly mention profits as a primary goal. I do see non-profits as entrepreneurial, in many ways. It does not limit entreprenuership to technology. It doesn’t include the word “startup”.

For the definition of a startup, I like to refer people to Eric Ries’s definition:

“A startup is a human institution designed to deliver a new product or service under conditions of extreme uncertainty.” – Eric Ries

Startups and entrepreneurship don’t have to involve programming. Consider Wevorce and Hampton Creek Foods as examples.

A few points of advice

Now that I’ve clarified the context, here’s the “getting started” advice you might be looking for.

Start with a goal to build something. It’s not the same if you’re planning on chugging through Codeacademy tutorials. This is what happens to most of my friends who start Codeacademy:

  1. They go to
  2. They do a few tutorials
  3. They tell me they love it
  4. They stop doing Codeacademy

They don’t stop because it’s too hard; Codeacademy makes learning to code super-engaging, almost as good as having a teacher guide you from over your shoulder. People give up because other commitments catch up to them. They have to attend classes, they have to cook, they have to go to practice. Learning to program falls to the background behind day-to-day happenings.

The way to avoid this is to start with a dream of building something cool. Make it something you care about, something that maybe solves a problem for you. Dreaming of that cool app will help you muster that motivation you need to complete programming tutorials. Don’t stop until you’ve built that app.

If you’re at a high school or college that offers it, take the introductory computer science course. The earlier you start, the better. After Princeton University made introductory computer science courses no-PDF, many of my friends decided not to take it, lest it hurt their GPA. This is a grave mistake. There’s two reasons: (1) Introductory CS is hard if you don’t ask for help. Help is everywhere. Many of your friends have taken computer science, so they’ll know at least the basic concepts. Most TAs are extremely willing to help. There is no shortage of tutorials online. (Though there may be too many!) (2) You should take introductory computer science because it will change your life. People finish the course empowered.

Don’t tell people you’re “learning to program” for very long. After you’ve made your first (somewhat useful) program, just call yourself a programmer. It’s part of the definition that you don’t know everything there is to know about programming. Programmers learn from each other.

If you really want to be a good programmer, don’t take shortcuts. Learn all the techniques. Know the basics, even bitwise operations. You won’t think it’s useful now, but trust me, it’ll come up when you least expect it and then you’ll have to BS your way through a lot of things.

Google is your friend. When you have a question, google it. You’ll probably end up on StackOverflow. When first learning, don’t copy-paste code you find online. Rewrite it yourself. It will help you to understand how the code works.

Where to go from here

What’s next? There are many places to begin, but here is my recommendation.

  1. Commit yourself to learn programming, with the goal of building a cool app.
  2. Decide which language you will start with. I recommend Python because it is simple for first-time programmers, and yet it is the language of choice for veterans because of the large body of third-party libraries and documentation.
  3. Depending on how you learn best, start with Codeacademy or Think Python. Just do it– start to finish.
  4. Keep asking questions from there. Ask Google, StackOverflow, and friends who are programmers. There is a tutorial for (nearly) everything.
  5. Don’t stop until you’ve built your cool app.
  6. Keep programming and building awesome things!

These are just a few points of advice to get you started. If you’ve commited yourself to learn programming, stick with it. It will change your life. If you ever feel stuck, send me an email. Know me, don’t know me– it doesn’t matter. I love email.

Onward and upward.


Thanks to Sneha Saha, David Dohan & Charlie Marsh for their help in proofreading this article.

June 2013