Teach Foundational Language Principles (CACM May 2015, pp 30-31)

The authors point to teaching programming languages as opposed to logic as being a seriously weak spot in computer science education. While the “Hour of Code” has a lot of appeal and can introduce people to computing, they point out that new computing languages are continuously being developed to try to solve new problems. They make numerous examples and point to Dijkstra's classic “Go To Statement Considered Harmful” as examples of how understanding a problem has lead to new languages and new language structures.

The driving force is increased complexity of the problems computing is trying to solve. New languages and new language features continue to evolve to deal with these problems. What lies beneath these is formal logic and formal problem specification, something that is rarely discussed, certainly not in introductory classes. I'm not sure how to get around that. Some of the problems are only apparent after you've learned a bit of programming...or more to the point, after you've walked down the road of trying to do real computational and algorithmic thinking. At least in early instruction, it may be better to teach a little in a simplified environment first. I'm also trying to understand if/how I can compare this to what we do in physics where we always abstract problems into simpler environments we can solve, then add more sophisticated details and expose limits. I think it's a useful approach, particularly if we don't hide the fact that we're simplifying the problem. 

In any event, I do have another reading assignment from the SIGPLAN Education Board web site (http://wp.acm.org/sigplaneducationboard) for the “Knowledge Area” of “Programming Languages.”