|
|
Subscribe / Log in / New account

Scheme

Scheme

Posted May 8, 2023 14:28 UTC (Mon) by tialaramex (subscriber, #21167)
In reply to: Scheme by gutschke
Parent article: The end of the accounting search

The university I work for (and where I studied many years ago because it seems I settled down in this city) used to teach an ML (Standard ML of New Jersey) as a first language, and then teach a Lisp, and some C I think - this is for Computer Scientists which was the degree I took.

By the time I left for industry the first time it was teaching Java as a first language and I believe that continues today. Programming is obviously far more necessary across numerate disciplines than it once was, and so almost all the sort of courses where decent maths is a pre-requisite for year one now teach programming, at least optionally, except for one. Medicine is already absolutely up to their necks in requirements, as well as teaching a longer schedule and presumably there just isn't room to teach them programming. Outside of CS, the first language is usually Python, although in some disciplines it's R instead (and in Electronics specifically it's C).

Because Java is, if nothing else, broadly useful, today's CS students needn't learn any other language well, which is especially ironic when the university hires them, especially as interns or on short fixed terms, and obviously we aren't a Java shop, so they need to learn a new language. They are shown C during their mandatory first year classes, because Java doesn't have allocation and that's important, but it's not as though first year courses are fail-one drop out, so who cares if you do OK everywhere else?

Modern CS students can explicitly choose to learn Haskell, and I think there are still opportunities that might lead to Lisp and Prolog in the optional courses somewhere, but it's not unusual to get a fresh graduate whose only practical programming language is Java, which is a bit disappointing.

One really obviously missed opportunity is that while Rust looks superficially like a semi-colon language, like C or Java, in many ways it's an ML wearing a trench coat. So people who learned when I did are like "Wait a minute..." because oh yeah, these aren't statements which end in a semi-colon, these are expressions with a semi-colon at the end to turn them into statements. And these types seem awfully recalcitrant for a language which inherits from C, but once you realise this is an over-grown Hindley–Milner type system it becomes much clearer why 5 isn't true and "x" isn't an array and so on. So if you were still teaching ML then you've actually got a clear route to the future. Oh Well.


to post comments

Scheme

Posted May 8, 2023 19:06 UTC (Mon) by NYKevin (subscriber, #129325) [Link] (2 responses)

Since we're apparently posting "here's what my college does," well, here's what I experienced several years ago:

* CS 1 (the introductory course for freshmen) uses Python. I have no experience with this as I placed out of it. I think it previously used C++ at some point?
* Data Structures (effectively CS 2) uses C++. The class structure consists of two lectures introducing a new data structure that you have probably never seen before (I specifically remember "leftist heaps," which are just extremely unbalanced heaps that you can merge quickly), an assignment where you're supposed to implement that data structure (as in, you submit code, they compile it, and it has to produce exact byte-for-byte correct output over a range of test inputs), and a lab (where you do a more basic version of the assignment and can ask TAs for help). Every week. For the entire semester. As you might imagine, this is where a lot of students drop out. OTOH, this was probably the most useful course of my entire four years at that place, because it taught me how to Actually Get Shit Done, which is a rather important skill in this business.
* "Computer Organization" (basically, low level stuff for people not on the hardware track) uses x86 assembly, by way of DEBUG.EXE on 16-bit DOS on 32-bit Windows on 64-bit Windows. No, I don't know why they did that either.
* Programming Languages had a mandate to teach us logic programming (SWI Prolog), functional programming (Oz, but only the functional parts) and the Actor model (a weird Java dialect which the professor invented himself). I'm told that the other prof. used more sane languages in their iteration of the course (though at least Prolog makes some sense). For the Prolog part, I distinctly remember an exam where we were asked to implement a linked list in Prolog, and I had no idea what I was doing and just wrote out the list invariants as logical formulae... and was very surprised to later get full points for that answer.

Scheme

Posted May 9, 2023 11:37 UTC (Tue) by mathstuf (subscriber, #69389) [Link]

Oz and the Java-like (Salsa?) are pretty specific. As is the CompOrg name (though DOS wasn't used then; we had "Dave's bombs" instead to debug). If you went to RPI, this sounds almost exactly what it was like in the late 00's as well. The Oz-and-Salsa-loving professor was on sabbatical when I took it, so we got Prolog, Java, Scheme, and (I think) Python in the ProgLang course instead. Friends who took it when he returned kept finding Salsa compiler bugs…

Scheme

Posted May 12, 2023 1:39 UTC (Fri) by jschrod (subscriber, #1646) [Link]

Ah, story telling time, I'll take it up -- from the other side of the teaching fence.

I'm from Germany and had the opportunity to get a full-paid position in my university for my PhD time. In US terms, this position is a mixture of teaching and research assistant position, available for those with a Master degree and working towards a PhD. (This was in 1990, btw.)

My professor (PhD advisor) had an annual lecture called "principles of programming languages". I was supposed to develop and supervise the practical exercises accompanying that lecture. Well, the main point the lecture wanted to drive home: Specific programming languages are irrelevant. If you, as a CS master student, have learned to program any imperative, functional, object-oriented, or logical language (like Prolog), then you should be able to learn a new language of the same paradigm quickly, if you understood the principles behind it.

So, when I started to design the practical exercises for this lecture, I decided that my students would have to learn a new programming language every 2 weeks as far as to produce a program for a sensible requirement. The learning exercise was: It doesn't matter if you indent your program structure (Python) or if you have lots of parenthesis (the Lisp family) -- what matters are, what data and control structures are available to you in your program design.

Anectodical note: Don't do this after a thorough analysis of the technical means you have to provide to the students. I remember especially two issues:

1) Exceptions, which were not well supported in many languages in 1991. So I had to make available a CLU compiler for the exercises, within 2 weeks, since this was -- at this time -- the best practical example what it means to have exceptions as a fully-fledged 1st-order part of the language. (Still, I think that Liskov is way underrated for her contributions to the development of programming languages. Besides her work on exceptions, her SIGPLAN paper "Programming with Abstract Data Types" in 1974 actually coined the term `abstract data types'!)

2) My professor insisted to cover class-instance vs. prototype-instance models in the part of the OO language introduction. So I had to devise an excercise for a problem that's suitable to prototype-instance concepts. Nowadays, we could just use Javascript -- but this was 1991. The work to set up a working Self system for my students (for a 2 weeks assignment!!) was outrageous. But I have bought into it, and I got through it.

The interesting part of this story is: There were quite some students who shied away from the demands of the lecture and (mandatory) practical excercises. But for those, who did it together with us, it was a great experience. Many of my master students that supported my PhD came off from that course. In fact, some of them were helping me to set up the excercise environments during the course, while actually taking the course -- and those were the ones who later took off and have now excellent positions, both in companies and universities.

I'm still proud to have been a part of their journey towards the understanding that expression doesn't matter prinicipally. (We can discuss, where it matters.) Models and understanding the principles are the gains you get from a thorough university education. There is a "everything changes so fast" attitude I'm experiencing today from others in my field (mainly software and business process architect, with a lasting footage in the open-source development community in my spare time). Well, from a CS point of view, no. The principles remain the same.


Copyright © 2025, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds