6 ms·
Principles of Educational Programming Language Design
- throwaway71271 2y agoI disagree with the premise of the article. We absolutely do not know how to teach programming both pedagogically and andragogically, you can see that 80% of the students after getting their masters in CS absolutely can not program, do not understand computation, or the computer, not to mention higher order abstractions and their interactions. There are university students now in their 3rd year that paste chatgpt's javascript program into their c# code (also written by chatgpt) and ask me why is everything red and its not "working". I think it is a problem of designing for the 'average' student, which of course does not exist. The academia focuses too much on the abstract languages and constructs, but the reality is, the code will run on a man-made digital computer, which has certain properties, it uses memory in a certain way, has a clock, and is discrete, certain things are possible, and others are not. No matter how much we pretend, the equal sign (=) leaks through, and that in itself creates infinite confusion in people who pretend to get it. I think hyper individualistic approach is the solution. My daughter for example really dislikes scratch and various graphical languages, but she does really well with machine code and assembly and c. When we were working on a chess game, and she said: "WAIT! the queen is just rook + bishop", we went into how can we actually structure our code to express that. The journey is completely non linear. Sometimes we go back, sometimes forward. Hopefully AI + teacher can help with that. But the truth is, some kids get various concepts, like recursion or references and values, naturally, some never get it. And we are trying to teach them the same thing at the same time for the same duration, and just move on. SICP is best for some, PDP11 machine code for others, godot or roblox lua for third, and so on. The problem is we don't know which is which :) PS: Some of the things I made to teach my daughter: https://punkx.org/ https://punkx.org/
- toolslive 2y agoI concur, but it's even worse: I have a son who's doing a master in engineering (not CS). He had several programming courses in python and R. When looking at the example solutions, I noticed that whoever wrote them can't code, doesn't understand programming and certainly should not be allowed to teach it.
- throwaway71271 2y agoI never went to university, but in high school I had two different teachers, and one was hundreds of times better than the other. I am not really sure how teachers get hired, how they are interviewed and assessed, but the system is clearly not working; particularly in subjects that the learning curve is not a curve (like math, or physics or cs)
- crabbone 2y agoThis isn't what the article says... The articles says roughly that "while we know what to strive for, we are falling short of achieving our goals." It doesn't make the claim that we know how to teach programming. Now, unrelated to what the article says, I wanted to bring up this point: there are several ways we know how to teach something, and they apply better to different disciplines. For instance, the approach where we do lecture-lecture-lecture-seminar-test is what's used to teach subjects that require very little hands-on work (eg. law, history etc.) Then, there's lecture-lab-lecture-lab-lecture-lab-test approach, which is better suited to subjects like biology or electrical engineering etc. Some subjects have their own tradition of teaching that's mostly unique to them. Eg. painting is taught by assigning students to the professor's workshop, where they, basically, live for a few years. No formal "teaching" takes place, but the workshop's master interacts with students whenever he/she feels fit. Or, conservatory students who, usually, spend hours in one-on-one training with their teacher practicing their instrument of choice. What I think is happening in teaching to program is that because the field originated in math + engineering faculties, the tradition of how to teach it was borrowed from that space too: lectures + labs + tests. But, I think, that programming is more similar to painting in the way how it's done and how it could potentially be taught. So, instead of short-term labs and tests, it would be beneficial for the students to have long-term projects, possibly worked on in groups, where interaction with the teacher happens when the teacher inspects the work done so far and decides to provide feedback. The drawback of this approach is the grading that will not be defined formally and will be grounds for disputes between the students and the teachers. But, I still think it would've been better than the sequence of short-term assignments that must be worked on alone, because the later doesn't welcome and sometimes precludes the use of industry tools (s.a. version control systems, bug trackers). Essentially, today, those who are taught to program aren't taught how to use programming tools at all. Which is very weird to anyone coming from a school with a practical slant, where studying the tools would've been an essential part of the training.
- throwaway71271 2y ago> This isn't what the article says... thats not the only thing it says, but it does say it: > The conclusions to be drawn from the points made throughout this paper are reasonably obvious: We need a new language for teaching novices at secondary school and introductory university level. It also does states that somehow we know how to teach programming, and the discussion is around finding an incremental improvement given the learnings so far.
- aleph_minus_one 2y ago> No matter how much we pretend, the equal sign (=) leaks through, and that in itself creates infinite confusion in people who pretend to get it. I have a feeling that this issue might be amplified by the facts that 1. many US-American students are monolingual. 2. I have observed that many native English speakers are less interested in their own language than native speakers of other languages for their mother tongue. For 1: If you are used to learn multiple (natural) languages, you are very used to the fact that (nearly) identical words can have very different meanings in different languages (false friends). Examples: sensible [en] vs sensibel [de] ("sensitive" in English) bite [en] vs bite [fr] (a vulgar word) So for me there is nothing surprising about the fact that "=" means different things in mathematics vs programming languages that use = as an assignment operator. For 2: There exist quite a lot of English words that can have very different meanings depending on the context (arbitrary example: "left" can both mean a direction, and be the simple past and past participle of "to leave"). So what is so difficult about the fact that = means something different in a C/C++/Java/C#/Python program than in a math equation?
- lincpa 2y ago[dead]
- fny 2y agoRuby checks all of these boxes. Also, it’s extremely valuable to see multiple real world languages after initial exposure. A single teaching language is insufficient. Aside from syntactic differences, there are other important differences like memory management, typing, and threading. Also a teaching language lacks utility in the sense that it can’t be used for personal projects without reinventing wheels. Plus it would lack community and other external resources. So yes C++ is a horrible language to start with, but students should see it at some point. And yes maybe Ruby and Python aren’t perfect, but a student can find other resources online and maybe even work on a personal project.
- vitiral 2y agoComputers should be controlled (primarily) via a programming language (aka the shell). That way you are "learning" every time you want to do anything on your computer, and anything you do can be programmed. I prefer Lua for this purpose (and am extending it to be more suitable), but almost any "simple" language will do. Sh/bash are the original and IMO we should try to move away from them (pipes are still cool though)
- danielam 2y agoN.b. here is a brief article[0] in which Matthias Felleisen explains the reasoning behind the CS curriculum he developed at Northeastern University. [0] https://felleisen.org/matthias/Thoughts/Developing_Developers.html https://felleisen.org/matthias/Thoughts/Developing_Developer...
- rramadass 2y agoAn Educational Programming Language should not be too far removed from mainstream "Industry" languages. Complexity should not be completely hidden while teaching/learning Programming but must be gradually unveiled. I believe a multiparadigm language with a small "kernel language" to which you progressively add more layers for different paradigms should be the way to teach. The Mozart/Oz language i think shows the way - https://en.wikipedia.org/wiki/Oz_(programming_language) https://en.wikipedia.org/wiki/Oz_(programming_language)
- troelsSteegin 2y agoI wanted the author to pick a winner among approaches, but he's surveying and inviting new research. Most recently, Kölling has supervised the development of Strype, a frame-based editor for python. https://strype.org/ https://strype.org/
- zozbot234 2y agoThis article argues at considerable length that an "educational" language targeting complete novices should choose a keyword-heavy syntax like Wirth's Modula 2 as opposed to a terser one like C, prior to discussing more esoteric topics like structural editing, "frame"-like graphical representations of high-level syntax and such. Is there any significant evidence that the keyword-heavy syntax style may be easier to understand for novice coders, or is this just a matter of subjective preference?
- 082349872349872 2y agoA keyword-heavy syntax ought to make it easier to produce helpful error messages (I'm a fan of very terse syntax, but do admit that when you mess up with it, you probably typed something that's also syntactically, and often even semantically, valid — so you don't get as much support from the machine as a novice might like) > "the experienced user will usually know what's wrong" —KLT
- kmoser 2y ago> Is there any significant evidence that the keyword-heavy syntax style may be easier to understand for novice coders, or is this just a matter of subjective preference? I'm not sure how you'd subjectively measure that. Also, I don't think it's just the keyword-heavy syntax of language like PASCAL or Modula-2 that make them easier to learn than, say, C/C++. They also discourage quirky, terse expressions (favorites of advanced C/C++ devs) that can be difficult for beginners to understand. Beginners face an uphill battle: not only are they being introduced to abstract concepts like data structures and flow control, but they have to deal with the language syntax. You can't do much to alleviate the former, but you can make the latter a bit easier by picking a language with a more straightforward, plain syntax.
- deleted 2y ago[deleted]
- enum 2y agoThe abstract asks: > Why do we not have a programming language that is designed for education and in widespread use across the world It is important for a teacher to immediately demonstrate subject-matter mastery. If a student asks a question that goes beyond the planned lesson, you need to have an answer. You can't say, "I don't know how to do that." That would make you look incompetent. When you're teaching programming, it is easiest to do this with a programming language that you know well and use everyday. That language is unlikely be a language designed explicitly for education.
- sjrd 2y agoHuh? I teach a first year programming course. I often reply to questions with "let's see if the compiler lets us do that" or "let's quickly search how to do that". We do this in our regular job. It makes sense to me to demonstrate this process to students. None of us knows everything there is to know about a language and its libraries. Heck, I'm part of the language development team of a language and I have to look things up about it.
- bagatelle 2y agoThis is true, as long as you consider immediately knowing to Google it and competently doing so a valid answer.
- kirkules 2y agoI was a TA and instructor for several programming classes, usually in Java, with which I was moderately experienced but not an expert. My students would frequently ask how to accomplish something, how syntax or keywords worked on q deeper level, whether there was a stl class for a purpose, or what caused an error, etc, that I didn't know about already. I didn't hide my ignorance even a little bit, but Idid help them find an answer. In lecture settings, if it wasn't too much of a digression, I'd demonstrate finding the answer. In one on one help, or one on group help, I'd lead them through finding the answer themselves. My students had a lot of respect for me as an authority on the language and still listened to my advice and came to me with questions frequently. This is kinda important across all fields, but especially in programming, you don't need to know the right answer by rote so much as you need to be able to seek and identify the right answer with some independence using existing resources.
- dr_dshiv 2y agoGenuinely curious about how LLMs and tools like bolt.new will change programming education. (Not computer science education—that might not change much)
- scott_s 2y agoI find the core position of the author unconvincing - that is, the author advocates for non-professional languages for beginners, instead using languages designed specifically for teaching. The main argument put forward in favor of professional languages is crossover: if a student learns a language in class, they may be able to use that language professionally. The author then argues against that main point. I think students should be taught in "professional" languages, but crossover is not my main reason. Rather, it's that professional languages have an enormous corpus of examples that students can look up. If a student is learning on a teaching language without much adoption, there's just not much else a student can do but use the materials that part of the course. Teaching languages don't let students expand their universe of examples. I agree with the author's point about real insight coming on learning the second (and third, etc.) language and systems. But I don't find it as a compelling point in favor of teaching languages - quite the opposite. To me it means there's no need to obsess over first languages. Designing programming languages is fun. Designing a programming language which meets some platonic ideal of teachability is moreso because it feels possible to "solve" the design and craft the perfect jewel of a language. But I'm unconvinced it's useful research. For the record, my first language was C++, and I'd default to teaching beginners in Python.
- vishnugupta 2y agoMy hot take on this topic is that one should introduce programming through spreadsheets, Google sheets or even MS excel. Assuming it’s done at the high school level students can immediately find value in using it for household budgeting, school or business inventory management, small business accounting, event management and what not. Combine it with Google Forms and you have a near complete product.
- pasc1878 2y agoThe problem I have with this is "professional languages have an enormous corpus of examples that students can look up." The problem is that especially for common languages like Javascript, complex ones like C++ and changing ones like Java the published code follows Sturgeon's Law "ninety percent of everything is crap" Made worse by the languages and libraries have changed over time so even good code 20 years ago is not good code now. (This is also the problem with AI generated code - it learns from rubbish) Experienced programmers can look at code and see what is crap so the way we look is different to beginners. For teaching you want curated examples.
- alexey-salmin 2y agoWell, I'm still waiting for something to beat the MSWLogo which defined my childhood between 8 and 12 years old. By now I've tried quite a few things with my kids and most of them IMO display a complete lack of understanding of what can be good for a 8-10 year old child. E.g. typing "player.move_forward()" instead of "fw" (hi, codingforkids) is complete insanity: kids typically do not master touch typing by that age. Furthermore, with kids using tablets instead of PCs nowadays I doubt most of them will master touch typing at all. Nor do they care about the syntax of ".member" and "func()" for that matter, that's beyond the point when you're just trying to figure out what a procedural program even is. I'm open to recommendations of programming languages and programming-related games for kids between 4 and 12 years old, for Android and PC. This is what I've tried so far: * Scratch is interesting but simple programs like "add two numbers" require crazy levels of dedication of drawing sprites for every digit and programming a character for every decimal place (unless I got it wrong, open for advice). I think it will come handy later to teach about eventloops, signals and threads, but not as a first language. * codingforkids.io -- "papa, but this sucks, you do it all day?" was hard to argue with that * Human Resource Machine -- incredible game and does drill some good concepts but is too remote from programming (I still recommend it though) * Mindustry -- also a good game but is even further away from what programming is compared to HRM * Any other recommendations?
- eimrine 2y ago> kids typically do not master touch typing by that age. That's wrong, I have an experience of learning 9yo touchtyping with Dvorak as the first step to learning both how to program and how to learn English from scratch. It took no more than 6 hours of continuous work or 2 weeks of a full from zero to hero routine.
- alexey-salmin 2y agoI also had experience with brilliant kids during my teaching side-career, but my statement is still true: kids TYPICALLY do not master touch typing by that age. In fact, it's extremely rare based on the kids I know and knew in the past.
- dboreham 2y agoCounter view: there should be no such thing as an educational programming language. Some set of regular production languages that are sufficiently easy to learn that they can be used in education should exist. If not then collectively we're doing something wrong with language design. Random data point: I "taught" a middle school coding class for a couple years using JS. Turned out ok.
- jll29 2y agoI'm surprised the author doesn't mention LISP, despite recognizing at some point that programming also IS language design (without explicitly calling it meta-linguistic abstraction, unlike SICP). LISP is the language/notation most easily/flexibly extended, and this is one of the reasons why it may never disappear as long as we still have programming languages around.
- bobnamob 2y agoOmitting an entire class of languages with a strong history in pedagogy damages my opinion of the article. No mention of Racket, Scheme or SICP!?
- markhahn 2y agoodd to publish such an article with so many undefended opinions. for instance, that low-boilerplate is somehow worse than high-boilerplate languages because the boilerplate somehow builds character ("teaches important lessons ... from the start"). this insipidly assumes boilerplate is necessary for encapsulation and modularity. yes, the directness of Python does make it better than Java. similarly, there seems to be a peculiar theory of learning here: both that learning many languages is a goal, and that you should Do It Right from the start. suppose the goal is to learn concepts, and it's perfectly fine to iteratively use a single language, starting with a simple subset.
- WillAdams 2y agoInterestingly, an Oberon successor came up here recently: https://news.ycombinator.com/item?id=42413343 https://news.ycombinator.com/item?id=42413343 Having just watched: https://ocw.mit.edu/courses/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video_galleries/video-lectures/ https://ocw.mit.edu/courses/6-001-structure-and-interpretati... and recalling a comparative programming language class from college, I'd be inclined to argue for Lisp and the idea of the students creating a programming language during the course of the class. The thing I find most striking is that the book: _How to Think Like a Computer Scientist_ (now _Think Python_) has had many different versions for different languages, but apparently not for Lisp.