3 ms·
When this kind of switch was happening in CS departments, as a graduate student I was part of a "movement" that advocated for switching away from things like Sc
by Karrot_Kream 1y ago
When this kind of switch was happening in CS departments, as a graduate student I was part of a "movement" that advocated for switching away from things like Scheme to Python for introductory classes in my elite CS institution. (We focused on other things as well such as more interdisciplinary research, which was where I was more passionate, but that's a separate matter.)
My reasoning at the time in this order was:
1. Widely used tools and practices offer a flywheel of usefulness that can help motivate undergrads to learn about computation. Once you learn Scheme, well now you've learned Scheme. But at the time if you had learned Python you could then use something like Python's system and socket APIs to play around with the lab or personal Linux systems. On the web side, there was web.py or Flask (haha this was the late 2000s/early 2010s) to motivate yourself to keep going. The student could spend their summer building apps and tools so that they appreciate computation for more than just its "aesthetic" beauty.
This was a time when CS wasn't all that prestigious on its own and salaries weren't as high as they are now, so many folks who banged their head against Scheme or MMIX or LC3 would just churn to the EE or MechE departments.
2. As a grad student it was almost trivial to set an exam paper that could weed out most of the class. This was especially trivial at the introductory class level where Scheme would be taught. If the concern was rigor it was very simple to maintain the rigor in other ways.
3. For better or for worse many undergrads had no intent of going to grad school, and many of the undergrads taking our classes weren't even students of computer science. They were electrical engineers or industrial engineers who wanted to learn enough programming to automate things in their field but were more interested in their actual areas of concentration.
In the years since my thinking around this evolved, but I still share the same conviction I did then. Probably moreso given the sheer ubiquity of Python now.
- em-bee 1y agohelp motivate undergrads to learn about computation. Once you learn Scheme, well now you've learned Scheme. But at the time if you had learned Python you could then use something like Python's system and socket APIs to play around with the lab or personal Linux systems that's a good point actually. i had scheme, modula and others i don't remember in my undergrad classes. i remember almost nothing from that time. but at the same time i met some students running an LPmud, where i learned LPC, and then i discovered roxen and pike (which is based on LPC) which i used in all my volunteer and fun programming work. in other words all my motivation for learning stuff came from the outside.
- dawnofdusk 1y agoI think the solution is to have, as is the case in math/physics, an honors intro CS sequence compared to the regular intro CS class. The latter would be the recommendation for all non-CS majors, and the former would be for CS majors. I've always thought that those who are focusing on more vocational training should not be in what is called the CS program, maybe there are other majors called "software development" or "data science" or the like. Undeniably most prospective CS students are not aiming to go into academia, but we shouldn't adapt to this majority and then leave behind those who do want to do more academic things. My background is in physics, where this sort of dual-track curriculum is well-established, and the physics taught to physics majors is very different from that taught to engineers. Unfortunately the difference is often boiled down to rigor or difficulty (and this will be reinforced if it's physics professors that have to teach both of the tracks), but in reality it is a value-neutral split which is based on pragmatism. CS should have one too.
- GZGavinZhao 1y agoBrown CS actually does this! Accelerated Intro to CS is taught in Racket, I believe.
- Karrot_Kream 1y agoWe did end up making this switch later on due to growing class sizes anyway. That certainly helps focusing the class. We ended up focusing on computation more for the CS sequence and on the nuts and bolts of getting a program working for the non-CS sequeunce. But my rationale for moving to Python still stands. In fact, I know several brilliant ML researchers who write code that would never come close to making it to production. The things we optimize for are different. Production code in a tech company needs to be readable, maintainable, explainable, and scalable. An ML researcher's code needs to support their research. These different perspectives are still why I think focusing on a wider appeal language like Python over something like Scheme still makes sense. FWIW our CS program mandated a programming languages class and the first third of the class was taught in Scheme.
- dawnofdusk 1y ago>FWIW our CS program mandated a programming languages class and the first third of the class was taught in Scheme. This is important but doesn't replace having a dual-track intro sequence. The reason one has "physics for physics majors" isn't because physics majors need to learn some of this complicated stuff ASAP. They definitely don't, and I don't doubt students in the program will eventually get a well-rounded education. But it's a good idea to give incoming students a taste of what the field is like as soon as possible, so they can see if they like it or not. (Essentially it's a "weeder", but for the students' sake so they can self-select on interest and not just instructional staff's sake of being elitist.) Probably some (but not all) professors/postdocs/grad students would scramble to teach the more advanced sequence as it is likely more engaging for them than the current intro curriculum. To be clear I don't think an advanced intro CS can't be in Python on principle, but such a class probably introduces multiple languages to some degree: they could be toy assembly languages or real ones in addition to the majority of the course content in Python.
- simpaticoder 1y ago>Once you learn Scheme, well now you've learned Scheme. There is something really joyful in learning a new language and then implementing a well-known protocol, like HTTP, in that language. You can pick either the agent or server side, and check your work with other well-known agents and servers. In my experience this tends to happen when students like the language they've just learned, regardless of the direction their given by staff. In fact, I'd almost consider it definitional of what it means to like a language - that you'd consider implementing a well-known protocol in it in your free time.
- Izikiel43 1y ago> There is something really joyful in learning a new language and then implementing a well-known protocol, like HTTP, in that language. That's probably the minority of students though
- Karrot_Kream 1y agoMaybe this is due to my interests (I specialized and published in distributed systems) but it's always been the opposite for me. Implementing HTTP/1.0 or IRC clients is one of my favorite ways to learn a new language (albeit it's a bit heavy on the IO which can be unfair to functional languages that model effects.) My interest in network software is that I can standup the software and have it participate in the network immediately. It's the application that leads me to appreciate the language not the other way around. My interests in theorem proving and program verification came from debugging heisenbugs in the wild and wasn't motivated by the algorithmic complexity or mathematic sympathy. But I dabbled in PLT in my grad days and have no doubt that there are folks who have your mindset as well.
- fn-mote 1y agoThe only point I really have an issue with is #2, where the focus seems to be on “weeding out” students as a sign of rigor. I would much prefer that some kind of pedagogical motivation replace this point. Edit: I take that back. > Once you learn Scheme, well now you've learned Scheme. (Not from SICP but How to Design Programs): The claim is that you’ve learned how to THINK about programming. You understand how to organize and test your code so you can make a larger project. I think the dismissal of a Scheme-like language as a dead end is shallow, and includes a large assumption about the (lack of an) ecosystem of the language. I think saying more will turn this into a rant.