Some Answers to Students' Frequently Asked Questions

In the following, I've collected a number of questions that students have asked me over the years whose answers I think might be useful to others.

What does a doctoral thesis consist of?

A doctoral thesis is traditionally a record of a student's first foray into original, independent research, and, indeed, unlike a Bachelor's or Master's thesis, a doctoral thesis must demonstrate both originality and independence in order for the student to graduate. (Of couse, the thesis must also be correct.) Originality simply means that the main results in the thesis haven't been done before, and independence here means that it's the student's work (and, in particular, not the advisor's work, nor the work of some postdoc or other student who's always hanging around). It represents, on the one hand, the end of a student's formal education in their chosen field, and, on the other, the beginning of their career as a researcher.  The exact composition of a doctoral thesis can vary widely, from the solution of several smaller, loosely-related problems, to a long exposition of the solution to a single larger problem. There are usually also several expository chapters included to give the background and context for the problem that one might not include in a research paper. 

It's sometimes tempting for a student entering a Ph.D program to think of their future doctoral thesis as a kind of magnum opus. Please, don't do this. It's true that a doctoral thesis is a magnificent thing, being a record of the student's first independent encounters with the unknown, and it represents a great amount of academic work and emotional toil. However, while the thesis may be - and should be - the best piece of academic work the student has produced up until that point in their academic life, if the student stays in research, their thesis will almost certainly (and hopefully) not be the best document they ever write, as they will continue to improve and do many varied and wonderful things in their future as a researcher. A Ph.D thesis is a student's first opus, and the emphasis is on doing something - anything - new, ideally in the time allotted by the student's scholarship.

What does a Bachelor's and Master's thesis consist of?

There are different opinions on this, but in my view, Bachelor's and Master's theses in mathematics are the result of a student's independent (but guided) exploration of one or more advanced topics in the literature, and the requirement to graduate is that the thesis should be demonstrate conceptual and technical mastery of the student's chosen topic. Unlike with the Ph.D thesis, no original results are necessary, although some may be included if any are found. Sometimes a student does manage to produce some original results in their MS thesis, often in the form of working out some interesting new examples or computations of some mathematical phenomenon, but it's in no way negative if there isn't enough original work in a BS or MS thesis to result in a research publication. In my opinion, the emphasis at this stage is more on learning to read the literature independently and developing a clear understanding of some results which are difficult, but already known, than it is on producing original research. That said, I like to motivate the projects I propose for Bachelor's and Master's theses with an open question or two, as this can help orient the BS or MS thesis toward further graduate study, and sometimes Bachelor's and Master's students do produce some original results. Still, originality is not the primary aim, and good BS and MS theses are publishable as expository articles even when they don't contain original research, particularly in journals like the Graduate Journal of Mathematics, which were created specifically for that purpose. Writing a thesis that is a good exposition of results scattered in different parts of the literature is a very worthy goal, and, when it is achieved, it's an admirable accomplishment.

I also like much of the advice in these pages by Tom Leinster, so I'll end by including them here.

https://www.maths.ed.ac.uk/~tl/docs/project_tips.pdf

https://www.maths.ed.ac.uk/~tl/tips.pdf

What is a postdoctoral (postdoc) position?

In the good old days, junior faculty were often hired directly after completing their Ph.D, and postdoctoral positions were a rarity. Now, it has unfortunately become customary for an aspiring professor to pass through at least one, and often more, 1-3 year research-oriented positions (typically in different parts of the world) which act as a kind of academic purgatory, in which the postdoc tries to write as many papers as possible in order to prepare for applying to faculty positions. There are many different kinds of postdoctoral positions, and the differences between them usually involve how much teaching is required, the source of funding, and, related to the funding source, how open the possible research topics are. Funding may come from the university or department, a government or private agency, or a specific grant managed by a particular professor, and the way to apply to the position will differ in each case. The best ones - at least from the point of view of research - are positions which allow but don't require teaching, which leave the choice of research topic completely open to the postdoc, and where there are several other, more senior, researchers working at the institution in a similar field. There are other postdoc positions where a certain amount of teaching is obligatory, and others still where the funding comes from a particular grant which may require that (at least some of) the research be done in a specific area, sometimes on a specific problem. There are also positions with the title "Visiting Assistant Professor" or "(name) Assistant Professor", which are usually functionally equivalent to postdocs, although they often include a teaching requirement, and the named positions may be slightly more prestigious, but both of these things depend on the university and the specific position.

Sometimes, postdoctoral researchers are referred to as "postdoctoral students" or "postdoctoral trainees", but this is a mistake. Postdocs are not students or trainees. They completed their training in their Ph.D. and are now professional, if junior, scientists, and they should be treated accordingly.

How should you prepare a math talk?

Giving good math talks is hard, especially for the beginner, but not (mainly) because of the mathematics. It's hard to give good math talks because, even in specialized seminars, mathematical audiences are extremely heterogeneous, and not all of them are looking to get the same thing from your talk. If you were talking to a room full of people who knew about everything in your field except for your newest results, then there would be no problem. You'd just describe your results and proofs, and everyone would understand the context and essential techniques, since they already knew the literature. Usually, however, that's not the situation in which we find ourselves, and, instead, our audiences consist of at least three groups of people, in different distributions depending on the venue: 

A specialized seminar or conference talk should have something for each of these groups. As a rule of thumb, I like to recommend that about a third of the talk be directed to each group. 

One specific way you might do this is the following. For the first third of your talk, address first group by explaining the motivation for your work and the definitions and other background necessary to understand your theorems, only assuming math that is relatively common knowledge. At the end of the first third, state your main results. The second third of the talk should be directed to the second group, and include examples to illustrate your results, as well as less central but interesting results which you have shown. Finally, in the final third of your talk, you may address the experts and discuss the ideas of your proofs. If you organize your talk in this way, each of the three parts roughly answers one of the questions: "Why?", "What?", and "How?", in that order. 

In colloquium talks or talks for students, only the first two parts should be included, together with more background and more discussion of other work in the area, unless the ideas of the proofs are accessible to non-experts. 

Naturally, there are other ways to organize a good math talk - and sometimes your work doesn't lend itself well to the pattern I just described - but whatever you do, you have have to address the problem of the heterogeneity of the audience, and your talk should be designed so that everyone can get something out of it. 

I've finished all of my classes, or I'm a postdoc, and now almost all of my time is unstructured. How should I organize my schedule?

Actually, no student has ever asked me this question explicitly, but almost all of them struggle with it - and, let's face it, as professors, we have our own version of this problem, too. I've occasionally found it useful to talk this through with students who were clearly having trouble, but I think a lot of students who aren't obviously struggling could still benefit from thinking about it more methodically - this certainly would have been true for me - so I've decided to include some thoughts on it here, even though it's not technically a FAQ.

First, once we finish our classes, we're playing the long game, so our aim in organizing our work schedule is consistency and efficiency, even more than before. Working 12-to-16-hour days trying to learn new math and prove new theorems might work for a week or two, but it's not sustainable. It's also not usually necessary. If you want to learn something new, for instance, and you read an average of ~2-3 pages per weekday in a topic that interests you, by the end of a year, you'll have read ~500-750 pages, which is usually enough to be able to start doing research in the area, particularly if it's sufficiently close to something you already know - and if it isn't, try to read 5-6 pages per weekday instead, maybe for two years if necessary. Writing a half-page per weekday will give you about ~125 pages per year, a perfectly respectable level of production. Granted, sometimes reading three pages of math or writing half a page can take several hours or more, and some days we may feel we have little new to write, but my point is that small, incremental, daily advances accumulate quickly, and we should organize our workdays around consistently making such advances. In graduate school, one has the luxury of not having too many other responsibilities (family, teaching, administration, thesis students), so if a student really develops this habit while writing their thesis, they will be well-prepared for the inevitable future in which that luxury no longer exists.

Regarding what, specifically, we should be spending our time doing, research involves all of the following kinds of individual work. Time for each should be set aside every week, and one should try to touch each of the major points (1-4 below) every day or two:

The sub-points in 1 above often overlap a bit in practice, but I find it useful to think of them separately and to make sure I'm doing at least a little of each every week. Also, while there isn't any strict method of doing research, I find that play often exposes an interest or a question that I want to spend more time learning about, and once I do that, it evolves into some specific open questions for a project, which I then solve some of, maybe with some other people, which is then written up in a paper. So, even if the other points seem like they're more important because they give more concrete, measurable advances week by week, don't discount the importance of play. Also, there will be times when nothing seems to be going quite right, and this regular playtime can help rekindle your curiousity and remind you why you got into this business in the first place. The bad periods do pass eventually.

How best to balance each of these things in your week will vary with time, and figuring out the right balance at any given moment requires some trial and error. People also have a tendency to over-schedule themselves when they start consciously planning their time. Remember that you're aiming for a work schedule which is sustainable over the long term, with minor variations. Be realistic and reasonable, and concentrate on learning to work efficiently (see the next paragraph) instead of trying to work lots and lots and lots of hours. 

About efficiency: Modern life is replete with potential distractions, and even before the internet age people found many ways to work inefficiently. If you watch closely, you'll find that, even though filled with the best intentions, many of us lie to ourselves (and others) about how much we really work. Sure, we might sit at our desk for 10 hours a day, but between social media and email and other things, there's a very real danger that less than half of that is really used well, particularly when trying to do solitary, creative work. To avoid this pitfall, and to get the most out of the time we have as mathematicians, it's essential to learn to focus. How do we do that? The best advice I know of is something borrowed from Zen: When you recognize that you're not focusing on what you meant to do at any given moment, gently guide yourself to re-focusing on the intended task. Don't beat yourself up about being distracted, just recognize that you're distracted and return to being focused. If you feel sleepy, stand up for a moment and shake yourself out, maybe get some water or something, and then come back to what you were doing. This is a lot harder than it sounds, but you get better at it with practice.

Finally, at the risk of overstepping my role as a professor, I'm also going to suggest a few non-mathematical activities which I believe positively influence one's mathematics - and energy levels, and life in general - over time, if sometimes in ways that are hard to identify. That said, these are inevitably the things that are the most difficult to do consistently, since we have to squeeze them in between research time and any other responsibilities we might have. Take what appeals to you and do what you can.

Of course, if you do live with someone who cooks for you regularly, it may be less critical (for the moment) that you learn to cook yourself, but I guarantee that whoever this saint-chef is that you live with, they'll be very appreciative if you do learn to cook well and if you cook for them from time to time, too.

How does one get new paper updates from the arXiv?

There are two standard ways to do this. One is by subscribing to email updates, and another is through an RSS feed using an RSS Feed reader client. Personally, I prefer using the RSS Feed. (I use QuiteRSS as my feed reader client, although there are lots of options, some local and some web based. If you choose to use RSS Feeds, you'll have to experiment to find out which client you like best on your system.)

The instructions for subscribing to arXiv emails are here: https://info.arxiv.org/help/subscribe.html

The instructions for subscribing to RSS Feeds are here: https://info.arxiv.org/help/rss.html 

I'm doing a (pure) math Ph.D. but I'm interested in learning to code. How should I go about it?

For better or worse, I learned to program under very different circumstances - and, to be sure, I'm still learning - so this isn't an easy question for me to answer. Nonetheless, I'll share my current thoughts on this, as well as give some references below. These are opinions which, admittedly, are ever-evolving, but I hope that what I've written here may still be useful to the aspiring mathematical programmer.

First, if you've come to the question of how to program a computer because you actually need to write some computer programs right now, and maybe even for a project that you'd like to (or need to) finish as soon as possible, then starting with Matlab, R, Python, or Julia are the most sensible choices, and to narrow it down, I'd say choose Matlab if you mainly need to quickly test some computational ideas, R if you need to do some statistics and produce nice pictures, Python if you need a specific Python package, and Julia for everything else. (Julia is much faster than the other three, and very easy to learn, but it's a newer language and it has fewer mature libraries.) Tutorials for all of these are abundant on the internet and you should be able to do some interesting calculations in a few days' time with minimal effort. Nonetheless, I still highly recommend working through the book, Structure and Interpretation of Computer Programs, Second Edition by Abelson and Sussman in parallel with whatever other projects you're working on, in addition to learning Common Lisp and C++ over time. If you don't have access to Matlab, then Octave is said to be a good, free alternative, although I haven't tried it myself.

If your interest is really in computer programming, however, and you're willing to constitently dedicate some time to learning it over the course of a few years, then I recommend learning Common Lisp and C++, the first for its 'code is data' philosophy and as an introduction to functional programming (and because it's great fun), the second for object-oriented programming and because it's widely used, including in scientific computing, and both languages for their different approaches to metaprogramming, in addition to also being good tools with which to experiment with "data-oriented design". What about Python and Julia? They're both excellent languages, and very easy to learn, particularly once you know Common Lisp and C++. However, in my opinion, they're almost too easy to get started in, and it's not that hard to write rather complicated programs in both of them without ever needing to think much about programming style or learning some fundamental concepts, something which can lead to some bad habits which could be difficult to correct (and bugs which could be even more difficult to find). Both Common Lisp and C++ are harder to learn, but that difficulty forces you to slow down and think about design issues and programming practice in a way that (I believe) helps immensely in the long run. (That said, basic Lisp is actually extremely easy - everything is a list! - but becoming comfortable with the more interesting features of the language - that, really, everything is a list - is much more challenging.) Once you become reasonably proficient in Common Lisp and C++, you may decide that you actually want to use (or create!) some other language for your own programming projects. Excellent! By then, you'll have a solid background to build on, and learning a new computer language won't be that difficult at all. While Common Lisp and C++ are, indeed, useful in themselves (yes, even Lisp), the point of devoting time to these two specific languages at the beginning is that, in addition to being useful, I think the process of learning them - and particularly their more advanced features - will make you into a better programmer, often in ways that learning other languages doesn't.

I've listed below some books and other references which have been and continue to be useful to me, roughly ordered by complexity within each section. In addition to some of the more typical references, I've also added three which I'm reading now on "data-oriented design/programming" (not to be confused with "data-driven design/programming"), a relatively recent addition to the ways to think about organizing programs which grew out of the demands of game programming, and one worth thinking about, particularly for scientific and mathematical programming. Indeed, the thing I like about the data-oriented design books is that they present a principled alternative to object-oriented design which can work even in a language like C++, despite the fact that C++ was built around the object-oriented paradigm, and I find this refreshingly liberating. (That said, the style of the third of these books is a little silly, but it contains some interesting ideas and examples.) 

I'll finish with a few comments: First, Abelson and Sussman is excellent, and it should be at the top of your reading list, but if you haven't programmed much before, then I'd recommend reading it alongside either Stroustrup on C++ or else the Seibel and Graham books on Lisp, all of which cover the mechanics of the languages they describe more systematically. Second, although it's not really discussed at the beginning of any of these books, learn to use a debugger as soon as you can, and use it often, even when you don't (yet) see any bugs. In Lisp, too, test everything in the REPL (the Read, Eval, Print Loop) before committing it to a longer program, and take advantage of the C++ kernel in Jupyter to do the same. These two simple habits, (1) pre-emptively using the debugger to understand your code , and (2) testing your programs in bite-size pieces as you write, will help you avoid a lot of problems and write more solid code. Third, while you're programming, get used to making liberal use of the documentation on the web, particularly the Lisp hyperspec and various references on C++ and its libraries. While the books here are indispensable, there are a multitude of technical details that would difficult to cover in a book while still keeping it readable (and which would be even more difficult to remember if they were), but which are useful to look up when you're actively trying to do something. Fourth, if you don't have a project in mind, a nice way to both improve your programming chops and also learn some new algorithmic ideas is to implement algorithms in one of the data structures and algorithms books I've included below. Finally, there are a lot of books in these lists, certainly more than can be read quickly. To begin with, I'd focus on the following four, for the mechanics of programming in LISP and C++: Abelson and Sussman, Stroustrup, Seibel/Touretzky/Weitz, and Graham, and then move on to Michaelson, Fabian, and Weisfield, the latter three in order to compare the functional, data-oriented, and object-oriented programming paradigms, respectively. Also, keep a few algorithms/data structures/numerical recipes books handy for reference. Unfortunately, even that's a lot. Luckily, however, once you get through a large part of one or two of them, you'll already be well on your way to writing interesting and useful programs. For the rest, take your time - and enjoy!

Good luck!

General Computer Programming

Functional Programming

Data-Oriented Design

Object-Oriented Design

Lisp Books and References

Useful Lisp Websites

C++ Books

Useful C++ Websites

Data Structures, Algorithms, and Numerical Recipes Books