I'm a PS undergrad with a minor in CS that's 22 credit hours and covers most, if not all, masters pre-reqs that I've seen. The only issue I forsee is that I will only be taking one semester of calculus.

I'm only a sophomore, but I have a 3.78 GPA and I believe I will maintain it at minimum above a 3.5.

I go to a school with an incredibly strong engineering program (where CS is housed), and although I've realized I want to pursue research in CS and/or work as a programmer, it's incredibly difficult to switch into engineering at my school if you did not start in it.

So, with a major in PS and a 22 hour minor in CS covering most essential topics, what can I do to stand out from other non-CS applicants?


In my experience, those who come from non-CS undegraduates to CS grad studies are often missing some key things, and having those things will definitely help you succeed:

  • Know graphs back and forth. Make sure you're comfortable with the main terminology (edge, path, degree, connected-component, bfs, dfs, cycle, etc.) and the main operations on them. They are literally everywhere in CS. Other discrete math will help (especially sets and relations), but graphs really are key.

  • Make sure you're comfortable with induction. A discrete math class might help with this, but even if you don't know number theory or combinatorics or relations, induction pops up everywhere in CS, and knowing it will help.

  • Make sure you've taken a Systems class. Concurrency, threading, interrupts, caching, memory management, etc. These are hard concepts to wrap your head around, and they can pop up in many places. Knowing these could save you weeks of debugging slow or incorrect parallel code, and in this day and age you're probably going to have to do something in parallel.

  • Make sure you know basic software engineering. I've seen plenty of people who can write correct code, but it is terrible to read. Learn about functions, classes, modules, etc. Learn to document your code. Learn to separate your code into functions and modules, so that you can share it and maintain it.

  • Knowing a bunch of languages isn't the most important thing, but I'd make sure you know the basics of at least two languages from different programming paradigms. For me, the main paradigms are Typed Imperative (C, C++, Java, Go, C#), Untyped Imperative (Python, Ruby, JavaScript, PHP), Typed Functional (Haskell, ML, Elm, F#), Untyped Functional (LISP, Scheme, Racket, Clojure, Elixr), and Logic (Prolog, Datalog, Mercury, miniKanren). Basically, you want to avoid going into grad studies thinking there's only one way to program. Once you've got two significantly different languages, picking up more shouldn't be that hard.

More "practically oriented" classes are tempting, because they seem, well, practical. They have fun hands-on projects with flashy results. But knowing the fundamentals will make it possible for you to teach yourself things in graduate studies, and once you're into grad studies, you will be teaching yourself new things every single day.

| improve this answer | |

In the US this should not be a problem, provided that your studies will continue here. The undergraduate program is always very general and you have taken enough courses to be able to make a serious claim that you can be successful. Taking a bit more math might be helpful, but discrete math or statistics might be as big a help as more calculus. Maybe even better.

And, I hope that your CS courses go beyond just programming. I assume that it does since the school has a designated minor.

I think you will be in pretty good shape. Just build up a reputation for success and hard work. Make contact with a few professors/mentors so that you get good letters of recommendation by people who can predict your future success.

Switching fields of interest after a BS/BA is very common in the US, so is more likely to be accepted and properly evaluated.

| improve this answer | |

Not the answer you're looking for? Browse other questions tagged or ask your own question.