Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I recently started on my master studies adventure, and got recently introduced to LaTeX. I am parallely learning it and also wondering what other languages|tools are absolute essential for graduate student (Masters|PhD) to know?

I want to continue into PhD later in my career.

share|improve this question

closed as not constructive by Jim G., Mark Trapp, gnat, Walter, Yannis Rizos May 12 '12 at 15:19

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

LaTeX is only essential if you 1) need to write lots of math or 2) want to be able to easily generate word processor files from your programs. –  user1249 Nov 19 '10 at 18:37
@Thorbjørn: there are other reasons why you might prefer to learn LaTeX though, mostly related to working style, e.g. 1) you like your text editor a lot and knows it inside and out, 2) you work by SSH a lot and want to use a console-based text editor to write your thesis, 3) you want to manage their dissertation in a version control system (like git), 4) you prefer programming to writing, so you use LaTeX so that writing your dissertation feels more like programming, 5) you prefer the idea of logical markup –  Ken Bloom Nov 21 '10 at 0:23
prezi.com –  Job Aug 1 '11 at 17:47
Also checkout Zotero, very useful citation and proxy manager. –  A T Jun 4 '12 at 3:53

7 Answers 7

Any flavor of Linux/Unix system. Graduate studies are rarely Windows-based.

share|improve this answer
I know an awful lot of people in my department doing their computer science PhDs who primarily use Windows. There are very few platform-dependent classes at the graduate level in my university. I've only taken a single graduate level class that even specifies what your programming project should be, let alone what platform it should run on. Most classes that involve coding expect you to propose and complete a suitable project and present/write about what you did to get credit. You're mature enough to choose your own operating environment. –  Ken Bloom Nov 19 '10 at 17:58
I'd recommend being familiar with both some variety of Microsoft Windows and some variety of Linux or Unix. For most people, this essentially means "Learn Linux", since most people already know MS Windows well enough and Linux is convenient to learn. Mac OSX wouldn't be bad to know, either, but it's less important. –  David Thornley Nov 19 '10 at 18:26
Hmm.. I've been a Linux guy for almost 10 years now. I don't know Windows very well at all. If the advice is to be familiar with the programming APIs on both systems, then I certainly have some catching up to do. –  Ken Bloom Nov 19 '10 at 18:41
@Ken Bloom: You probably don't have to program on both systems, but I'd suggest being able to work effectively on either. –  David Thornley Nov 19 '10 at 19:08
Many of the open source programs I've come across in my research projects are written in C++ and utilize Linux specific libraries or libraries that are a pain to get compiled and working in Windows. Most linux distros also offer source code for their software packages, which you can study when you have a related problem or need more information on a problem. –  Peter Smith Aug 1 '11 at 19:11

Citeseer, Google Scholar, etc. Finding related research is a huge part of grad school.

A program to help you organize references. All the related work and papers you've read/cited. I used a spreadsheet and the Mac-based Papers. When it comes time to write chapter 2 of your thesis ("Related Work"), the work you did five years ago will be fuzzy; writing it down is essential.

A good bibliography tool. If you're using LaTeX, BibTeX is okay, but a tool like the above that can autogenerate the TeX is even better. As you craft papers for different conferences/journals, it can be overwhelming to find that one reference you really need. Tagging and categorizing things up front is helpful.

Presentation skills. If you cannot clearly and concisely explain your ideas, you will have a very hard time defending your thesis or presenting at conferences. Practice in front of the mirror, your mom, your gaming guild, whoever you can get to sit still for a minute.

Presentation software. Whatever you like. Keynote was great for me; PPT is of course the standard. Even the Google Docs equivalent. Learn to be concise and informative.

PhD Comics. Because it is way too accurate.

And, of course, the local free-food list. ;)

share|improve this answer
This list is great, and matches my experience. I would add networking. Get to know the other grad students in your department, and related (or not so related) departments. In addition to mutual support and commiseration, you never know when a discussion with someone who is doing something you thought was unrelated will spark a great idea. –  KeithB Oct 19 '10 at 15:59
+1 for presentation skills. –  Barry Brown Oct 19 '10 at 16:10
If you know LaTeX, you could potentially learn Beamer for presentations. –  Ken Bloom Nov 19 '10 at 18:05
Note you can easily do presentations with PDF-files. –  user1249 Nov 19 '10 at 18:38
For reference organization, I recommend Firefox extension Zotero. It's free, syncs across browsers, and has various BibTex export options. It supports tagging, folder hierarchies, and allows you to edit metadata. I used it heavily for the research portion of my thesis. –  Zeke Nov 19 '10 at 19:03

Your word processor. Know it inside and out.

Alternatively if you're writing your thesis and papers in LaTeX, know LaTeX well, and know your text editor inside and out. Don't content yourself with GNU Nano or MS Notepad. Pick a text editor that has lots of advanced editing features, like bulk text manipulation keystrokes, advanced cursor movement, folding, syntax highlighting, regular expression matching, customizable keys, programmable, etc... and learn how to use each and every one of those features.

(I know LaTeX and Vim very well, so I can write at length about what features you should know in those programs. Can anyone add details about what to look for in a word processor, and wat to be sure to learn in a word processor?)

share|improve this answer
AUC-TeX for Emacs makes writing LaTeX document a breeze (or at least it did 10 years ago). –  user1249 Nov 19 '10 at 18:38
and latex-suite for vim also (which you have to get separately) –  Ken Bloom Nov 19 '10 at 18:39

Continuing with Alex Feinman answer I'll suggest Mendeley as a good option to organize your references.

@ysolik, I think Centos, Debian, Ubuntu or Fedora are one of the most used Linux distributions, knowing how to use any of those would be fine.

share|improve this answer

In addition to the previous answers (in summary: linux/unix, TeX, text editor*, bibliography tools), anyone who is doing a masters or Ph.D. in computer science should definitely know:

  • Source versioning control (git, svn, ... even if you're not writing code)
  • Beamer (LaTeX for presentations)
  • At least one high-level scripting language (e.g. python or perl) to take care of annoying tasks.
  • for the text editor, you should probably be using emacs or vim

For programing and/or systems research:

  • Debugging tools (e.g. gdb for C programs)
  • Profiling tools (e.g. valgrind)
  • How to use virtual machines
share|improve this answer

I think a very important tool to have is a data processing/analysis/visualisation tool. This can be done using C or Fortran, but I would recommend doing this in a high level language such as R, Python, Matlab, or IDL. Which language you choose depends on your budget, and the people you work with. If you can, I would use a free open source tool as this imposes less restrictions ( e.g. use it at home), and often these have a more active online community than proprietary tools. However, if everyone in your group uses matlab, it is a good idea to do that. In that way you can exchange scripts with your colleagues. I primarily use R for my academic work, and I really like working with it.

share|improve this answer
  • lex/flex and yacc/bison: Powerful stuff in the right hands.

  • standard Unix tools: script, screen, find, enscript, join... there are quite a few incredibly useful programs supplied with most Unix distributions. The more you know, the more productive you'll be.

  • emacs and vi: Know at least the basics, because they're both here to stay and you'll sometimes need one or the other. Also, because those editors are familiar to so many people, other programs often use the same key bindings for shortcuts. For example, most Mac programs support certain shortcuts (ctrl-a to jump to the beginning of the line, ctrl-e to jump to the end, etc.) that are straight out of emacs.

  • make and autoconf: If you want to make your programs useful to as many people as possible, you can't rely on your favorite IDE to be available. Tools like make and autoconf make it much easier to build your stuff in a variety of environments.

share|improve this answer
I would recommend using cmake instead of automake. cmake is much easier imo. –  Paul Hiemstra May 12 '12 at 8:41

Not the answer you're looking for? Browse other questions tagged or ask your own question.