Home
15 comments
throwaway712715 months ago
I 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.<p>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".<p>I think it is a problem of designing for the 'average' student, which of course does not exist.<p>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.<p>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.<p>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.<p>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 :)<p>PS: Some of the things I made to teach my daughter: <a href="https://punkx.org/" rel="nofollow">https://punkx.org/</a>
评论 #42441350 未加载
评论 #42440531 未加载
评论 #42440123 未加载
scott_s5 months ago
I 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.<p>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.<p>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.<p>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.<p>For the record, my first language was C++, and I'd default to teaching beginners in Python.
评论 #42436228 未加载
评论 #42436370 未加载
评论 #42439728 未加载
评论 #42440624 未加载
评论 #42440616 未加载
评论 #42441040 未加载
评论 #42439606 未加载
评论 #42442319 未加载
jll295 months ago
I'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).<p>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.
评论 #42438831 未加载
WillAdams5 months ago
Interestingly, an Oberon successor came up here recently:<p><a href="https://news.ycombinator.com/item?id=42413343">https://news.ycombinator.com/item?id=42413343</a><p>Having just watched:<p><a href="https://ocw.mit.edu/courses/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video_galleries/video-lectures/" rel="nofollow">https://ocw.mit.edu/courses/6-001-structure-and-interpretati...</a><p>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.<p>The thing I find most striking is that the book:<p>_How to Think Like a Computer Scientist_<p>(now _Think Python_)<p>has had many different versions for different languages, but apparently not for Lisp.
alexey-salmin5 months ago
Well, 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.<p>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:<p>* 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.<p>* codingforkids.io -- "papa, but this sucks, you do it all day?" was hard to argue with that<p>* Human Resource Machine -- incredible game and does drill some good concepts but is too remote from programming (I still recommend it though)<p>* Mindustry -- also a good game but is even further away from what programming is compared to HRM<p>* Any other recommendations?
评论 #42437826 未加载
评论 #42440532 未加载
danielam5 months ago
N.b. here is a brief article[0] in which Matthias Felleisen explains the reasoning behind the CS curriculum he developed at Northeastern University.<p>[0] <a href="https://felleisen.org/matthias/Thoughts/Developing_Developers.html" rel="nofollow">https://felleisen.org/matthias/Thoughts/Developing_Developer...</a>
troelsSteegin5 months ago
I 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. <a href="https://strype.org/" rel="nofollow">https://strype.org/</a>
enum5 months ago
The abstract asks:<p>> Why do we not have a programming language that is designed for education and in widespread use across the world<p>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.<p>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.
评论 #42436273 未加载
评论 #42438240 未加载
评论 #42439304 未加载
评论 #42442060 未加载
zozbot2345 months ago
This 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?
评论 #42438181 未加载
评论 #42440868 未加载
vitiral5 months ago
Computers 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.<p>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)
评论 #42442062 未加载
fny5 months ago
Ruby checks all of these boxes.<p>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.<p>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.<p>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.
markhahn5 months ago
odd to publish such an article with so many undefended opinions.<p>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.<p>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.
rramadass5 months ago
An 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.<p>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 - <a href="https://en.wikipedia.org/wiki/Oz_(programming_language)" rel="nofollow">https://en.wikipedia.org/wiki/Oz_(programming_language)</a>
dr_dshiv5 months ago
Genuinely curious about how LLMs and tools like bolt.new will change programming education. (Not computer science education—that might not change much)
dboreham5 months ago
Counter 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.<p>Random data point: I "taught" a middle school coding class for a couple years using JS. Turned out ok.