views:

618

answers:

8

I'm planning on doing research into Computer Science education for my senior project and I could think of no better group of people to consult than the SO community.

So, what do you think about the state of CS education in the United States (and the rest of the world, though I had planned on focusing on the US)? What do you feel are necessary topics? What topics are superfluous? Objects first vs. Objects early vs. Objects later?

ALSO, if anyone has or knows of any blogs, studies, etc., those would be very helpful as well.

A: 

What do you mean by CS Education? Do you mean software engineering education or actual computer science (or rather pseduo-science)?

Andrew Austin
Both really. I've noticed many schools tie in a decent amount of software engineering into their CS curriculum. Whether they should/shouldn't and the pros/cons are EXACTLY what the question is about
CheesePls
-1 for the troll. It's a scientific discipline in the same sense that math is a science. If you think otherwise, perhaps you have never encountered a real computer scientist.
Paul McMillan
Unfortunately, the volumes of computer science research that lack grounding in an empirical foundation refute the claim that the current discipline of computer science is a scientific one. Sure there are pockets of science being conducted in various sub disciplines, but seeing all the junk out there makes me uncomfortable in claiming that our discipline has evolved to the state that we should be calling it science.
Andrew Austin
@Andrew It's about as much a science as String-Theory
CheesePls
Although there are varying degrees to the quality of specific CS research studies and publications, that is no reason to condemn the field as a whole. It's not much different than the various levels of quality in commercial and open-source software development.
Joel Hoff
Agree with Paul, but let's not get carried away about the string theory. The latter compared to CS, in terms of depth and complexity is like computer science vs. counting sheep.
Pavel Radzivilovsky
@Pavel +1 for making me laugh WAY too loud at work
CheesePls
+5  A: 

You might want to contact Andrew Petersen. He is the Faculty Advisor for Undergraduate Computer Science at the University of Toronto at Mississauga. He is particularly interested in what your question asks.

Now for my opinion:

  1. Focus on how concepts are being taught. This is because there is a huge gap in what teachers knew when they first learned what they are now teaching their students and what these students now know. Also keep in mind that these students are learning things from their teachers at a different time in their life than their teacher learned these things.

  2. What kind of questions do students ask? This reflects the gap in the students actual understanding of anything when they are being taught and what the teachers think is the students understanding.

  3. What kind of assignments are they asked to do?

  4. What can they actually do as first year students? as second year students? ...? as graduates? In my summer after my first year of CS education, I was at an internship that wanted me to do some organic SEO work for them. At the end of this project I was told that what I had just done for them would have cost hundreds of thousands of dollars a decade or so ago.

  5. Talk to employers. Why do they hire students from this program over other programs? Is it strictly domain skillset or does it also have to do with general learning skills?

  6. Is there a social aspect to this? How are geeks and nerds being look upon today? What is their social status while in school? Do they play sports now? Do they have friends? What are the gender ratios?

This is all I can think of right now, but I will post more as I think of more stuff

Hope this helps

inspectorG4dget
+1  A: 

I am an undergrad student, and the following is my opinion.

One major aspect I would change in my courses, is to make them depend on previous courses. I mean it literally. When you throw the code you wrote, you are just throwing everything you learned in that course. What if we had the chance to contribute to a class-wide project where everyone is assigned a task, instead of that everyone is assigned the same project or a similar project. Of course, in the next suitable course, you would improve the aspects you learned in this class. While that, I can be exposed to maintainability and other real-worlds skills that I feel lacking.

My point is that the curriculum doesn't lack theoretical topics, instead it lacks the exposure to real-world application of that theory.

Thanks,

AraK
I disagree completely. The mark of a good computer science program is one that exposes you to many varied concepts. Computer Science is NOT about real-world practical training. It is about teaching you how to learn and think about the big problems associated with the discipline. You can pick up specific skills as you work in the field. If all you want is Java training for real-world job skills, I respectfully submit that you're in the wrong program.
Paul McMillan
@Paul McMilan A mathematician who isn't able to construct an argument using a pen and a paper is a useless mathematician. A computer scientist who isn't able to construct a program out of his theories is useless also. I didn't say anything about reducing the theoretical aspects of the curriculum. What I said, they should change the practical part of it. And btw I don't like Java!
AraK
@AraK: If your CS degree doesn't include practice implementing the concepts, of course it's worthless. My point is that if you want real-world job skills, getting a "Science" degree isn't the place for it. If you're smart enough to get through a CS degree, you're smart enough to pick up what you need to know in the workplace pretty quickly.As an aside, the "big class project" is a nice idea, but impossible to grade, especially when half the class doesn't complete their part. Furthermore, coming up with enough "bit parts" that still exercise the concepts at hand would be nearly impossible.
Paul McMillan
@AraK: I agree with your last sentence. I've published applied research, and of course you always get flak from reviewers. From academics you hear "too applied - not our business". The flak you get from applied types is "that's not what we were taught". Some fun.
Mike Dunlavey
+12  A: 

We have trouble separating the Science from the Engineering.

Many schools turn out "Computer Science" degrees with skills that would more properly be taught in an engineering program. Many employers mistakenly require CS on a resume, when in fact they need an engineer.

This has led to an overabundance of programs calling themselves CS when they are, in fact, nothing of the sort. It has also led to an overabundance of Computer Science degrees.

Real CS programs are becoming more rare. Students enrolling in them are valuable, but often under-utilized. If you need someone to code Java in a cubicle for you all day, you probably don't want a Computer Scientist. If you need someone to design code that takes weeks to run on your supercomputer, you may.

One metric to tell the two apart is the languages they're taught in. If your course of study is all in Java with a focus on practical applications, it's almost certain that you're learning the engineering version. If you start with a lisp-variant, and work in a new language every semester, you're far more likely to be training as a scientist. If you design operating systems and are required to take a great many math classes, you're probably becoming a scientist. If you're taking CS because it will provide a dependable, well-paying job down the road, you're becoming a software engineer. If you're taking CS because you want a PhD, you're probably becoming a scientist.

Employers need to recognize the difference when hiring. Some already do. Many end up hiring non-CS degrees such as Cognitive Science for creative, out-of-the-box thinking. It is unfortunate that the mark of a creative, scientific approach to problem solving has become an avoidance of the named degree.

Edit: I'm not terribly surprised that SO is full of people with CS degrees extolling the real world applications of such.

My point here is not to denigrate Computer Science as a degree, but to point out that the definition has widened to the point that "Computer Science" no longer tells us what we want to know. I want software engineering degrees to be labeled as such, and to focus on valuable skills for that discipline.

In other fields, calling something "Science" means that the discipline and resulting job opportunities have a strongly research-oriented focus. You hire Structural Engineers and Materials scientists for different jobs. I'd like the same to be true of Computer Science.

Paul McMillan
You know, even MIT doesn't start with a Lisp variant. ;)
mipadi
UC Berkeley does. And MIT supplied the best CS textbook ever, hands down. If you haven't worked through SICP, you should.
Paul McMillan
sounds to me you studied CS and all you got was a cubicle ;-)
ManBugra
I disagree with the notion of separating Computer Science from its practical application in software design and programming. In my experience, most of the education which occurs in a solid bachelor or masters program in CS is **equally** applicable to either becoming a scientist or developer. The question really is how many current CS programs are doing a decent job of educating students in the fundamentals of the field.
Joel Hoff
It might be worth elucidating why your so called "Computer Scientists" are so much more valuable than your "trade programmers". Today's reality is that computers are commodities; there are percentage-wise very few "supercomputers". I know that if I were taking a degree now I would like my degree to have practical applications in today's market and it be relevant to the realities of producing software commercially, rather than have it be based on some dated concept of what computing meant in the 1970s. Sorry, but to put it bluntly, your comment smacks of a dated elitism.
Groky
@Paul: I've been in both worlds, and your caricature of trade programming reminds me of the way, as a professor, my colleagues and I used to look down on Cobol, when we worked in a much more modern language, Pascal. We were blissfully ignorant that, regardless of language, the difference between ivory-tower problems and rolled-up-sleeves problems is like the difference between monochrome and color. The real world has real problems with big significance that make the kinds of things that professors work on to get published look silly.
Mike Dunlavey
In my experience it is rarely computer scientists who program supercomputers, you are much more likely to find a computational scientist programming a supercomputer.
High Performance Mark
You make it sound like an engineer is some kind of lesser life form, content with a life of boredom and mediocrity. Would you take the same disparaging tone about a doctor when compared to a biomedical scientist? Would you let a biomedical scientist operate on your brain?
Daniel I-S
To extend the medical analogy, you don't put everyone through an MD course of study, and then tell half of them they are to be nurses. There's nothing wrong with the job a Nurse does, but it's not the same job as an MD, who very often has a completely different set of tasks and goals when compared to a medical research scientist. The training should not be the same, and we need many more Nurses than MDs, and more MDs than research scientists.
Paul McMillan
@Paul: I appreciate what you're saying, but here's what astounded me. I went the full engineering, then CS PhD route, through MIT, Georgia Tech, and again MIT. In the AI lab and elseshere, people (who you probably know well) would make up problems to apply their theories to - be limited only by their imagination. Sounds great, right? Well I discovered that *my* imagination was actually a very severe limitation, and their's was not much better. The real world is a *fountain* of really interesting problems, that could really use their intellect, but they're "locked up" in holes.
Mike Dunlavey
I have heard this argument for many years, mostly from frustrated people who would like to be near the top of their field and are not. In Silicon Valley, the excellent education matters. A deep understanding through many languages, layers of abstraction, and insight to how the knowledge relates across disciplines can lead to the breakthrough implementations that are later written up in papers. The people who call themselves "Computer Scientists" here fail to understand it as a code for "Will Never Work". The real computer scientists see that the science advances through implementations.
Charles Merriam
+1  A: 

This is a great question. for background I'm 10 years out of college where I got both and MS and CS in "Computer Science". Pauls post from above is quite good - he's correct in stating that we have trouble drawing a line between the science and the engineering. Most of this is because computers are a relatively new thing where every ten years many of the technologies have been reinvented.

In many schools you can choose between CS course loads – often there will be a CS course that came from the math department and one that came from the EE department.

As for which dept your course load comes from, the stinker is that both are important and you can’t do one well without the other. My course load focused on algorithms, math, and the science. This background was GREAT if you're looking to stay in a research environment. Trouble is to do REALLY COOL STUFF you can bet the size of the algorithms will grow as you pile on code.

Once you start piling on lines of code the job changes to how do you architect your code so you can refactor, track problems, layer, decouple, and grow the code base …so instead of using a calculator you’re using project management / engineering techniques.

The good news is that there is need for both in our economy – you’re lucky. Even better is they really go hand in hand, you don’t get a great piece of engineering without good science, and good science requires the engineering discipline to scale.

Here’s what I’d do – get a project, something math heavy, something practical, whatever. Then get a free copy of Visual C# Express and a copy of the book “Introduction to Algorithms” by Cormen/Lieserson/friends. This is a very famous text used by almost every CS department in the US. Here is a URL: http://www.microsoft.com/express/Windows/. I’m pushing C# because it’s a clean language and VS is free and integrates debuggers/compilers/editors. You could also use C++/Java/C.

Good luck!

stuck
+5  A: 

Wow. Where to begin?

  • Treat it more like engineering.
    Pick any other branch of engineering - Electrical, Chemical, Mechanical. It is considered "applied science". That means there are underlying physical laws discovered through science and math, those laws are quantitative, and the engineering consists of applying them to solve real-world problems. To my mind, the basic underlying laws of computation has to do with computability theory and information theory, in their various forms.

What we have in "computer science" is some of that, not much, accompanied by a lot of band-wagons. Certain things are supported by proofs of their benefit, like algorithmic complexity, and Huffman coding. Other things are not, like OOP and functional programming. And it seems like the less concrete justification there is for a concept, the more dogmatically it is taught. It is as if medical students were taught to believe (under pain of a failing grade) that monoclonal antibodies were the answer to every illness, and when they graduate they carry that religion into the outside world. NO - they are taught that every situation has multiple interpretations, multiple possible solutions, and to weigh the pros and cons of all the different courses of action.

To me, one clear indicator of this problem is the emphasis placed on inventiveness. To find a new and interesting way to do something, even if it has flaws, is highly prized. In CS it is discouraged in favor of doing things "the right way".

  • Have quality-control.
    A curriculum consists of courses that build on each other, so if the professor of CS202 feels that the professor of CS101 is not adequately preparing the students, they can hammer it out. In an engineering school, there is interaction between industry and academia, so that if industrialists think the graduates should know something, they can bring it up with the professors.

In "computer science" the attitude of professors is that it is their job to teach what they consider most interesting, and that it is the "real world's" job to teach them useful mundane techniques. So if you're hiring graduates, you see people who can tell you what a friend class delegate or a virtual destructor is but don't know how to develop design alternatives. On top of that, the graduates are not of a mind to learn practical skills from industry. Rather, they are of a mind to spread the gospel of the latest nifty bandwagon taught to them as the end-all of software to all the ignorant old-timers in industry.

So, long and short - treat it like real engineering, and have quality control via two-way interplay with industry.

Mike Dunlavey
@CheesePls: I wrote a book on this (http://www.amazon.com/Building-Better-Applications-Efficient-Development/dp/0442017405) that is now out of print.
Mike Dunlavey
I tend to lean toward this line of thinking. And thank you for the reference to your book, I'll try and find it through interlibrary loan or via ACM if its available.
CheesePls
@CheesePls: If you email me (mdunlavey @@@@@ pharsight ..... com), I can send you a bootleg copy if you can handle a 17mb Word doc file. (I had to scan it all.)
Mike Dunlavey
I agree with you. Let us take it a step further and stop calling it science. I have no problem with the things you complain about, but leave them to the navel gazers, and let everyone who wants to get real work done graduate with an engineering degree.
Paul McMillan
@Paul: There is something called "Software Engineering", but I think my opinions apply to that as well, maybe more so. MIT had this idea that to do engineering, you had to be well-grounded in the science and math, and I bought into that.
Mike Dunlavey
+1  A: 

Well, you probably won't like my answer.

The enemy is accreditation.

Going back to early computer science education days, the best schools quickly had good computer science programs: MIT, UC Berkeley, CalTech, etc. These schools had a lot of experience with new fields and many multi-talented professionals to slot in quickly. And then there were some outliers, like California State University at Chico (CSUC).

Now a state university in California is not a top tier school: those are the Universities of California. This small, middle of agricultural area school quickly became an excellent school for computer science. The pressures were immense on students. Excellent faculty were lured by rural settings and reasonable weather. The goal was to take a student, teach them for four years, and turn out a graduate equivalent to a professional with five years experience. Hewlett-Packard would routinely hire large fractions of the class.

Then, in 1986 or so, the department decided to become an accredited computer science school. Several courses were split into two semesters instead of one. Calculus was added as a requirement, displacing one of the several required writing classes. Students were allowed to write the code from home instead of being physically in the cavernous labs. The requirement that students would code on a different computer and different language each semester were dropped.

The pressure dropped. The unreasonable drives for six 3,000 line programs per class dropped. The frantic collaboration in the crowded labs as people debugged each others code went away. The quality dropped.

Today, the Computer Science department at Chico is all but dead. There are less than a dozen professors left. Companies no longer clamor for its graduates. Oddly, there are four other computer degrees at Chico in more demand (Business Information Systems, Management Information Systems, Computer Engineering [firmware], and Computer Art and Animation.

There is no need to be mediocre.

Charles Merriam
I've noticed similar things at my university. Courses that really should be one semester are expanded to two, all in the name of Objects-first and holding students hands while they learn Java. I actually started a blog about it www.dougroccato.com
CheesePls
A: 

With all due respect to CS schools, I would recommend against the academy, while so much exciting research is going on in the industry. Computer vision, for example, looks unthinkably promising - and there're companies doing wonders in the field.

Also, the industry is a much more "honest" place. Making something work is a more convincing achievement than academic papers.

Pavel Radzivilovsky
The question is about CS education and what people think it should include/exclude. Not so much questioning where research is best done.If I've misinterpreted your answer, my apologies.
CheesePls