Hi! I’m James Mickens. I’m a computer scientist in the Systems group at Microsoft Research.

For the past six months, I’ve also been an MLK Visiting Professor at MIT’s Computer Science and Artificial Intelligence Lab (CSAIL), where I’ve been a member of the Parallel and Distributed Operating Systems Group.

My research focuses on distributed systems. For example, I’ve studied how to make datacenter file systems faster; I’ve also looked at how to make web pages more secure and easier to debug.

For a list of my academic publications, you can check out my website. You can also find links to some of the humor essays I’ve written about computer science.

I got my bachelor’s degree in computer science from Georgia Tech and my PhD in computer science from the University of Michigan.

I am a member of two metal bands, both of which consist of solely myself, and both of which are amazing, mainly because I demand the best from myself, and myselves do the same.

For more information about my life, you can read this article entitled “All Hail the Galactic Viceroy of Research Excellence”. Yes, I am the Viceroy in question. Yes, it is difficult to become a Galactic Viceroy. No, I cannot make you a Galactic Viceroy too. Yes, it is technically within my powers to do so. But no, I will not do it, because I could give you a fish, or I could teach you how to fish, or I could just drop the mic and then ride away in my custom-built hovercraft, as Galactic Viceroys are wont to do.

I'll be starting this AMA at 2 p.m. EST! Feel free to ask me about anything, including:
* what I work on all day
* how I got into programming
* how I survived grad school
* what MIT CSAIL is like
* why many of my critical life lessons were learned from Seinfeld
* what it's like to be a black guy in computer science
* any other topics that you’d like to discuss confidentially, with a complete stranger, in a public forum that will be archived forever

Proof: http://imgur.com/DtAFQV1

DISCLAIMER: I am not an official spokesperson for MIT, Microsoft, or any other noun besides James Mickens. Interestingly, I am the spokesperson for the adverbial phrase “with the subtlety of a young William Shatner.” However, a discussion of this topic is beyond the scope of the current AMA.

EDIT: indented some paragraphs and added the time

EDIT: I am officially leaving the AMA and going to bed :-). Thanks for all of the great questions!

Comments: 174 • Responses: 39  • Date: 

th3An0nyMoose29 karma

Why do you think such a small number of black people go into computer science? How do you think computer science is generally perceieved as a career choice by the black community?

JamesMickensAMA77 karma

There are a lot of reasons why there aren’t more blacks in CS. I think that CS and STEM jobs are viewed positively in the black community. However, I think that the lack of African American role models is discouraging to black kids who might be thinking about a career in technology. I think that teachers and professors (often well-intentioned ones!) can implicitly or explicitly discourage ethnic minorities from STEM careers. There’s also an issue of social capital. A lot of stuff gets done in this world via social connections---you know a person who knows a person who helps you to get a job, or a conversation with an important person. If you’re the first person in your family to go to college, or you’re the first person to enter a STEM field, or if you went to a school whose alumni aren’t well-connected to important social networks, it can be more difficult for you to achieve some of your career goals. To be clear, it’s not impossible! I don’t want to discourage people from underrepresented groups to get into STEM fields. What I’m saying is that you will need to be more intentional about achieving your goals. When you attend classes, or go to conferences, or go to job interviews, you’ll need to be focused and prepared. You’ve got to do well academically, but you also have to be good at networking among your peers; I’d venture that this is just as important as the academic part. You need to be comfortable talking to people, not just about technical subjects, but about everyday things. You’d be surprised how many “technical” decisions about who to hire and which projects to pursue are ultimately driven by the ability of people to explain themselves and interact well with others. The only way to get better is to practice!

Finally, I’ll say that you can’t be afraid to have mentors who are different than you. This is true for everyone. If you’re a white guy, don’t be afraid to have a female mentor. If you’re a black female, don’t be afraid to have a white man as a mentor. There may be some cultural misunderstandings, but that’s okay. You’ve got to learn how to deal with those things anyway, so don’t be afraid of it. I can say with total confidence that the extent to which I’ve been successful in my career is the extent to which key mentors have taken a chance on me and put me in positions where I could succeed. This was true in grad school, this was true at Microsoft, and this was true at MIT.

jeanqasaur20 karma

Hi James! Thanks for doing this AMA. :) What is your top advice for giving humorous talks? Do you think it's different being funny as a black man or as some other kind of underrepresented minority (for instance, a woman)? Also, do you think humor in Computer Science works differently from humor in general (for instance standup comedy)?

JamesMickensAMA40 karma

My main piece of advice is that if you’re trying to give a humorous talk, you have to continually thread humor into your presentation. You can’t just add three jokes and then expect that people will say “That was a funny talk!” afterwards. In general, any piece of communication (verbal or written, funny or not-funny) should have a small number of narrative themes; every part of the communication must reinforce those themes.

With respect to picking a particular style of humor for a talk, you have to do what feels natural. What kind of stuff do you find funny in real life? What comedians or movies or TV shows make you laugh? Study those performances, and think explicitly about why they succeed or fail. Then, apply that same type of analysis to your own stuff. When you give a practice talk, see what resonates with people and what doesn’t. Don’t be afraid to throw stuff away that isn’t working!

With respect to humor in computer science (or science in general), I actually think that there are a lot of opportunities to find comedy! My attitude in life is that, unless you’re directly helping to end war, poverty, and homelessness at the same time, you don’t have the right to be ultra-serious. I think that if scientists reflect on their day-to-day routines, they’ll find a lot of funny moments. The tricky part is expressing that humor to people who may not share your exact day-to-day routine. That’s why I think that it’s so important to observe people who do this well, and think explicitly about how their delivery creates humor. Also, as mentioned above, you have to practice the art of comedy in particular, and storytelling in general! Or make a pact with Satan to give you unholy powers. Hint: DO NOT MAKE A PACT WITH SATAN.

On the topic of being funny as a black person (or, more broadly, an underrepresented person), the trickiest part is that being funny is the process of making people accept your narrative, and, as someone from an underrepresented group, you may have to work harder to get credibility. There’s no easy way to get around this challenge. You have to practice your story-telling skills, and learn how to read body language and tone so that you can establish a good connection with your audience.

eaturbrainz9 karma


Well now you tell me. Oh well, better go scuff these calligraphic P's and lambda signs and astrological markings off my floor.

JamesMickensAMA18 karma

Try not to beat yourself up. Who hasn’t made an ill-advised pact with Satan and then been forced to deal with the consequences? This is why my office occasionally fills with ill-tempered scorpions that taunt me about my failed romantic relationships. #JustAnotherDayAsAComputerScientist

DanceExMachina15 karma

Damn it, I wrote a long question and it got lost somehow. This is the short version:

1) Your research profile blurb thingy is great - favourite Black Sabbath album and have you seen them live?

2) Do you think a computer scientist can successfully balance theory and applications in a research career? Any tips for that (for someone who'll start a PhD this October and mostly has experience in theoretical research up to now)?

3) Microsoft Research seems like a really positive thing for research-level computer science to me. Do you think it's a good model? Will there be more (or fewer or the same) places like that 10 years from now?

4) I've never seen any Seinfeld.

5) Oh yeah and how did you survive grad school?

JamesMickensAMA21 karma

1) My favorite Black Sabbath album is “Sabotage.” It isn’t their heaviest album, but I love the crazy production on it. It’s sounds like Black Sabbath is performing in a cavernous space station! Or something. I’ll reflect on this more and let you know when I’ve devised a more appropriate metaphor :-).

2) As a PhD student, it’s important to look out for your own career! Unlike in undergrad, where you’re mostly given problems that have known solutions, in a PhD program, you’re expected to ask questions that haven’t been asked before, and then generate answers to those problems. Generating those answers will take a lot of hard work and sleepless nights :-). So, you have to pick problems that you think are important. Then you need to talk to other smart people and see if they think that the problem is important. It’s perfectly acceptable to work on something that other people might think is unimportant. However, one of the most important lessons that I’ve learned in life is the value of smart people who will be unflinchingly honest about your research. It’s difficult to take criticism, but it’s much better to have a bad idea snuffed out on Day 3 of its existence instead of Year 3 of your PhD. With regard to your specific question about balancing theory and practice, I’d recommend that you mention your desired balance to your advisor at the beginning. Then, try to select projects that adhere to that balance.

3) I’d be ecstatic if there were more industrial labs that supported open research. However, I’m not optimistic that there will be more of them in 10 years, since companies are very focused on short-term goals these days.

4) If you’ve never seen any Seinfeld, you should change this situation. If you get the TBS channel, they show approximately 27 Seinfeld episodes every day. Then, when Thanksgiving arrives, they play ‘The Lord of the Rings” trilogy 2 times a day. TBS should probably get the rights to show more things. Oh well. TBS is mysterious, like the reasons why Ben Affleck will be the next “Batman.”

5) One important key to surviving grad school is having a strong social network. You will need shoulders to cry on when your paper has been rejected for the fifth time, and you will need people to help you burn couches when your paper is accepted on the sixth try. It’s also important to find mentors, because, as I mentioned above, it’s incredibly useful to have smart people who are invested in making you a better person.

Note that I am officially neutral on whether couches should be burned as objects of celebration. I refer all follow-up questions to my lawyers.

th3An0nyMoose15 karma

surprised nobody has asked the most important question yet:

vi or emacs?

JamesMickensAMA48 karma

I use cat plus a series of immutable n-gram files to construct larger documents. It’s lean, elegant, and puts a minimal amount of overhead between me and the inodes.

Considered_Harmful15 karma

Are you planning on writing more humor essays? I was very sad to see that "To Wash It All Away" was your last ;login: logout column. I don't know if I've ever laughed harder than when I first came across "The Saddest Moment" while implementing Paxos for my distributed class.

Also, if you could put in a good word for my submitted PhD application at MIT, that would be swell.

JamesMickensAMA21 karma

I’m glad to hear that you enjoyed the articles! I’d like to write some more; hopefully I can do so in the second half of the year. The main impediment is finding the spare time. Each article takes about 10—20 hours to write; I have not found a wealthy aristocrat who will pay me to generate lengthy diatribes about computer science, so I have to fit the writing around my day job of being a researcher. If you, or someone you know, is a wealthy aristocrat, COME TALK TO ME.

Zinggi572 karma

Sadly I don't know a wealthy aristocrat, I just wanted to say thank you for these wonderful essays. Can't wait for another one, you've got real writing talents!

JamesMickensAMA14 karma

I wish that there was a platonic dating site that matched writers with rich aristocrats looking to fund the production of extended jeremiads about Byzantine fault tolerance. Venture capitalists should be interested in this idea. It’s no dumber than the other things that they fund.

viribex14 karma

Do you have a favorite computer science paper?

JamesMickensAMA33 karma

Here are some of my favorite computer science papers, in no particular order.

"Chord: A Scalable Peer-to-peer Lookup Service for Internet Applications" by Stoica et al: This paper describes how a set of nodes can distribute data across themselves in a way that enables efficient lookup, but does not require a centralized coordinator. This is one of the definitive papers on peer-to-peer systems, and it demonstrates the challenges of creating a large-scale application that cannot rely on a single, global coordinator. The Pastry paper by Rowstron and Druschel describes another influential system for peer-to-peer object location. If those papers arouse the fires of science in you, then you should read about the kinds of applications that can be built atop p2p routing layers (e.g,. the PAST paper by Rowstron and Druschel, or the Pastiche paper by Cox et al).

“MapReduce: Simplified Data Processing on Large Clusters” by Dean and Ghemawat: MapReduce is a popular programming model for performing big-data computations. When the paper first came out, everybody was like THIS IS AMAZING. There was some push-back from the database community, who said that MapReduce ignores decades of results from database research (see DeWitt and Stonebraker’s fantastically-titled blog post from 2008 entitled “MapReduce: A major step backwards”). People continue to debate about the best ways to analyze large data sets. For example, for some data sets representing complex graphs (e.g., the Twitter “X follows Y” graph), it may be faster to analyze the data on a single machine rather than on a distributed computing cluster that contains multiple machines (see Frank McSherry’s recent blog post). There’s also debate about the appropriate way to build key/value stores. If you’ve stuck at the airport one day, type something like “MongoDB good or bad” into the Internet and see what happens. Answer: You’re at an airport, so the Internet connection sucks and nothing happens. You’ve stepped into my trap! Meanwhile, I’m at your house, subtly rearranging all of your pillows into non-optimal configurations.

“Hacking Blind” by Bittau et al: A deeply disturbing paper about how a malicious client can launch buffer overflow attacks on a server even if the attacker has no access to the server’s binary or source code, and even if the server uses stack canaries and address space randomization. Reading about these attack methods is like watching a documentary about those horrible goblin fish that live at the bottom of the ocean and use bioluminescence to spread evil. Even if you don’t think about them, they’re thinking about you.

tristamshandy13 karma


JamesMickensAMA17 karma

Yeah, it’s definitely a tricky problem! I think that in STEM fields (and computer science in particular), conversations that are ostensibly about scientific things are often driven by people who have the most aggressive personalities. This works to the detriment of people who are naturally quieter or more collaborative. It also works to the detriment of people from underrepresented groups whose voices tend not to be given the automatic authority that is granted to someone from a majority group.

Personally speaking, if I’m in a group dynamic in which I don’t know people, or in which I know people but those people won’t necessarily give me technical respect, I devote 95% of my comments to technical material. I tell very few jokes. I know what you mean about how this can feel like you’re suppressing an important part of your personality, but it’s important to be taken seriously among your peers. Once you’ve established your technical chops, you can open up more, but I do think that it’s important to establish that technical authority early. I can think of specific individuals for which I did not do this, and for whom I then had to devote extra effort to convincing them that I was a serious researcher.

Another important thing is to be prepared for meetings. Have concrete things that you want to talk about, and know how those things relate to what other people will say. It can be difficult to be confident if you’re improvising, particularly if you’re improvising about technical things! Also, if you prepare what you want to say, and people try to cut you off, you can say, “one second---I just want to describe X, Y, and Z, which relates to the larger group goals in ways A, B, and C.” It takes practice to be firm about this, but it’s an investment that will pay off. You don’t want to be in the habit of getting talked over at meetings. You don’t need to dominate every meeting, but you want to establish a reputation as a serious thinker. Only then will the “softer” sides of your personality be perceived as compliments instead of the only thing that you’re known for.

That being said, I do encourage you to work your personality into your research and into your presentations! I do think that people reward communication which is seen as authentic and enthusiastic. However, you have to know your audience, and you have to be able to tweak your presentation in real time based on how your audience is responding. It’s particularly important to do this adjustment if you’re trying to be funny, since comedy can spiral out-of-control very quickly :-).

My final piece of advice is that you can’t please everyone. Some people like dry but technically competent talks; some people doze off during such presentations. Some people like more humorous presentations, but other people think that the comedy distracts from the core technical message. Personally speaking, I have an explicit non-goal of pleasing everyone. When I prepare for a meeting or a presentation, my goal is to present technical material as clearly as possible while indicating that I have fun when I do technical research. If some people don’t like it, then that’s the way it has to be :-).

th3An0nyMoose10 karma

Hi James. I understand you did a good amount of research with Brian Noble, one of my favorite professors at Michigan, and the guy I credit with teaching me the fundamentals of good programming. What was your favorite thing you guys worked on together? Also, what's your favorite restaurant in Ann Arbor?

JamesMickensAMA28 karma

I have many fond memories of working with Brian. My fondest memory is how he didn’t fire me during my first two years of graduate school, even though I was fairly ridiculous and I didn’t know much about the process of doing good research. My favorite project with Brian in terms of research was our work on predicting host availability in distributed systems. I think that we dealt with an interesting and important technical problem, and our NSDI paper later became the core of my dissertation. Another favorite project was a kernel hacking project in which I was trying to modify the Linux networking stack. I was deep in the guts of the beast, trying to understand a bunch of asynchronous interrupt insanity, and Brian came to my office one day and asked “How’s it going?”, and I looked at him with sad eyes and simply said, “I’m in the kernel,” and we both knew that, if I survived, a boy would become a man.

My favorite restaurant in Ann Arbor was the Flim Flam diner, which sadly closed a few years ago. As a student, I'd go there every Saturday!

yoted7 karma

Hi James,

I've always been fascinated at the fact that whenever you give a talk, you face the dual expectations of both research results AND a hilarious presentation. That seems, to me, at least twice as burdensome as an ordinary talk.

Does this ever get you down? Have you ever thought, "I can't deliver that research talk yet because I don't have any good jokes for this technical material," or does the humor come so naturally that one doesn't limit the other.

PS - fellow web researcher and former-CSAILor here and I always enjoy reading your new work. Thanks for all the good stuff over the years.

JamesMickensAMA11 karma

Hi Yoted,

Thanks for the question! You’re right that audiences arrive at my presentations with a dual expectation of hearing technical information and also comedic stuff. On the one hand, I like that I’ve been able to build high expectations for my talks---presumably this means that I’m doing something right :-). However, it can be stressful. In particular, I am always incredibly nervous before a talk; I prefer to be alone so that I can gather my thoughts, or run through the slides one last time. This can be surprising to people who expect that I have meth-user levels of energy at all times. People will often come up to me before a talk and want to chat about transient, light-hearted events from their life, and I tolerate this because I’m a wonderful person, but inside my head, I’m like, I AM DYING AND YOU ARE THE PERSON WHO IS KILLING ME. During the presentation itself, I’m too preoccupied with the mechanics of presenting to be worried, and I really enjoy playing off the crowd reactions as the presentation unfolds. However, those five minutes leading up to the presentation are pure nightmare.

With respect to coming up with particular jokes for particular technical topics, it’s both easy and hard. I generally don’t have a problem with devising something ridiculous to say about a random topic---the difficult thing is making that stuff funny in the context of a monologue instead of a dialogue. When you talk to someone in a normal conversation, you can riff off of their responses, and adjust what you’re saying to match their tone. In contrast, when you do a PowerPoint presentation, you go to war with the army that you have, not the one that you might discover that you should have brought half-way through the presentation. So, for me, it’s much more difficult to make a funny presentation about JavaScript than it is to have a funny conversation about JavaScript. When I make a presentation, I have to make sure that there’s a narrative flow, and that the slides mesh well with the words that I’m saying. I also work very hard on the specific phrasing of my words, because people are less tolerant of poor phrasing in prepared remarks, and a lot of jokes will fail if you don't nail the cadence.

I estimate that I spend 15—20 hours on a single presentation. This time commitment is a major reason why I sometimes decline speaking opportunities, even though (despite my initial stage fright) I like to give presentations. I wish that I could discover a way to condense my creative process, but I’ve been unsuccessful so far. I think that one reason that people enjoy my presentations is that they have a lot of content---I pack a lot of jokes and a lot of technical material into a short amount of time. This requires a lot of premeditation :-).

frankw27 karma

What are some of your favorite/interesting teaching stories from MIT?

JamesMickensAMA29 karma

Some of my favorite teaching moments are when students try to trick me into revealing the answers to test questions or homework assignments. They’ll stop by office hours, and say things like, “I was thinking about solving the project this way, or another way. What do you think about those two ways? BE AS DETAILED AS POSSIBLE.” I’ll say something noble and principled that involves deep scientific theories and the relationship of mankind to the universe. I will then wait for spontaneous applause. The applause never arrives. Instead, the student will say, “So, if I did the first thing, would I get a compiler error? If so, where should the semicolon go? BE AS SPECIFIC AS POSSIBLE ABOUT WHERE THE SEMICOLON SHOULD GO.” I’ll mention that learning the positions of semicolons is a key pedagogical goal for the class. They’ll look at me with a smile that says, “Well played, old man.” Then they’ll slink away and do a Snapchat or whatever it is that occupies young minds these days.

In all seriousness, I’ve really enjoying teaching at MIT. As a whole, the students are quite good. However, I will say that there are a surprisingly large number of MIT students who wear capes. Like, the vast majority of students don’t wear capes, but I have seen more than one student wearing a cape. Not a superhero cape, but a regular cape. The cape people also tend to eschew normal shirts, and wear some kind of loose-fitting elf jerkin. It’s strange, but I’m glad that they are protecting me from the things that only be-caped people can defend against.

blaster0096 karma

Hi James,

As a programmer that primarily deals with networks and systems, I just wanted to stop by and let you know that I found your article The Night Watch hilarious. :) I would highly recommend it to anyone who hasn't read it. I re-read it every so often when debugging has put me in a bad mood / made me bleed from my eyes and it never fails to make me feel a bit better.

I guess I need to include a question as this is a top-level comment, so I think I'll ask one that I've been pondering recently after reading through many debates on the topic: What is your opinion on programming languages for systems purposes? Do you see any new languages as a "threat" to dethroning C as the king of systems languages (or, if not new languages like Rust / GO, any updated old languages, for instance C++14/17)? Do you believe that C should still be taught to students in university environments, particularly for things like operating systems courses, or do you think that we should be trying to deliver this material through the vehicle of other languages?

JamesMickensAMA8 karma

I’m glad that you enjoyed “The Night Watch” :-). Regarding the best programming languages for systems building (and teaching systems building), I do think that it’s still useful to teach people C. Learning C is a good way to understand the interface between the hardware, the operating system, and higher-level applications. However, I don’t think that C should be the first language that people learn. For that, I recommend Python.

With respect to new systems languages, I think that Rust and Go are promising. At this point, I don’t know if the universe needs an additional version of C++. In fact, it might be interesting to teach a systems class using just C and Rust/Go, and not use C++ at all.

brandtb5 karma

Hi Dr. Mickens, thanks for doing this AMA. I was wondering, what was your first job at the start of your career in computer science?

JamesMickensAMA17 karma

I didn’t have a “real” job until I got out of grad school. During my time at Georgia Tech, I was a teaching assistant for the introductory computer science class, and during my time as a PhD student, I did two internships at Microsoft Research (one in the Redmond lab, and one in the Cambridge UK lab). When I graduated from Michigan in 2008, I went directly to work at MSR as a researcher in the Distributed Systems group.

In retrospect, I wish that I had done an internship or two as an undergraduate. I also wish that I had done more research as an undergraduate. Industry experience and research experience are two things that you can't get purely by reading books and taking classes :-).

shaolinpalace5 karma

How do I get my black 15 and 17 year old brothers excited about computer science?

They're currently learning C# at a local community college. Can you recommend projects for beginners? Know of any other black CS role models I can introduce them to?

JamesMickensAMA11 karma

One way to try to get them excited about computer science is to point to all of the ways in which they might interact with the outputs of computer science: video games, web applications, smartphone apps, and so on. They should also try to write programs of their own! This Quora post lists some potential ideas for simple programming projects. I agree with x86_64Ubuntu that it’s difficult to put love in someone else’s heart :-). There’s no magic bullet that will get people interested in programming. However, I do know of several black computer scientists that you can tell your brothers about. For example:

Hakim Weatherspoon

Joel Branch

Kyla McMullen

Christopher Stewart

Theo Bensen

Juan Gilbert

blacksintechnology5 karma

James: I am the founder of the Blacks In Technology organization. We have over 1500 members nationwide and even some abroad. All are POC in the technology industry. Although we have quite a large and growing membership base, getting people to engage more in the community is a task in itself. We have forums, podcasts (would love to have you on as a guest) , IRC room, etc. What would your advice be on creating a more engaging atmosphere where people are more willing to participate in great technical discussions?

JamesMickensAMA3 karma

Does your group have a yearly conference? If not, you might consider having one. I say this because face-to-face interactions are extremely important for spinning up collaborations and long-term discussions. I realize that organizing a conference is a very complex endeavor, but I think that conferences really help to create a sense of community in a way that online discussions alone cannot. Conferences also help with professional networking, which is extremely important for one’s ultimate career success. If having a full-blown conference is infeasible, you may be able to co-locate a workshop alongside a bigger, preexisting tech conference. Alternatively, you might be able to offer travel scholarships for BIT members to go to conferences as a group; as you know, conferences are super-expensive, so any kind of financial support can lower the barrier to participation for POC. In summary, anything that gets people in the same room is useful for building community!

everybodyhatesclowns5 karma

What's the maximum number of times a paper of your's was rejected?

JamesMickensAMA7 karma

Umm (nervous laughter), you see (starts to fidget uncomfortably) . . :-). I think that I had a paper that was rejected five times before getting accepted. This, uh, is not the common case for me, but it happens to the best of us. There’s a large amount of noise in the reviewing process; I’ve seen this as a member of program committees. When you look at the complete batch of papers that are submitted to a conference, there are basically 10% which are atrocious and which will never get into Readers’ Digest; there are 5% which are golden and which are slam-dunks for acceptance; and then there’s a bell-curve of quality in-between. As a researcher, you hope that your papers will always be in the 5% golden category, but more realistically, the only thing that it’s realistic to strive for is to be in the top quartile. For all of its warts, the peer review system does a pretty good job in improving papers (and I think that many papers in the 5% golden category have been sharpened by previous reject-and-revise cycles). It’s frustrating to have your papers rejected, but good work usually gets published eventually.

jeanqasaur4 karma

James, what were the biggest obstacles you faced to get to this point in your career? How much did they think they had to do with being an part of an underrepresented minority group, versus other factors? Thanks!

JamesMickensAMA11 karma

Learning how to do good research was a big challenge, and it’s still something that I try to improve. After I got out of undergrad, I had this mistaken idea that “research” was just “applied programming”: I could think of an idea for an awesome program, and then I’d build that program, and then I’d tell people what I built, and then I’M FAMOUS YO. This is not what research is :-). Research is about proposing interesting questions, or identifying important real-world problems, and then exploring the implications of those questions or those problems. Along the way, you may happen to write some code. Indeed, if you do systems research, you’ll probably write a lot of code. However, the code is generally not the most interesting thing—the most interesting thing is the problem that you decided to attack, and the solution that you devised.

It’s difficult to learn how to ask good questions. One reason is that good questions often require a strong understanding of the preexisting scientific literature, and none of us are born with that knowledge. This problem gets better with time, assuming that you keep track of the latest results in your field. A more tricky obstacle to asking good questions is that you have to adopt a philosophical perspective that is a bit unnatural. You have to be able to ignore superfluous details and be able to distill the essence of current solutions; what’s good about them, and what’s bad? You have to be able to relentlessly discard your own ideas if you find them to be lacking, and you have to frequently question your ideas even if they seem good. You also have to be able to figure out ways to actually answer the questions that you posed. This is trickier than it might seem, since the world makes it difficult to prove things :-).

So, learning how to pose questions (and then answer them in a convincing manner) has been the biggest intellectual challenge that I’ve experienced in my career as a researcher. I’ve been lucky to work with brilliant minds at MSR and MIT, and I’m extremely grateful for that. As I mentioned in an answer to another question, the greatest thing that you can do for your intellectual growth is to expose yourself to people who are smarter than you, and who will engage you and challenge your ideas. It’s painful, but it’s worthwhile.

With respect to challenges that arose from being a member of an underrepresented group, I think that there were two main challenges. First, I had to shed the self-consciousness of being in meetings where I would be the only person of color. Second, I had to ensure that, at those meetings, my voice was heard. To do the latter, I did my homework: I always came to meetings prepared; I read books about body language and how to make effective presentations; and, in situations where I thought that I was being unfairly talked-over, I made a personal policy that I would firmly (but politely) insist that I needed to finish what I was saying. By learning how to stand up for myself in meetings and communicate effectively, I was able to get rid of the self-consciousness, since those feelings only emerged when I felt like I was not being an active member of the group.

dga-dave4 karma

Hi, James - if you can turn the time machine back to when you were first starting to attend CS conferences and do a bit of extrapolation: What was the experience like as a young black grad student, especially in ways that might differ from a young highly-represented grad student, and what changes to the conference experience might have improved that? Corollary: Are you a fan or non-fan of "diversity"-style workshops and addenda to the conferences?

(Why the hell am I asking you this on reddit instead of in person, I wonder? Don't answer that, it's rhetorical; I've never thought to do so until you invited the question. :-)

JamesMickensAMA7 karma

During my first 2.5 years of attending conferences, I essentially performed no professional networking. I think that there were three reasons for this. First, I wasn’t presenting at those conferences, and thus I didn’t have a pre-made excuse to chat with people. Second, as an early grad student, I hadn’t built a social network that I could hang out with during the hallway session. Third, I was conscious of being one of the few/only people of color in the room, and I was afraid of saying something wrong and then ruining all things for all black people at all computer science conferences for all of eternity. As a result of these things, I concluded that there was little benefit in me attending conferences in person. I declined opportunities to go to conferences if I wouldn’t be presenting, and when I did go to conferences, I mainly kept to myself and explored the city in which the conference was held. This, of course, was the wrong attitude; academia is very small, making professional networking an important key for success.

I think that Diversity-style workshops are great! I think that they directly address the second and the third problems, because they introduce underrepresented students to established members of the field who can help you to network and interact in professional situations that might otherwise seem nerve-wracking. They try to address the first problem too, inasmuch as the poster sessions and lightning talks give underrepresented students access to feedback in a friendly environment. However, I do feel that Diversity workshops should focus more on the first problem, since ultimately, if you want to become a researcher, the strength of your publications is a key determinant of your success on the job market. [Note that I say the last sentence as someone who has organized Diversity workshops in the past. It’s only recently that I’ve concluded that the workshops may need to shift more resources towards research mentoring.]

sclv1 karma

I come from a segment of the CS community where we haven't had so many of such workshops (that I am aware of -- I may just be ignorant, or.. both!), but are interested in trying to do more in that direction. Are there resources you can point to that describe sort of how one might run such a thing, what works, and what does not?

More generally, do you have tips for those in a position to be organizing conferences to take positive steps? Or do you have good pointers to collections of such tips?

JamesMickensAMA1 karma

If you’re interested in organizing a Diversity workshop, check out the CRA-W site and the CDC site. These organizations have provided funding for several of the Diversity workshops that I’ve organized, and they can probably help you with standing up a new Diversity workshop in your particular sub-discipline. All of the Diversity workshops for which I’ve been involved have been co-located with a larger conference like OSDI or SOSP. I’ve generally found the organizing committees of the larger conferences to be very helpful in supporting Diversity workshops. However, you will have to do some fundraising from entities like CRA-W, as well as from industrial sponsors. Fundraising is important because it will pay for the workshop room at the hotel, and for the workshop lunch; fundraising is also useful because it allows you to offer travel scholarships to underrepresented students who might not have a paper at the larger conference, but who would still benefit from attending that conference and the Diversity workshop itself.

wonkypedia4 karma

Hi James, I've always wanted to ask a researcher this question.

Is there any room for 'Gentleman Scientists'? (http://en.wikipedia.org/wiki/Independent_scientist) A lot of times, i want to do pure research, the sort you get to work on at Microsoft Research, but those jobs are few and far in between, and usually in the software industry, you don't get to work on what you want.

I've been wondering about how easy or hard it is to do research independently. I work in machine learning, and with lots of open data sets and cheap infrastructure like AWS and Azure, and using your public library for access to journals and conference proceedings, it seems very possible to just work on this kind of thing on your own time if you have a little bit of drive and some guidance. Which makes me wonder. If this is so easy, why aren't more people doing it?

I ask this because I've spent the past six years trying to become qualified enough to get hired to work on research problems I like, and while I've made money along the way, no matter where I look, I don't find any places with the sort of flexibility to work on only what I like and am taking time off for a while, and was wondering about what options I have, as someone who hasn't quite made a name, to work indepdently on things I like.

JamesMickensAMA5 karma

Thanks for the question---it’s an interesting one! I think that computer science is pretty amenable to independent research. If you have a laptop or desktop, you can develop and test code; if you have access to Azure or EC2, you can run distributed experiments. Many computer science conferences have double-blind reviewing, meaning that, if you submit a research paper, nobody will know that you lack traditional research credentials. Source repositories like GitHub also make it easy to share your code with others. So, there are a lot of ways to get your results to the public. You asked “if this is so easy, why aren’t more people doing it?” The answer is that doing research is not easy, even if it’s relatively easy to get access to the tools :-).

Despite the existence of things like GitHub and EC2, it’s true that the vast majority of basic research is done by universities and industrial labs, not by individuals. I think that there are several reasons for this. First, there are network effects to doing basic research alongside other basic researchers---the cross-pollination of ideas is a force multiplier. Second, there’s a formal aspect to doing research. For example, identifying good research problems is a skill that must be learned and practiced. As another example, there are best practices for running experiments that prove what you want them to prove. PhD programs try to teach those skills, and basic research often emerges from groups of people with PhDs. So, depending on what kind of career you want, working in a university or industrial research lab may be your best bet for getting paid to do basic research.

Fuzzmosis4 karma

Since all programmers believe themselves to be perfectly logical (Part of the job requirement), and as such, occasionally go "What the hell was that?", what was the biggest code snafu you've encountered academically and professionally?

Also, if both bands are only you, why have 2 bands?

JamesMickensAMA24 karma

I’ve encountered many horrible bugs. One of the more frustrating ones involved a system that I built for speculative execution in JavaScript code. Basically, my system would create a copy of a web page’s JavaScript state, guess an action that the user might do (like clicking a button), and then update the speculative copy of the page with the results of the speculated action. Later, if the user actually performed that action, the browser could immediately commit the speculative copy of the state instead of waiting for networking calls to complete, and for rendering to finish, and so on. Debugging that system was a pure nightmare, because, at any given moment, I had multiple versions of reality lying around. Every variable would have different, ominous copies that were just lurking and waiting to mess up my jam. At one point, I built a custom debugging library, but when I launched it, my system made multiple copies of it too. The whole experience was awful. The ultimate cause of the bug was that I forgot a “var” statement inside of a function declaration, meaning that a variable that I thought was function-local was actually a global variable that was being reused across different function invocations. So petty. So infuriating.

I have two separate bands because I don’t have the time to have three separate bands. Being in just a single one-man band is quite demanding---you are responsible not only for writing and playing all of the music, but for destroying hotel rooms, showing up three hours late for concerts, and crashing expensive cars that you bought just the other day. As you can imagine, it can be a frustrating and lonely venture to do all of this by yourself. However, I am confident that, in the near future, I will have a third band whose internal politics may or may not cause one of the first two bands to break-up.

jeanqasaur4 karma

Who were your role models growing up? (Please include non-computer scientists too if they are relevant!)

JamesMickensAMA5 karma

Growing up, my role models were not associated with a particular career that I wanted. Instead, my role models were people who had personal characteristics that I admired and that I wanted to emulate. For example, my mother is an important role model for me, because she’s very compassionate but incredibly tough. She doesn’t complain when life is difficult, and she is fiercely loyal to the people that she loves. I respect this immensely, and I try to be like this as well. As I’ve gotten older, I’ve grown to appreciate the virtues of toughness, and the importance of maintaining emotional balance in good times and bad times.

Once I got interested in research, I discovered a variety of role models in computer science, and I’ve been lucky enough to work alongside some of them (e.g., Bill Bolosky at MSR, Frans Kaashoek at MIT). One of my favorite parts of being alive is watching how people think. I’m continually fascinated by how people interpret and question the world, and I spend a lot of time trying to understand how people like Bill and Frans think. Once I discover the secret, I will obviously tell no one so that I can maintain my competitive advantage. However, I obviously digress.

Comedians are another class of role model for me. In particular, I’m really inspired by Louis C.K. I didn’t use the word “inspired” lightly—that’s the exact word that I intended to use. I think that he’s the closest thing society has to a comedic genius. His ability to mix comedy with dark subject matter is amazing, and I love his storytelling style—his body language, his vocal cadence, his sentence structure. This paragraph has become a love letter to Louis C.K., so I’m going to stop it now before I start dotting my i's with hearts.

I also have role models who are authors. Chuck Klosterman is a favorite, along with Kurt Vonnegut and Ta-Nehisi Coates (whose ideas I don’t always agree with, but whose writing style I want to eat so that I can absorb its powers).

otter_patrol4 karma

James Mickens!!! Oh my gosh, I am so excited to see you doing this AMA. First off, I would just like to say that whenever I start to really really hate my job, I re-read The Night Watch and it never fails to make me laugh to the point of tears. So thank you for bringing this pearl of joy (along with your other writing - also pearls of joy) into creation. Thank you also for being an inspiration to minorities in the field - it does make a difference.

I have two questions, the first is: are there any other contenders for funniest person in Microsoft research?

Secondly, I'm looking to pursue a PhD in HPC in the near future. do you have any thoughts about where you see parallelism going in the future? I feel like there's a bit of mad panic going on in the field right now and I'm curious from a corporate research perspective if there was much you could elaborate on about what the biggest hopes and worries are

JamesMickensAMA8 karma

Thanks for the kind words about my writing :-). With regard to the other funny people at Microsoft, I force them to attack each other in a series of vicious comedy battles. By keeping the various comedy tribes divided and angry, I emerge as a consensus leader who is both despised and respected. This is just one of the lessons that I learned from Genghis Khan, who is generally considered to be the most amusing despot in the small set of despots who wanted LOLs as they trampled roughshod across the countryside.

With respect to HPC, I think that a really interesting issue is what we should do with increasingly fast storage and network technologies. Compared to hard disks, SSDs are super-fast, but expensive with respect to dollars per byte. So, what’s the best way to use SSDs? As persistent storage for small data sets, and as write-behind buffers for larger data set? Can we do something more clever? Similarly, what’s the best way to leverage RDMA over fast networks? The FaRM paper explores some of these issues for RDMA---it’s a really interesting paper. Fast storage and networks have a lot of implications for parallelism, since they change the way that applications should be decomposed into compute and IO tasks.

basicthinker3 karma

What's the typical bar to get in MSR as a (postdoctoral) researcher? What do you expect in a candidate's publication list? Thank you, James!

JamesMickensAMA2 karma

I am not a hiring manager, so take what I say with a grain of salt, but I think that postdocs are generally expected to have 1—3 publications in top-tier conferences.

jnetelle3 karma

Hello, Dr. Mickens. What are your favorite metal bands? What are your musical influences?

JamesMickensAMA6 karma

I like classic thrash bands like Metallica, Testament, Sepultura, and Pantera. For historical reasons involving petty arguments during high school, I do not listen to Megadeth. I am slowly accumulating an armada of semi-obscure NWOBHM records from bands like Angel Witch, Witchfinder General, Witchfynde, and Witches Made of Witches (note that only one of those band names is fake). Diamond Head is the best NWOBHM band, but they only recorded fifteen good songs which are scattered across several different albums—look for the original (not remastered!) versions of songs like “In The Heat of the Night” and “Don’t You Ever Leave Me.” With respect to classic rock, I like Zeppelin, Sabbath, and Hendrix. The Rolling Stones are massively overrated and I will not support their meandering, riff-less music. UFO’s live album “Strangers in the Night” is one of the greatest rock albums of all time. Anything made by Kiss is not.

mpdehnel3 karma

Hi James,

Love your writing. "This World of Ours" has become something of a cult piece within the Crypto/Security Community (even getting "Obligatory TWoO" references at RWC 2015). Unfortunately, it created more questions than it answered:

  • Do you really think passwords will ever go away?
  • Please, dear God, why hasn't anyone killed PGP yet?

And most importantly,

  • When can we expect the release of "Gigantic Martian Insect Party: Insurrection"? (Straight to DVD?)

(Edit: PGP Link)

JamesMickensAMA10 karma

My public opinion on passwords is that yes, they will definitely go away, because I believe in the relentless march of progress in the face of impossible odds. My private, deeply-held view is that passwords are unlikely to go away, because it seems like they are the least terrible thing in a horrifically bad solution space. For example, biometrics seem amazing until you realize that they’re easy to spoof and that, once someone has stolen your iris signature, it’s fairly difficult for you to get a new iris. Hardware-based authentication tokens seem promising, except for the fact that I am absolutely not going to carry a hardware-based authentication token. So, maybe I could use my smartphone as an authentication token, even though it’s crawling with random apps that have all the permissions because I gave them all the permissions because it seems reasonable for Flappy Bird to have access to my network, my front-facing camera, and my back-facing camera. So, uh, maybe passwords will have to suffice :-).

Regarding PGP, I get exhausted when I think about it. It’s a good idea in theory, but key-signing parties are too nerdy for me to get into, even though I’ve watched the new “Star Wars” trailer 71 times and I have often wished that I could live in the “Blade Runner” world even though that world is filled with rain and evil androids and cryptic origamis that hint at poignant truths just beyond the edge of reason. When someone proposes that we exchange email using PGP, I’ll say, “Ok, I’ll send you that email soon!”, but with 100% likelihood I will never send that email, because I get an autoimmune disease when I think about all of the things that would have to change in my life for that PGP email to actually get sent. I think that people who only receive PGP emails are only talking to PGP people; those emails probably use some kind of secret patois in which all verb conjugations involve the awkward exchange of megabytes of Base64-encoded data. Thanks but no thanks! I see the tortoise on its back; I do not think I’ll help it.

defeatedbycables3 karma

Is Lionel Ritchie here?

JamesMickensAMA7 karma

Lionel Ritchie is always here. He never sleeps, and his constant, mildly-irritating presence keeps us focused as we struggle to understand JavaScript’s bizarre semantics.

dyanceyfunnie3 karma


tuba_man3 karma

Do you believe that this a bias, either conscious or not, that exists in the minds of most hiring managers

There have actually been several studies on this, and it turns out that regardless of the hiring manager's demographics, most have some implicit bias favoring "white" names and men when selecting candidates to interview. It's not that managers are actively selecting or avoiding people, it's usually a matter of accidentally and unconsciously giving some people the benefit of the doubt based on markers (like name or gender) that don't matter when it comes to work quality.

What can we do from inside the tech industry to help solve the under-representation of minorities in the technology sector?

Just being aware of implicit biases has been shown to reduce those biases, for one. There is a concrete step that can be taken though: anonymizing the early hiring process. 'Blind' Orchestra Auditions very quickly improved the state of gender equality in professional music. I've yet to see it put into practice in my time in Tech, but I really do think that making at least the resume selection round anonymous would do a lot of good for diversity.

And even if you choose something else, it'd be relatively easy to benchmark your progress: Over time, your company's demographics should more or less match the qualified candidates who send in resumes. (So as an example, if your best-qualified candidates are 50/50 male/female, and 25% minority, then you hire 10 people for a new development team, they should be more or less evenly male/female, and 2 or 3 would be minorities.)

dyanceyfunnie4 karma


tuba_man2 karma

Awesome, glad I could help! Wish I could find the exact articles I was thinking of, my google-fu's only getting me close right now.

I count myself lucky to be in a pretty diverse dev team right now, I'm hoping I can join another one when the time comes. So keep up the good work, and good luck with the next hiring round!

JamesMickensAMA8 karma

Thanks for your great response! You mentioned a lot of the points that I would have discussed. One thing I’ll add is that it’s important to ensure that workers from underrepresented groups are integrated into professional networks. They need equal opportunities to attend conferences, meet with customers, take professional development classes, and so on. As I mentioned in a different response, a lot of decision-making processes flow along social networks. When a manager says “I just don’t know any female or ethnically underrepresented candidates,” that manager may be telling the truth---it’s not that those people don’t exist, it’s that the manager doesn’t know who they are! So, it’s really crucial to give professional visibility to underrepresented employees.

rpark7122 karma

I'm a high school student going into college. What advice would you give for someone who is pursuing the field of computer science?

JamesMickensAMA7 karma

I recommend a couple of things: 1) First, start coding now! Like all skills, programming is something that requires practice. It’s easy to download something like Python and start writing your own stuff. 2) To get a sense of what real, large-scale projects look like, try exploring the code for some open-source projects. You don’t have to understand it all, but it can be a useful way to do a deep-dive into a particular type of application. 3) I also recommend that you read the tech press, e.g., Slashdot, r/programming, TechCrunch, etc. It’s important to understand what technologies are important or controversial.

Snexo12 karma

Do you think that everyone should learn basic computer science to understand more the world we live in?

JamesMickensAMA5 karma

I do think that it’s important for everyone to have computational literacy. That doesn’t mean that everyone should be able to write a complex program, but I think that everyone should know things like:

-the basic components in a computer

-a high-level understanding of how the Internet works

-how to perform effective searches on the Internet (and how to distinguish between good information and bad information!)

-the basics of algorithmic thinking, i.e., how to state a problem and a series of steps to solve that problem

It’s also incredibly important to ensure that everyone has at least basic access to a computer and a reasonable Internet connection, so that the preceding knowledge isn’t just a bunch of abstract facts. I think that the government is starting to discover that a usable Internet connection is essentially a public utility that everyone should have access to.

roboticwrestler2 karma

James, I'm curious about how and when you first found CS, and then later decided, "This is what I'm going to work on." For example, was it a family member, friend, or teacher who introduced you to the subject?

JamesMickensAMA3 karma

I guess that I introduced myself to computer science :-). As a teenager, I knew that I wanted to have some kind of career in science or engineering, and when I got to Georgia Tech as an undergrad, I declared myself a CS major, figuring that I could switch later if I didn’t like it. As it turns out, I never switched! However, there was no specific person who encouraged me to go into computer science. In retrospect, I do wish that I had been exposed to computer science more often as a child. I did goof around with computers as a kid, and I enjoyed surfing the web and playing video games and what not. However, I didn’t really understand the importance of algorithms and software engineering until I got to college.

There are several reasons why I stuck with CS. First of all, I like solving problems, and I like building things. Computer science gives me the opportunity to do both. I also think that computer science acts as a force multiplier for other human endeavors. For example, distributed computation allows physicists to simulate the weather, and Amazon to keep track of customer orders, and Facebook to inform my ridiculous friends about the ridiculous things that I myself am doing. I enjoy working in a field which can potentially help so many people!

wonkypedia2 karma

Hi James,

I'm someone who aspires to get into CSAIL some day for a PhD (I already have a Master's). I find your achievements very interesting and inspiring.

  1. How would you characterize the industry-academia relationship in the field of distributed systems? I ask because in a recent Machine Learning conference, there was a lot of stink about Zuckerberg showing up to promote Facebook via a talk, but at the same time, one can't deny the advances in computer science that wouldn't have happened so fast if it wasn't for the industry. I wonder what your thoughts are on this.

  2. How do you (and several other academics i know) manage to balance your research with a pretty significant hobby? I'm single, have no kids to worry about, and am just a couple of years into the software industry, and I find it really hard to even devote more than a little time to any hobby I want to pursue seriously. It feels like doing so means you always have to be 'on', and ends up not feeling like downtime at all, apart from wondering if I can't also use that time to catch up on work. How do you manage it?

  3. Why in your opinion is there such a massive under-representation of African-americans and Latinos in programming, and even fewer in STEM academia? Every african-american professor I have learned under has been very kind, very willing to go the extra mile to make their students feel at home (most notably Prof Ian Harris at UC Irvine), and I suppose that comes naturally of people who are minorities.... and as a brown woman, i have noted and appreciated that quality many times over. I see how programming has transformed poor or rural communities in India, in terms of new problems to solve and new ways of looking at things, and I feel very strongly about encouraging african americans to get started on programming, and giving them role models that they need. What can we do in order to help this happen?

JamesMickensAMA3 karma

1) I think that there’s a lot of communication between industry and academia in the field of distributed systems. It’s true that, if you want to run experiments on thousands of machines using real workloads, it’s tricky to do this as university. However, I think that industrial internships are a great way for cross-pollination between universities and companies. Professors often act as consultants to private industry as well. Companies will always have “secret sauce” things that they do, and that they don’t want to expose to the public for reasons of competitive advantage. However, I’d say that, on a whole, industry and academia have a pretty healthy relationship.

2) In my opinion, the only way to achieve a work/life balance is to make it an explicit goal, and to schedule it just like you’d schedule any other activity. If you need to take a vacation, tell people ahead of time and then do it! I know that it can feel difficult to justify time-off, but you do not want to get burned-out. I’ve seen this happen to several friends, and it’s not a good thing. I also recommend that you try to maximize your productivity when you’re working. For example, don’t have a browser tab open to Facebook or email all of the time. The puppy videos will find you in the fullness of time. Too many context switches is a productivity killer.

3) Regarding the lack of diversity in STEM fields, see my answer to th3An0nyMoose’s question :-).

wonkypedia1 karma

Thanks for the responses.

As a follow up to your reply for 2), I have to ask, do you feel additional pressure to not take time off, as a black person? I'm often the only woman on my team, and I feel a strong sense of impostor syndrome and feel the need to prove myself more. I also find I'm perceived to be less smart or hardworking than the others, and need to fight harder to get the plum projects. I also find I'm constantly under scrutiny for any move I make, no matter where i've been working. All this makes it harder for me to not feel guilty taking time off.

Did you feel such pressures?

JamesMickensAMA8 karma

If you feel like your work is undervalued/misconstrued by your coworkers, it becomes all the more important to be crisp in articulating your value to the organization. I don’t think that there’s a magic way to do this, other than being intentional about how you communicate with other people. One thing that can be useful is having explicit conversations about what success looks like, and getting this in email so that you can reference it later. For example, you can say things like, “If the project met goals X, Y, and Z, would that be a good way to define success?” Once people agree on what X, Y, and Z are, you can reference those metrics in subsequent conversations, and hold people accountable for the definition of success that they previously agreed to. As a member of an underrepresented group, it can be difficult to be firm without sounding strident, but I do think that it’s important to build a reputation as someone who can’t be pushed around. Also, by setting externally visible and externally agreed-upon goals, it helps everyone to properly calibrate you with respect to your peers (it also helps you to avoid impostor syndrome, because you can say, "Wow, I actually did impactful things X, Y, and Z)."

blueshiftlabs2 karma

Hi James,

I'm in my second year of a PhD at Michigan. (Woo! Go Blue!) Any tips on staying motivated, or just general grad school survival tips?

Also, as a security guy, I thought "This World of Ours" was goddamn hilarious. Any plans to write something similar in the future?

JamesMickensAMA4 karma

Staying motivated is definitely a challenge in grad school. Here are some useful tips:

-Remind yourself of why you’re in grad school. Presumably you’re interested in doing research, and doing research can be an incredibly rewarding experience. It’s really awesome to be able to say, “Here’s a new fact that I discovered, and here’s why it’s important.”

-Unfortunately, discovering new facts is inherently difficult, not just for you, but for everyone. It’s important to remember that even brilliant people have setbacks. Their papers get rejected just like ours; their experiments fail, just like ours; occasionally, they manage to destroy their Linux box using a series of unfortunate package installations, just like we have all done in a burst of poorly-conceived late night madness. We are all human, and we all suffer from the human afflictions.

-Of course, brilliant people’s papers are rejected less often than our papers, and their experiments fail less often than ours, and they rarely try to install two versions of Perl side-by-side with the quixotic hope that the system will pick the best version to use at any given time. So, learn from those brilliant people! I used to hate it when smart people would point out my mistakes, but now I try to seek it out. It’s a privilege to have access to experts, so try to make good use of them, and have fun with the process of learning.

With respect to writing more essays, I hope to do so in the second half of the year. I’ve been pleasantly surprised at the positive reactions that I've received from those articles, so I have a good motivation to continue to write :-). Good luck with your grad studies!

dromtrund2 karma

Hi James, I love your essays and the talks you've held that I've been able to find online! It's so refreshing to find good CS themed writings about other things than "why Emacs is evil" or "how you can force compiler branch prediction to avoid having your exception handling pollute the cache".

I'm an embedded engineering student currently writing the concluding thesis for my MSc, and I've been offered an opportunity to do a PhD in cooperation with a company I've already accepted a job at. I come from a long line of farmers and fishermen, and everyone I can ask for professional advice are answering with an agenda, trying to pull me in their direction.

You've obviously made some solid life decisions, what do you think are the most important aspects to consider when deciding on which direction your future should take?

JamesMickensAMA10 karma

When I was trying to determine which career path I should follow, I got a great piece of advice: find people who have jobs that I might want to have, and then ask them what their daily schedule is like. The goal is not to get a high-level description of what they do---instead, the goal is to get an hour-by-hour glimpse into what a typical day looks like. When do they get to work? How many meetings do they have to attend? What percentage of their time do they spend doing core technical work versus “overhead” (e.g., being on useless committees, dealing with red tape, etc.)? How much control do they have in picking the problems that they work on? Are there opportunities to interact with customers? Do you get to interact with students or do teaching? What time do people usually leave the office? Do they often work on the weekend?

Once you get answers to those questions, ask yourself, “Is that the kind of life that I might want to have?”

After I talked to a lot of people, I realized that I wanted to be a researcher, either in an academic setting or at an industrial lab. The day-to-day routine was a good fit for me: I would get to work on interesting problems, write code, work with students, and participate in a larger scientific community by writing papers, attending conferences, and making presentations. This day-to-day routine is not a good fit for everyone. For example, many people get frustrated when their papers get rejected, or when their experiments don’t work, or when they have to work with difficult students. However, for me, the positives outweigh the negatives, and I’m extremely happy with my career. So, I recommend that you ask yourself what kind of day-to-day life you’d like. Once you have an answer, make decisions that point you towards that goal :-).

On the specific topic of getting a PhD, you should ask yourself why you’d be getting it. Please note that I am not discouraging you from getting a PhD. I just think that it’s important to have crisp reasons for doing so. For example, in my case, getting a PhD provided the necessary training to become a researcher. This made it easier for me to deal with the ups and downs of the research process. If you have a specific reason to get a PhD, then I highly recommend it. My years as a PhD student were some of the best years of my life, both intellectually and socially. However, if you’re feeling pressure to get a PhD from people with credential obsessions, you should ignore those people. Also, if you don’t eventually want to do research, you should ask yourself whether a PhD is really necessary for the career (and the life) that you want to lead. Getting a PhD takes a lot of hard work, particularly if you’re trying to work on the side, so it’s important for you to have a clear understanding of the pay-off.

FuschiaKnight2 karma

Hey! Last November, I attended a grad school info session at MIT (given by University of Michigan) and you had such terrific advice (and really demonstrated how important communication skills are). So thanks for that!

What was your favorite part of grad school?

JamesMickensAMA10 karma

My favorite part of grad school was expanding my intellectual horizons, not just with respect to computer science, but with respect to sociology, anthropology, philosophy, and all kinds of different fields. Some of my favorite grad school memories come from discussions with friends about topics that had nothing to do with computer science, or that involved computer science in relation to some other field. Being born and raised in Georgia, a lot of my viewpoints before grad school were well-intentioned but, how shall we say it?—a bit provincial. I really enjoyed hearing the perspectives of people from different departments, different socioeconomic backgrounds, and different places in the world. I encourage students in school at any level to talk to as many people as you possibly can. I encourage people who are not in school at any level to talk to as many people as possible. In the end, the only thing that matters in this world are the people in it, and the connections that they have with each other. That is almost certainly a lyric from an emo song, but sometimes you have to put on your dark mascara and cry like a man.

vanderZwan2 karma

Hey James, love your writing - never fails to make me laugh, and I'm not even a professional developer, just a designer who codes a bit for fun.

What CS field (other than your own) do you believe is not getting enough attention?

JamesMickensAMA4 karma

The premise of your question implies the existence of research besides my own. This is a troubling proposition that will haunt me in my dreams :-).

There’s some awesome research out of the University of Washington which uses wireless signals to track human gestures. If I had this technology in my house, I would sit on my couch and make gestures all day long. I would employ those gestures to control a series of drones that I would use to harass my enemies and procure supplies for me (e.g., bottled water, Pringles cans, more drones for my gesture army). The newspapers would call me a menace, but the people would call me a hero. Of course, pride precedes the fall, and I would eventually lose my drones due to some overconfident gesturing during a wind storm. However, I would look back on my drone years with fondness, and I would dream of spinning a beautiful cocoon and emerging as a QuadCopter.

ggherdov1 karma

What, if anything, of all the "computer things" you know, will you teach your kids?

Which is, rephrased: what did operating systems, computing, and Computer Science in general, taught you so valuable that you'll be deliberately set aside some time, sit with your kids and transmit it to them, whatever path in life they'll choose to take?

[EDIT: in case you don't have kids, "if you had kids ..."]

JamesMickensAMA3 karma

In my opinion, the most important aspect of computer science is algorithmic thinking. By “algorithmic thinking,” I mean the crisp definition of a problem, and the deliberate decomposition of a potential solution into a series of well-defined steps. Algorithmic thinking is useful for everyone, not just computer scientists, because everyone will encounter problems in their lives, and everyone will want to devise good solutions for those problems. Algorithmic thinking forces people to be explicit about their assumptions and their goals; clarity of thought results in better solutions!