In some respects I should be writing about SIGCSE today. At least about Craig Mundie’s keynote. But I’m not ready to. Why? Just too much information. My brain is full and it is going to take me a while to sort it all out. I’m hoping that a couple of people who were also here this week will blog about it and I can link to them. And of course use their perspective to sort things out. There were some interesting things said in the keynote and even more in a small round table session I was allowed to attend. But I’, still digesting it as I said. I also attended two sessions today and one last night on the Advanced Placement Computer Science program. Yes there is that much to talk about. Much too much to blog about this late at night. But I did want to drop a bomb on you guys. One that was dropped in a session today by none other than Eric Roberts of Stanford.
One of the discussions today was on what topics should be added to the current AP CS course (what we used to call the A course). After a bunch of suggestions the next question was what to take out. Eric Roberts, a man who has written a book about it, suggested recursion might be taken out. What no recursion in a first programming course? It was a stunner. Coming from many other people it might have been automatically rejected but coming from someone of this stature in the field of computer science there was a noticeable pause. And then people seemed willing to agree. Had someone just said the Emperor had no clothing? Well probably nothing that extreme. But discussion is open.
I will say that I love recursion. It has a sort of magic about it. You can use if to solve some difficult problems that cannot be solved (some easily and others perhaps not at all) without it. One the other hand I have known professional developers who have gone decades without using it for a production program. Wouldn't you think that something essential for a CS 1 (first college computer science course which is what APCS is supposed to be) would be used pretty often?
Alright, we can’t teach Quick Sort without recursion but there are other sorts. And, dare I suggest it, perhaps sorting could wait until later since just about any decent programming environment has a sort function/method/routine in its library these days? And I do believe that a computer scientist or a professional developer does have to know/understand recursion. But does it have to be in the first course? Maybe not. Recursion comes easy for some people but not many. For many it is difficult to completely grasp. It took me a while – just between us friends. Perhaps it does more harm than good to include it in too early a course?
Does recursion really need to be in APCS or even CS1? What do you think?
If the goal is to create programmers, you could leave recursion out. If the goal is to groom computer scientists, you have to include it. It turns up in lots of places: binary trees, parsing, computability theory, proofs of correctness (induction), algorithm analysis, etc.
I probably haven't written a recursive function since college. But I still see recursive concepts in many things I do. Knowing recursion helps me understand things better.
I think you have to leave it in, it teaches a different approach to solving problems and this should be in any young cs students bag of tricks as early as possible.
No one is saying not to teach it at all - just that perhaps it can wait until the second course. I think it fits logically in the data structures course which is generally the second course. You can't fit everything in the first course after all.
We finish recursion up Monday and Tuesday. Several of my weaker students have done a better job with the labs for recursion then they did "easier" ideas like arrays. We take on the TOWER these last two days. My advanced students can't wait to hear the 1's moan about it.