So recently I blogged about how coming out of computer science one would get the impression that computer science is nothing more than software engineering. In so doing, I brought up that one of the driving forces behind how we perceive computer science is industry. By approaching computer scientists with software engineering positions it's hard to see computer science outside of this paradigm.
However, industry is just one of the facets describing what computer science is. Another, we can find in academia. In detailing what is required to give a computer science degree we describe what computer science is. While examining different enrollment requirements across schools I learned we don't even have a common language for describing computer science. Some people where getting bachelors of science in computer science. Some can only get a bachelor's in electrical engineering with a computer science concentration. Some get a bachelor's in technology and some even get a bachelor's in computer applications. To describe some of these different facets I examined six schools describing my academic options in computer science and a couple schools internationally to see how the language varies across the schools. I also did my best to determine where in the suggested course sequence the first theory/discrete math course would be taken.
1st, my home institution and thus easiest to research Carnegie Mellon:
Carnegie Mellon has a very descriptive and intense description of what computer science is, in part because we know what a problem describing computer science can be. The SCS website says:
"At Carnegie Mellon, our curriculum encompasses the entire study of computation and how it can be applied to the world around us. Computer science can organize information, build smaller, faster, more secure systems, create channels of communication and delve deep into complex data sets."
with even more at http://www.scs.cmu.edu/prospectivestudents/undergraduate/index.html
Additionally, my first discrete math course was my very first semester taking the difficult concepts of mathematics which was a real crash course into what I would be studying in my years.
2nd, an institution I grew up around Arizona State University:
ASU's degree description leaves a lot to be desired, stating:
"The discipline of computer science is concerned with the design of computers, computational processes and information transfer and transformation. Examples of projects a computer scientist might work on include: design of next-generation computer systems, computer networking. biomedical information systems, gaming systems, search engines, Web browsers and computerized package distribution systems."
It's hidden in there with "information transformation" but there's nothing really shocking that tears you away from computer scientist equals programmer. Examples of projects a computer scientist might work on include: programming some stuff. More can be found at: http://engineering.asu.edu/undergraduate/cs
Additionally, ASU computer science students are tasked to get started programming early while fulfilling their gen eds. In their third semester in the suggested course sequence I was finally able to find discrete mathematical structures which I assumed to be their first discrete math course.
3rd, the Massachusettes Institute of Technology:
MIT I found interesting because their program was the only one I found explicitly coupled with electrical engineering. I think you can only obtain a bachelor's in engineering with a "computer science track" if you wish to pursue computer science. As such their "what a computer science degree is" description is less concrete and I had to settle for the learning objectives from acquiring a degree the part of which I found most noteworthy being:
"4. Students will develop an understanding of the importance of the social, business, technical, and human context in which a process or product being designed will work."
Being implicit about the social and human context in which a process is designed I think is a valuable component to the description. Computer science involves a lot of teamwork and thinking outside of the programming paradigm that also necessitates looking at the human component. More about MIT's objective is here http://www.eecs.mit.edu/ug/objectives.html
MIT's suggested course sequence wasn't easy to find in the literature I perused but I believe in the first year one of their options is for "Math for Computer Science." The name I don't feel is the most inspiring but it's very early on in the track.
Looking at a global level I also examined how Oxford University structures its CS program:
Oxford also makes the computer an explicit part of computer science stating:
"Computer Science is the study of problem-solving using computers. Digital computers and the programs they run are among the most complicated products of modern engineering. This practical discipline has its foundations in basic, curiosity-driven science. What kind of thing is a computer program? How can we create programs whilst being sure of avoiding bugs? What is the fastest way of solving certain kinds of problems? Are there problems that can be stated simply but have no simple solutions? Are there problems that cannot be solved by computers at all?"
While it does tap on computer science, but attempts to make programming an ingrained part of computer science. How do we avoid writing programs without bugs is particularly jarring in this regard and I'm not sure where they're going with that. More about Oxford's CS program is: http://www.ox.ac.uk/admissions/undergraduate_courses/courses/computer_science/computer_science.html
Additionally, the suggested course sequence expects students to take both design and anaylsis of algorithms as well as discrete mathematics, logic, and proof in their first year starting theory off early.
Finally, I looked at one of the schools in IIT, Kanpur:
IIT is very proud of its reputation as a leader in computer science and proudly expresses the fact that they were the first college in India to offer computer science. How the degree itself is described however is hard to find on the website. I was unable to find an actual description of computer science on the department website. If you would like to search their website is http://www.cse.iitk.ac.in/
One interesting thing about IIT Kanpur is students don't take any courses described as computer science until their third year. In their first two years they take only core courses while their last two years are almost exclusively computer science with their first discrete mathematics course appearing in semester 4.
Looking across all of these perspectives I don't feel comfortable describing any as optimal or the best. I lean strongest to Carnegie Mellon because it's the program I've grown out of but I expect any member of any of these institutions could critique similarly. What is very apparent however is we all have different expectations and different language for computer science. Some schools get their students in theory earlier while some get them in later. Some schools also like to market their computer science programs as very closely attached to computers while some like to describe computer science differently. These issues of language will have to be taken into account when evaluating how different cultural factors are in play.