Learning to Code

What it takes to code and resources for finding a place to learn coding.
Python code for the exponential function e^x

Many of you know that Maxwell’s Board recently conducted a survey to find what people in the area want from the library. One of the responses to a question on what sort of programs patrons would like us to offer was a desire for a program on learning to code. Though such a program is beyond the scope of what we’d be able to offer during this time of having to offer our programming remotely, I thought I’d share a few thoughts and links related to getting started on learning how to program.

I’ll start with a link to a 2018 article by Joe Morgan in Slate contesting the widespread notion of coding as the “new literacy.” He points out that the most important skills to learn for success in coding are not those that involve mastery of any programming language but, rather,

  • Problem solving
  • Engaging deeply with issues
  • Creativity
  • A sense of what constitutes quality

I do not entirely share Morgan’s opinion that these skills should be acquired without also exploring how to encode algorithms in a programming language, but I agree with him in thinking they are more important and central than any fluency in a programming language.

Thinking of Morgan’s skills as prerequisite to (or, at least, corequisite with) learning to code, Larry Wall’s1 list of the three virtues of a programmer are some skills/attitudes that one should cultivate while learning to code. They are:

  • Laziness
  • Impatience
  • Hubris

While those might seem to be vices rather than virtues, Wall held that good code would result from keeping them in an appropriate balance. So, for example, an appropriate level of laziness (tempered by some pride in one’s work from hubris and by some impatience with the idea of not being able to mark a job as finished) would yield code that works as it should the first time (letting the programmer avoid the work of fixing problems) and is adequately documented (letting someone else handle the maintenance when it is needed).

Having looked at how to prepare for learning to code, where should you start learning coding itself? And what language should you learn?

Cameron Chapman’s article “15 Things You Should Know Before Learning to Code Online” has a few questions about how you learn that can help with deciding what sorts of resources to go after.

Carl Cheo has a a flowchart (“Which Programming Language Should I Learn First?”) that seems pretty good for deciding among 9 popular programming languages.

Over at Skillcrush, Scott Morris’s “80+ Ways to Learn to Code for Free in 2020” has descriptions of 80 sites for learning the basics. He conveniently sorts the sites into 10 categories:

  • General Coding Classes and Programs
  • HTML
  • CSS
  • JavaScript
  • JavaScript Libraries and Frameworks
  • Python
  • Ruby and Ruby on Rails
  • PHP
  • WordPress
  • Mobile App Development

1 Wall was the initial developer of the Perl language, and his list of virtues first appeared in Larry Wall and Randal L. Schwartz, Programming Perl, 1st ed., (Sebastopol, Calif.: O’Reilly, 1991)