On another question, Ben. I claimed:

By utilizing a functional language in your first course, you get to have a classroom full of kids who have a much more similar footing. And when you move on, later, to imperative programming, you no longer have any kids with no experience. It's a simple trick to keep your cohorts more on-level without wasting the time of the advanced students.

I've heard this argument before and wonder if it's really true. The first programming course I encountered was in Scheme, and it seemed that students with prior programming experience (even in imperative languages) tended to do well in the course, while some students without prior experience were lost. Of course, my undergraduate days were long ago, correlation does not equal causation, and my data is anecdotal.

Is there evidence that using a functional programming in an introductory college course reduces the effects of differences in programming background?

  • 1
    $\begingroup$ (a) The SIGCSE list might point you to some research. (b) The outcome in a single instance might depend on the instruction given. If the instructor was someone learning Scheme him/herself then the outcome might not be predicted to be very positive, and might turn out as you describe. Now if Hal Abelson was the instructor... $\endgroup$
    – Buffy
    Commented Sep 6, 2017 at 21:58
  • $\begingroup$ Hal Abelson was the instructor. (Well, not when I took it, but when I TA'd it.) $\endgroup$ Commented Sep 6, 2017 at 22:29
  • 1
    $\begingroup$ I'd expect better results with Hal. Why don't you ask him this question? $\endgroup$
    – Buffy
    Commented Sep 6, 2017 at 22:35
  • $\begingroup$ @Buffy I owe Hal code. I suppose I could ask him, but I don't know that he ever did an evaluation. $\endgroup$ Commented Sep 7, 2017 at 15:50

1 Answer 1


Let me mention, at least, another dimension to this. There are various functional languages and some of them are closer to what your students may have in their backgrounds. A language with dynamic scope and abstract syntax is a very different beast from one with lexical scope and a rich syntax.

The only functional language that I really worked at was ML and I got quite good at it. But I learned that I really want the concrete syntax that it offers as an aid in my thinking. The underlying concepts are the same, of course, but I'm pretty worthless in Scheme. But then, I didn't learn Emacs from my mother as many schemers seem to have done.

So, if you want to level the playing field then I will guess that you want something as unlike their previous experience as possible. Say Scheme, rather than Haskell.

However, some students will pick up the new ideas faster than others no matter what you do, so it is good, in my view, to take advantage of that.

And of course, if you are going to do something very non-standard, make sure that you have the necessary expertise first. That isn't a situation for staying one chapter ahead in the book as some instructors are forced by circumstances to do.

  • $\begingroup$ (a side note) FWIW Scheme's typical wall-of-words code can IMO be made more readable by generously adding more white space inside, and by aligning various entities visually. that's not the accepted style of course; so what, if it helps. (see e.g. this to see what I mean; or even this which is a bit over the top). and, using short variable names! $\endgroup$
    – Will Ness
    Commented May 13, 2018 at 18:45
  • $\begingroup$ @WillNess, a student of McCarthy's and one of the developers of CLOS told me that he can understand lisp code from a distance just by looking at the visual structure. That assumes the standard formatting, of course. I have no reason to doubt him as he is reliable in all known ways. $\endgroup$
    – Buffy
    Commented May 13, 2018 at 18:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.