News for hackers. Stuff that matters.
Re:Teaching Programming Languages by Experimental and Advers... by CJefferson on Monday May 07, 2018 @10:00AM (#17012761)
One problem I've had with students who learn this way is when they hit C and C++, which (unfortunately) must not be learnt this way, as the behaviour of programs in the presence of undefined behaviour is very hard to learn and understand. (I mean here how such programs behave in practice, under GCC or clang).
Re:Teaching Programming Languages by Experimental and Advers... by skrishnamurthi on Monday May 07, 2018 @10:08AM (#17012828)
This isn't a way of learning programming. It's a way of learning about the variation in the language design space.

That includes teaching the very point you're talking about. There is nothing in the mystery language approach that precludes having programs whose behavior is non-deterministic, and this would then show students to prepare for it. Indeed, it's an excellent kind of mystery language, by providing a sandboxed version that can focus precisely on non-determinism.

(I will not reveal whether such behavior exists in the current suite or not, to avoid giving away solutions.)

Re:Teaching Programming Languages by Experimental and Advers... by elfprince13 on Monday May 07, 2018 @04:22PM (#17016174)
Yeah, debugging possible outcomes of undefined behavior in C/C++ is pretty much exactly a mystery language exercise.

With older compilers, the usual question is "Will `-2 >> 1` perform sign extension or not?" With modern compilers, the usual question is "What arbitrary constant can the compiler choose for `-2 >> 1` to maximize the number of provably dead code paths?"

Re:Teaching Programming Languages by Experimental and Advers... by justinpombrio on Monday May 07, 2018 @10:11AM (#17012850)
Students who do these assignments spend a lot of time trying to distinguish between these mystery languages, and writing program after program that fails to tell them apart. The next day in class, they hear a simple explanation of how the mystery languages differ. I hope that one of the lessons they walk away with is just how difficult it is to poke at a black box, and a renewed appreciation for specs.
Re:Teaching Programming Languages by Experimental and Advers... by nicoburns on Monday May 07, 2018 @10:11AM (#17012849)
In this case perhaps it would make sense for students to learn Rust first. Much of what is undefined behaviour in C/C++ is a compiler error in Rust (perfect for this approach).

Students can then move on to C/C++ using a different approach, but already having learnt most of the concepts.