I am starting a PhD in Comp Sci this Fall and have never taken a Comp Sci class. Help!

So like the title says, I'll be starting a PhD in Computer Science this fall with the intention of doing research in machine learning. I am currently finishing my MS in Statistics.

My question is how should I prepare before starting the PhD program so that I can succeed. I feel like I will be so behind some of the other students who have probably done their Bachelors and Masters in Computer Science while I have never even taken a computer science class. I knew it would be a risk deciding to this PhD, convince me I didn't make a horrible mistake that I will regret!

Posted Apr 23, 2015, 3:53 PM UTC

1229
MPNussbaum•

If you're willing to put in the time and effort you will almost always be fine. Investing the effort in the front end--right now--will pay off big-time.

You have over 3 months to get on track. Believe it or not, this is more than sufficient to get up to speed.

PM me if you'd like a mentor.

Hint: this is your first test.

Edit: Deleted a phrase.

8
Pyar23OP•

I am absolutely ready to put in the time and effort. I'm sending you a PM.

4
Jimmy_the_destroyer•

Based on your username..do you go to UNCG, or have you gone to UNCG?

1
theobromus•

Since no one has given really concrete examples, here's where I'd start:

  • Learn to program. Doesn't matter too much what language. Pick a project and build it. Learn how to use a debugger, learn how to use version control (git, probably). Lots of CS students won't know this stuff but it's hugely useful.

  • Learn about algorithms. Personally, I'd just buy the book by Cormen, et al. and read it. Pick some stuff and implement it. You probably wont often be building this stuff yourself too often (there are library implementations that are better), but it's useful to know how they work.

  • If you have any idea what PhD project you'll work on, start learning about it (if you post it here I might be able to help).

At the end of this, the gaps in your learning will be mostly in specialized areas like compilers and operating systems.

And don't be discouraged, learning to be great at CS takes time

4
Pyar23OP•

Thanks. I will definitely try to learn how to program. I do know a bit about statistical programming languages (R, SAS, Matlab) and I started learning C++ on my own. I tried to use git but it was very confusing to me and I wasn't sure how to utilize it properly. I understand version control and debugging - I worked at a start up for a while doing project management and QA testing - just never done it myself.

I will check out the algorithms book you mentioned and try to read through it before the fall.

I will be speaking with a professor about a potential project so after that I'll have more of an idea what my project might be.

1
theobromus•

C++ is an extremely useful programming language and I think everybody doing software enough will eventually need to know it. However, it's pretty unforgiving in a lot of ways. In particular, errors in C++ programs can create very mysterious results. While your Java or C# or Python program will give an "array index out of bounds" error if you try to access past the end of an array, C++ will probably just keep going and give you some unspecified behavior. In addition, C++ compilers usually give syntax errors that are a lot harder for beginners to understand.

Personally, I'd say you should start with a more forgiving language like Java, C#, Python or even JavaScript. Probably the key thing to really understand is how references/pointers work. Learning algorithms will help with this.

As far as git - it is indeed somewhat confusing. There's a few reasons for this. Probably one of the main ones is that it was designed by and for expert programmers. In addition, a lot of the tutorials you'll find for the web are written by people who probably assume too much. In a short bit of searching, this is the best tutorial I found for someone with no experience using version control: http://readwrite.com/2013/09/30/understanding-github-a-journey-for-beginners-part-1 . I have a few quibbles with things (e.g. Windows does have a native console and git is not ancient), but I think this article does a good job introducing version control without drowning you in details about rebasing, etc. etc.

2
Pyar23OP•

Thanks, I will take a look at that Git walk through. Only reason I was starting with C++ was because the professor whose lab I want to work in uses C++ for her programs.

1
theobromus•

Well, if you have to learn C++ sooner, that's ok too. In my experience with grad researcher c++ code, there can be a huge range in terms of the quality of the code (which is a kind way of saying I've seen some awful research code).

If you're going to be doing a lot of work in C++, it's worth learning your way around the STL (so you don't reinvent the wheel as far as data structures). It's also probably helpful to read a book like "Writing Solid Code" (which is old and about C, but still useful). There's some ways of structuring your C/C++ code that make it a lot simpler to debug certain common errors (things like memory leaks, overflows, etc.).

1
SomePunWithRobots•

That's definitely a good reason to learn C++. It's definitely not the easiest language to start with, but if you want to work in a lab that uses C++ then it's not a bad idea to just get comfortably with it right away.

Another option could be looking into what programming languages the classes you're going to take use. If you can use C++ or Matlab or other languages you're used to or need to learn anyway, then sticking with those works, but if you know you're gonna be taking a course that uses an easy language like, say, Python, you could use that as an easier intro into programming and then move on to C++ from there.

1
blufox•

I started with a bachelors in Civil before shifting to CS for Masters and PhD. From my experience, just pay attention to what the instructors suggest as pre-requisites (most non-core wont have any), and make sure you take them before starting the main course work. They will be a maximum of 4 or 5 courses, which can easily be completed in the first two quarters/semisters.

As a PhD student, you will have much more time to complete the classes too, and get away with a lower grade for those courses that do not relate directly to your thesis.

Feel free to PM me if you have more questions.

3
Pyar23OP•

This is really helpful. I will try to take a few courses during the first semester but generally it is not recommended since they push to have students take the first qualifying exam at the end of the first year.

2
blufox•

It really depends on your professor. Have a talk with her, and tell her that you would feel much more comfortable with a relaxed course schedule.

2
aardvarkgenocide•

I would consider going through some of the courses on open courseware (ocw.mit.edu) or similar resources.

2
Pyar23OP•

I will definitely check those out. I'm already look at some courses on Coursera and edX.

1
EddieTH•

If you ever decide to teach, please pay attention to what you're learning. I had a prof with a a phd in computer science and an undergrad in stats, and he was just awful.

2
Pyar23OP•

Absolutely, I would never teach a class in something I was not 100% knowledgable about.

1
sunjay140•

You won't ever be 100% knowledgeable. There's always more to learn.

1
EddieTH•

Best of luck in your studies! From my experiences with profs, it's not the knowledge that makes them, it's the drive and enthusiasm for their students. If you have that, then you will succeed in all other aspects too!

1
none_shall_pass•

How exactly did you get into a Comp Sci PhD program with no Comp Sci classes?

1
Pyar23OP•

I ask myself the same thing everyday. I think it's a combination of a few things: they really liked my stat/probability background for machine learning, stellar recommendations, applying to the same school I'm doing my MS at, and having good interviews with professors at the program. I was able to make a convincing argument in my application that I'll be able to remedy any deficiencies I have before starting. Honestly when I got accepted I was extremely surprised.

4
thechao•

I had a combined English/Math undergrad when I got into a PhD in CS. My focus, in math, was in algebra & stats—similar to you. However, I also had spent a couple of years doing systems programming; really low level performance-oriented stuff that required a lot of graph theory, etc.

Either way, your math background is going to give you a head start in the formal stuff over your peers. Most of CS is actually pretty light-weight compared to the heavier analysis you've probably been doing. Just be sure to brush up on your basic algebra, and graph theory.

2
SomePunWithRobots•

Honestly, machine learning is at least as much statistics as it is computer science. If neither person has a background in machine learning in particular, I would say someone with a stats heavy background but no computer science is just as close to be prepared to do machine learning research as someone with a CS heavy background but very little stats.

Reminds me of my mom's story about how she got into grad school. She had an art degree, applies for a masters program in computer science because she wanted to do computer graphics, which was still being done exclusively in comp sci programs and not in art programs in those days. They accepted her because the professor who did computer graphics there was so excited to actually have an artist in the program.

1
tRfalcore•

Math is more useful for phd programs than being able to build a webapp in java

2
none_shall_pass•

Yes. Math is good. But that's not the question or the answer.

Someone who has "never taken a comp-sci class" and was accepted into the comp-sci PhD program sounds like they're about to get a world-class screwing by the university.

The school still gets paid even if they keep him/her around forever without ever awarding the degree or if he/she decides that comp-sci just isn't the right field, and withdraws.

In fact, it's to their advantage, since candidates are generally free/cheap TAs.

2
Pyar23OP•

I hope this isn't the case and they believe I will actually succeed. I should mention they did waive tuition and gave me a fellowship so I'm not sure how they are getting paid?

1
none_shall_pass•

I should mention they did waive tuition and gave me a fellowship so I'm not sure how they are getting paid?

You're still more-or-less free labor that can't complain about working conditions; however as long as you're not paying, give it a try!

Just be aware of the possibility, so if you start getting close to the end, and there's always some roadblock that prevents you from finishing your PhD, it might be intentional.

1
tRfalcore•

you'll be fine. algorithms are made of math. basic coding is easy as fuck-- and that's made of math.

1
SomePunWithRobots•

I agree, an think going from a stats program to a CS PhD program with an intent to do machine learning research makes a lot of sense. But I think mot undergrad CS programs teach a lot more math than they do Java webapps anyway.

1
DarkSayed•

Do you know how computers work? Do you know how to programme? Have you studied algorithms?

1