4 ms·
I think this approach to the issue of 'what language to start with' has a serious flaw for basic programming instruction: > "Our solution is to start with our
by photochemsyn 4y ago
I think this approach to the issue of 'what language to start with' has a serious flaw for basic programming instruction:
> "Our solution is to start with our own tailor-made teaching language, dubbed “Beginning Student Language” or BSL."
The only time the use of a toy language makes sense is if you're learning how to create a programming language in the context of understanding compilers, e.g.
https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/index.html https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/index...
Otherwise it's doing the students a disservice as they'll never use the language again and will have to relearn a whole new syntax later on. It's also far better to learn in a widely used language because there will be a wide variety of resources that can help you solve simple problems (and this is even more true in the era of ChatGPT).
The argument that a simplified language makes it easier for students to grasp high-level concepts doesn't work either: instead just use a restricted well-defined subset of a language like C, C++, Java, Python, Javascript - and explain to the students the rationale for doing so.
- Athas 4y agoI thought BSL was a subset of Scheme, so it avoids most of those problems you mention. Or do I misremember?
- soegaard 4y agoIt's not one "toy" language. It's a series of languages that becomes gradually larger. It has the exact same syntax and semantics as the "real" Racket. If a language is small, the compiler can give very precise beginner friendly error messages. I'll call someone who has programmed one or two weeks for a beginner. As an example, in the beginner language all function calls begins with a name, so `((foo) 42)` gives an error message, that says function calls must start with a name. Note that beginners often use too many parentheses. Later on when first order functions are introduced, the call `(foo)` might return a function, so `((foo) 42)` is okay. The beginner friendly "function call must start with a name" message is now no longer true. There are four language levels used in the book - and they follow the progression in the book.
- soegaard 4y agoAn experience report "On teaching how to design programs" from Norman Ramsey. https://www.cs.tufts.edu/~nr/pubs/htdp.pdf https://www.cs.tufts.edu/~nr/pubs/htdp.pdf I am quoting section 4.1. For over fifteen years I have taught programming languages using little languages (Kamin 1990; Ramsey 2016). With this experience as background, I cannot praise the Racket teaching languages highly enough. The language design is lapidary. I was especially impressed that functions in Beginning Student Language may not have local variables. At first I thought this restriction was crazy, but after observing students at work, I see that not only is the language simplified, 7 but without local variables, students are nudged to create helper functions—a notorious point of difficulty for beginning students
- taeric 4y agoI'm tempted to say that, at large, every program is already a de facto toy language. Worse, they are often toy taxonomies. Nowadays, they are often toy algebras. Which is a disservice to all of them. They aren't toys. They are models. You can either do the model at the level of the language, or at the level of the constructs the language gives you. Starting users off with fewer constructs helps them stay free of the distractions that come with them.
- cardanome 4y ago> Otherwise it's doing the students a disservice as they'll never use the language again and will have to relearn a whole new syntax later on. They will have to to learn many new syntax in their career so that is a good start. I never understood some people acting as if syntax were a big hurdle. Do people really need more than a few hours to learn a new syntax? From APL to C to Haskell to Lisp, I can't ever remember struggling with the syntax of a language. > It's also far better to learn in a widely used language because there will be a wide variety of resources that can help you solve simple problems (and this is even more true in the era of ChatGPT). This can be a pro and a con. While students should learn how to use publicly available information form search engines, stack overflow and so on, it can also be valuable to teach them ways of not having to rely on them. Learning to read proper technical documentation and working you way through a problem without had-holding is a great skill. That said, shere is an good argument for using a "real-world" languages for teaching though: Studends will be be more motivated to learn them. Getting them interested in a "toy" language is just a hard sell. Motivation is what determines learning success more than having a technically perfect learning path.
- kqr 4y agoYes, for beginner programmers syntax is a huge deal. Sticking to something consistent as one starts out prevents conflating variations of design (encapsulation, coherence, atomicity) with variations of punctuation.
- rTX5CMRXIfFG 4y agoWell then at what point will they be learning the syntax of another language? They’d be well past the point of beginner by then, no? And even if they’d be in a junior role (assuming junior = beginner), how much does any of this talk actually matter when the job demands that an employee learn a language anyway?
- carapace 4y agoBit of a tangent but it seems to me that the talking, self-programming computers will make questions like 'what language to start with' completely obsolete. When I read the title I thought, "You're writing this for the AIs now." as in the machines are the target audience ( since human programmers will no longer need to design programs, not more than once anyway.)
- rozap 4y agoIt's not hard to learn a new language. It is hard for a complete beginner to get hung up on all the warts of C++.