Let’s imagine you’re a first year physics student. You’ve never taken a physics class in your life. You’ve never even conducted a simple physics experiment in your life. The only thing you know about physics is that it’s used to make bridges and it has something to do with electricity, motion, and gravity. You like the idea of making bridges, so you decided to become a physics major. So you take your first class and you realize that your professor doesn’t know the first thing about bridges. Sure, maybe ten years ago they dabbled in building one, maybe they even build a Popsicle stick one every now and then. But a real life bridge? Nope. Instead, they go over calculus and Lagrangians, maybe harmonic motion too.
You start to get really really confused and then really really bored. When are we going to make bridges? Looking at the courses offered, you see a basic bridge building class. Only issue? It’s a junior level class with partial differential equations as a prerequisite. And after talking with other students, you hear that the material is horribly outdated; the professor only teaches how to build wooden bridges.
This is basically NYU CS in a gist. Most NYU students take Intro to Computer Programming, followed by Data Structures, followed by Computer Systems Organization. In these classes, you learn the following languages: Java and C. That’s it. And frankly it doesn’t get much better. After CSO, there’s Operating Systems and Basic Algorithms, two courses that use maybe a little bit of C and that’s it.
Now C and Java are great languages. I personally like coding in them a lot, and I find the material in all the NYU classes rather interesting and fun. Only issue? I’m not your average NYU CS student. I’m already sold on computer science and programming. I’ve have real code pushed to production, learned other languages besides Java and C, even taught myself some theory. But other kids haven’t. They don’t know what real software development looks like. So when they see pointer arithmetic and the tedium of Java, they start to think that this is it, that this is the entirety of software development. Frankly if I thought that C and Java were the ne plus ultra of software development, I probably wouldn’t be a programmer.
And by the way, I’m not saying we should dumb down CS courses or create JavaSchools. If I had my way CS curricula would be brutal. But you gotta give some sort of incentive. You gotta sweeten the deal. Maybe make a web dev class a mandatory part of the curriculum. Or give a Ruby or Python class. Just something to lessen the onslaught of Java and C and maybe, just maybe give an inkling of what their future career is going to look like.
Granted, this is a CS degree, not a programming or software development degree. But since NYU does not offer a programming or software development degree, and since most people who go through a CS degree plan on becoming a software developer, perhaps the degree should teach some aspects of software development.
For instance, why aren’t there projects with actual, y’know, user interfaces? Look, I get it, Java and C are standard, bread and butter languages. But they also are terrible terrible languages for creating user interfaces. Give students some basic webdev and let them build a simple user facing application. Not only do they get a semi realistic experience, but they also get useful skills. Skills like usability, design, aesthetics, performance optimization (when it counts), handling clients, etc. And this shouldn’t be the capstone or the climax of the degree. This should be like the first or second course students take. Lure them in, then slam them with the brutal pointers and functional programming classes.
Finally, do you know why I know that NYU isn’t doing a good job of this? Because Albert Sucks and if a website sucked this bad in a school where they actually taught software development, students would have built a better Albert. But they didn’t. And that says everything about NYU.