So you’ve decided to become a CS major. Maybe you like playing video games and want to make your own. Maybe you’ve been tinkering with computers your whole life and want to make it into a career. Maybe you’re just curious about the field. Maybe you just want to make some damn money. Well you’re in luck! NYU can be a wonderful place to kickstart your CS career, as long as you know what to do.

NYU has a lot going for it: world class faculty, an amazing location in a top tier tech city, and a plethora of tech companies in the vicinity. At the same time, NYU doesn’t offer quite the same benefits that schools like MIT, Berkeley or CMU do. Our recruiting scene isn’t as active; our tech community not as vibrant and our course options not as deep. How does an ambitious, driven CS major such as yourself surmount these problems? How do you show up your friend who got into MIT? Well read on to find out!

Get A Job

CS is a very tricky field in that so much of programming is not taught in classes but learned on the job. This is true no matter which school you attend. I highly encourage you to get at least one or two internships over the course of your degree. They’ll provide you with extremely valuable experience and knowledge. Experience is also the only true arbiter of whether you’ll like programming as a career. Better to figure that out while you’re still in school versus in the real world.

You may be saying at this point “How can I get a job? I don’t know anything about programming”. And that’s certainly true. But your first job, while the hardest to get, will ultimately help you the most. So how do you get your first job? I have an entire post on this, but it boils down to gaining technical skills, networking like crazy, and applying applying applying.

I’ll explain how to get technical skills momentarily. As for networking, networking simply means going to events, keeping an eye out for technical people and getting to know them when possible. You don’t have to be a slick Sternie with business cards and elevator pitches. Just be eager, listen and make sure to get contact info.

All of this is moot however if you don’t apply to jobs. And don’t just apply to Google and call it a day. Apply everywhere. I like using sites such as BuiltInNYC, AngelList, StackOverflow Jobs, Hacker News. You can (and should) be picky after you get the offer.

Oh, and this job should be paid, no matter what. Doesn’t have to pay well, but it should be paid, no matter what.

Treat Teach Yourself

So how do we get the technical skills necessary for a job?

One mistake plenty of students make is assuming that their courses are enough. Don’t get me wrong—courses are super important for building your foundation in data structures, algorithms and other crucial topics. But it’s equally important to build up a knowledge of practical development topics like full stack web development, deployment and DevOps, databases, etc. NYU certainly offers courses on these topics, but they’re often electives that can only be taken later in the degree. If you want to get internships, you need to teach yourself.

Plus if you teach yourself, classes will become significantly, almost shockingly easier. Y’know those people who are annoying good at CS? They’re not just magically amazing at programming. They just practice outside of class.

I’ll admit, teaching yourself sounds really intimidating at first. Where do you go for information? How do you get unstuck? These are all great questions. Fortunately, we’re in kind of a golden age for programming info online. Some of the sites that people find helpful include Codecademy, freeCodeCamp, /r/learnprogramming and so on. If these don’t work for you, that’s fine. Everybody learns in a different way. Personally I like books and side projects to learn. I’ve written a post on side projects. But if that doesn’t work for you, search around for your own methods.

As for questions, I’ve outlined this in a different blog post, but the gist is to use sites like StackOverflow or GitHub to find potential solutions to your problem or even ask new questions of your own. For that, you’ll want to get good at Googling problems. Generally you’ll have an error message that you can copy and paste. From there it’s a matter of reading the StackOverflow pages, trying to figure out how to apply the solution to your code, looking at a different page, etc.

If that sounds frustrating, yeah it is. But that’s also a gigantic part of programming. We don’t get paid the big bucks for nothin’. That being said, as you get more experienced you start to recognize bugs more often. Soon the bug that once took you 3 hours to fix will only take you 30 seconds.

A great technique that I use is to take breaks. Let your mind rest and do something else. Go for a walk. Cook dinner. Play a sport. Then when you go back to your code, the bug might just jump out at you. It’s surprising, but this technique does work. Programming is hard and sometimes your brain needs rest. Granted, you need the time to take breaks, so if you’re pulling all-nighters to finish projects, this won’t work.

And of course, you can always reach out to your professors, your friends or me for help.

My recommendation for getting started is to pick something that sounds vaguely interesting and Google around. Try doing a tutorial or two, see if you like it. If you don’t, that’s fine—you can always pick another area. But if you do, then hey, now you have a specific interest!

Some cool topics:

Front end development

Back end development (REST APIs, GraphQL, etc.)

Graphics (ray tracing, graphics engines, etc.)

Compilers/Programming Languages

Systems programming

Functional Programming

Life is Suffering

Okay, overdramatic a little. But there’s something to be said about a little suffering. If you go on RateMyProfessor, as most college students do, and look at CS professors, there will be a few people with similar pages. I’m not going to name names, but they’ll generally have mediocre ratings and very high toughness scores. These professors are great. You should take them if at all possible.

Why, Nicholas? You ask. Why should I subject myself to such an awful experience? For one, you’ll learn more. These professors-who-shall-not-be-named are tough because they demand excellence of their students. They want students to learn the hard way and dammit that’s good. You may think that you’re getting away with something by taking easier professors, but all you’re doing is not developing the necessary skills to be a good programmer.

Second, it’s important to keep in mind who posts to RateMyProfessor. Generally it’s people who do very well and people who don’t do well at all. A professor who is challenging will get a lot of reviews from people who received bad grades and decided to lash out with a low review. Of course, some professors have low reviews for other, more valid reasons. Don’t take those professors if possible.

Third, these classes aren’t as bad as they’re often made out to be. A lot of these professors don’t actually fail half their class. If you put in the work and do all the required aspects (labs, homework, show up to class, etc.), then you’ll do just fine. It’s only if you don’t show up to class and don’t do the work that you’ll be in serious trouble.

I know, I know, this seems like one of those things your parents told you “builds character”. But the truth is that it really does build character. Programming is a lot of figuring it out, whatever it may be. Putting yourself in a situation where you need to figure it out, no matter what, is an excellent way to determine if you like programming. If you’re trawling through pointers and you realize you hate it, then great! You had this realization before you graduated with a degree in Computer Science. And if you love it, then you know that nothing can stop you.

Your major shouldn’t be something you like doing when it’s easy. It should be something you love when it’s hard and painful.

Work Above All

Going off the previous point, I want to make one last statement. Programming is a field associated with nerds. And yeah, there’s a lot of programmers who are nerds and there’s a lot of nerds who are programmers. But ultimately your skills as a programmer depend on whether you put in the work, not whether you’ve seen all the Star Wars movies, or whether you’ve built your own computer, or I dunno, been to Comic-Con. And your skills especially don’t depend on not showering (yes, even you Stallman).

On the flip side, programming and CS are not subjects restricted to just the nerdy. You can program and dress well. You can program and ice skate or dance or sing. You can program and go to parties (though probably not at the same time). Programming is not about your nerdiness, but about your work ethic and abilities.

Programming belongs to those who do it well and with passion. That’s it.

This may seem vacuously true. I hope it does. But if doesn’t, then just know that as long as you put in the work and love the craft, you belong as a programmer.

Thanks for reading. In the next post I’ll talk about good practices for taking classes, going to meetups and clubs.