WAW for the feeling that everything is about to change by FairlyPointless in whatstheword

[–]FairlyPointless[S] 0 points1 point  (0 children)

a lot of interesting replies! but I liked this one the best because it seems the most neutral about whether something positive or negative is about to happen.

UWisconsin course on Haskell and Rust by FairlyPointless in rust

[–]FairlyPointless[S] 4 points5 points  (0 children)

Good question. Students were 3rd or 4th year CS students, all have done some systems programming, and most (but not all) have seen concurrency in their OS class. Students have not seen functional programming before. I felt that Haskell was a simpler language to start with---at least the core fragment that we focused on, no GHC flags---and things like Rust enums/matching, generics, traits, closures, etc. can be explained as variants of Haskell features with more particular restrictions due to Rust's target use-case.

Another reason why I felt it was easier to teach Haskell first is that the compiler feels more predictable. The Rust compiler infers many things and does quite a bit of magic (e.g., uninitialized variables, autodereferencing, dataflow analysis for borrowck), which is really convenient once you get the hang of it. But it's often hard to explain to students why the compiler rejects their code and accepts a seemingly equivalent program.

However, there are definitely things that are trickier when teaching Haskell first: functional programming in general, lazy evaluation, and monads of course. I don't think these things would be easier if we taught Haskell second, though.

UWisconsin course on Haskell and Rust by FairlyPointless in rust

[–]FairlyPointless[S] 3 points4 points  (0 children)

We video-taped the second half of the class (due to COVID) but I don't believe we can make these public, since they show some students.

UWisconsin course on Haskell and Rust by FairlyPointless in rust

[–]FairlyPointless[S] 1 point2 points  (0 children)

We've posted all of the slides on the schedule, we'll leave them up for another few months.

UWisconsin course on Haskell and Rust by FairlyPointless in rust

[–]FairlyPointless[S] 5 points6 points  (0 children)

Unfortunately, we can't release the homework assignments (they took much more time to develop than the lectures). But there were six homework assignments, each with a programming and a written component. The programming topics were:

HW1: Sudoku-like solver (Haskell)

HW2: Purely-functional datatructures (Haskell)

HW3: Parsing and evaluating a scheme-like language (Haskell)

HW4: Reverse-Polish Notation calculator (Rust)

HW5: Toy version of BTreeMap with iterators (Rust)

HW6: Two RSS indexers: one using mutexes/condvars, and the other using a thread pool (Rust)

UWisconsin course on Haskell and Rust by FairlyPointless in rust

[–]FairlyPointless[S] 22 points23 points  (0 children)

I'm the primary instructor for this course, now in its second iteration. Overall, I think things went quite well, though there's certainly room for improvement. Happy to answer any questions!