On Tue, Dec 3, 2013 at 5:26 PM, Dennis Raddle <dennis.raddle@gmail.com> wrote:
Hi Andrey and list,

All replies have been helpful. I realize my question is vague, and that's partly because I don't know what area within CS interests me. I may have to do at least an MS to find out.

I've been struggling with health problems for many years, so my work in programming has been part-time, minimal, and not very interesting to me. I'm not in a good position right now to determine what I would really like to do.

I can say that my favorite class in college was discrete mathematics. And I can say that I enjoyed learning Haskell, which I am in the process of teaching to myself for personal projects.

Oh yeah--I do have some personal projects. One of them is making animated videos to teach algebra, which I am doing in Haskell.

And I can say that I enjoy teaching a lot. Maybe I should become a high school teacher!

Right now I have a small gig teaching Python and numpy to a local psychiatrist who wants to write software for voice analysis. He is a smart guy, but of course we are starting at the beginning. It's quite pleasureful to see things click in his brain. We are working on just basic ideas, like organization of code into functions and modules. He previously dabbled on his own, and ran into problems with disorganized code, so he really appreciates the ideas I'm presenting.

I can think of a few potentially relevant points:
 - The only reason to do a PhD is because you want to learn how to do research on a very specific problem.
 - Being unsure of what you want to do is usually at odds with finishing your PhD.  Doing a PhD --- at some level --- means allowing yourself to focus on a specific problem and not feel too tempted by other areas.
 - A PhD isn't really about learning, it's more about doing.
 - Lots of people start PhD programs because they were passionate about learning (or are the kind of people that romanticize it) as undergrads, or feel generally upset with the daily grind of work in industry, hoping that doing a PhD will change this.  Doing a PhD still involves a huge amount of "the daily grind," but is nonetheless rewarding in ways that industry may not be.
 - MS programs can cost quite a bit of money, which is something to keep in mind: since I doubt you want to sink thousands of dollars in something that may be ultimately unnecessary.  Some schools fun MS students through TA positions, but you'll have to ask.
 - Getting in to PhD programs can be quite difficult, especially for nonstandard applicants (e.g., without a BS in CS from a strong undergrad school with a great GPA and high test scores).  This is not to say it's in any way impossible.  If you're a nonstandard applicant and love doing research, you should look for great *people* to work with at schools outside of the top ~50.  Rankings say very little about the quality of the faculty, but say a great deal about admissions difficulty.
  - If you ultimately want a PhD, getting an MS is unnecessary (at Maryland most people with MS degrees only have them because they worked in industry for a while).  However, if you don't have a traditional CS background, it may be a good way to qualify yourself for PhD programs and make connections with faculty members.

Overall, I think it's unwise to strongly consider PhD programs without a solid lead on your research area.  Doing a PhD is a big thing, and all about research.  In practice, the people that I know that do best at their PhDs don't get them because they want PhDs, it's more like "well, I really loved topic X, and it turns out if you do X long enough, and publish in obscure journals advancing the state of X, they eventually give you a PhD, because that incremental delta to human knowledge is called research."

If you like teaching, but not research, it might be better to get an MS for *breadth* in CS, and then look at teaching opportunities.

I agree with Dennis, however, looking to help people out may provide some insight.  Then again, jumping in to an active research can be very difficult, and faculty may be hesitant to accept help from outside their department for a variety of logistical purposes (faculty typically have very little free time).  However, most faculty organize some sort of reading group or seminar in their area.  These are typically more open to outsiders.

The best way to find out is to find faculty near you, download some of their most recent papers, and see if you can understand any.  If you find some that look interesting, you can acquire more background knowledge by reading in the area (e.g., Types and Programming Languages, Software Foundations, and Certified Programming with Dependent Types, would be texts for PL).  Then you might contact the faculty members and ask if they sponsored any open seminars for you to attend.

Kris