Thoughts on the Computer Science Curriculum

Whether taken at Sacramento State, UC Berkeley, Stanford, or even IIT Kanpur in India, the computer science curriculum is remarkably similar. Every program I have researched requires at least one year of calculus, one year of physics, and a similar set of computer science foundation courses. For example, basics such as algorithms, data structures, and discrete mathematics are required at each of these universities. All of them also require a course in low level programming that includes education about computer architecture.

All of the above universities also emphasize hard sciences such as biology and chemistry in addition to technology courses, reflecting computer science's descent from or current connection to the school of engineering. Depending on one's future career plans, these hard science courses and the previously mentioned calculus and physics courses may be beneficial. However, for many of the people I have spoken with, these courses are not necessary or significantly beneficial for their future occupations. This was true in my own case as well until recently, when I decided to shift my major slightly to something that will make use of this knowledge.

For many people entering university today, the ultimate goal is to be hired as a computer programmer, and only a small and shrinking percentage of computer programmers make use of calculus, physics, or hard sciences such as chemistry and biology. Many of them will simply be writing code for commercial applications, where the most complex math they will ever encounter will be elementary algebra. Yet, human resources departments look to the Bachelors degree as an indication that someone will be a good programmer. However, a majority of the courses they have taken in order to obtain that degree are unrelated to the skills they will utilize in the workplace.

If these courses do not provide a proportional improvement to workplace performance compared to the cost in time and money of learning the material or compared to an alternative course, current curriculums are producing programmers of a lower quality than they could. For some occupations these courses are necessary, and so a distinction might be made between the computer science degree and a computer programming degree. The latter could focus on practical, business oriented courses. The current distinction between computer engineering and computer science is insufficient in my opinion.

For example, with the same effort as is required for a calculus course, a student could become very familiar with database systems, object-oriented design patterns, or a specific programming language they might use in the workplace. If they would already take courses such as these as electives, then either their Bachelors degree program could be shortened to three years instead of four, or they could achieve an even greater level of understanding of a particular subject. By eliminating unnecessary requirements, parts of a Masters degree program could be incorporated into the Bachelors program instead.

Further, there are people who would make perfectly good programmers who are likely being excluded from the computer science program because of an unrelated difficulty in learning higher level math or a deficit in their knowledge of math that will require additional years to remedy, during which they could have been working. There are those who claim that mathematical education improves students' abilities in computer science, and to some extent that may be true, but in terms of concepts such as big-O notation (which is merely algebra, by the way). Similar concepts could be taught in such a way that they do not require extensive math education.

I have read many computer science books, and I have found that those that assume high level math education are written in such a way that they are difficult to read unless one has a high level math education. Yet, I have read other books that cover the exact same subject matter and manage to omit much of the mathematical notation while explaining the same concepts and procedures. I suspect based on my experience that any studies that may have been done showing a correlation between mathematical education and performance on other computer science courses may be due to the fact that the former type of books were being used.

However, I do believe it is highly likely that a correlation exists between mathematical ability and programming ability. Note the difference between mathematical ability and mathematical education. I have observed that logical people make the best programmers because they think the way computers work. They are less inclined to expect the computer to do what they intended versus what they instructed it to do, and less likely to be surprised when the result is the latter instead of the former. Some less logical people have difficulty with this.

Math presents similar kinds of problems, because the result of any set of operations will depend on the type and order of the operations and not on the intent of the student. Those who learn the logical rules for why things work will be more successful. What this means though is that success in computer science merely correlates to success in mathematics, but does not actually depend upon it. Requiring an additional year of courses unrelated to the student's work is therefore shown to be wasteful.

Likewise, unless a student intends to do computer modelling of chemicals, there is very little benefit to taking chemistry. I have taken university level chemistry and while I found it very interesting, if I were intending to simply become a computer programmer as I had intended for quite some time, it would not be useful to me in the least. In my case though such courses have a use, but for many they do not. Therefore these courses only serve to delay the entry of new computer programmers into the workforce, diminish their skills by replacing relevant courses with irrelevant courses, and raise the barrier to entry into the field such that ultimately the number of computer programmers will be less than otherwise.

Each course a student takes requires time, effort, and money. In the United States, industry complains that there are not enough skilled workers available. Perhaps this is in part due to the fact that the barrier to entry into the workforce has been raised unnecessarily high. There are two likely outcomes to this situation. One, universities may adapt to the situation. Two, technical schools which currently suffer from an image problem, will eventually become recognized as the equals or even superiors of universities in producing effective workers, and universities will be increasingly viewed as antiquated.

Lastly, because the computer science programs of these universities are largely similar, whether public or private, expensive or inexpensive, I would not expect a graduate of one to be significantly more skilled than another based on the material covered alone. Rather, I would attribute any differences to the intensity of the coverage, which is difficult to measure, or to the selectivity of the institution. I did notice that a few instructors at Stanford seemed to take their job very seriously and had some excellent internally produced instructional material that I am unable to provide on this site. Regarding selectivity though, this would only be a reliable indicator of student ability if the qualities the institution is selective about are relevant, which may or may not be the case.

Here are some other articles by people who also believe a problem with the current computer science curriculum:

What's wrong with the standard undergraduate computer science curriculum?
What would you put in a Computer Science Curriculum?
Advice for Computer Science College Students

2240 unique visitors to this page since July 27 2008