I had a conversation with a gentleman who shall not be named (not Axman, someone else), who did TA on Haskell / OCaml courses.
We were talking about how the Racket community, including their Brown professor, feels that it’s stupid to teach recursion with Fibonacci (better done via binet / matrices) and factorial (better done with primeswing or hgmp), and how they prefer to teach recursion by introducing recursive data structures first, and using that as an example to teach recursive algorithms and how recursion can be superior to iteration.
To my surprise, he actually agreed with me, and was even more vociferous about how Fib and Factorial being horrible for teaching recursion. I broached a remark about how “it’s silly to teach recursion without teaching the [] data definition first”, and he went so far as to suggest that data structures be taught before recursion.
===
To academics, I’m curious. Has anyone ever tried to teach a DSA course using a combination of Haskell and C on the honors level? In theory, Haskell should be excellent for that; recursive algorithms are pretty trivial when it comes to Haskell, but we know how hard it is to teach Haskell. Ideally, I’d love to see a 2 semester course somewhere, along the lines of UChicago doing intro CS via Haskell, where Haskell and C are binned together with DSA.
The only problem, of course, is that Haskell has terrible OOP support, but I suppose you could always do the “teach OOP by implementing objects via C” approach that people used to do.
===
Sources: