Back in 2008-2010 I was one of two sitting students on the Computer Science curriculum committee at Rensselaer Polytechnic University (RPI).
Three topics were always present:
1. What do we do about kids who come in knowing inadequate math and how does this keep happening?
2. Should we consider switching out C/C++ as the default for Java as the default. (The answer to this was almost always no, but many professors at RPI accepted assignments in multiple languages, usually whatever the TAs were familiar with. I used a lot of python later in the year instead of C/C++/Java)
3. God damn it we are understaffed.
I hate to say it but #3 was always brought up near the end of every meeting and was visibly discouraging to all the teachers involved. RPI at the time was on the war-path of cutting professors in every single field who did not participate in research (so called "clinical faculty") which included letting one of the best CS professors go.
I didn't love him. I didn't dislike him or anything, he's a nice person, but most of my other CS professors were better teachers than he was. His lecturing style was dry and boring, and his selection of course material and assignments was mediocre. (The threading assignment in Operating Systems didn't even involve running more than one thread concurrently. You spawned a thread and immediately waited for it!) Looking at the recent OS course website I googled (Goldschmidt's) the assignments are more rigorous and more interesting.
Maybe part of the problem is the misnomer of the whole field itself. CS is not really science, it's math. It's about tools that every professional and scientist will later need. And as such, I'd argue that teaching is actually more important than research.
Of course, these tools need to be researched and developed as well, but more importantly do we need very capable teachers in order for people to build their foundation. IMO every Master of Science should have a good overview of which tools in math and "CS" there are available, and they should be proficient in at least two of each.
No we do science too. Math is a fundamental part of lots of CS branches but we also do straight up science (with the whole research question, hypothesis, experiment, evaluate cycle).
I'm willing to be convinced either way, but it seems to me that there's nothing in computer science you can't figure out by thinking or using pen and paper (maybe a lot of pen and paper). You don't have to "ask nature" as Feynman would say. Contrast that with figuring out the Gravitational constant, say. The only way to estimate its value is by doing some careful measurements (i.e. asking nature). Sure there may be some calculations, but without the measurements, they're a waste of time.
I went to RIT many years ago. In retrospect, I view it as a variation on a trade school, which isn't a bad thing. The co-op program was valuable, but I wish there was more focus on entrepreneurship. Maybe that has changed, but at the time the focus was definitely on job placement.
We do something [that I consider] interesting here to staff TAs for courses, which is hire undergraduate teaching assistants. Generally, a course will have one head TA who is a grad student, and multiple undergraduate TAs. I've TA'd for a while as an undergraduate, and it's been a really great experience for my career.
Especially in the intro courses and lower level courses, I don't think that it's necessary to hire computer science gurus -- it's actually easier to find undergraduates who are capable and passionate for teaching than it is to find graduate students (partly because there are more undergraduates).
Some documents produced by one of the lecturers who I work for as a TA.
Brown has been doing this from the start of its CS department in the 80s (this probably developed because we don't have very many graduate students), as far as I can tell. The only difference is that the undergraduate Head TAs are typically "higher" in the food chain of responsibility than the Graduate TAs (who are more responsible for course development). This worked incredibly well: in 2011, one of our three intro sequences (the one meant for people who knew they wanted to do CS, but don't have the background in it) went from an enrollment of 70 students to 200. We managed by scaling the undergraduate TA group from 11 to 20 (with two, instead of one, HTA), and assigning a good number of those TAs to work on better automation for things like grading.
I've been a TA for three years now, and I've probably gotten more from it than from my actual classes. And because we see what the class needs to teach, as well as what the class has taught in the past, we're actually a lot better (IMHO) than grad students (and even many professors) at figuring out how to change the course to push students further.
As our professor last year put it:
"I am the Pope of CS17. The head TAs are the Roman Curia, the TAs are the dedicated priests, and the students are the Faithful."
University of Virginia does this, too, although they often just work under the professor that teaches the class. It's a great experience, all told, since you get really fluent in the class material, and great at debugging if you're in a lower class where the TAs help with that. The pay is comparable to most other on campus jobs, but it's much more engaging than working a gym desk.
However, even that hasn't completely met the needs of the current enrollment deluge: I'm glad I got my requirements out of the way early on, because there are an absurd number of CS enrollments. They recently capped one of the major tracks (the BA) because there were simply too many students.
Edit: Undergraduate at UVA. Also, I think undergrads are possibly a better option than grad students: since we have actually taken the course, unlike most grad students.
This model requires two things - a very competent Director of Studies who herds the TAs, and is also requires sufficiently competent undergrads. One would think that at Yale this will be less of a problem, but at lesser institutions, where half of the incoming class has problems with mathematics at the level that is required there will be problems. And that is why the Director of Studies needs to be given some authority to throw out incapable TAs, or else there will be a case of blind leading the blind.
I was a TA as CS undergrad in Australia, as were many of my friends. I am obviously biased, but I think we were at least as good as half a grad student, if not a full one.
This is sort of interesting because the Math department at UChicago has had undergraduate TAs for a long time for at least the first year courses, and I believe a couple of the second year courses, but it seems only recently has the CS department done the same for its first year courses.
In my opinion, this whole issue has arisen because there is confusion about what "computer science" should be at a university. Theoretical computer science that professors do is a world away from the casual HTML/CSS development that many non-CS-majors want to dabble in after watching The Social Network. I think an excellent university should have instruction in both, and enough professors to strongly support the latter.
But the university also needs to realize that having a more casual computer science class for non-majors, like Harvard's CS50, is an essential part of offering a liberal arts education in the modern world. There's a lot of student spirit and initiative here, such as awesome student-taught web dev courses (http://hackyale.com/) and student-organized talks and hackathons, but the university itself seems to be playing catch-up.
Yale CS alum here (DC 04). Yale unfortunately tends to be on the extreme side of theories and fundamentals. Having some more practical experience helps those theories and fundamentals sink in. For example, I didn't appreciate closures until I started programming professionally. It was a curiosity before that. The professors there sort of expect you to get that sort of experience on your own, which some students do get but it's really uneven.
So if enrollment for hard CS is off the charts and you don't have enough people to teach it... create more light CS classes to encourage broader enrollment?
Sorry, I realize my comment may have been a bit unclear.
My point is that Yale needs to recognize the general interest in CS, and do many complementary things to satisfy it, including both 1) creating more light CS classes, and 2) better funding the department. Taken together, these steps would go a long way towards catching up with Harvard and other institutions.
This will probably blow over once the impact of The Social Network has faded. Enrollment will go back down to near what it was before.
I'm finishing my CS degree at Georgia State (after a 6 year hiatus) and all of the lower level classes the last 2 semesters have been filled to the brim with people who had no idea what they were getting into.
When you select CS as your major, there should be a popup box that asks if you're aware CS involves math.
When you select CS as your major, there should be a popup box that asks if you're aware CS involves math.
I disagree that this is good advice to give someone considering a CS major.
Math is not fundamental to CS. CS is fundamental to CS.
Most of a high school/college math curriculum is not that closely related to most of what happens in CS.
In general, there is some "mathiness" to CS, but it is of such a different flavor to "the math you learn in school" that I don't think making a comparison is useful (it certainly would not have been in my case).
I have bachelor's and master's degrees in CS and am pursuing a PhD in CS.
I would say that logic is fudamental to math and cs. I disagree with mathematicians that claim that math is prior to logic.
Formal languages, turing machines, and computability are computing science, which we call computer science. Computing science may be part of math, but math is not fundamental to it. In other words, you need logic as a basis for those examples, but otherwise, they are not dependent on other mathematical knowledge.
I don't think sets are all that important in cs (but I disagree with mathematicians who try to base everything on set theory).
You're correct that most of computer science (except for the explicit mat classes you're required to take) doesn't inherently rely on existing math knowledge.
However, they way computer science is taught does assume prior math knowledge. Thinking back to the very first example algorithms in my intro class--we had to impliment addition, multiplication, then heron's square root method.
Very basic math, but that was around the time many students dropped the class.
This might be a concerning trend if you are a working programmer. Currently labor is tight, but it seems in a few years the schools will be cranking out huge numbers of CS majors. If past cycles are an indication, this might coincide with decreased demand. Look what has happened in the legal field. There is a glut of lawyers currently on the market.
Law has transformed into the liberal arts degree of the current age. Almost nobody actually goes on to law; they go on to management or other analysis/talk careers.
Edit:
It occurs to me that I've caused downvotable confusion because law degrees in the USA are quite different from law degrees in Australia (where I studied law).
In the USA law is a postgraduate degree.
Here it is an undergraduate degree. Australian citizens receive very generous loans and until recently, places for each degree at any given university were fixed by Commonwealth quotas. Students with high year 12 scores and no idea of what to do next studied law or medicine because, in a quota placement scheme, those courses had the highest entry scores. Basically a status thing.
You're "smart"? Do law! (Which is how I wound up doing it).
Hence my remark that it's replaced the Arts degree as something that can be used to step into a higher entry rung in a large company or government department.
That might be becoming the case as jobs in the field dry up, but I know plenty of lawyers who went to law school to become lawyers. It is hard to justify the cost of a law degree for general education.
Apparently that gets spent on all kinds of things, just not the actual education the students need. At >30k a year you could really expect that they would hire enough real teachers.
It seems strange to me that schools can have folks with titles like "Dean of Community Outreach" but they feel compelled to wring cutting-edge research and excellent teaching out of the same people. I'd like to see the proof that world-class teachers and world-class researchers are the exact same set.
I was in the the AI class mentioned in the article, and I can say the results were somewhat disastrous. The early problem sets were trivially easy to facilitate quick grading (e.g., creating truth tables for propositional logic statements, filling in two variable names in pseudo-code for a search algorithm), while later problem sets had enough errors to make completing them difficult or impossible. Incorrect and conflicting information was regularly given out at office hours, assignments and tests were graded incredibly slowly and rarely returned, and the professor and T.A. were almost never on the same page. I understand the difficulty of the situation for the professor and T.A., but as a student I often felt I was wasting my time.
I bet it's a misunderstanding of what Computer Science really is. In my opinion, many youngsters or people that's not in the tech world think Computer Science as just programming, or developing a website. I have an experience on this because my parents are forcing me to develop a website in which I don't like and they reacted with "what is your education for?"
But what they don't realized is that Computer Science is more than developing a website or programming. CS deals with math, algorithms, and such words that they haven't heard before. Automata, discrete math, pumping lemma. Computer Science is much harder than they thought. With this, many students in my university shift to another course because they can't handle CS. Too many students are enrolling CS becase they think it is the trend. They think it is the right course to learn how to develop website, how to create something like Facebook, how to develop an app, how to develop something like Instagram, or even how to create a game (http://blog.jpbalb.in/post/16048908922/game-programming-anyo...)! Yes they can learn them through CS, but if that's just what they want, they can just go to the internet and do a Google search. Because again, CS is more than just that.
Finally, I think it's not the lack of staff, but the lot of students. Give those students few years in Computer Science, and I'm pretty sure those "lot" will be "few".
Our of curiosity, why are your parents forcing you to develop a website? (And, tangentially, is there a reason you can't say no?)
EDIT (reply to below): You said "my parents are forcing me to develop a website," which makes me think your parents are still forcing you to make a website, right now. That was what was confusing to me...
I'm always saying no. But they are always asking because they think it's the right job for me. It's because of their misconception of being a Computer Science == Website Developer (Wordpress, HTML, CSS)
A computer science curriculum is the right background for a professional software engineer. A smart and dedicated person may be able to self-teach that background, but not by "just doing a Google search."
CS enrollment numbers are way up in every school. Yale is complaining about 200... at Princeton our intro course has over 500. At Stanford almost every undergrad takes a CS course at some point.
We have a good number of lecturers in addition to tenure-track faculty members (at Princeton CS). They are extremely good and greatly decrease our load, so we haven't faced burnout so far. That said, enrollment was up so sharply this semester that we had to hire lecturers on a month's notice, which is kind of insane. Also, we have a new industrial Master's program which lets us increase our number of TAs.
In spite of having adapted in all these ways and money not being a problem, we know that this won't continue to scale because enrollment growth shows no signs of slowing down. We're not sure what the long-term solution is going to be. Online education is part of it (and we're on Coursera), but so far we're not using it in a way that decreases our teaching staff requirements.
Stanford's enrollment was over 700 for fall quarter. Over 1500 students took the course during the entire year. A typical class has around 1650-1800 students for perspective.
Harvard is seeing a very similar trend. Our intro to CS course, CS 50 [1], had an enrollment of over 600 this Fall (up about 20%), making it one of the largest classes at the College [2]. Even its teaching staff, which numbers over 100, is bigger than most classes (and most of them are undergraduates) [3].
The data isn't in for this term yet, but pre-term planning data suggests that enrollment in CS 51 (our second-term CS course) will go up by about 40% (it experienced similar growth last year), and CS 181, a machine learning class, might nearly triple in size since it was last offered [4].
For smaller departments like Harvard's (and Yale's, which is even smaller still), there just aren't enough professors to go around, and with the enormous influx of students, I think the quality and variety of the courses offered has suffered. Many courses are only offered sporadically--especially systems courses--since there simply aren't enough professors to teach them all.
And that's to say nothing of the (undergraduate) teaching assistants, which bear much of the brunt of this trend. I TFed Harvard's algorithms course (which doubled in size over the two years I taught it), and am TFing our operating systems class this term (which if today's turnout was any guide looks like it might nearly triple in size). The workload was considerable, and I'm sorry to say that the feedback and individual attention I was able to provide students has gotten worse and more tardy because of this.
I don't think Harvard (and Yale, etc.) can cope with this sort of explosive growth for too much longer.
When I was TAing I remember the office staff glancing at my "classes I would like to TA" list and thanking me for putting all upper division courses; apparently most of the TAs competed for lower division course slots where the problems were easier and so presumably the workload was lessened. I always went for upper division because I hated dealing with entitlement complexes and don't like trying to teach shallow material. We never really had enough resources, but it wasn't quite that bad.
Interesting thing to note: The Yale CS department has been hiring peer tutors and undergraduate course graders, which should definitely help alleviate things.
The idea that Scaz is working with 25 students on projects is a bit concerning. How can you give the necessary attention to any student, your own work, and any classes you teach when spreading yourself that thin?
Back in 2008-2010 I was one of two sitting students on the Computer Science curriculum committee at Rensselaer Polytechnic University (RPI).
Three topics were always present:
1. What do we do about kids who come in knowing inadequate math and how does this keep happening?
2. Should we consider switching out C/C++ as the default for Java as the default. (The answer to this was almost always no, but many professors at RPI accepted assignments in multiple languages, usually whatever the TAs were familiar with. I used a lot of python later in the year instead of C/C++/Java)
3. God damn it we are understaffed.
I hate to say it but #3 was always brought up near the end of every meeting and was visibly discouraging to all the teachers involved. RPI at the time was on the war-path of cutting professors in every single field who did not participate in research (so called "clinical faculty") which included letting one of the best CS professors go.
That teacher for you RPI alum was Dave Hollinger. They let him go(?) at the end of '08 but he taught a single class in '09 before leaving for good. Everyone loved him. http://www.ratemyprofessors.com/ShowRatings.jsp?tid=100535