5 ms·
At my university (Minnesota), the intro-level programming class for CS majors was based on the SICP textbook and all the assignments were in Scheme. One really
by strommen 11y ago
At my university (Minnesota), the intro-level programming class for CS majors was based on the SICP textbook and all the assignments were in Scheme. One really nice side effect of this was to level the playing field with regard to prior programming experience - even the students with industry experience were starting from scratch with car and cdr.
- djsumdog 11y agoThat sounds like an awesome program. Functional languages weren't even an option at my University. When I was graduating, they were just changing things around so that you had theory classes before programming introduction classes. I kinda did this by accident (took Discrete Maths/161 before I started 201 programming) and I think it's a really good idea. You get students use to the idea of sets, basic logical operators and the foundations they need before dropping them straight into programming.
- microcolonel 11y agoI don't see how that would make up for anything; especially given how dynamic and list-/function-oriented JavaScript, the most common language these days, is. In a situation like that, I would be willing to assume that those who you thought were experienced were almost as lost in any event as the beginners; and no amount of language familiarity would help them.
- zaqwsxwsxzaq 11y agoI'd be willing to assume that the instructor and authors of the curriculum, after many years of observing such phenomena in the wild, might've anticipated your exact assumptions, and designed against it. But yeah, on the first day of school, children tend to puff up their egos and put on airs, and some people might've exuded a soon-to-be-deflated sense of overconfidence, when they weren't actually very experienced after all. Both are possibilities. BTW, just as those supposedly inexperienced students found out, you know what happens when you assume... right?
- durandal1 11y ago16 years ago I started a CS education - while I dropped out after 6 months, one interesting observation was that the first courses used SML. Their reasoning was exactly that - both language and paradigm was new to pretty much everyone, which served as an equalizer.
- marknutter 11y agoI took the same class at UMN and enjoyed it, especially now that I'm getting more into functional programming in my career, but I was very frustrated with the program overall because of the lack of real-world problems. That was back in 2000 so maybe it has changed, but I can confidently say I learned most of what I use on a day to day basis after college, not during.
- greyskull 11y agoI think most "Computer Science" programs are going to continue doing that. It's more academic than... pragmatic? I graduated in late 2015, and frankly I can't point out anything in particular that I can confidently say made me a better software developer. Actually, if I wasn't consciously aware of it it at the time, it probably would have made me worse, but I got plenty of exposure outside of class. I just tell myself it, over time, subconsciously changed my thinking to make me better at grasping software.
- marknutter 11y ago> I just tell myself it, over time, subconsciously changed my thinking to make me better at grasping software. I make the same justifications :)
- ef4 11y agoI used SICP too. And I'm very dubious that Scheme reduces the gap. People still had radically different experiences in the course depending on their prior exposure to programming. The biggest gap I observed was in motivating _why_ we were doing anything. The whole theme of the course is using abstractions to tame complexity. But beginners had never encountered real program complexity before, and it's not an easy thing to simulate in an introductory course as they're usually done.
- visarga 11y agoI'd say they need to tackle simple naive solutions first, in order to develop a taste for abstraction, not the other way around. You can't appreciate an abstraction unless you feel the pain point it helps attenuate.
- Thriptic 11y agoI agree. I'm making my way through the adaptation of SICP written for python currently and it has been an absolute game changer, but I never would have appreciated it without struggling to construct "larger" projects on my own with little abstraction.
- afarrell 11y ago> though the adaptation of SICP written for python. Do you have a link to this? A quick google didn't seem to turn up anything that was obviously what you were referring to.
- Thriptic 11y agohttp://www-inst.eecs.berkeley.edu/~cs61a/sp12/book/ http://www-inst.eecs.berkeley.edu/~cs61a/sp12/book/
- jeena 11y agoThey had the same tactics at the University of Gothenburg, the first class was basic functional programming which we used Haskell for (in parallel we had 50% math during the first year). This really leveled the field because basically everyone only had been programming imperative (and object oriented) before.
- Matt3o12_ 11y agoAs a high school student (with programming experience outside of CS), I can tell that this doesn't change much. It took me about 20minutes to realize that everything in scheme is just a list, literally everything. Using recursion everywhere seemed absurd to me but I wrapped my head around that pretty quickly while the others were still struggling with the basic syntax. List manipulation seemed hard to everybody but it quickly made sense to after understanding how lists are structured and what car and cdr actually do (read the value of the first pointer vs second). The good thing about scheme is that, after understanding the basics, it seems more natural to most students. I help one of my class study for his final exams and he understands recursion way better then for loops and iterators in Java. The syntax is also more minimalistic compared to Java which helps a lot (I did not think the syntax would be the hard part in Java). I don't even bother teaching him when to use private, public and protected. I just tell him to use protected for the variables (because it is often used in the final exams despite the fact that l variables should always be private in Java) and public for the methods
- morgante 11y agoIt doesn't matter that the assignments were in Scheme. If students have extensive previous programming experience, they have had a chance to develop a mental model of computing that complete beginners simply don't have. They know how to debug. There are broad skills which aren't specific to a language or even a paradigm. Putting all students in CS 101 together makes about as much sense as including Cantonese speakers in an introductory Mandarin course.
- ultramancool 11y agoI think scheme provides enough of a shift that many of those mental models they had will break down. Look at how much effort and how many attempts it takes people to learn pure functional languages for the first time and it really shows. That said - they'll leave that course with vastly improved mental models while the other students will still only have a basic understanding.
- morgante 11y agoAbsolutely they'll have to adjust their mental models. Learning a functional language is definitely different than learning yet another imperative language. But it's still a far cry from knowing nothing about programming in the first place. It definitely took my less time to learn and understand my first functional language than it took for me to learn my first language.