The main reason students should use non-low-level languages is to encounter new features, and new programming paradigms. Languages like C or Java don't have closures; this rules out real higher order functions. The type system of Haskell is refreshing. Object orientation in traditional languages seems crippled once you see CLOS, Ruby, Smalltalk or Perl6. The dynamic syntax of Lisp or Perl6 is interesting.
Even a modern low-level language like Go or OCaml is “better” than C(++), as memory safety rules our a majority of bugs. While everybody should understand the lowest level basics, there are modern languages with extraordinary features and great performance (2–300 times C) out there to get the actual job done.
You could have also noted that the choice of the language is largely irrelevant if the code is tested by language-agnostic tests. This would allow the lecturer to specify a number of languages that are available, and require the students to include a makefile to compile/build the actual project.
Comments
The main reason students should use non-low-level languages is to encounter new features, and new programming paradigms. Languages like C or Java don't have closures; this rules out real higher order functions. The type system of Haskell is refreshing. Object orientation in traditional languages seems crippled once you see CLOS, Ruby, Smalltalk or Perl6. The dynamic syntax of Lisp or Perl6 is interesting.
Even a modern low-level language like Go or OCaml is “better” than C(++), as memory safety rules our a majority of bugs. While everybody should understand the lowest level basics, there are modern languages with extraordinary features and great performance (2–300 times C) out there to get the actual job done.
You could have also noted that the choice of the language is largely irrelevant if the code is tested by language-agnostic tests. This would allow the lecturer to specify a number of languages that are available, and require the students to include a makefile to compile/build the actual project.