Table of Contents

Hey everyone! I know normally these blogs are geared towards an older audience, but I’m hoping to use this blog as a way to make computer science more inclusive at all levels! So to all my high school age readers, welcome, and I hope this post is useful to you! If this is out of your age range, I’d love for you to still read this and share your own experiences, as everyone’s experience with college is unique and personal.

I was asked to talk at two separate high school AP Computer Science classes, and I talked to the students about what it really means to study Computer Science in college. Being a recent college graduate, I still remember a lot of the questions and anxieties I had about choosing a college and what to expect. I had taken one programming class in my junior year, and beside that I really didn’t know what computer science really was, or what it meant to be studying it really. I decided to write this post so that I can spread my experience to many more people than just two classrooms, and make sure y’all know what you’re getting into!

This post is in two parts - the first will explain what computer science is, and the second will be my five tips to choosing a great computer science school for you.

Please let me know what you think in the comments below, either as someone looking into college or as someone whose been through the process. You can always shoot me an email as well! If you’re a teacher, let me know if you’d like me to come talk to your class :)

Note that this post is primarily speaking to an American audience. I don’t know that much about college or university outside of the US, sorry!

What Exactly is Computer Science?

What Computer Science Isn’t

So you want to study computer science in college, but what exactly is computer science? Maybe you have some programming experience and really like doing it, so you want to keep doing more of it. Programming is definitely a great skill to have for CS, but don’t think that programming is all you do in a computer science major. A famous quote that’s (wrongly) attributed to Edsger W. Dijkstra goes something like this:

Computer science is no more about computers than astronomy is about telescopes.

The quote is trying to say that while programming is used frequently in computer science, it is just a tool to get to the real science, not the end goal itself. Another common confusion I’ve noticed is that people think computer science is about languages: learning Python in one class, Java in another, SQL in the next, Haskell in another…

Most colleges will have an introduction to programming class, where you will learn a programming language and how to program. However, after this first class, your other classes will not be that laser focused on the language itself. If a class requires you to use a new language (because it’s a better tool for understanding the material of the class), then you’ll be learning it quick with the expectation that your previous programming knowledge will help expedite the process.

A computer science degree is also not training to be a software engineer. The skills learned in a computer science degree can be applied to software engineering, but many times if you want to be a good candidate for a software job out of college, you have to do a lot of your own work and research outside class.

What Computer Science Actually is

So now that I’ve talked about what computer science isn’t, let me talk about what it is. From the University of Maryland Computer Science Department website, I found this really good quote:

Computer Science is the study of computers and computational systems. Unlike electrical and computer engineers, computer scientists deal mostly with software and software systems; this includes their theory, design, development, and application. Principal areas of study within Computer Science include artificial intelligence, computer systems and networks, security, database systems, human computer interaction, vision and graphics, numerical analysis, programming languages, software engineering, bioinformatics and theory of computing.

Although knowing how to program is essential to the study of computer science, it is only one element of the field. Computer scientists design and analyze algorithms to solve programs and study the performance of computer hardware and software. The problems that computer scientists encounter range from the abstract– determining what problems can be solved with computers and the complexity of the algorithms that solve them – to the tangible – designing applications that perform well on handheld devices, that are easy to use, and that uphold security measures.

Basically - while programming is a useful skill in computer science, computer science is more interested in studying the problems that can be solved with computers and programming. A lot of computer science is based in math and proofs, for example proving certain features about a certain algorithm. That being said, different computer science programs have different focuses. Some are completely based in theory, and expect you to learn everything practical about software engineering on your own time. Other programs are very software engineering focused, and actively try to prepare you for a job after college. And many more are somewhere in between, so it’s a matter of finding the right program for you.

Here are some examples of classes that are common to many computer science programs, many of which have follow-ups you can take if decide you’re interested in that specific field.

Data Structures & Algorithms - Probably the most ubiquitous of computer science classes, it will teach you about different ways to store and manage data, and different algorithms to compute information about that data. The class will also teach you how to prove different aspects of algorithms in a mathematical sense, such as proving their runtime.

Operating Systems - This class will teach you about the software, systems, and algorithms required to program an operating system. For example, one of the problems operating systems have to solve is how to run many applications at the same time, each with their own requirements.

Theory of Computation - A very theoretical class that teaches about what computing is in a mathematical sense, like what Alan Turing did before actual computers. You’ll end up learning about how little you need to actually run programs, as well as how to prove the surprising result that certain problems can’t be solved at all.

Compilers - A class that will teach you about how compilers work. This involves problems like how to parse code from programming languages, and translate it into another language like machine code.

Software Engineering - This class will teach you about the principles of being a software engineer and the tools you’ll need to succeed in a career as a software engineer. This will probably involve learning a programming framework for building software, guidance on how to flesh out an idea and make it useful, and ways to manage the workload of creating functional software.

Graphics - This class will teach you about the math and rendering that goes on to create computer graphics. It’s wild how much is going on behind the scenes there!

Cryptography - A very math heavy class which will teach you about how to encrypt messages in a mathematical secure way. This is an extremely relevant topic now, with lots of software and political debate about encryption, so it’s great to take a class and actually learn what goes behind encrypting messages and data.

Computational Linguistics - This class will teach you about the field of computational linguistics, which involves using computer science techniques to analyze and parse text. This is especially useful now with all of our voice devices that we can talk to.

Databases - Sort of like operating systems, this class will teach you about the engineering behind creating a database, how to use one, and what goes on exactly when you query for data.

Artificial Intelligence/Machine Learning - These classes will teach you the math, theory, and practice behind writing software that can learn from previous data models and rules. This field is especially hot right now, with every software company wanting their data to be used for machine learning purposes. Machine learning is behind many of the “magic” features of apps, like automatically tagging friends, social media feeds suggesting posts, face recognition, and so many more.

The general idea is not teaching you about the tools that are currently being used (since the latest tools become outdated fast), but to teach you about the theory and introductions to the fields in computer science, so you can decide what to specialize in after. Many colleges let you choose your own electives, so after taking your required classes, you can choose what you want to focus on.

Now that you know what computer science is, let me give my tips for finding a good school for you.

Tips on Finding a Good School

These are my general tips that I like to give when advising people on what school to go to for computer science. Remember that these are not necessarily “correct”, but just advice based on my lived experiences. I personally went to Brandeis University, which is a small liberal arts type school near Boston, and double majored in computer science and music. I really liked my experience (which I may blog about later), but there are some things from bigger more established schools that I wish Brandeis had to offer. That being said, here are my suggestions of things to look out for.

Note: A lot of my points relate to going to school for computer science with the end goal of getting a job as a software engineer or something related. If this is not your end goal, take some of these points with a grain of salt.

Tip 1: Find a good school FOR YOU.

My most important tip is to try and find a school that will be a good fit for you. A lot of people think that the best school they could go to is the one with the best connections and the highest rank on US News rankings. This is definitely not the way to go. First of all, these rankings are mostly meaningless, with many of the points that go into these rankings having nothing to do with your education or computer science in general. Much of this ranking system has to do with research and graduate school, which doesn’t really affect you. It may be more useful for your future to go to a highly esteemed school, but it will be much better for you to go to a school that can help build your skills, your connections, your resume, and all in a healthy and happy way.

Especially in software, employers are much more interested in candidates with good computer science fundamentals and practical experience than candidates who went to fancy Ivy League schools. Of course rankings are somewhat important and indicative of quality, but the difference between a #20 and a #30 school may not be worth it. Being happy at a school makes all the difference in having the stamina and confidence to make the most of your college years, which will set you up for success during school and after graduation. You will not do yourself any favors by being somewhere you hate for four years just to have a name brand school on your resume that employers may not end up even caring about.

Additionally, there are a few schools such as University of Illinois Urbana-Champaign which are not particularly ranked high, but are extremely well known for computer science. So don’t let rankings fool you there!

Tip 2: Don’t let GPA, price, or background deter you.

A lot of students think that because their GPA is bad or because colleges are expensive, they should not even bother trying to be selective. In terms of GPA, the fact of the matter is that there are plenty of great schools that don’t expect large GPAs. And in terms of money, you never know what a school’s financial aid package will offer. As someone who came from a non-wealthy family and had a mediocre high school GPA, I still got into a great school for CS with a great financial aid package, though I knew I had to apply to a more diverse group of places because of it.

Finally, you may be hesitant to apply to a school known for CS, because you think you will not be as good as your peers. Almost all universities have a track for people with no coding experience to get into computer science, so you should not worry about that at all. Any extra coding classes you’ve taken will help you of course, but after one to two classes, most people’s high school experience ends up not mattering anyway, as everyone is caught up and moved onto the more interesting/difficult material anyway. So look for your dream school, and don’t let anything get in the way of you applying!

Tip 3: Don’t Choose a School Just Because of CS

By this I mean - don’t pick your school with only computer science in mind. There may be a school with a great computer science program, but where you don’t see yourself as being happy because of the location or size or culture. I’m not saying you shouldn’t go to this hypothetical school, but it would be good to consider all of your options. This is for two reasons really.

First of all, even if your heart is dead set on computer science right now, you never know what it will be like once you get to college. You may realize that you like coding, but you really want to use your college years to specialize in something like biology, and use coding in something like computational biology. Or you realize you really like the math side of CS, and that you really want to just study math and keep programming as a hobby. You never know where you’ll end up in four years, so it’s good not to box yourself into a single subject. Statistics vary depending on where you look, but supposedly 30-70% of college students graduate with a major they didn’t start out with, so keep an open mind!

The other reason is simply that if you love computer science, you still want to make sure that you’re getting the well rounded education you deserve. You must have interests besides computer science, and you owe it to yourself to go to the school that supports you fully the best. For example, if you love playing music, you may want to consider somewhere with a good music program, or at least a decent music department that a super technical school may not have. So make a list of all the things

Tip 4: Make Sure the School Has a Decent Computer Science Program

Computer science is a hot topic right now, and a lot of schools are trying to cash in on the trend. This means you have to be alert, and make sure the school you’re trying to go to has a program for computer science that will help you grow your skills and make you marketable once you’re graduated. Most computer science programs are fairly fine, but there are a few things to check out first.

First of all, make sure the school has an actual computer science major. There are a lot of “spinoff” majors, that sound like things such as “information systems”, “computer systems”, “computer information systems”, “computer management”, “information technology”, and other names of this sort. These are different things, and great things to study if you want to, but they are not computer science. Additionally, some schools may offer a specific “software engineering” major. It’s up to you whether you want to do this, but I would still advise going with computer science just so you can have the most broadly applicable skills and training after graduation.

Second of all, check out their computer science program and course offerings. You can go to most university websites and see the classes they offer that semester, as well as the classes that they normally offer. See how well they correlate to the list I put above, as well as how they compare to other universities. What is required to major? Do they offer good courses that you could see yourself enjoying?

Additionally, look through some of the professors at the school. It’s a good sign if they got their PhDs at good schools, and have good backgrounds in computer science. Another thing to check for is research that they actively work on, but note that if they are working at a primarily teaching school research may not be a focus of theirs. Also keep in mind that research ability is not correlated with teaching ability, but it’s still good to see what they’re actively working on. For figuring out their teaching ability, check out Rate My Professor or just ask some current students. Doing a quick Google search should bring up their university website, or at least their LinkedIn profile where you can learn all about them.

Another great thing to check for is student life for computer science majors. Does the school host a hackathon every year? Is there a hacker club that has lots of fun events, educational events, career events or hack nights? Does the student body have a track record for mentoring younger students and teaching them how to develop their skills and advance through college? Remember that your classes will primarily be about theory, so a good student CS club should be able to balance that by giving you the resources to learn about practical coding, and what you need to get your next internship or job. A motivated student body will help motivate you as well to do your best and push yourself.

Finally, check out the recruiting on campus for computer science jobs. Do local companies actively come to the university to recruit? What about big tech companies like Google, Amazon, and Microsoft? Does the school have a career fair? How big is it, and who comes? Does the school have an career center, and do they have specific help related to software jobs? The world of software recruiting is very different from other fields, so it’s very useful to have people that know what they’re talking about. Finally, where are people from that school going to after they graduate? Doing a quick LinkedIn search should help you find out if people are going to good companies and getting software jobs after studying at the school.

A lot of these questions you can find out on your own by doing your own research, but a lot of them can only be answered by talking to people who study computer science at the school you’re researching. Don’t be afraid to go to a Facebook group like Hackathon Hackers or Ladies Storm Hackathons and ask to speak to someone who goes to the school you’re interested in to ask them these questions. Current students and alumni are the best ones to talk to, since they’ll have no incentive to butter things up for you, unlike someone in admissions. This seems like a lot of research, but college is a huge investment, so you want to make sure you’re going to a great place for you, and that you have all the information you need to make the right decision for you.

Tip 5: Ask the right questions to get you to the right place.

Once you have a decent idea of what you’re looking for in terms of a good school for you, you can start thinking about all the things that are important to you, and try to find schools that match those profiles. I’m going to list some big topics here, with some pros and cons, so hopefully you can try to chart yourself somewhere on this list.

Big school versus small school

Probably the most iconic college decision is whether you’d rather go to a small school with a small student body, or a larger school with massive numbers of students. There are probably a billion think pieces on which is better in a general sense, so I’ll just give some thoughts about these types of schools in general. At a big school, you’re likely to have more professors to choose from, more computer science classes you can take (especially the specialized ones), and it’s more likely that companies will come to the school to recruit, since there are more people there.

That being said, it will be harder to stand out at a larger school, since there are so many people, and it will be harder to make personal connections with professors. A smaller school will likely offer you more individualized attention, smaller class sizes that are easier to get into, and in general make it easier to stand out and be unique. A big school may have more opportunities, but it will be easier to seize those opportunities at a smaller school with less competition.

Well Known for Computer Science vs Not

There are some schools that are just known for being amazing for computer science. Schools like UC Berkeley, Georgia Tech, University of Michigan, and others may come into mind right now. It may seem like a no-brainer to go to one of those, and maybe it is, but you should at least think about both sides of the coin. At one of these prestigious computer science schools, you can expect top professors doing cutting edge research, genius students with huge egos who are building startups their freshman year, and difficult classes that will grow and challenge you. This may sound like a dream come true for some people, and a nightmare for others, since it may foster competitiveness and create burnout. The classes will be tough, and you will probably not be the smartest person in the room. In general though, these schools will look the best on resumes, will have the best recruiting for top companies, and will have great student clubs and hackathons that you can learn from.

Going to a school that isn’t considered the “best” for computer science may mean taking a downgrade on those perks, but in general it will be less competitive and stressful, meaning you could even take some non CS classes that interest you. A less well known school will also make it easier to stand out to your professors or to recruiters that make it there, since there is less competition. In the end, it’s all about preference here, plus where you get accepted to.

Technical vs Non Technical School.

There are certain schools that have a very “technical” aspect to them, meaning they are more focused on technical STEM fields, rather than a full liberal arts education. If you’re someone who wants to be totally focused on STEM, these schools could be a great environment for you! However, I’m very happy with the fully rounded liberal arts education I got from Brandeis, and I feel like the skills I learned in my humanities classes have really helped me grow as a software engineer after graduation.

In general, these technical schools will be very rigorously focused on a technical STEM education, meaning that there will be few to no general education requirements for your classes. Instead, a CS major may have you taking classes in engineering, physics, or chemistry, even though these classes have little to do with an actual computer science degree. The curriculum will be very focused, and by putting in the work you will get the technical education that the school has designed. These schools are also seen as more “nerdy” than schools that are less technical. Studying at a non technical school will allow you to take more humanities classes, and get a more rounded education. There is also a lower chance that you’ll have to take those random science classes like chemistry. I’m not trying to make one sound better or worse, but if in your head one of these sounded better, there’s a good chance that you would like that type of school!

Also note that many schools offer both of these experiences: for example, UC Berkeley has a computer science major in the college of letters and sciences (the non technical school), and a notoriously difficult EECS (electrical engineering and computer science) major in the college of engineering, so you may have different choices at the same school.

Some other considerations

These are the big questions I had in mind, but I’m sure there’s plenty others. Here are a few more that are worth thinking about:

How close is the school to where you’re from? How far from home do you want to be?

Is the school in the city? In a suburb? Very far from a city? Which environment do you prefer?

How much will it cost you in the end?

Do most people live on campus, or do they commute to school?

Do they have good external programs, like study abroad? Is it possible for CS majors to study abroad and graduate on time?

How difficult will the classes be? Do you prefer difficult programs?

Let me know what other categories and questions you’ve been considering in the comments!

Conclusion

In conclusion, there’s a lot of factors that go into choosing whether you want to study computer science, and what type of school is right for you. Don’t stress out too much over this though! I hardly did any research before choosing Brandeis University, and I still think I ended up in the right place for me. College is such a personal choice, so I hope I made it easier and not harder for you to do research about computer science schools. In the end, it’s all about your personal preferences, and what school seems best for you in the end. I know I didn’t name that many specific schools there, but to be honest there’s a lot of damn great CS schools out there, many which I know very little about! If there’s some interest, I can try to gather people I know who went to different schools, and interview them about their own experiences in the frame of these questions.

Thank you everyone, I hope this was helpful! Please leave a comment letting me know what you think, or just shoot me an email! If you liked this post, please share it with your friends or on an applicable Facebook group or subreddit, as I don’t do that much advertising. Word of mouth really does help my posts reach wider audiences!

If you still have any questions about applying to college for CS, shoot me an email at [email protected]! If I get enough, I may do a FAQ post :)

Future related topics I may blog about, depending on interest from others. Shoot me an email if any of these sound interesting!

Interviewing people who went to different schools.

How to succeed as a computer science major.

How to get your first software engineering internship.

What to do after your first CS class.

Why humanities is important for Software Engineers.

Different types of CS jobs.

Topics I am currently working on:

Python for Java Programmers 3

How to make website with Python in 7 lines of code using Flask.

Thanks to my friend Victoria for looking at this post and giving me advice from the perspective of someone who went to UC Berkeley, and thank you to my friend Claire who suggested I talk a little about coming from not that much money and a below average GPA.