Dear KV,
I've spent much of my career working as a developer and software architect for various companies, both startups and large, established firms. I've always been lucky enough to work on projects that were interesting to me, several on the cutting edge of computing technology. A lot of the interesting projects have been close to research, but I've always been on the implementation side rather than the research part. Recently, I have been inclined to poke more into the research, but I don't have the pedigree to lead such projects, as they often require an advanced degree. With only a decade or so left until retirement, I've found myself considering various Ph.D. programs, which I never would have when I was younger. When I finished my undergraduate degree, I really wanted to work in industry, and, like many people, pay off a lot of loans. Is it too late for me to think about this? On the one hand, it seems crazy to consider taking several years to work on a Ph.D. just to be able to cross the line from development to research, but on the other, maybe it's not. If I went back, I'd be, well...
A Very Mature Student
Dear Very Mature,
Is there ever a time when learning is not of value—for its own sake? A good Ph.D. program isn't meant to be a meal ticket; it's meant to give you the skills and the time to really dig into a problem you think is worth the effort. And it will be a lot of effort. Like you, KV has spent enough time around the research side of R&D to see the large amount of work involved in earning a Ph.D. If you think KV talks up drinking as a cure for dealing with marketing types in a company environment, that's nothing compared to the self-abuse he has witnessed by those who are nearly done with their dissertations. All-nighters, violent mood swings, impassioned pleas to as many gods as you wish to name, psychotic breaks—KV has seen them all.
Are these arguments against pursuing such a thing? Certainly not. The greater the risk, the greater the reward, and if you do succeed, it will be an achievement that you can look back on and smile wryly about. Postdocs never laugh because postdocs are post-laughter. However, there are some things to consider before plunking down your application fee and writing all those essays.
As a very mature student, you'll have some advantages and disadvantages. There are some things to consider for anyone, young or old, who might seek such a diploma, so let's follow the parchment path and see what they are.
First and foremost, you should enter any sort of learning program with the understanding that knowledge is its own reward. While this incredibly idealistic view may seem to clash with your hard-bitten, jaded, taciturn image of KV, it is, nevertheless, key to a successful journey in pursuing an advanced degree. While there are people who have not had a pursuit of knowledge at their core and yet acquired advanced degrees, the people I have met who have done the best at it have all been, at some level, deeply curious about the world and the problems they are solving. Nothing quite sustains one in the long dark nights of work like an abstract—some might say crazy—focus on acquiring knowledge.
If you do not have a burning desire to know new things and—while being constantly rebuffed by your own intellectual shortcomings—continue in a nearly Sisyphean manner to climb the slopes of your own ignorance, well, maybe an advanced degree is not for you. If, on the other hand, you are this style of crazy, read on for a few more practical and less philosophical thoughts.
Undertaking a successful path of study also requires you to consider a few practicalities. KV will assume that you have the financial wherewithal to spend several years working for, shall we say, lower pay rates than you have found in industry to date. If your goal is riches, there are faster ways to make them than joining an advanced degree program. The other things you need—and these are the most significant ones I've seen while watching the R half of my R&D projects—are: a good advisor, the support of your program or department, some ability to write clear prose, and an ability to receive and integrate criticism. You will note that none of these has anything to do with age, but there are some distinct advantages to having some life and work experience before you start any such program.
When you undertake an advanced degree, your advisor is your boss—and not just any boss, but a boss who can demand all kinds of work and from whom you will get not stock or bonuses, but guidance and knowledge. Picking an advisor is far more important than interviewing with a new boss at a company. Most developers change jobs every 18 to 24 months; most advanced degrees take 48 to 72 months, which means you'll spend more than twice as much time working for your advisor than you would at a typical industry job.
Make sure to read up on the papers your advisor has written to date and check out their dissertation. Part of what you'll be doing is working on papers with your advisor, who will be a co-author on pretty much anything you produce during your time working with and for them. If you read their papers and think, "Ugh, this is awful," then no matter what else you think of them, or how well they are regarded in the rest of academia, you should run—not walk—away. In fact, you should not even apply to a program with an advisor whose papers you have not read and enjoyed. Just because someone is a famous researcher does not mean that your mind and their mind will mesh in a productive way for both of you. The goal of picking an advisor is to find someone who can help you learn the skills of research. As a mature student, you should already have the skills for software development.
The next thing to consider is the group or program you'll be joining. Look at the last few Ph.D.s produced by the program and see if you could imagine yourself working with those people on those problems. Your dissertation is your dissertation, but it has to swim in the stream that is the overall research of the group. All advanced degree programs and groups have web pages with their recent publications. At least read the abstracts for the past several years before even thinking of applying.
Much of this information can be gleaned through a reverse interview—or what a smart person does at a real interview. When you are interviewed, you had better be interviewing the people interviewing you. It's like reverse psychology on acid. If the group asks you for drinks, say "Yes," and then make sure they drink more than you do and be sure to ask good questions. Inquire about their working process, how papers are reviewed internally before being submitted to conferences, how often they present their work to each other, and what form feedback takes. The last thing you want is a bunch of toxic jerks tearing down your ideas as their way of making you stronger through adversity. That kind of bullshit is just what I called it: bullshit.
If there is any endeavor in the world of computer science that requires clear writing, it is taking an advanced degree. At the end, you will produce something the length of a novella—about 100 pages of well-written, well-thought-out prose. The code you produce during such an undertaking is in support of the dissertation, and, KV thinks, should also be a significant artifact that exists alongside the writing. What you are judged on to complete your degree, however, is not just whether the code runs, but if the ideas sing. If your committee doesn't like the idea you're selling, and the idea you're selling is through writing, then you're not going to finish, and you will either be making many, many corrections or throwing up your hands and becoming ABD (all but dissertation). If you think your writing isn't up to snuff, then it's time to get two books I recommend to programmers for prose: William Zinsser's On Writing Well and Strunk and White's The Elements of Style.
The last point I will make here—in the interest of text length and my blood pressure—is that you must be able to receive and integrate criticism to complete an advanced degree. There are very few people who enter such programs with fully formed, correct ideas that turn directly into their dissertation, and I have met a few in the past 40 years. I can count these people on one hand with a couple of missing fingers. The process of refining your ideas as research is one that requires being challenged and being willing to listen to what others have to say. Consider it, measure it, perhaps even weigh it out on a scale in grams, all the while keeping a smile on your face and controlling your impulse to tell them just how wrong they are. They might be wrong, but first you will have to listen. The type of developer who likes to scream across an open-plan office about how stupid some other developer is, is not the kind of person who should be going for an advanced degree, because a significant part of the process is having your ideas challenged and picked apart—sometimes gently, sometimes less so.
Can you do all of this at your admittedly mature age? They say mathematicians do their best work when they're young. I say that in computer science, experience is often the best teacher, and if we can learn from that, we can learn from anything, at any stage of life.
KV
Kode Vicious, known to mere mortals as George V. Neville-Neil, works on networking and operating-system code for fun and profit. His areas of interest are computer security, operating systems, networking, time protocols, and the care and feeding of large codebases. He is the author of The Kollected Kode Vicious and co-author with Marshall Kirk McKusick and Robert N. M. Watson of The Design and Implementation of the FreeBSD Operating System. Since 2014, he has been an Industrial Visitor at the University of Cambridge, where he is involved in several projects relating to computer security. He earned his bachelor's degree in computer science at Northeastern University in Boston, Massachusetts, and is a member of ACM, the Usenix Association, and IEEE. His software not only runs on Earth, but also has been deployed as part of VxWorks in NASA's missions to Mars. He is an avid bicyclist and traveler who currently lives in New York City.
Copyright © 2023 held by owner/author. Publication rights licensed to ACM.
Originally published in Queue vol. 21, no. 1—
Comment on this article in the ACM Digital Library
Ellen Chisa - Evolution of the Product Manager
Software practitioners know that product management is a key piece of software development. Product managers talk to users to help figure out what to build, define requirements, and write functional specifications. They work closely with engineers throughout the process of building software. They serve as a sounding board for ideas, help balance the schedule when technical challenges occur - and push back to executive teams when technical revisions are needed. Product managers are involved from before the first code is written, until after it goes out the door.
Jon P. Daries, Justin Reich, Jim Waldo, Elise M. Young, Jonathan Whittinghill, Daniel Thomas Seaton, Andrew Dean Ho, Isaac Chuang - Privacy, Anonymity, and Big Data in the Social Sciences
Open data has tremendous potential for science, but, in human subjects research, there is a tension between privacy and releasing high-quality open data. Federal law governing student privacy and the release of student records suggests that anonymizing student data protects student privacy. Guided by this standard, we de-identified and released a data set from 16 MOOCs (massive open online courses) from MITx and HarvardX on the edX platform. In this article, we show that these and other de-identification procedures necessitate changes to data sets that threaten replication and extension of baseline analyses. To balance student privacy and the benefits of open data, we suggest focusing on protecting privacy without anonymizing data by instead expanding policies that compel researchers to uphold the privacy of the subjects in open data sets.
Michael J. Lutz, J. Fernando Naveda, James R. Vallino - Undergraduate Software Engineering: Addressing the Needs of Professional Software Development
In the fall semester of 1996 RIT (Rochester Institute of Technology) launched the first undergraduate software engineering program in the United States. The culmination of five years of planning, development, and review, the program was designed from the outset to prepare graduates for professional positions in commercial and industrial software development.