Sunday, March 25, 2007

Apparently computer science at Purdue sucks

Being a CS major at Purdue, I hear a lot of complaints about the way things are done. Often times, they're from people I don't know well, or from people that have made a bad first impression on me; regardless of what I think of them, sometimes they're just unfounded complaints, too. However, worse has come to worst when I hear complaints from what I see as the smartest of the department--usually honors students, but not always. If we're turning off the brightest light bulbs in CS, how are we supposed to retain student interest in CS? Being a junior now, I don't see many people that are very excited in my classes. Unfortunately, this trend has started to appear earlier in the years (our excuse is compilers), even down to the freshmen. One of my former students recently posted a note on Facebook about his beef with Purdue CS:

So many people are greedy, they are here to get a degree so they can make money, not to learn / change the world for the better / etc...

This is undeniably a true statement. Though, I would argue that its common in any major; after all, this is America. Essentially, we're forced into this philosophy (or into academia, or being a FSF junkie of some sorts, or whatever), and really this is a whole new discussion.

Academically repressive, exhausting and depressing.

This one is harder to really comment on. In recent years, CS240 (C Programming) has had a new professor (to the class, not to teaching) and a new set of TAs teaching the class. It's been getting terrible feedback from students, and I suspect that this statement is really the result of taking CS240. This class was pretty much golden when I took it, since I was under the instruction of Dr. Brylow and a capable set of lab instructors, but has since changed. While I can't comment on the teaching style of the new instructors, I can comment that the material has changed from historical teachings for the worse. Unfortunately, some students think this true of all CS classes they take. This is also a story for another day.

Of all the cs students I have met in my class, none have any love for the craft of programming. They all see it as a chore, and I don't blame them based on how our courses are taught.

This probably goes back to the "greedy" point. Most people in general seem to lack a real passion for what they do. As far as classes go, I think part of it is related to the lack of practical knowledge that's taught, in addition to excessive amounts of work and occasionally unreasonable constraints on assignments. Unfortunately, the latter is not easily fixed; for example, one constraint that was deemed unreasonable by another student in the class was the ban on using string library functions on assignments. This student is a talented programmer (also a former student of mine), but people who have never programmed before need to learn how to write these functions. Unfortunately, it slows the learning experience for advanced students, and the test-out process for classes is strongly discouraged/not allowed.

However, I would also say that there are still a group of students in CS that do enjoy programming. I'm more familiar with the upperclassmen, but I'm sure they exist in the freshmen ranks, as well. Difficult to find? Sure. It's not atypical for a CS major to be pretty anti-social.

TA's dont care. This is mostly because TA's have a bazillion things to grade though, which is more of a university problem of making classes huge. But TA's could make it easier on themselves by not being such strict graders.

This also seems to be a more recent development, which is somewhat unfortunate. For all of the CS180 TAs (at least this semester), however, I would argue that they put a lot of effort into trying to give the students a good learning experience. This comment probably is also related to CS240, and I can't comment. I've had a great track record of TAs, and most of the ones that I've had are extremely helpful when the situation arises, and are very knowledgeable and interested in doing a good job.

Though, when it comes down to grading, I might be inclined to disagree. I don't think a TA needs to be relaxed in grading. After all, if a student does something wrong, a TA should point it out to prevent future mistakes (say, for personal enrichment). If he/she ignores mistakes, is the student really garnering a good learning experience? I guess I don't really mean, "take off points for everything," as much as, "point out all visible mistakes to the student." It's still in the grading process, but it doesn't necessarily have to affect the grade. I stand by this firmly, as I see plenty of students who have had TAs that won't do this sort of thing, and write what I believe to be terrible code (where terrible may or may not be hyperbolic). For example:

public boolean foo() {
    boolean b = bar();
    if (b == true) {
        return true;
    }
    else {
        return false;
    }
}

This is a simple piece of code, it's pretty obvious what it does and I see this frequently, and it's not semantically "wrong". It drives me insane. It isn't that bad, but I believe it's indicative that something weird is being taught in class. I feel like I'd be committing a mortal sin if I didn't tell my students not to do this.

Most CS students are hardcore gamers, which alienates me somewhat from their ranks, because that is there primary social activity.

You can probably find CS students that don't game a lot and don't drink a lot (like me, except my reason for not gaming is time constraints, and believe it or not, laziness), but they really aren't high in numbers; this, I would agree with. However, they can still be found, I think. The CS department does a decent job of hosting events where you can network with other CS majors, but a lot of people don't take advantage of them. I'd say that this would be a better way to meet students, than in a classroom environment. Yes, we are quite often anti-social, but we're CS majors. You can meet other people at clubs that you're interested in, and I'm sure they'll be less socially inept.

It doesn't help that we're in the middle of a large corn field known as "Indiana," but I think people can find other things to do (movies, card games, whatever). Of course, I'm not an expert in these things, so I can't say much.

Another student (also of mine, what a trend) posted a comment:

Why don't we make CS fun and actually work on projects that are in interest to us?

I think the simple answer is, "It's extremely difficult." CS classes [unfortunately] have to cater to a wide variety of students: people who care, people who don't care, people who don't actually know how to code that have somehow survived X semesters where X > 1, etc. Making assignments that interests everyone is impossible. It's hard to cater to even a majority; how do you calculate what a majority is? Some people are interested in theory. Some in practical material. The debate goes on, and in the end, the instructors decide. In the end, the entry-level classes tend to be very boring for people who have prior experience; this is unavoidable, which sucks, sure. Even if you could test out of these classes, there would be a number of indignant people who failed the test out for X class, because they "knew everything" about said subject. It boils down to intro classes being boring, and advanced classes being, well, less boring. Less difficult? Probably not ever.

Another student some time ago suggested that CS352, the infamous compilers class, be removed from Purdue. Reasons cited:

  1. Really really hard
  2. Nobody remembered anything

My answer to one is pretty blunt: boo hoo. To the second, I think our department head responded correctly in saying that it's the student's fault. I hardly see how the curriculum is at fault for this. I'm somewhat biased in that I was probably the only person in my class who liked the stuff taught in compilers, but whatever. It was something new, which was refreshing.

But speaking of this student, complaints about the CS curriculum here can be addressed in a few ways:

  1. Mid-semester reviews
  2. USB feedback panel
  3. Complaining to your advisor

I think the feedback panel is the most valuable, since it's a collection of faculty and sometimes advisors that listen to what you have to say.

I've wasted too much time on this now, and now I'm going to fail my OS exam since I haven't studied.

27 comments:

Anonymous said...

Dan, this is a good article, I have always wondered why I didn't start out in CS and then I remember that I had not had any previous programming experience coming into Purdue. The part about making it fun is kind of a tough one, I have had two really fun projects for classes (ECE 364 and ECE 264) both of which actually made functional and useful programs, but the hard part is making a program that can teach a small part of the language versus a larger scale program that will be more functional. Good article

Anonymous said...

Nice article, but let me give you a few tips. These tips you will not get from anyone. If you are taking CS180, CS240, CS352, CS348, CS448, CS354 or CS422. Remember all these courses are project based. You can easily get them done from myhwsolution.com or rentacoder.com Thats how we passed in all these courses. I took CS180 with Dunsmore, CS240 with David Yau, CS352 with Hosking (Remember you can download the whole MiniJava project from online) CS354 with Gustavo and CS448 with Sunil Prabhakar. They give the same project in alternating semester and You can download them very easily. So hang on there. After you graduate you will end up in Microsoft or Google.

Anonymous said...

@kevin smith:
Sure, you might get the project "done," you might get a job with Microsoft or Google, though I'd imagine it's not very likely if that's how you get your work done. The point of the projects in those classes is to learn something. If you're not doing the project for yourself, you're not learning what you're supposed to learn.

It might be true that doing those projects doesn't help you with that, or that there's a better, or more efficient way of teaching those things, but if you haven't done the work, you wouldn't even know. Furthermore, what's a worse way of teaching something: a bad or difficult project, or nothing at all? If you don't do any of those projects, I'd be surprised if you get through the interview, but if you somehow do, I'd be even more surprised if you last the first few weeks before they find out that you're really not what they were looking for.

saiyr said...

I don't really know who he is, but it's kind of sad that "thats how we passed in all these courses." I got one B in my undergraduate CS classes, which was in CS182, and I never had to use those websites to get homework done.

Your comment basically mirrors my sentiment, Thomas, but I didn't really think it was worth replying to, since it was kind of ridiculous. I like your comment about a bad project vs. nothing at all, though, so thanks for your comment.

Anonymous said...

I'm going to give some actual reasons why Purdue's CS program sucks and where you're wrong albeit years late.

1) Professors aren't hired for teaching they're hired for research

The teaching environment in the Purdue CS department is centered around this. Professors just don't give a damn. This is in large part due to the culture that surrounds technology. A culture that promotes antisocial behavoir and tendencies.

2) Language ability
Professors in CS compose largely of immigrants. The reason their english is bad is point number 1. The reason this is bad because it forces point number 3

3) Self learning
A self taught man has a fool for a teacher. Purdue's CS department greatly encourages self learning, and isolation. This is also because of the culture centered around technology and computers.

4) Its not about the programming.
CS is a math degree, it is a way of thinking. Sorry but coding isn't important or needed for computer science. At the graduate level this is more understood than at the undergraduate level.

5) No love for the group
Isolationists, combined with antisocial behavoir, and poor hygiene habits make for a terrible CS experience. Again this has to do with the culture largely around computer science and technology. That needs to change.

6) Tech will not change the world
Sorry a culture's advancement is not its technology but its intellect. CS is largely a pseudoscience. Compare the advancements of biology, chemistry, physics in the last 50 years to that of CS. CS brings NO new information to the table.

7) CS does not promote intellectualism
Computer Science at Purdue definitely does not promote any sense of being well rounded. For example Who in CS takes Psychology as a minor? Not many. Or Art as elective? Even less.

8) Inflated sense of worth
The department misrepresents Purdue's value in the marketplace. Would you rather have an MIT grad or a Purdue grad working on your government contracted defense software? Purdue who?

9) Unneeded
The degree as it is taught. A long boring programming course is undeed. With no attempts to guide, focus on self learning, anti social behavior the norm, I might as well get a book at the library.

By the way I am a former and recovering Purdue computer science graduate. If we had more professors like Buster Dunsmore the department would of been great.

saiyr said...

Seems like you're comments fall into a few categories:

1. Professors suck.
2. Students suck.
3. CS (at Purdue?) is worthless.

Since Blogger doesn't seem to like my huge post, I'll try to condense my response to be very short.

1. Yes, Purdue in general is a research university. Nearly all of your professors are hired based on research. That doesn't mean they don't care. If you haven't gone to office hours for every bad professor you've had, I think you're making an unfair judgement. I don't know if your English point is a pointed over-generalization or what, but it's silly to me that you have a hard time understanding most of the professors in CS. The only way I'd find it not silly is if you'd never heard an accent before coming to college.

2. Yeah, CS has a lot of introverts. But it has a fair share of social people, too. If you can't find them, it's your fault. I also disagree strongly with your opinion on self-learning, even if it is a Mark Twain quote. Most of my friends taught themselves stuff in classes and just for fun. Does that make them foolish? Hardly. I've always held the opinion that CS is teaching you how to learn so you can drop into any job that needs a programmer and pick up the required technologies easily on your own. This contrasts from C&IT, where they teach you the technologies and that's it. If you truly had to learn most of the material on your own, then perhaps that's a bit foolish. For one, you seem unable to overcome a language barrier which doesn't amount to much, in my opinion. Secondly, you should have friends that have the same learning interests as you. Again, if you can't find any, I think you aren't looking hard enough. I'm not very social and I didn't have a problem with this.

3. CS may not be "about" programming, but basically every practical aspect of it requires programming. Don't kid yourself, hardly anyone does CS as a true math degree. MIT doesn't, that's for sure, and you seem to think of them much more than Purdue. You say that, "CS brings NO new information to the table." On the contrary, CS brings tons of new information to the table. Computers are used in all of the fields you mentioned, and algorithms are required to solve large problems, etc. Your intellectualism point is silly, too. I'll just leave it at this: I felt like tons of people had Psychology minors on graduating in my class. Inflated sense of worth? Of course. Most universities have an inflated sense of worth. The top companies come to Purdue to recruit CS majors. What more do you want? If you didn't get a job there, it's not Purdue's fault, it's yours.

I'm not trying to say Purdue CS is faultless, but I do think that your opinion of "everyone and everything but me sucks" is wrong.

Anonymous said...

My criticism was meant to be unfair. My only fond memories of the entire experience are of Dennis Brylow (as a TA and first year graduate student) and Buster Dunsmore. After that the professors were arrogant, valued their research more than their students, showed contempt for their own classes and students. Group work and guided learning wasn't encouraged. Not to mention the constant disorganization of the entire department and changing of requirements, class names, java/c++.

I remember I took graphics with Professor Hoffman. I was having particular trouble with the concept of ray tracing. Everything else up to that week had been fine. When I went to the TA for help. His response was "you should be able to figure this out on your own."

That I don't care how "dumb" or how far along a student is or slided by unacceptable.

Curves in the 25 to 33% range when Guerra taught are unacceptable.

I would consider doing it as a graduate degree if I came from a math background. But I would never encourage it as a undergrad degree at Purdue.

saiyr said...

I would agree that Dunsmore (though CS180 was very easy for me) and Brylow were both very good instructors. I think the disorganization you mentioned is more or less evolution. Requirements are still changing today, but under Prof Mathur, I think it's changing in a very good way (5 year BS/MS, Software Engineering specialty, etc). I'm not sure what you mean by "Java/C++", but I hardly think it's unreasonable to be required to know both, especially since they're in very similar categories.

I've never had this kind of interaction with a TA (mostly because I rarely speak to them). That is an unfortunate response. I realize that the opinion of some of the TAs here can get quite low, but I think there are some very good ones as well.

I have no idea who Guerra is. I don't think he/she is here anymore, so I guess your time here much predates mine. Perhaps things have improved since then.

saiyr said...

I forgot to mention:

Only once have I really felt truly negative feelings towards a professor, and that was when I took Numerical Methods. The class was pretty terrible, so I stopped going to class after a few weeks. I took a few more CS classes than the degree required, so I think I had more professors than most.

Changing of class names/numbers is "required" when the content of a class changes in any significant way. It is expected, so non-CS majors don't get the shaft by taking a class that is much different than advertised. And as I said, I believe changing requirements can be a good thing, and is at this point.

Anonymous said...

hi dan .. nice article. u did said that u get B in cs182 classes. is that the highest grade that u ever get? im just curious. how does u guys do the projects in cs courses. im currently in cs180. i took the fast track courses. i ll usually go to the TA hours where they said they will help the students to finish their project. but i found out they r not helping at all. when i ask a questions they give me another question for me to think. so i just wondering if u have better tips to survive in cs

saiyr said...

Hi,

No, a B is not the highest score I got in my CS classes. I was a bit different when it came to CS180, because I had been programming for awhile, so I didn't really have problems with the projects. I'm actually a TA in CS180 right now. If you would like to elaborate on how we aren't helping in the evening or suggest better ways to help, then feel free. I will bring it up at our weekly meetings.

Unfortunately, this is the first semester that we're offering this syllabus to a large number of students. Ideally, the people who aren't so experienced in programming should be in CS177 first. If you are struggling a great deal right now, then you probably should have started in CS177 to get a working knowledge of Java.

Please feel free to e-mail me (my e-mail address is on the course webpage) to continue this conversation. I would rather not continue it here; I won't expose your identity to anyone, either. I'll do my best to help.

Anonymous said...

Why does CS 240 still exist? The entire class is filled with busy work from C. A programmer that knows Java or C# can learn pointers and pointer arithmetic in 1-2 weeks.
*end rant*

My problem with Purdue CS is that it is slow and inflexible in the curriculum.

A good CS program is relevant and filled with practical analogies.

The technologies taught are stuck in the 80s.

Oh and where is business programming? C#, Silverlight.

At the rate Purdue CS is going they won't teach F# for another 30 years, if ever.

A good CS program is about entrepreneurs (professors and students). The lack thereof is where Purdue is faltering to Berkeley and MIT.

saiyr said...

I love how I still get comments years after the original posting :P Let me just say that if you know Java or C# to the point where pointers are "easy", you're probably above average. Lots of people get by CS180 with what I consider to be an insufficient understanding of Java. I am curious to know what your definition of busy work is. Re-implementing standard lib functions?

RE: Curriculum, I think Prof Mathur is changing the curriculum in a very positive way with the tracks. Have you seen those? I'm a grad student now, so it's way too late for me.

Regarding your next points, I disagree somewhat. CS is not a "practical" major and it never has been, in the sense that it isn't meant to teach cutting edge technologies. It's more meant to teach you the basics that are the foundations behind today's software systems. Business programming definitely has no place in CS. CS majors should be able to learn these on their own, quite easily. If you want to learn "business programming" then C&IT is the major for you. They teach technologies rather than foundations. To put it bluntly, I firmly believe C&IT is what CS majors learn in their spare time.

F# is basically OCaml with sugar coating on .NET. If you like functional programming, you probably want to take Prof Jagannathan's PL class. He's into ML. Or learn this stuff on your own. If pointers are that easy for you, then surely you have time to learn things that interest you by yourself.

I have no idea why you think a CS program is about entrepreneurs more than any other major. If you are interested in that, then take ENTR200. I think our lack of entrepreneurial talent is due to university/local culture rather than CS itself. There's not much that can be done about that besides dig up Purdue and move it to a coast.

Anonymous said...

I took CS 240 last semester so I will elaborate on my definition of busy work.

The projects were overly complicated in implementation for the concepts they meant to teach.

10% of the project time was spent towards learning the concept. The other 90% was spent towards implementing simple functions and error checking. I'm sorry C is not meant for error checking, and a good relevant IDE avoids the need for this nowadays.

My point about business languages is not to make them the main focus, but to be using them to teach foundations and concepts. An old language/IDE is good for no one's efficiency, learning, nor morale.

Another question is in terms of marketplace how many undergrads go into business programming for companies versus how many go into further research or grad school?

I gleaned from two CS teacher that CS's business partners have been stressing that the Undergrad CS majors require too much training after graduation (because of lack of practical knowledge and coding ability).

Properly organized team projects with the use of a relevant language/IDE and SVN would give a lot of necessary best practices experience.

I disagree any degree is meant to be used with some practical regard.
Mostly to get a job or to invent something new.

And if getting a job is the main focus I believe certain foundations of Computer Science have become less important for the main stream (still important for specializations).

Purdue's CS, like you said, is accepting that with the new track system. But besides the name and the more defined options, the track system is very similar to the previous curriculum. It has a long way to go to improve on flexibility.

About entrepreneurs. I am not saying CS is supposed to have more or less entrepreneurs than any other department because it is CS. Rather that a divisions success has a lot to do with how entrepreneurial and innovative they are. (And donations from produces entrepreneurial students helps too).

My main problem with Purdue Undergrad CS is its closed minded and inflexible attitude, which is the exact opposite of entrepreneurial.

Things are very rigidly designed in the program, boilerplated. It seems almost impossible to get around "the standard" way of doing things. Another wall for innovation.

The engineering and management departments seems to have a more flexible and entrepreneurial attitude, or at least be willing to workaround requirements.

Frankly as an experienced (business) programmer, Purdue CS does not seem to supplement my skills. I was looking forward to learning things such as Bayes nets, neural networks, or other algorithmic approaches. But I guess that would more likely be found in their grad cs program.

What I really would want from Purdue CS can be summed up into 3 things:

More flexibility,
More algorithms,
More relevant

Thanks for your advice about Prof Jagannathan's PL class. I will look into that. Although as CS is only my minor now, we will see if I can get the necessary overrides.
And yes I did take ENTR200.

BTW I got to your post by searching F# Purdue. Your blog is the only thing that had those two things in common.

Anonymous said...

And unfortunately this post is still relevant lol.

saiyr said...

I feel like having the majority of time on a project being spent on other things (perhaps not 90%) is not always a bad thing. After all, if the project was purely spent on said concept, it wouldn't be useful in the end. The labs are typically less interesting programs and should have more application of whatever is being taught.

Your statement that "C is not meant for error checking" is disturbing. I also fail to see how an IDE negates the need for error checking.

C may be old, but it's still used widely. To not learn it would be a tragedy. As for IDEs, learning how to program on an IDE is not necessarily the best experience. When I took CS180, we used Eclipse. They got lots of complaints from students about how complicated it was. I agree with them, too; IDEs like Eclipse are monstrously complicated.

My point about practicality is not about grad school versus industry. My point is that CS shouldn't be teaching students Silverlight, it should be teaching students how to make Silverlight (or whatever else). Students should be able to theorize how it's done. If you can reason about how a system is built, it's not that hard to learn how to use it.

I think the fact that companies feel the necessity to put CS majors through so much training is just absurd to begin with. CS majors should be able to learn on the go, not spend weeks in boring training classes. If they are teaching you Silverlight because you don't know it, they're doing it wrong. If you actually need them to, then I think you failed to acquire some vital abilities along the way to your diploma or the CS department failed to impart it. Companies like Google and Microsoft don't do much training at the beginning for a reason.

Version control is required in Software Engineering, which is probably business-oriented in a way that would make you happy (you often work on some company's project). SVN is easy enough that it shouldn't have to be taught.

See paragraph 4 for my response to practicality.

What foundations of CS are less important to the mainstream? I think the new core (first two years) is still important.

I agree that a department's innovative ability is very important to its success, but this is a chicken and the egg problem. Can you expand on the following:

- What ideas you have for innovation in the CS department
- Why CS is inflexible/close minded
- Why the track system is still inflexible. They changed the last two years to be pretty flexible relative to what I went through. How would you make the first two years more flexible? I have an idea on this but I'm pretty sure it won't be the same as yours
- How would you get around the standard way of doing things? How do you make classes non boilerplate?

I don't know much about management at Purdue, but I don't see how you think engineering is more flexible. Every engineering class has a set of objectives which you must satisfy. If you fail even one of these, you fail the entire class. Also, many engineering classes are teaching things that are much older than things you learn in CS, simply because CS is a young field. I took ECE364 to formally learn Python, which I already knew somewhat. The class taught Python that was basically 10+ years old. Also, I don't think my friends started doing electives in ECE until the last year. How is that flexible?

Machine learning classes are pretty new here, but they do exist. We have an algorithms class too, so I'm not sure why you think we don't have these. If you think these should be 200-level classes, I don't think any major has specializations at that level. Even if they are grad-level classes, you can take them as an undergrad.

Let me also stress again that if you're really interested in these things, they are in the realm of self-learning.

What's your major now? Also, thanks for responding. Most people do drive by comments and I never see them again.

Hope you don't hit the char limit like I am. Blah.

Anonymous said...

Forgive me if I run on in the following comment. I did a quick run over to try and make it flow properly but I have to take care of a deadline tomorrow and I am too lazy to review this LONG comment again. I went through and capitalized my suggestions so they can be found.

--------------------------------

Let me elaborate more on my background and experience with Purdue CS. I started developing business applications 5 years ago, I recently started an LLC and currently I am working on some private web based management software.

I am an currently a junior in undergraduate Industrial Management with a minor in CS.

I started out in Freshman engineering with the plan to go into Computer Engineering. That was doomed from the start because I never wanted to learn hardware, but since my dad suggested it I started out in it (he was EE). It didn't matter because all of the classes first semester are the same.

After 1st semester I tried to switch into CS. I had a holdup though because 1st semester I got a c-. It was a 7:30 and I slept through my 2 alarm clocks more than a couple times at the beginning, otherwise I had all As and B+s.

I went to the CS department to get an override for this one lacking requirement so that I could register for classes on time.

Instead of trying to help me get the override and into the program they did the lazy thing. They held me up until that grade came through. No one gave me any impression they wanted to help look at the alternatives (a VERY important concept in CS by the way), they all had the same answer: "We will wait to see once your requirements are completed."

This I thought was pretty stupid. I already had a pretty extensive programming resume. 3 years of (business) programming experience, a 5 on the AP CS AB class in high school, and a pretty large programming contract. That really put me off on the wrong foot.

In management so far every experience I have had with the advisors and professors has been helpful. Things are much more flexible when it comes to substituting classes. And in engineering the FYE advisors were extremely friendly and welcoming. They really seems to look for your success, and even lookup to the students.

In CS I had a very different feeling.

I went to talk to an adviser about replacing some classes with self study and taking more complex classes instead. Nope, the only way to get out of classes is to by testing out the final in those classes. In fact I was told "young CS students always tell us what we should teach them". This was not very welcoming, or flexible. Interesting though that what I wanted: more choice and less core requirements was put in the track program. Perhaps they should be more trusting in their student's ability.

SUGGESTION:
Work on helping people and not pushing people away. Try to get them into the major.

A side note on this, the front desk lady for Undergrad CS needs to work on her attitude. She gives off an unwelcoming and unfriendly impression. It is like night and day talking to her and the Grad front desk assistant.

Anonymous said...

Despite these ill first impressions I went ahead and took the place out exam for CS 180 (my 5 on AP CS AB in high school was apparently not enough proof that I knew Java). I also waited like a second class citizen after everyone else to get into CS 182 and CS 240.

My small takes on CS:

CS 182 was amazing. Professor Grama did an incredible job of relating the use of different algorithms and programming methods to real life practical example. The class had no busy work, it was entirely graded on your grasp of the concepts. The tests were open book, which also eliminates busy work of memorizing things you are to forget later. This is extremely practical because no real world experience will you be programming without the internet.

CS 240 was the exact opposite. Plain busy work as explained. And I disagree with your comment on the importance of learning C. After knowing Java or any programming language one can pickup C on their own. My friend at Berkeley said their lesson on C was as follows: they were told to review it on their own, and the instructor went over it for one day. Compare that with a semester long of busy work in CS 240 debugging makes me feel uneasy about my use of time.

SUGGESTION:
Get rid of CS 240. It is busy work and the concepts will be learned in a different class.

The reason I decided not to continue in CS is because I believe college classes should:
A. Be practical
B. Something hard to learn on my own

If I really wanted to I could learn assembly or compilers later on but going to A I don't think they are practical.

In response to your comment on IDE's: I am not complaining about the complexity of any IDE's. I was actually refering to the opposite. CS 240 was taught on outdated Sun workstations, without the ability to use breakpoints. I was referring to the fact the IDE was outdated and undercomplex. Students who were in CS 240 had already went through a class on Java I believe with Eclipse, so there is no reason to go backwards.

I don't know why my comment about C scares you. What is smart about using an outdated non object orientated language such as C to do validation (something that can be done with regex)? You learn nothing, but you spend a lot of extra time filling in methods and debugging the issues that come along with doing so on an old IDE.

Labs were actually my favorite part, concise and too the point. They were about learning, like how Grama taught his class. The lectures were absolute crap. I'm not sure if that is Rego's fault, or because spending an entire class on something you already know is useless. (Such as loops, initialization, conditional operators, simple concepts).

Yes Silverlight should be learned on ones own, or taken as a specialty to teach a concept such as MVVM and RIA. But to learning how to program Silverlight should not be done in C on a Sun workstation.

SUGGESTION:
Try to use the latest IDE's and languages to teach concepts. I would like to see an adventurous professor teach an algorithms class with F#. If there is a good way of doing something, and it can be taught concurrently with the concepts then it should be taught that way.

Anonymous said...

Now to get to your questions:

- What ideas you have for innovation in the CS department

SUGGESTION:
More self based study. As you said this is intrinsic with CS. A class would allow you to choose what project you are going to do and how you are going to accomplish it. The requirements would only that your project demonstrates your understanding of the main concepts you are to go over. Things would be graded based on the understanding of concepts, and not the nature of the work.

This is a great way of teaching because when someone works on something they want to work on they will not only cover the concepts but also concurrently discover the practicality of how best to accomplish something.

SUGGESTION:
If a professor feel's like their student should be able to take their class without the prerequisites, and the class is based off of a prerequisites concepts, if the student passes that class let them skip the prerequisite.

SUGGESTION:
Influence the professors to stay up to date with the latest technologies. I do not think it is such a moot point to teach the latest languages in class. It keeps things relevant. It also gets rid of the thought of wasting time on old technology.

- Why CS is inflexible/close minded/why the track system is still inflexible?

You cannot make your own major. I feel that CS is the liberal arts of the engineering world. There are a lot of interdependent concepts and a well rounded CS student would grasp a variety of these many different concepts.

Perhaps I am not as knowledgeable as I have not gone through CS and I do not know how to program in assembly, how to write a compiler, etc.

But from the programmers I have consulted within the workforce (finance, video analysis, and defense) I am told otherwise. It comes down to your practical coding ability and experience. A good programmer can collaborate, write clean and well formed code, and is efficient in doing so. They do not need to know how the processor or the seven levels in between work to do so unless they are working on a project that deals with them. The foundations that our program seems to stress (Computer Architecture, Compilers, Operating Systems, C Pointers) are useful in specializations.

Ex. Most often people develop LOB applications, and never touch below managed code. For someone interested working at Intel or Tranax they might want to get in touch with these lower level concepts. Even Tranax runs Windows CE on their Atm machine, although I am not sure how smart that is ;)

SUGGESTIOn:
Remove CS 352 and CS 354 and put them in a track.

- How would you get around the standard way of doing things? How do you make classes non boilerplate?

SUGGESTION
Let the programmers choose their projects. Instead of forcing certain projects, guide in the right direction. That is how all of my best classes have been. Yes it requires motivation from students (and the professors and TAs), but if students aren't motivated then I believe they are in the wrong major.

Everything I have learned has been through practical use. If I did not have contracts I would not have spent the time programming that I did, and would not have the best practices experience I gained: MVVM, IO Parallelism, Areas and Iterations, Client and Server Interactions with concurrency constraints, EXTREMELY complicated hand written SQL joins (now replaced with their simple LINQ to SQL counterparts), LOB quick RIA programming (validation, ui, etc.), more but that suits my point.

Frankly, screw error checking in C.

If someone is working on something practical or something they choose they will try harder and learn more by going above and beyond. If they are working on busy work they will learn 10% as I did in CS 240.

Thoughts?

I also hit the character limit, lol.

Anonymous said...

Clarification on you cannot make your own major. That is less so with the track system.

Although it would be nice if you could do more concentrated and specialty classes as a majority rather than minority of your classes.

And where is the Biomedical programming in CS? It seems to all be in the CIT program.

saiyr said...

It sounds like a lot of your negative experience has to deal with bureaucracy. That's fine, I hate bureaucracy too. My concern is only about curriculum. I have no experience with advisers in other departments, but I can tell you our best one left for Physics recently.

I don't see why having to take the final is unreasonable, though. Two hours of time will save you an entire semester. From their experience and mine, many students overestimate their programming ability by a lot. This is why they're often cynical. It sounds like you may not be, from the experience you have, but I've seen students that have supposedly written games before and had inadequate programming skills.

Berkeley can get away with much more than Purdue is. The caliber of students there is way higher than students here. Most people struggle through pointers. If you didn't, then you probably have a firm grasp of computers already. Personally, I found CS240 to be busy work simply because I already knew C, but I assure you that most people don't agree. A test out procedure would work fine. Eliminating it would not. Also, you don't need an IDE to use breakpoints. GDB works fine, even on those crappy Solaris workstations. I also agree that they should stop using those, though.

Regarding the merits of C:
- OOP isn't the best fit for everything
- Even so, you can implement OOP in C
- C may be old, but to call it outdated is silly. There's nothing you can do in Java that you can't do in C
- C has definite performance benefits versus managed languages
- C does have regex

I personally prefer to work in higher level languages, but to discard C as useless seems silly to me. You can't have a good understanding of managed languages without knowing C.

No comment on lectures, one of my best professors was for CS240.

I think teaching algorithms with a functional language could be interesting, but using the latest languages doesn't seem fruitful. There's always something shinier out there. If they used, OCaml, you could learn F# easily (and you would be able to do homework on a non-Windows machine). As for IDEs, many experience programmers stick to emacs/vim. I am one of them, for the most part.

saiyr said...

Onto your suggestions:
Self-based study seems hard to objectively grade. There are things like senior design that you can do. You can actually do some projects and get credit for them as well, but it's rarely done. If you mean to use this as a mechanism for all classes, it becomes even harder.

Dunno how you pass the class without skipping the prerequisite first. Prereqs are more lax for higher level classes, but obviously they want you to have the core classes completed. My personal opinion was that you should be able to take CS240 with CS251, which opens up a large number of electives, but for some reason, CS240 is a prereq for CS251.

I think compilers/OS are moved into the specializations now. At least, that's what I saw in some old slides from earlier in the year. What I'm hearing from you is that you're basically against anything low-level. There is a huge pushback against schools just being "Java Universities". I won't go into details of that, but I guarantee that schools that push out programmers who only know high level languages will be inferior to those that understand the full stack, if even just somewhat.

I think I mentioned earlier that letting people choose projects makes the grade a lot more subjective. How do you make sure the projects sufficiently demonstrate their knowledge? Your grades are basically based on your performance in comparison to your peers. If your assignments are all different, this becomes much harder to do.

I think your issue was that Purdue CS caters to the average and the extremes on both ends get screwed over. I agree totally there. I feel like I could have at least tested out of CS180 and CS240 which would have given me a huge opening to take whatever I want. I don't know what direction they're heading in with that, though.

By the way, the track system makes the core classes only half of the total number of required CS classes. I took more than the required electives, so if I had been on a track, a majority of my classes would have been of my choosing.

As for biomedical stuff, I'm not too familiar with the area. I don't even know what would be in a biomedical track besides something like scientific visualization (which we have).

Yeah, these comments are getting long. E-mail would be much easier :P

Shriphani Palakodety said...

This thread has lasted so long. A couple of comments about what I have seen so far:

1. Certain courses are not very intensive, our OS course was not really intensive and didn't live up to the hype that was created.
2. Some courses start off with a decent number of topics and they leave off a lot of them towards the end.

Overall the Comp E program seems to get a lot more respect than the CS program.

But these are just my observations. Anyone wants to comment on these?

saiyr said...

1. Who did you have? YMMV by instructor. Grad OS is supposed to be much more intense, but I had fun in my undergrad OS.

2. Examples?

Comp E is ABET accredited and graduates all get PE licensed, but I don't necessarily respect someone in ECE more than in CS. Sure, an undergrad ECE graduate definitely knows more about electricity than I do, but I don't care about that. Bright CS majors are just as good as bright ECE majors. Think of it this way: Dtella wasn't created by a Comp E. This is much more interesting to me than a piece of paper.

Shriphani Palakodety said...

Xu taught me 354. I did enjoy the course but he mentioned that he got evals from a previous semester which said he was too fast and so he would slow down. As a result, we didn't have a lot of programming to do. In the shell project they gave us the parser, we skipped wildcards etc.

In 182, we skipped finite automata, almost left out graphs (although I hear this has been rectified by the more recent instructors) etc. In CS 251, we had 4 - 5 extensions on one project and we rushed through MST etc without even bothering to analyze the algorithms (although this can be done sitting at home) and in CS 354, we solved 3 simple synchronization problems and were given a lot of template code for almost every problem.

Bright CS majors are definitely as good as bright ECE majors but there is a consistency in courses in ECE. There just doesn't seem to be a similar effort in the CS dept. Within a span of 1 semester, the entire CS 250 coursework changed. We wrote a good amount of SPARC assembly and x86 in our course. The very next semester they had a much more in-depth electronics exposure, never wrote a line of x86 assembly and built alarm clocks.

ECE however comes with its own version of crazy where their first weed-out course has 6 mid-terms.

I am not too depressed though. With a CS background I had no problems being very productive in an ECE lab this summer and due to their absolute focus on digital logic in the first few semesters, most of them have problems conjuring up anything useful in the time a CS major would take to deliver a fully functioning product. For all their excellence in digital systems design, they cannot program as easily as CS majors can - this probably is a limitation of their coursework.

saiyr said...

That sucks. I wonder how many of those evals he got. I'm pretty sure someone is always complaining that there is too much material because they can't handle it. It's unfortunate that that stuff got stripped out. It's true that parsing and wildcards aren't directly related to operating systems, but it was definitely a good experience to have.

I'm pretty shocked that CS182 would ever skip finite automata. Skipping graphs is not as big of a deal because they're covered in CS251 sometimes and extensively in CS381.

Having 4-5 extensions in any class is messed up. Someone screwed up big time. I didn't do MST at all in my CS251, though.

What were the synchronization problems in CS354? I think we had some simple ones too. Our main synchronization challenge was in implementing malloc. We got a lot of template code too, since that's just how Gustavo rolls, but I didn't usually look at it.

You're right that there's not much consistency in CS, which is unfortunate. You should mention it in the next town hall. I totally agree with your assessment of ECE.

saiyr said...

I'm closing comments here. See the new post.