You probably shouldn’t go to NYU CS.
I know, this is a pretty incendiary statement to make, especially coming from a blog on improving NYU’s CS community. But I figured it’s time to say it.
I’ve been seeing posts on the NYU subreddit from high school seniors asking about NYU CS, about the shrinking acceptance rate, about whether they should apply to Tandon or CAS. And while I should probably answer their questions, I mostly want to ask them why they wish to go to NYU CS. There’s not many good reasons and quite a few bad ones.
For some reason people think NYU has a far better ranking than it actually does. NYU is ranked 30th in computer science according to US News. Perhaps it’s because Courant is a well respected institution in math and applied math, being ranked 9th and 1st accordingly.
In fairness, US News is a terrible blight upon higher education. CSRankings.org, a slightly better site, puts NYU at 20th.
That’s great and all, but it ultimately is pointless because rankings do not matter in the slightest. People think it does, but ranking only indicates the general quality of your professors as researchers. It holds no bearing on the quality of the students or the quality of the education.
There are obviously schools with high rankings that are good schools for CS. Carnegie Mellon is top ranked and clearly an excellent school for CS. But high ranking not a necessary nor sufficient condition. I know plenty of schools lower ranked than NYU that provide a far better CS education.
Part of the reason people get NYU CS’ ranking wrong is because we do have a promising data science program. I won’t make any claims about the Center for Data Science, as I am not knowledgable enough about its quality of education to make claims.
However, we should remember that CS is not data science. Data science can certainly be a part of a CS education, and vice versa. But they are separate interests and therefore separate concerns. A CS major who receives a world class data science education but a subpar CS one is a poorly prepared student.
If you wish to be a data scientist, do your research on NYU DS and make your decision regardless of this post.
I’ve made this claim mistakenly. New York is such a tech hub so it must be so great for jobs! Yes and no. New York is a great place for tech and there are more job opportunities. But you can apply to New York jobs from anywhere in the world. NYU doesn’t give you any boost other than an offside chance your interviewer went here.
In fact a lot of the local companies that recruit from NYU are utterly terrible. If you read the opportunities mailing list, you’ll see a lot of startup “internships” and low paid gruntwork.
There are great events like tech meetups and conferences, well at least there were back when they existed. But realistically most students don’t go to them.
Y’know what most students do attend? Student organizations! NYU certainly has some student organizations who are doing great work. But we’re not the best at it. Other schools like Rutgers, UMich, UMD College Park, RPI etc. have excellent student organizations that put out great work.
NYU’s CS curriculum is remarkably weak. The common refrain is that CAS is more theory based while Tandon is more practical. I cannot speak for Tandon, but CAS is certainly not even close to having a theory based curriculum. We don’t teach a lot of foundational subjects like compilers or databases. We don’t have courses on distributed systems or type theory. We don’t teach formal methods1.
While there are some professors who certainly teach rigorous, challenging courses, there are plenty who don’t. Indeed quite a few professors teach courses that are a shadow of their counterparts at other schools. I’ve seen data structures courses that neglect to cover hash table implementation, algorithms courses that omit topics like tries, compression and much more.
We don’t offer enough practical courses either. We have no consistent courses on functional programming, on principles of software development, on systems programming. Not to mention existing courses do not demand enough programming from students.
Our intro courses are not cohesive, well designed paths towards teaching students how to think, debug and program like computer scientists, like at Northeastern, Berkeley or Waterloo but merely rote instruction on Java.
I’ve looked at a variety of schools, from Stony Brook to Indiana University and they all have curricula with deeper requirements and wider course options.
There’s a few theories on why NYU’s curriculum is so lacking, but that’s another post.
This might be my most contentious statement, but those who know me will not be surprised. Truth be told, NYU’s student body is lacking in terms of programming ability and ambition. There simply are not enough students who are capable, excellent programmers.
I came from a high school that was well regarded, even famous for its CS program. What I loved about that CS program was there were people who were scarily good at programming. They’d write graphics engines in Haskell. They’d learn languages in days, build out codebases in weeks and ship. As high school students.
NYU does not have enough of these people. There are certainly some excellent programmers here, but truthfully I can’t say there’s more than a dozen.
I don’t mean to say that everybody needs to be a top programmer who has been coding since they were 12. But having some of these people around improves the CS program as a whole. They act as mentors, as role models for other programmers. They can build out projects and help with orgs like Spark2.
However this is actually an area where I’m optimistic. We don’t have enough of these people, but as NYU’s ranking increases, as our admission rates drop, we’ll get more top programmers who see NYU as their best option. Ranking doesn’t improve teaching or curriculum, but it can improve student quality.
I’m aware there’s some hypocrisy here. I’m declaring that NYU CS isn’t good, thus potentially driving away some of these top notch programmers, thus keeping NYU CS not good. Not exactly improving NYU’s CS community. But it needs to be said. Besides, how many potential applicants read this blog?
NYU isn’t a great place for job opportunities either. Don’t get me wrong, there’s definitely people who get great jobs coming out of NYU. I know people who’ve worked at Google, Facebook, Microsoft, etc. But you’re not gonna get a lot of help from NYU in that process. There isn’t a great recruiting scene here.
The people who get these great internships are also the outliers. Part of the reason I started this blog was because I was stunned at how many NYU CS students did not take their career seriously. They wouldn’t apply to internships, or they’d apply to 5 places and call it quits. It really isn’t their fault though. If NYU had a better career culture, students would pick up on what needs to be done.
If I were to optimize my school choice for careers, I’d pick a school with co-ops. Schools like Waterloo or Northeastern let students spend part of their semester interning at a company. Students come out of those schools with 3-4 great internships and a resume better than developers with 2+ years of experience.
I anticipate a few responses to these arguments.
If you don’t like NYU CS then you can leave
This is a flawed, yet common argument when someone expresses dissent. It doesn’t matter if I leave or not. The problems I have discussed will persist. Besides, not everybody can just leave college. Whether it’s due to financial aid or geographical constraints, some people are stuck at NYU.
Some may claim that NYU just isn’t a good fit for me. And sure, if I was criticizing the social life or the core curriculum, then they’d be right. However I’m criticizing the content and curriculum of the CS department, something that is comparable from school to school.
For what it’s worth, I am leaving somewhat soon. I also tried to transfer freshman year, but it didn’t work out.
But I like NYU CS!
That’s great! I don’t begrudge anybody some love towards NYU CS. Indeed I loved quite a few of my courses, such as Programming Languages, Operating Systems and Compilers. I like pretty much all of my fellow CS majors, some of whom are quite talented. I like my professors. I can’t say I’ve had a professor whom I disliked. I’ve had disagreements with how professors teach or approach the curriculum, but I’ve still liked and respected them.
That being said, you can like individual elements of a program while also recognizing that the program itself could be better. NYU CS as a gestalt is a program with an insufficient curriculum and a dearth of talented students. That doesn’t imply anything about the local sufficiency of a course taught by a specific professor, or the talents of a specific student.
Your standards are too high
Possibly. I spent a lot of my time at NYU CS imagining that was the case. After doing some research, I’ve come to the conclusion that no, my standards are not too high. I’ve looked at a variety of schools ranked below NYU and they all seem to provide a more in depth and rigorous education.
One reddit exchange comes to mind:
Post: Do you learn more material at the top 10/20 programs when compared to the top 50-100 programs?
Me: Yeah definitely. There’s a lot more options for courses and the requirements are a lot tougher. Look at Princeton’s algorithms course for instance. It goes into topics like Minimum Spanning Trees, Tries, Max Flows/Min Cuts, etc. that other programs wouldn’t cover. And the assignments will generally include novel topics instead of just teaching the exact content of the lecture.
Replier: I went to a shit program and we covered all those topics. You go to NYU how can you possibly make a blanket claim like that?
Me Well your shit program covered more than NYU’s algorithms class lol
Clearly we’re doing something wrong when someone’s “shit program” teaches more than NYU’s algorithms classes3.
That being said, my standards are likely too high. If NYU were to reform its CS department, the realistic outcome would be somewhere in between my expectations and the current state.
I will say that if one were to make this claim, I’d prefer that they be familiar with at least one other CS program. I’ve done my research and compared the course progressions. Have you?
You just think you’re better than everybody else
No, I don’t. Indeed I complain about NYU students because I know there’s a tier of programmers above me. I’m friends with a few of them. They’re not at NYU.
If you’re sufficiently convinced by my debbie downer arguments, you’re probably wondering where you should go to school. There’s a few points here.
If I were looking at schools ranked above NYU, I’d go to Waterloo, CMU, MIT, Berkeley, UMich, Georgia Tech, UChicago, Princeton, Cornell, Harvard, approximately in that order of preference.
Waterloo being first might be a surprise. It’s not a school you hear a lot about, let alone in the same breath as MIT. But it’s truly a top CS school with an excellent co-op program. They have an excellent CS community with a veritable army of students attending every hackathon in sight. You can find Waterloo students at every tech company imaginable.
Sure, a school like MIT or Harvard may have higher ranked departments, but that doesn’t mean it’s a better experience for students.
If I were looking at schools at or below NYU’s ranking, I’d check out Northeastern, Purdue, UT Austin, Stony Brook, Indiana University4, again, approximately in that order.
Make The Best Of It
If you’re at NYU and bummed out because of this post, sorry. I don’t mean to put you down. This post is the culmination of a few years spent at NYU being disappointed at the CS program. That being said, you can still make the best of NYU. Indeed, a lot of my posts are in that spirit: Work on side projects! Read up on programming! Get a job!
The takeaway from this post should be that NYU can do better. Our CS program has the potential to be really great. But it simply is not great in its current state.
Hopefully somebody will come across this post in the future and see it as an odd artifact. Hopefully NYU will be an excellent CS school with a student body of talented, brilliant programmers and a challenging, world class curriculum. Hopefully some day I will have to delete or amend this post.
P.S. The title is an homage to a famous Dijkstra article. I figured since this is a slightly iconoclastic, slightly grumpy post, I might as well pay homage to the ultimate iconoclastic, grumpy CS figure.
Even though we have some of the top people in the world for formal methods! ↩
Our struggles with finding mentors for Spark is a testament to this lack of top programmers. ↩
Yes, I’m aware that some of these topics were taught in particular professors’ classes. That does not mean they were taught in all classes. ↩
I’d actually put IU higher on my personal list but that’s because IU is programming language research heaven. ↩