Ph.D. or Professional Programmer?

When I graduated from university with a degree in Computer Science, I wanted to continue and get a Ph.D. But I also wanted to work as a software developer, so I worked for five years in industry before going back to do a Ph.D. I spent one year as a Ph.D. student before deciding that I liked professional software development better. Even though this was many years ago, I think some of the lessons I learnt still apply.

Why Get a Ph.D.?

Love to learn. I studied Computer Science, and loved every minute of it. I always liked math and computers, and my M.Sc. program at Chalmers University included a lot of math courses and computer courses (software and hardware), as well as general engineering courses like physics and mechanics. There were so many cool and clever ideas: Laplace transforms, control theory, signal processing, error-correcting codes, heap sort, queuing theory etc. Because all the things we learnt were so interesting, I thought that in order to continue working with such interesting subjects, I had to get a Ph.D.

Seen as smart. Another reason for doing a Ph.D. is to show how smart you are. In modern gamification terms, it is the earning of another badge (albeit one that takes several years to get).

What It Was Like

After developing software for mobile telephone switches for five years, I decided that it was time to go back to start my Ph.D. I started at the department of Teletraffic Systems at the University of Lund. One of their research areas was congestion control algorithms, which suited me because it seemed pretty math heavy, while still applicable to telecom systems. They also did research in software development, which was a bonus.

Apart from reviewing some math and queuing theory, and taking Ph.D. courses, I had to decide on a research area. Since the purpose is to publish results, it has to be on a subject that hasn’t already been studied. The problem I had with this was that there was nobody waiting for a result (as far as I knew). I ended up working on analysis of distributed systems, including some simulations. But my feeling was that the problems I studied were in some sense made up in order to have something to publish.

The third part of the program (apart from taking courses and doing research) was teaching. I was only a teaching assistant in a course on queuing theory, but it made me realize how much time and effort it takes to teach at the university level.

In Sweden, you are hired by the university to do your Ph.D., so you are paid a salary. It is OK, but not as good as what you would get working in industry. In other respects, it was back to being a student again. While I really liked being a student when I did my M.Sc., it wasn’t much fun the second time around. So after a year as a Ph.D. student, I decided that it wasn’t for me, and went back to working for Ericsson as a software developer. The main reasons were that I felt like I worked on made up problems instead of problems that really needed solving, that the pay was worse, that I was done with being a student, and that software development was more fun than anything I did at the Ph.D. program.

What I Learnt

You don’t need to be a student to learn. This is my most obvious lesson, and it is almost incredible that it took me so long to figure out. Before going back to university, I thought that that’s where any “real” learning is done. During the five years I worked before, I didn’t spend much time learning more about software development in general. I learnt the language and tools I used, but that was it.

While doing my Ph.D., I bought a copy of Code Complete, and it really opened my eyes to how much there is to learn about software development. Not only did it have lots of examples of research and studies on various aspects of programming, it also had a long reference list of other books and articles on software development. It made me realize that it is possible to keep learning even if you are not taking courses at a university.

Now, many years later, it is even possible to take actual university courses in your spare time, thanks to MOOC providers like Coursera and EdX. I jumped at the chance, and took one of the first courses that came along, Introduction to Databases, as well as several others.

A Ph.D. doesn’t make you smart. There are lots of smart people with Ph.D.s, and there are lots of smart people that don’t have a Ph.D. I realized that it is not the act of doing the Ph.D. that makes you smart – you were already smart. Likewise, having clever ideas does not depend on having a Ph.D.

Less impressed. Before I started, I always felt very humble whenever I came in contact with somebody with a Ph.D. Afterwards, I am not as impressed anymore. I try to assess what people know regardless of the degree they have. I have worked with and met a variety of people, smart and less so, and their cleverness is not correlated to their degrees.

Narrow problems vs. broad problems. A researcher typically studies a very narrow problem. For example: what is the optimal congestion control strategy given a certain arrival distribution and goodness criteria? While these are important to study and understand, I am more interested in the broad problem of “what makes software successful”. In the telephone switch example, it must perform acceptably well in many dimensions in order to be successful. It must have enough capacity, it must not crash, it must be easily configurable, it must be easy to trouble shoot etc. Congestion control is one part of many, but a rudimentary solution is probably good enough.

I realized that I enjoy the challenge of working on large software system that must work acceptably in every dimension, rather than studying a very narrow problem in detail.

Thrill of having users. I only discovered the importance of having users once I started the Ph.D. program. Doing research on a problem of my own choosing, without anybody eagerly awaiting the result really paled compared to the excitement of working on a system with lots of users. The features I added and bugs I fixed had an immediate impact on lots of people, and I really missed that feeling.

Value of options. Since I had worked in industry before starting the Ph.D. program, I knew what the alternative was. My sense is that most people who do a Ph.D. do it immediately after getting their M.Sc. This means they don’t know what it is like working in the non-academic world. In most cases that probably doesn’t matter, but sometimes it is important to know what you are missing.

Conclusion

I am glad I tried doing a Ph.D., but I am also glad that I quit after one year. I am much happier working as a professional software developer. And I am glad that it doesn’t mean the end of learning. On the contrary, there are lots of interesting areas to study, and plenty of learning resources available.

 

9 responses to “Ph.D. or Professional Programmer?

  1. This is by far the best article/analysis on the subject. What really makes you good at is, not degrees, but the shear enthusiasm/passion towards what you want to be. I am 100% in agreement with you. Awesome article.

  2. I’ve thought about doing a Master’s degree and a lot of the points you made resonate with me. Another factor I have to consider is that in the US I have to pay quite a bit for graduate school tuition, which doesn’t even factor in to your case!

  3. Pingback: Java Web Weekly, Issue 115 | Baeldung

  4. One more reason to get a PhD.: it’s required for pursuing an academic career (University professor).

    I once interviewed 2 applicants for a developer position in a very challenging environment; one was a fresh PhD. with an impressive list of theoretical and research items in his Resume, the other was a developer about the same age with three years experience as developer in similar projects (same industry).
    We choose – hands down – the developer; his real-life experience solving real problems was far more important to us than the Ph.D’ academic/research experience.

    I once was in the same position – having to choose between finishing a PhD (I was 70% through) and taking a developer position in a very challenging environment.
    I choose the latter…and never looked back.

  5. Excellent article! Recently I’ve been wondering if I would suggest anybody to go to college rather than just starting as a junior junior dev. Don’t know much about the state of things in the US, but back in Poland studies are not of such low quality that you actually start learning once you start working professionally. Only downside I guess would be that it would require massive self-motivation.

  6. Before the internet uses this as a superficial reference for the negative response to “Should I do a PhD?”, remember that this is the author’s opinion drawn from a very short experience. A PhD not a continuation of your masters. You have to be prepared to devote your life to the study and advancement of a research field. This sacrifice is not for everyone. That’s why so few start it and fewer still finish it.

    To broaden the discussion, I will share my PhD experience. I worked many years as a software developer for the IT elephant that could dance before leaving to do my PhD.

    I “quit” by the sixth month of the program for many of the same reasons you stated before returning to stubbornly “finish what I began”. But having completed it, I have come to a wider perspective on prior and post PhD experience.

    Broadly, when you graduate with a bachelors and a masters, you have been trained as a problem solver. You would have been given a neatly specified problem with a solution that exists, only unknown to you, and you would have to strive to solve it. Your efforts would have been rewarded with a mark based on some rubric meant to reflect your ability relative to your class.

    A PhD trains you to push the boundaries of knowledge. This requires you to seek, identify and formulate new problems and propose a potential solution. And even after much thought and hard work, you would have to be prepared to face rejection, criticism and borderline denigration. There is no pat-on-your-shoulder approval; you are only as good as your last publication. You are competing at an international level and someone is going to make your idea obsolete.

    So, point-by-point:

    You don’t need to be a student to learn.
    In a PhD, you learn formally only in the first couple of years. In the US system, this would be concluded by “Quals”. You mentioned a book that provided many opportunities for learning. By the end of the PhD, you would be writing or would have written that book. So, by the end of the PhD, you would not only be able to learn, you would be equipped to teach.

    A PhD does not make you smart.
    I graduated the top of my engineering class. I was a consistent strong performer in my team at work. My PhD made me realise I was not as smart as that had led me to believe.

    Less impressed
    I agree with your newly discovered sentiment. Getting a PhD is less a badge of intelligence than one of physical, mental, spiritual and financial endurance. Personally, realising the true level of my “smartness” made me appreciate more the expertise of others by the shared recognition of their effort in achieving it.

    Narrow problems vs. broad problems.
    As much as we would like it to be otherwise, becoming an expert these days requires focused effort on a narrow set of problems at a time. The epitome for a PhD is to open and widen one’s field of research and a small part of doing that might be to solve a narrow problem.

    Your acceptance of good enough, suggests you have the mindset of an engineer and so you have correctly chosen to quit your PhD.

    Thrill of having users.
    Having users is effectively having an existing problem framed for you. It’s a risky, lonely and frightening experience to introduce a proble?m without anyone to validate it before you’ve dumped a few of the best years of your life into formulating it.

    Value of options
    The benefit of having industry experience before starting a PhD is minimal. My advice is to continue with one’s PhD directly after one’s masters to keep up the momentum. Your field will move forward very quickly; being absent will require a lot of catching up. Also, it would avoid the pain of reorientating one’s lifestyle.

    Fact of the matter is you probably did not stick around long enough to fully appreciate the PhD. And this is perfectly fine: to each his own e.g. you seem to enjoy programming more and frankly made a wiser economic choice.

    Finally, as a farewell note, for those doing their PhDs, remember: there is no shame in quitting. There are other avenues to progress from being a student to being an expert.

    • Thanks for a great reply! You make a good point in that doing a Ph.D. largely involves creating new knowledge, as opposed to only learning what already exists. However, one problem is the definition of what new knowledge is. For example, if you take some existing work and vary it in some way, are you then creating new knowledge?

      As for the value of options: if you go straight to a Ph.D. from your M.Sc. then you can’t compare working in industry to working on a Ph.D. I also agree with you that there is no advantage to having industry experience when doing your Ph.D. (which surprised me a bit). So if you are sure you want to do a Ph.D. then it’s best to go straight to it.

      Finally, I should have been clearer in saying that even though a Ph.D. was not right for me, it doesn’t mean it’s not right for other people. For many, it is the right choice. Like you said “to each his own”.

      Thanks again for your thoughful comment. Comments like yours make blogging even more fun!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s