I mentioned in my why not NYU CS post that I haven’t been impressed with NYU’s CS majors. I’d like to expand on this. I don’t want my conclusion to be simply that NYU CS majors are subpar.
In many fields, there is a concept of root cause analysis. Root cause analysis attempts to find the original sources of the problem. Often times these sources are not obvious and obscured by blanket causes like “human error”. For instance, if a plane crashes due to human error in filling the fuel, the root cause is not the human error, but that there was no system to guard against fueling the plane incorrectly.
Let’s apply root cause analysis to crisis of quality in NYU CS. Why are NYU CS students not living up to my hopes?
What I assumed when I enrolled at NYU was that the really good people were going to places like MIT, Berkeley, etc. Poor NYU wasn’t high enough in the rankings and was just getting everybody else.
A few things dissuaded me from that. For one, I met people from schools ranked lower than NYU. Schools like Indiana University, Northeastern, RPI, etc. If they were from schools ranked lower than NYU, presumably they’d be worse, right? Nope. These students were doing really cool stuff. They were working at top companies, doing programming languages research, taking hard courses, etc.
Of course there’s selection bias here. I met these people at conferences and internships. I’m not meeting the mediocre students from IU/NEU/RPI.
Still, even if these were the top of the top students, they were at schools lower ranked than NYU. And at NYU they’d also be top of the top.
Not to mention, NYU isn’t that low ranked. It’s pretty highly ranked overall and its admission rate has been dropping super rapidly. If you tell someone you go to NYU, generally they’ll make some compliment about your intelligence.
So what gives? I don’t have fully satisfactory answers, but here’s a couple conjectures.
First, most top CS students have probably been programming in high school and know that they want to be a programmer. Since NYU isn’t known as a good CS school, good programmers are much more likely to end up at places like RPI, UMich, Waterloo and so on. I know that barring a few important extraordinary factors, I probably wouldn’t be at NYU. Almost every one of the top CS students at NYU that I know had similar extraordinary factors.
Second, NYU isn’t an automatic pick. Some schools, often state ones, are automatic picks for high schoolers. If you’re a good programmer, you have decent but not stellar grades in high school, and you live in Texas, where are you gonna apply? UT Austin! Indiana? IU! Washington? UW! You see the pattern? Because NYU is a private school and in a state with stellar public schools, we aren’t anybody’s automatic pick.
Third, NYU is expensive. We’re really really expensive. CS majors tend to be numbers people. $70,000 is a very large number. Not to mention, CS majors from Stanford to community college manage to make it into Google. Why pay $70,000 a year to end up in the same place as the kid who went to Stony Brook?
I was going to write an entire post on this, but honestly it’d probably be too bitter and jaded. I’ll try to keep that at a minimum.
There’s a thread here that underpins my complaints about NYU CS. At one point I asked a few professors about why there were no honors classes for CS. They responded that there used to be honors classes—indeed some sections of courses are still unofficial honors courses—but that they had to remove the designation because nobody would take them.
If I had to give out a prize for most disappointing sentence in my time at NYU, that’d be up there.
But actually it wasn’t that disappointing, because I already knew that was the deal. Students at NYU lack what I’d call intellectual ambition. They’re plenty ambitious in other ways. They’ll talk your ear off about getting an internship or getting a 4.0. But when it comes to learning CS topics on their own, the spark isn’t there.
Yes yes, this is all subjective to my experience. It’s certainly possible that there are plenty of students who are quietly working on side projects who I don’t know about.
That said, there’s some indications. For one, the lack of Albert replacements. Albert is a horendous piece of software. It’s utterly terrible and displays a level of malice towards the user that’s almost impressive. Anybody who interacts with Albert has at one point tossed around the idea of building a replacement. I know I have. And yet, there’s only a handful of attempts. As far as I know, Schedge is the only deployed, fully realized Albert replacement1
If there was truly a bunch of talented programmers at NYU, we’d have an Albert replacement by now.
How can you tell if someone is intellectually ambitious? For me, it’s an unmistakable feeling when I talk to them that I need to up my own game. I’ll start talking to them and feel like a fire has been lit underneath me. They’ll be talking about their cool project or this neat paper they read and the only thought in my head is “dammit I need to get to their level”.
Another sign is that they don’t let school get in the way of their education. They’ll be procrastinating their OS homework by writing a compiler. They’ll kill time by learning this new web framework.
I’ve mentored a few groups of people and a common thread is that the mentorship will break down because everybody’s too busy with studying and classes. Which yes, is the right set of priorities for students. You should put your classes ahead of your extracurriculars.
But when I say that, when I’m nodding to some explanation about how they can’t make next week’s meeting because they have midterms, I can’t help but feel like a coach who’s repeating the stock line of school first, sports second, all the while screaming in his head, dammit, this isn’t how you get good. Yes, you should put your grades first. Yes, you should go study for that midterm. But dammit, this isn’t how you get good at programming.
Why the lack of intellectual ambition? I’m not sure on this either. I do have a theory. Extrapolating from the admissions reasons, the type of student that gets accepted to NYU is ambitious, but did not focus on CS in high school. They’re not someone who just picked a default school, so they care about academics and prestige. This is a tricky demographic, as this student cares about grades and classes but they’re not in love with programming. Perhaps they’ll work on a project or attend a club meeting, but they’re fundamentally focused on the game that got them into college and has brought them the most success: school.
I’m aware that these generalizations are too harsh. Unfortunately when you take traits from a large group of people, you end up distilling the negative quite potently. Remember that these traits are embedded in a far more complicated person, with nuances from their family, background, education, etc.
Cultivating Intellectual Ambition
Okay, complaining over. If you’ve been reading carefully, you’ll notice that I have a strategy on this blog of taking a negative complaint of mine and turning it into a positive piece of advice. Let’s do this for intellectual ambition. How can you be a more intellectually ambitious student?
A lot of my posts have essentially been guides towards this end. Do projects, double check if you like CS, read sources about CS, learn the humanities, etc. But in short, you should find some area you like and you should keep learning it. You should make it your goal to get really good at this field. Not good enough to get a job. Not good enough to get an A. The goal is the knowledge and the ability that comes from the learning.
It’s like learning to play a sport or an instrument2. There’s a joy in seeing yourself get better and more skilled. And yes, there’s some fun in surpassing others. Learning can be a competition!
The next part of becoming an intellectually ambitious person is to stop caring so much about school. This may seem counterintuitive. School is where learning happens, right? This is true, but school is also a gigantic leech of intellectual ambition.
It’s too easy when you’re in school to not learn some topic because it wasn’t taught, or to wait until your professor teaches something to learn it. Have you ever realized that you can just read ahead in your textbook? I don’t know if this is just me, but it took a shameful amount of time for me to realize, hey, I like this subject. Maybe I should just read about it on my free time? I don’t need a teacher to learn it.
Why is that? Well every student realizes at some time that school isn’t about learning. School is about optimizing points.
What’s essential is that you switch from aiming to get good grades, with learning as a side effect, to learning as your main focus, with getting good grades as a side effect.
I got significantly better at programming when I stopped feeling guilty about procrastinating my classes by writing code. And y’know what? I still got good grades in my CS classes, because all of that coding developed my problem solving and technical skills.
Even if you do get bad grades, will it even matter? Jobs don’t particularly care about your grades. I’ve gotten more jobs from the niche, domain specific knowledge I gained while procrastinating Theory of Computation than I’ve gotten from my GPA. Maybe graduate schools will, but they’ll also love it if you spend your free time diving deep into your potential area of research.
The other reason to not care about courses is that frankly, courses are table stakes. NYU doesn’t require that many courses in the first place. I could have completed the CS major in two years. That’s pretty ridiculous. Courses like Algorithms and Operating Systems are not the pinnacle of a CS major. They’re the basic, standard knowledge that every CS graduate should know.
You should aim to go into these courses already having taught yourself a significant portion of the material. Obviously that’s not always possible, but at least consider it as a goal.
If you don’t believe me, look at schools like Cornell or UMich. They have far more requirements.
Unfortunately NYU CS needs to allow CS majors who decided to take Intro to Programming as second semester freshman the opportunity to graduate in 4 years. Go hang out by Romeo or Leeann’s office sometime around course selection time. You’ll be shocked at the number of seniors with four, five unfulfilled requirements.
I don’t know why NYU insists on pushing these graduates over the fence. Well, I do know. It’s a classic funding issue. More students equals more funding for CS. But that’s a little absurd these days since the department have more CS students than ever. They can afford to drop a few.
But anyways, NYU’s unlikely to change their requirements anytime soon. Therefore if you truly wish to be a good programmer, if you wish to improve NYU CS, if you want to accomplish great things with your programming skills, you should aim to be intellectually ambitious.
I’m sorry if this post hurt your feelings or insulted you. Truly, I’m sorry. I want to emphasize that these issues aren’t the failings of individual students, but the failings of a larger entity. NYU CS just isn’t a community that encourages intellectual ambition.
A lot of the CS professors at NYU are disconnected from the undergraduate community. Part of that may be because the professors wish to focus on research. But part of that is because it’s really disappointing and really hard to teach and train students who aren’t intellectually ambitious.
Let me be clear. I’m not that intellectually ambitious. Compared to a tenured professor at NYU, I’m significantly less devoted to computer science. But I still find it heartbreaking to spend so much time working with students only for them to vehemently resist learning on their own, or for them to stop attending meetings because of midterms. Professors at Courant block themselves off from undergrads because there’s only so much disappointment one can take.
Maybe someday this will change. Maybe the next generation of NYU CS students will be intellectually ambitious. Maybe they’ll ignore their Algorithms homework because they’re too busy reading about dependent types. Maybe they’ll debate professors about distributed systems in their free time.
One can hope.