Reasonable? |
Back in the 90s when I was starting my teaching career we used to talk in the CS Ed community a lot about the importance of math as a prerequisite for computer science. More precisely, I recall discussions about what level of math and what kind of math. I was working at a community college at the time and had perhaps the most diverse students I have ever had since.
Some were fresh out of high school, some were recent Veterans, some had been laid off from a dying industry, some were re-entering the workforce after taking time to raise kids, some were in workforce retraining programs, some were retired. Some students had a prior Bachelors degree, some had barely made it out of high school. I encountered home schooled students, immigrants from war zones (one particular student from Cambodia comes vividly to mind) and those seeking to leave lives as migrant farm workers.
They shared a desire to obtain a computing degree and enter the computing workforce. The majority were highly motivated and great to work with. Yet many had limitations placed on them by external agencies or other equally firm obligations that restricted how long they could be in school and how many courses they could take - especially courses considered pre-college level, and thus remedial.
Thus the arguments about what math and how much math to take had very real consequences. Tell a student they had to take x courses before they could start college level CS and this could set them back a year or more that they did not have. As a result, in our college, as in others, the question of what math to require became in great part one of what the reason was to have the math.
The most common argument of the time, one I haven't heard as much recently, was that math, algebra in particular, trained you to think logically and sequentially. The extent to which this was true was taken as a given; I didn't have exposure to the math ed literature until some years later. However, I did learn pretty quickly that, although correlation does not equal causation, those students who had survived college algebra were less likely to look at 20 lines of sequential code and suggest executing them by bouncing back and forth around the screen like a ping pong ball. And of course, the bottom line was that if they wanted to transfer from a 2 year computer science program into a 4 year computer science program they were going to need that math.
Nowadays the CS Ed community is discussing equally energetically the usefulness of learning to program and the doors coding can open. Coding: the typical entry into a computing degree and a constant throughout. And, as we know from lots of hard data, computing degrees can lead to exciting and well paying careers. There is also an enthusiastic conversation going on about the useful things that can result from learning to code and getting that computing degree even if you ultimately decide to enter a seemingly unrelated field (ref: computational thinking and computational XYZ from art to geology and on through the humanities)
In one of those "that was then, this is now" moments, I'm wondering...wondering if learning to program, supports a general ability to reason. Before you say "of course - duh!" ask how you know. I'm talking about more than low level step by step logical/sequential reasoning. I'm thinking about a more holistic reasoning ability. Have we studied this? This would be so cool to study.
I suspect that the answer will be yes or no - it depends. As with so many things, such as with math and logical thinking, it depends. Context matters for one thing. For example, I posit that if we teach coding in the context of well chosen societally relevant challenges and follow through on the social impact of every stage of project development...hmm, yes, I think so. Holistic reasoning ability could well improve. (Who wants to fund the study?)
A belief in the importance of societal considerations throughout computing is one reason why the CS2013 curricular guidelines (pdf file) include an expanded section on Social and Professional Issues. Good technical decision making assumes results that ack and respond to complex problems requiring complex reasoning. We as a community are starting to get with the program (ow) and to value integrating societal consciousness into our technical projects as never before. I bet, that many of my former community college students, wherever they are, get it loud and clear.