17

I always hesitate when talking to professors about trying to improve the percentage of people who graduate with a CS type degree compared to the number that start out thinking that is what they want. On one hand I really do think it is important for professionals to be involved and give this feedback, on the other hand it would be better if less sub-par students ended up with CS degrees.

I don't think every mind is built for this field and you have to be a good life long student. You have to have a high degree of patience and problem solving skills just to eek by. If you do have the "right" kind of brain, those hard problems are what drives you to continue. If you just get a long list of easy problems you get bored so these people are actually not good at more repetitive jobs. I don't need to go into all the details... if you are reading this you probably know what I'm getting at.

So the question is: How do you find the balance of a degree program that is accessible to enough people to be funded and considered successful but also doesn't turn out people who aren't really cut out for the job? Maybe a better question is, what metric do you use to know if the changes you are making in a degree program are making it better? I don't know that a higher graduation rate is a good metric. And it seems that the feedback that you could try to capture many years later about the jobs that the graduates hold would be too far delayed.

I've struggled with this question for a long time, mostly because I don't think there is an answer. But I thought I'd ask to see if anyone knows of any research that has actually been done on it.

Addition: I recently had a very wise professor remind me that not everyone who graduates with a CS degree even wants to be a full-time programmer once they have actually discovered what that means. But, with the education that they received they could possibly make great Project Managers, Managers, system admins, etc. I think this was a very good point that I hadn't thought to consider here. There are a very high percentage of people who don't end up working in the field they majored in, CS isn't an exception to that. Having the extra folks helps not only in budget for the degree but also to expand the percentage of non-programmers who still know enough about it to work with programmers.

2
  • @Job- Thanks, that is a great point and does make me feel a lot better.
    – Beth Lang
    Dec 11, 2010 at 18:54
  • 2
    @job: speaking as a psychology major, now programming NMR machines, I can attest to that.
    – Matt Ellen
    Dec 11, 2010 at 23:44

6 Answers 6

33

Ok, by popular demand ... Let the free market figure it out. You know, 95% of psychology majors end up doing something else. Not everyone with a CS degree/minor ends up programming, but they make better managers, analysts, project managers than those without. Do not carry the weight of the world on your shoulders. CS degree is just a piece of paper. Those with math, physics, chemistry, biology degrees go on to become programmers, and not everyone with a CS degree becomes a programmer. Without millions of kids aspiring to be the best baseball player, we would not have such great stars. The system is self-regulating.

3
  • I agree to some extent, but I've also had to support code written by people with degrees in physics, math, and mechanical engineering who thought they were programmers. Just because someone does something for their job doesn't mean they do it well...
    – Joel C
    Jul 18, 2011 at 21:39
  • 7
    I've seen plenty of bad code written by CS students. I've seen amazing code written by people from math or physics or whatever. There is pretty much no correlation between what exactly you studied and the quality of your code.
    – jhocking
    Jul 18, 2011 at 21:49
  • 1
    also, go biology!
    – jhocking
    Jul 18, 2011 at 21:49
11

While I do think Job's answer is important to keep in mind, the same answer could be applied to a degree mill. "I paid my $199.95, now give me my CS degree."

Winnowing down the student body according to a standard of what "real programmers" are isn't really your job. Teaching students how to program/design is (presumably?). If you didn't change your way of thinking in college, you wasted your time there. Your goal is to show any student who shows interest that becoming a programmer changes their way of thinking for the better. You do that indirectly by showing them...

  1. what programming really is and...
  2. that they can do it.

We do it wrong

There is extensive research out there that shows that the way 95% of our college programs teach programming/CS is terrible. The average CS program starts out with

  • A semester of basic programming in C++/Java/C#, which spends 16 weeks teaching few things more advanced than "this is a for loop". An analogy might be if the Physics department spent a semester studying the greek alphabet before starting kinematics.
  • The second freshman semester gets into basic data structures and usually completely leaves behind 1/3rd to half the students.
  • Sophomore year is spent in some combination of assembly, data structures, algorithmic analysis, an ethics course and maybe your first topical course. You tend to lose another half of your incoming students during this year.
  • Juniors and Seniors get into classes with names like "Graphics", "Networking I and II", "Operating Systems", and it's the first really interesting material that students get to see.

Almost anything else is better

Almost any experiment improves the situation, measured in terms of student understanding of the topics AND program enrollment AND graduation rates. Some of the experiments I've seen in ACM CSE's journals are...

  • Building from very simple theoretical state machines to assembly and on to C, ending with C#/Java in your senior year. The focus is on slowly crawling up the layers of abstraction.
  • Choosing a very "simple" language to focus students on data structures and abstraction. I've seen good results with students writing rather complex web apps in a scheme variant by the end of freshman year. (It was a modified wiki that would run the page text through scheme before displaying... sorta fun)
  • Focusing beginning students on a particular area (networking), and teaching every Java structure/statement as an "aside". Second week students ping the mail server to see a list of their email, final project is a simple IM client. The focus is on showing students how programmers make one part of the world work.
  • Some programs focus on robotics. Freshman play with Lego mindstorms... sophomores use the C-like API, Juniors and Seniors work with the ME's and EE's in a cross-campus collaboration to build fairly complex systems.
  • One program focuses students on READING code for the first half-semester. They analyze code in the X11 system to teach flow control and basic syntax for 8 weeks or so before even starting to write code. Their first programs are small patches to modify a bit of behavior.

Every single one of these experiments saw massive improvements in student initial interest, knowledge transfer, and retention till graduation. Some are more appropriate for certain college environments than others, but if you're following the structure described in the paragraph above, ask yourself, "Would I stick around for the first two years of this program?"

1
  • I agree with you in that we should be focusing on showing them what programming is all about and how it can change your thought process regardless of what you do afterwards. Good thoughts.
    – Beth Lang
    Jul 25, 2011 at 20:08
2

To program is to instruct in a logical manner so as to achieve some desired output. In other words it is telling the computer to do some task. The only way to move forward is by practicing.

Just as learning English or any other language you need to start by learning the syntax (alphabet) and then move on to grammar and other constructs. The amount of time required varies depending on the complexity of the language. Coding in higher level languages like SQL, Python is almost like writing English.

2

A few aspects would help, I think -

  • Profs who are aware of the modern real world. If they are able to talk about current tech and how it fits into theoretical frameworks, that's much more relevant to history-unaware undergrads than dissections of VAXen without reference to the current tech.

  • Department-supported internships. If the dept can guarantee at least 2 summers of paid work with tech companies, then there's a great incentive to stick around.

Frankly, modern computer science students are much more blessed than ones living even 5-10 years ago. The ability to purchase a low-end system, and then to install a VM, and learn multiple languages, operating systems, etc, for free is such an enabler, it's hard to overstate it.

Of course, the seminal people like Hopper and Knuth taught themselves without the shinies. Genius will out.

3
  • While the idea is great... two summers of guaranteed paid intership work is unfortunatly not realistic. Yes, there are paid internships but most grads are lucky to get one paid right now and often have to settle for unpaid. This may be different in other states. I think that you are right about them having more opertunities though. They can contribute to many more open-source projects then there were a few years back as well.
    – Beth Lang
    Jul 14, 2011 at 5:19
  • @BitOff: I have never heard of an unpaid CS internship. Jul 14, 2011 at 14:14
  • No kidding? It must be a localized thing then.
    – Beth Lang
    Jul 16, 2011 at 17:55
1

Create a staging area for potential, successful students outside of your degree program to mitigate risk. This might include sponsoring AP CompSci classes in local high schools to preemptively separate the wheat from the chaff. If this turns out to be too difficult, try infiltrating local DECA chapters (or create a new one) with a CS oriented program in the high school or college divisions. Conversely, you'll be showing entrepreneurial students seeking management skills, possibly with unrealized CS potential, a new pathway to fulfill their business aspirations through your academic medium.

1
  • Yes, I completely agree that we need to be doing more to introduce CS at earlier ages then college. I know that most highschools offer one or two advanced computer classes that can get into a programming language but I don't think that is enough. I've often thought that if you could teach a simple, kid friendly language to 4th-6th graders you'd be capturing their interest at the right age. I first learned basic when I was 8 or 9 and, although it took me another 10 or so years to really get into it, that left me with a great memory of "programming".
    – Beth Lang
    Jul 14, 2011 at 5:15
1

I'd argue that the key is in understanding different levels of such programs:

Universities - This tends to be where one can study just for the sake of studying. In this case a very different standard may exist in terms of creating programs and adjusting them as this can be quite theoretical, or at least that is what I remember from studying Computer Science in my upper year courses.

Colleges - These tend to be more career oriented which is where feedback from the industry and connecting companies with colleges is a key point. Looking at placements 6-12 months after graduation could be a metric used to see how well are people doing after they graduate as the key question is whether or not someone viewed their time and money getting that education as worthwhile. Updating the program will likely be more frequent as the programs here may be a bit shorter,e.g. university Honor Bachelor programs tended to be 4 years while a college diploma program may be 18-24 months. Thus, the challenge is more with getting this part to have connections with companies so that people can get exposed to the work and see what works or doesn't work for them.

Not the answer you're looking for? Browse other questions tagged or ask your own question.