Learning Programming

I want to code. Who will teach me? How will I learn? Should I even be learning to code?

Learn to Code, or Learn Computer Science?

What do you care about: learning programming as a hobby, or a trade? Do you want to learn to think? Do you want to get into a tech business and do project management, working with developers? Do you want to learn real computer science? Should everyone?

What does it even mean to “learn to code”?

There are a lot of opinions out there. And some disagreements too! Here’s a sampling:

Exercise: Try to find common themes among the articles above. In particular, determine whether the phrase “Learn to Code” has any widely accepted meaning, or if it’s devolved into some kind of meme.

Why Learn?

Now it’s true that many people think you should learn to code for the wrong reasons. Here’s a sampling of some dumb (or just off-the-mark) reasons, together with one from will.i.am that’s not half bad!

meanwhilecodeorg.png

Exercise: Read the entire post from which this screenshot came (it’s called “Meanwhile at Code.Org” by Bret Victor). Critique the quotes made by the Thought Leaders near the bottom of the article.

How’s this for a reason?

What You Will Need

If you do decide to “learn to code,” there are a couple points from Mark Guzdial’s article Anyone Can Learn Programming worth noting:

Keep in mind, too, that learning programming is hard and takes time and effort. You will run into other people that are way ahead of you but who’s to say you won’t get there? It might seem daunting, right? You might have hear about those folks that appear to ten times more productive than everyone else (the so-called 10x developers). Should you be in awe of them? Wellllllll, Jessica Kerr says, correctly, that most of the time, the reason for hyperproductivity is not what you think.

Exercise: Read Kerr’s article.

Also, watch out for Impostor Syndrome.

And watch out for Stereotype Threat as well. These things can get in the way of learning.

Where Can I Learn to Program?

There are many tutorials, walkthroughs, academies, and online universities out on the web that aim to teach you the basics of programming. A few have gotten quite popular:

The Modern JavaScript Tutorial is good.

Marijn Haverbeke’s Eloquent JavaScript is a wonderful online, interactive book. You can code right inside the book.

Or try a class from Coursera, Udacity, Udemy, or edX.

Or a traditional university. Or friends and mentors.

Here’s a good one: Dan Shiffman’s video series Code!. Here’s the trailer:

Check out the entire video series (as a YouTube Playlist).

What Makes a Good Learning Environment?

Time for a brief field trip! Khan Academy introduced a computer programming section back in 2012. Their Introduction to JavaScript: Drawing and Animationcourse goes through the following topics:

  1. Intro to Programming
  2. Drawing Basics
  3. Coloring
  4. Variables
  5. Animation Basics
  6. Interactive Programs
  7. Text and Strings
  8. Functions
  9. Logic and If Statements
  10. Debugging Programs
  11. Looping
  12. Writing Clean Code
  13. Arrays
  14. Objects
  15. Object-Oriented Design
  16. Becoming a Better Programmer

There are quite a few good things:

But there are some pretty big drawbacks:

But what makes a good learning enviroment, in general? What should learners be aware of? Bret Victor has some thoughs. Please read (and interact with) his excellent essay. (To be fair, it addresses Khan Academy’s approach back in 2012, but the thrust of the essay remains timeless, and it’s not really just about KA anyway.) It is a long read, but powerful.

learnable-programming.png

Exercise: Read this essay.
Exercise: Read this essay again.

So What is Programming Anyway?

We didn’t forget to define the word “programming”; we just wanted to make sure we’ve seen enough code before attempting to do so. When studying programming, it’s a good idea to know what cetain words are referring to. These are pretty useful to know:

Don’t get too hung up on definitions

Language is fluid, of course, and a lot of people often misuse technical termninology. But it’s helpful to keep in mind the intent behind these terms. Don’t be a jerk when correcting reminding people of subtle differences in wording.

Actually, there’s more to study that boring definitions. We need quotes! Browse the Wikiquote page on programming for some good and bad and sometimes humorous takes.

A Parting Shot, But An Important One

Remember that programming is not an end in itself. Computers should be used to amplify human thinking. Simply programming does not make you a better thinker.

...children can learn to program and that learning to program can affect the way they learn everything else. I had in mind something like the process of re-empowerment of probability: the ability to program would allow a student to learn and use powerful forms of probabilistic ideas. It did not occur to me that anyone could possibly take my statement to mean that learning to program would in itself have consequences for how children learn and think.

Seymour Papert

Summary

We’ve covered:

  • A bit about what people mean when they say “learn to code”
  • Good (and bad) reasons for learning to program
  • Growth vs. fixed mindsets
  • Impostor syndrome
  • Where you can learn to program
  • Some good and bad things about Khan Academy’s approach to programming
  • The difference between a program and an algorithm
  • That learning to program does not magically change how you think