1/ âWhat programming language should I teach?â is the least productive question to ask in computing. Thereâs a good reason: itâs the wrong question to ask. The reason language wars feel pointless is that theyâre a symptom of this problem. Hereâs why:
2/ Curricula are never designed in isolation. All curricula, for anything, have to consider at least two things. First: goals. These include learning objectives, but often go farther (like âstudents must eventually get jobsâ).
3/ Also, constraints. The constraints dictate what the admissible set of solutions is. Constraints vary across both space (different places) and time (different years). Without stating constraints, finding solutions is meaningless.
4/ Also, methods. Whereas, programming languages are a solution-space artifact. You donât *start* with them, you *end* with them, relative to everything else. So starting with the âwhich PLâ question is guaranteed to lead to talking at cross-purposes.
5/ The real problem we have in CS Ed is that we donât think enough about how we can relax the constraints, widen the space of methods, future-proof the goals, etc. So we go from one blub language to another per decade: Pascal, C, C++, Java, PythonâŚ
6/ Here is my highly scientific visualization of the progress weâve made in computing education. Whatever languages make easy become the default and determine a lot of other things. What languages make hard get ignored because folks are afraid to make CS hard for students.
7/ For a long time, educators found curricula like SICP hard. (Now, theyâve just stopped talking about it.) This got translated to âScheme is hardâ, because people can only see things through the overly simplistic lens of programming. But:
8/ What they missed is that SICP and other curricula, typically coming out of FP, had gone well past the ârubbing two rocks to get sparksâ to the âigniting boostersâ stage. It was blub all over again, at the level of curriculum, not language features.
9/ This is the problem with âlanguageâ discussions. We need *curriculum* discussions. If someone asks you âwhat language should I useâ, please donât provide answers. Please ask questions. Good questions. The right questions.
10/ A lot of people reading this are techies who are sometimes asked to help out in schools. I beg you, please watch at least until 8m30s into this talk, âCurriculum Design as an Engineering Problemâ. Youâll get it. Itâs written for you.
The âWhat language should I learn?â is the most common question I get asked by those who want to get into coding, for 40 years of my life now. It stems from the belief that when they get a job, theyâll only ever use what they learned in school.
Because if weâve learned anything from the history of computing, itâs that nothing ever changes.
Your answer is in context of curricula. I wonder how you would change that for 1:1 for a third grader? About to start teaching my daughter. Am comfortable with Scheme, Python, Scala, C++, Prolog, Haskell, Starlogo, javascript, perl; I should be able to adopt anything you suggest.
Why only one? Teach 5 different with maximally different paradigms. For each lang write simple parser and meta circular evaluator. Curious students will extend it in any direction they want.
I started teaching programming when I inherited Peter Landinâs courses, around 1979. Heâd invented blackboard notation. A flexible, extensible notation to teach programming clearly. Donât care (even in coursework or exams) what implemented programming language students use if any