I have this weird conceptual tick where it bugs me when the term “coding” is used to mean things that aren’t coding. I’ve been trying to figure out where it comes from: am I just being a pedantic engineer, or is there actually something here?
I think I’ve figured it out, at least partially. Let me use two examples: cooking and legos. (These aren’t perfect analogies, but hopefully they’ll help illustrate my point.)
Lego Webmaking: Build a lego house. Grab a whole bucket of legos and create the tallest structure you can without it falling over. Understand how pieces snap and unsnap together. Recreate famous photos in Lego form.
Lego Coding: Write those Builder’s Guides that come with lego kits and show you how to build things. Learn how to put together easy-to-follow steps.
Cooking Webmaking: Make an omelet with whatever leftovers are in your fridge. Stir fry some veggies and meat and serve over rice. Nomnomnom.
Cooking coding: Write recipe books. Figure out if you wanna divide the sections by ingredient (“Chicken”, “Beef”) or meal occasion (“Brunch”, “Appetizer”) or locale (“Italian”, “Indian”), etc.
Webmaking is not just the amateur version of coding. They are different skills. Coders spend all day thinking about things (like how you want to divide the sections of a recipe book for easy recipe-retrieval later) that have no baring on webmaking (cooking an omelet).
So why do I care?
Creating new awesome coders is a goal that companies should (and rightly do) think about. I totally support this goal — we have a lack of software engineers, especially represented amongst certain minorities, and this is probably indicative of some deep fundamental issues that should get resolved.
But I’m not convinced that coding is a skill that everyone should know, the way that I think that everyone should know how to search for information on the web. Here’s some examples of skills that you need to be a good coder, that rank pretty far down on my “everyone should know” list:
- Big O complexity
- Data structures
- Managing program complexity using abstraction
- Testing and testability
I think that your average citizen should learn how to manage program complexity using abstraction just after they’ve learned about scarification in stone fruits, feline tastebuds, and the lyrics to every Animaniacs song. (I can already see the lineup of angry engineers gathering pitchforks and heading to my door at this statement.)
I don’t want to create a generation of people who know how to write recipe books. I want to create a generation of people who reach into their fridge, pull out random ingredients, and know how to make themselves an omelet. Eating at home lowers your cancer risk. And though we need great recipe book authors in order to make it easier for everyone else to learn how to cook at home, we don’t need them all to be recipe book authors themselves.