Computer Science Education
Recently I read a blog post from Keith Ward about Computer Science education. It struck a cord for a couple of reasons. Firstly I’m a computer professional by day and a CS professor at night. I teach both basic computer and programming courses at my college. I’ve been teaching for years. Secondly I’ve seen the arguments on both sides of the fence about the “best” way to teach students to ensure they are successful. Thirdly I’ve interviewed hundreds of people over the years for various positions and I’ve seen the results of both good and bad educations. Rather than posting a long message in Keith’s blog about my opinion I figured it would be better to post it here since I’ve been meaning to discuss it for a while.
Computer science is hard. When I went to college we had math professors who learned to program and then taught us. The teaching involved the professor going over some programming concepts and throwing up sample code in class and the students going home and working on programming labs for hours. You might take a 2 semester programming course and then move on to the other computer topics. In the early courses it was not unheard of to have a project due every 2 weeks. You were on your own to learn your way around the computer, the IDE and the language. Debugging was trial and error. If you really needed help you could talk with the professor but otherwise you were on your own. In later courses you might have to learn an entirely new language (C or C++ at the time) on your own in order to do the assignments in class because a professor would only accept certain languages. This was above and beyond the course material. Back then computer programming was new, exciting and in high demand. Folks were there to get a degree in something that was seen to be rewarding.
Fast forward to today where schools offer 2 or 3 different languages. The core programming language (often C++) might be a 2 or 3 semester course. The number of projects have dwindled down to 5 to 7. Students are expected to get most of the information during class including how to debug, use the IDE, write code and test. Needless to say that is a lot of material to cover in 15 weeks (a standard semester). There is almost no time for professors to slow down to ensure the class is getting a particularly tough section. There’s also no time to address any additional information that is outside the curriculum (IDE usage, debugging, etc). The CS industry is becoming saturated. CS is no longer a specialty career. Students aren’t interested in working harder to get a degree when there are other, equally rewarding, careers available.
In order to write code you need to know several things: the language, the IDE, design methodologies and debugging. Traditionally the language is taught first. Consequently the IDE has to be learned by the student. Debugging code is generally an on-the-fly skill learned by the student with assistance from the professor. Proper design comes later after the programming courses are done. So out of the box the student has to pick up the IDE and debugging themselves while learning a new language and, even more important, an entirely new thought process. Statistically speaking most schools see either a low enrollment for the courses or a low retention rate for subsequent courses. Is it any wonder? There is so much work involved just to become a basic programmer that most students have neither the time nor the desire to continue.
What can we, the educators, do to solve this issue? The (somewhat) popular approach is to dumb down the class; make only a few simple projects due, provide simple exams that test only rudimentary knowledge, and/or give large curves. What does this do? It encourages the students to continue in the program. No matter how we dice the problem it eventually is going to boil down to the retention rate. A department (CS or otherwise), no matter how good it is, cannot survive unless students enroll in the courses. The harder the courses the lower the retention rate.
I worked at a college (for one semester) that followed this philosophy wholesale. We, as instructors, were told that if a student showed up for class then they passed. It didn’t matter how they did on assignments (of which we should give few) or exams (which should be easy). The important thing was that students wanted to come back the next semester. Needless to say I didn’t follow that philosophy. It was a rough semester for me. I would never work there again nor did they ever call me back. In this particular case the school put retention over the quality of the students’ education. These students were going to pay a lot of money for a degree and then not be able to find a job.
As an interviewer (at least for entry positions) I’m interested in what concepts you can put into play. It isn’t good enough that you can give me the definition of encapsulation if you can’t also provide me a reason why you would use it. In my experience you will get one of three students in an interview (again, entry level): book smart, straggler and earner. The book smart student can tell you the textbook definition of any concept you want. The problem is they cannot identify it in the wild or know when to use it. Even worse is any variations on a theme will cause confusion. These students have been taught to read a book and answer review questions. Their instructors failed to teach them the why’s and how’s of the concepts. Such students will easily pass exams but struggle with real-world tasks. This, in my opinion, is a failing of the educators who put too much emphasis on passing exams and too little on practical usage.
The straggler is the student who didn’t do well in most courses but managed to pass anyway. They might or might not know the answers to even the most basic questions. How someone such as this could get a degree is beyond me. Early on the instructors should have properly tested the student and determined that they do not have sufficient knowledge to pass the course. It is a fact of life that not everyone can be a CS person. It is important for the student to identify this early on. Yes the school will lose a student but it is better than having the student struggle 4 years and then walk away with a degree that they might not be able to use. Where is the fault here? In this case it can lie anywhere. Some instructors are more concerned about passing students either to make the college or their approval ratings higher (http://www.ratemyprofessors.com/). These instructors are only hurting their students. I’d rather a student struggle through my class and barely pass but know the material well than pass with flying colors but know nothing. However it might also be the student’s fault (gasp). Some students are interested in easy grades so they’ll do whatever they can to do the bare minimal. As an instructor I can’t force students to try and excel. If they want to eek by then all I can do is grade fairly and warn them about the potential issues they will face down the road.
Finally the earner has done their best, graduated with a degree and knows the material. The instructors have done their job and taught the material and the student has done their best to understand it. This is the student who employers like because they can be molded into a productive employee. Unfortunately in the modern era of quick degrees and lackluster colleges it is harder to find these students. Not every student is going to understand every concept they were taught but an earner has done the work and demonstrated their desire to at least try. Note that an earner isn’t necessarily a straight A student. When I look at student grades (as an interviewer) I’m generally more interested in students who struggled through at least a couple of courses. I’m especially interested in students who failed/withdrew from a course and then retook it. That shows initiative and a desire to succeed. Failures happen. It is how you respond to them that tell’s me what type of person you are.
To wrap up I have to share my opinion of professor ratings. There are sites available (see above) that allow students to rate professors. Additionally most schools have mandatory student evaluations of their instructors. For the school the evaluations determine which instructors to keep and which to let go. For students it allows them to share their opinions. The problem is that it is just that: an opinion. It is a fact of life that not every student is going to like every professor and vice versa. Unfortunately it is very easy to skew ratings/evaluations because of personality conflicts. For this reason many instructors are impersonal to students to avoid conflicts (ironically, impacting their rating). While I think the evaluation of instructors is important to weed out those who are not providing optimal education I think the entire picture must be taken into account. A single set of bad reviews doesn’t necessarily mean the instructor is bad. Finding patterns in the reviews is more likely to provide a better picture. As an instructor I am always interested in hearing feedback about my courses. Sometimes I get the summary information from the student evals but more often than not I never see them. As a result I ask the students to provide me feedback as they see fit. Dangerous? Yes. Helpful? Most definitely. The most discouraging thing about this is why I see a lot of bad reviews for an instructor on a site and yet that instructor is still teaching. Are the students giving the school one set of evaluations while posting another? I don’t know. Perhaps the schools are not doing anything with these evaluations in which case it is a waste of everyone’s time. More likely however the review sites are being filled with negative (or positive) comments by people who are posting their opinions irrelevant of the actual quality of the instructor. As a result I’m still not convinced professor rating sites are a good thing but until student evals are publicly disclosed and acted upon by schools there seems to be little alternative for students who want the best educators.