By this point in my RPI career, I am essentially done with the computer science curriculum. My next year will be spent taking courses for my co-terminal master’s degree in Information Technology and Web Science. Because of this, I feel it is appropriate to comment on my experience with the computer science program here at RPI. I’ll start off by commenting on individual courses:
CSCI-1200 Data Structures
Data Structures was quite possibly my favorite course in the CS department. I really enjoyed learning about—and then implementing—various data structures I had only briefly used before. Having such knowledge about the inner workings of different structures (and their strengths/weaknesses) is really useful in job interviews.
CSCI-2400 Models of Computation
This course was really redundant; much of the material was the same as Introduction to Algorithms and Introduction to Discrete Structures. I’m glad to hear that Models of Computation is being reworked into a new course. I can only hope it improves where Models of Computation fails.
CSCI-2500 Computer Organization
For a course where the professor started off with something along the lines of, “I haven’t worked with this material in over 10 years, I’m not really sure why they’re having me teach this course,” things went surprisingly well. If nothing else, I learned to appreciate all the nice things that compilers and interpreters do for me. That said, I’ve heard that the professor selection for this course has changed since I took it.
CSCI-4210 Operating Systems
There is a fair amount of redundancy with Computer Organization (I think I’ve gone over the different types of RAID in three separate classes), but nothing too bad. I think the way the projects are structured to allow students to visually see various parts of operating systems (like scheduling algorithms) at work is excellent.
CSCI-4440 Software Design & Documentation
For all of the negative things I had heard about SD&D, it really wasn’t that bad. My only real gripe with it is that students shouldn’t be learning in a capstone course. Let’s make a comparison to the ITWS course Managing IT Resources. Both MITR and SD&D teach students practical information that will be useful in the workplace, all while they work on a real-world, semester-long project. However, the ITWS program then has an actual capstone course that follows MITR. Computer science does not; perhaps something to keep in mind as SD&D gets reworked.
In my “overview” of the various computer science courses, I wasn’t able to mention a few overarching themes or items that don’t fit into any one course.
The first of which is the inconsistency between professors. Several of the classes—Data Structures, Introduction to Algorithms, and Programming Languages, to name a few—are taught year-round. These courses have different professors between the fall and spring semesters. This can be a good thing; in my experience, the professors a student tends to have if they skip Computer Science I (indicating that they are fairly confident in their programming abilities and CS knowledge) are more challenging.
On the other hand, there are more inconsistencies than just difficulty level. The curriculums seem to vary somewhat significantly between professors; I know I learned about Bloom filters in Introduction to Algorithms, but others who took the class in the fall learned linear programming instead. Similarly, from my understanding, those who took Programming Languages in other semesters learned about compiler theory, a subject my class never touched upon. I think it would be beneficial to standardize on a common set of topics for each course.
I was an undergraduate lab Teaching Assistant (or “Lab Tutor,” as they have been recently renamed) for Data Structures during two separate spring semesters. Between those two semesters, there was a large gap in treatment of tutors. The first time I was a Lab TA, Spring 2010, undergraduate TA’s were $10 per hour. I didn’t particularly care about this; the disposable income was nice, but I was there because I liked helping people learn computer science, not because of the salary.
The second time around, things had changed. No longer were lab tutors paid a salary; instead they were given one credit for their efforts. In addition, all tutors were required to assist for one hour of Advising, Learning, and Assistance Center tutoring for every two hour lab. By my calculatings, that sums up to three hours of “class time” for one credit-hour. I still ended up doing it that spring, but later semesters I found it hard to justify trying to fit labs into my schedule when I was already a year ahead in credits.
There does not seem to be any course that teaches some of the more general topics and tools that, while not directly related to programming, are crucial to working in the “real world.” For example, no course I have ever seen has touched upon version control and build systems. Both of these are needed for any sort of software project to grow beyond one person and a handful of files, yet students can reach senior year without knowing how to use them.