Terrific article. I like the analogy to cooking. It’s been used before. One of the practice problems posed in an old book of mine was to write pseudo-code on how to boil an egg. It helps grasp the notion of explicitly sequenced instructions that don’t contain hidden assumptions.
I prefer the verb “to program” to the verb “to code,” though “coding” is kissed with sexy cachet now. Code is the fruit of programming (even if it’s rotten!). The yen to program bit me hard and early after I stumbled into the computer industry in ’85. At that time many if not most programmers, including the rock stars, were self-taught and came from other disciplines. I followed them, and look back with great affection on the various books that accompanied me in my struggles. OOP opened up my world. I miss programming every day, and count it a defeat that I didn’t manage to make a living at it.
Computer science is taught badly in the universities (as are many subjects). It’s the prisoner of career academics who inflate the subject and make it arcane in order to justify their jobs. The very term “computer science” is suspect. I equate it to renaming foreign languages “Language Science.” Programmers are not “scientists,” and for a long time they weren’t “engineers” either. They are linguists of a high order, translators even, and that’s high praise. The current terminology, like the curriculum, is full of specious overkill that misses the point: Good books, a compiler, and midnight oil can get you to programming if your gut burns with desire. (If it doesn’t, what are you doing in “computer science” anyway?) And the sad fact sought to be evaded everywhere is that such effort must precede any practical or creative application of the skills eventually acquired.
I’m viscerally at odds with the article’s thesis that “coding” can or should give way to “computational thinking.” A key quotation is this: “…The building part is often not the hardest part. It’s figuring out what to build.” No. Even a computer illiterate bass fisherman from Texas can pose a problem (such as the lost fire hydrants example). The programmer’s job is to estimate the feasibility of a software solution and, if his guess errs on the side of optimism, to write a program that may solve the problem using his tediously acquired mastery of Java (C++, etc.) syntax. Success is not preordained; it’s reached, or not, by setting out on the code journey.
The statement quoted above frays when you apply it to foreign language: “…The speaking part is often not the hardest part. It’s figuring out what to say.” Huh? After you figure out what to say, then what? Hire a translator? Google Translate? Please!
It pains me how tedium is demonized in our culture. Tedium of one sort or another underpins creativity, whether it be poetry, music, archery, painting, marriage, or programming. We’ll never generate a critical mass of “code literate” citizens in our country any more than we’ll generate a critical mass of bilingual citizens. As a society the will is lacking but for the elite. Acquiring such skills involves tedium and sacrifice, at least until such time as they may be instilled from the cradle. That would require a critical mass of intelligent parents!
(Copyright 2018 James Mansfield Nichols. All rights reserved.)