PHD or Professional Programmer?
PHD or Professional Programmer?
Henrik Warne talks about his experiences as a student turned professional, turned Ph.D. student, turned professional, once again.
Join the DZone community and get the full member experience.Join For Free
Discover how TDM Is Essential To Achieving Quality At Speed For Agile, DevOps, And Continuous Delivery. Brought to you in partnership with CA Technologies.
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 equivalent of 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 during 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 troubleshoot, 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 systems 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 choice 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.
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.
Published at DZone with permission of Henrik Warne , DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.