I'm very interested in the theories of programming languages and going to apply a PhD in this topic, but I want to know more about the career after the graduate education. besides being a professor, but also what occupation can I get?
If you are a pro in programming languages and automata theory, then you should have enough industry opportunities as a compiler developer or backend optimization specialist.
Newer languages are coming up all the time, and existing languages are getting improved or targeting newer platforms. For e.g. C++ is moving to C++0x, hardware guys are moving from Verilog to SystemVerilog and ARM is increasingly used in consumer devices. All of these present good opportunities for compiler developers.
Last but not the least, compiler developers who can make use of multi-core architectures would rule the roost for years to come.
For compiler jobs look here.
Michael Feathers once wrote that he found that most people involved in programming belonged on a scale ranging from scientist to engineers.
Scientists get their kicks from learning and understanding, while engineers like to build stuff and watch it work.
On the extreme engineer end you have people constantly spewing out new code, or hacks, just to get things going. They tend to ignore the big picture. The extreme scientists on the other hand, become architect astronauts with their heads in the big, cloudy frameworks, and have never delivered a working line of code their entire life. The best programmers are somewhere in the middle.
I used to think I was a programmer, since I loved reading about it, and spent hours on that. A few jobs later, I realized that I actually have a problem delivering, since I'm always searching for a better way, or "the right way" to do things. Turns out I'm too much on the scientist side to be effective, at least in a "normal" developer job.
Either way, I think you are born with a preference for one or the other (I have been reading a lot about personality types lately, especially the Myers-Briggs Type Indicator, and have a hunch that this might be related to the S/N function, for those of you who are interested in that). I have tried to force myself to be more practical and more of a "doer", but I just get burned out.
My point towards the original question is that if you walk the PhD path, you probably are more inclined to like the theoretical stuff than the "building practical stuff"-stuff. Nothing wrong with that, but I think such a career choice often will lock you in a scientific/educational career. You can't expect to be able to go straight from a PhD to a high paid consultant job. The things you learn working out in "the real world" differs quite a lot from the best practices learned from books.
An alternative is of course to start your own business after the PhD and develop (or hire someone to develop) an application based on the fantastic theories you discovered while doing research.
I've been thinking about doing a PhD for a couple of years now (currently working on a thesis track Masters degree) and the number one thing that I have been told by PhD holders in academia and industry is the following:
Fanantic23 covered the career side of things pretty well, but there aren't as many jobs out there for a PhD so you need to make sure you want to invest the time in learning something for reasons other than the money before getting into the PhD program.
I would expect that you could work for one of the research labs that work on programming languages, Microsoft and IBM have them as do a number of other companies. Not to mention any shop that develops or implements languages.
There are still a number of firms whose product includes a programming language (I work for one, but these words are not theirs). Knowledge of programming language theory would be an asset for such a job.
A move from academia to industry requires understanding that knowing theory is not sufficient--it's how you apply that theory to explore productive research directions and/or create products people will buy.
You should talk to your alma mater professors before embarking on the PhD.
Typically a PhD either works in a research lab or becomes a professor. Lifetime earnings are typically considerably below a MS degree.
A theory of programming language diss would probably put you in the field of writing compilers.
Also, these things are not hard to find out by reading - I express doubt that you are ready for the PhD if you are asking this question.
|show 6 more comments|
DO NOT go to a PhD if you are counting on getting an academic job, or if you don't mind wasting many years just to end up being an engineer just as you would have before that.
Not to discourage you, but the vast majority of folks with PhDs in CS, and specifically in topics like programming languages DO NOT end up as professors. There are simply not enough research jobs to go around.
Research jobs in industry are even less common and available than research jobs in academia, since they pay better and have no teaching requirement.
Think about it this way: If you look at the number of PL scientific papers published per year, and assume one PhD student per paper, not all of these people are going to be professors.
I did my PhD in Software Engineering at CMU, where PL is one of the strongest fields (we're a top-3 program in PL). To the best of my knowledge, from everyone who graduated with a PhD in PL, only two ended up in academic positions. Everyone else is employed as software engineers. I know one that works on PL related stuff, but the others are generalists.
Contact me privately if you want me to put you in touch with folks who did PL research who can tell you more about the experience.
I was interested on study that same career/course (My graduate thesis is Compiler-Design related, and I also teach a class about "Comparison of Programming Languages", both concepts relate to "Programming Languages Theory").
But, It was more as a hobby that a "paying-the-bills" career.
There is also the problem that, Programming Languages Theory, applies a lot of math, but its difficult to apply it, in a practical way.
If you already have that course, how do you applied ?
Example, make your own Java Compiler, make it faster than the original, add a few things, and sell it. Example: "HotSpot"
Or, something like "Java / C# running in a toaster" compiler and sell it ;-)
Teaching related concept classes in a Collegue / University, like Automatons, Compiler Design, Comparison of Programming Languages, and so of.
You may also create you own small startup, full time, or free/part time, while having a standard programmer job, that pay the bills (Tried and fail). :-s
There are several companies which may produce software products that actually require that specific skills.
(Mostly, designing a programming language, and the matching compiler, for a particular virtual/physical machine, own XML parser, etc).
But, it seems that most of them prefer to hire a generic cheap developer, than a developer with some specialization...
A doctorate in CS with a focus on theory of programming languages can land you a job outside of academia, but most likely still within the realm of research. Microsoft (either via MS Research or Microsoft), Google, Amazon, Ericsson, HP, IBM Research, Oracle would be possible employers.
If you expand your job opportunities outside of your future dissertation, Ph.D. hiring groups will also consider you for the depth of your studies.
And that's only on the commercial sector. If you look at the DoE and its many labs (Laurence Livermole, Sandia, etc) or the DoD or military contractors like Raytheon, General Dynamics (my employer) or Lockheed Martin, there are positions available for scientists and researchers. NSA would want to hire you as well.
Non-academic opportunities for people with a science doctorate degree are less (a lot less) than those requiring a B.S or M.S. degree, but they are still plenty, decently remunerated and rewarding.
Lots of jobs available:
C#/.NET at Microsoft