Thesis writing tips

So I recently started writing my master thesis and looking at some of my fellow master students their work I realized that perhaps many people have trouble with managing references, quality control and keeping motivated.

In this post I’ll explain how I managed to do it, most of these ideas are either directly stolen from my classmates, ripped from reddit and a few are my own “invention”, but others may already have thought of it.

So perhaps the best way to see this post is as a aggragetion of techniques and tools (the tools part will be moved to another post) I used to waste less time. So my advice to you is to skim this article and look for any ideas that seem interesting and try them out.

1 Reference management

Reference management seems to be a thing which can be quite tricky. It is extremely tedious and dull work, and therefore I obviously don’t do it by hand. I use bibtex as core platform, I haven’t compared the available options but since it integrated with org-mode I was happy with it.

To find papers I mainly use Google scholar trough the university proxy. However sometimes papers aren’t available for my university, so I’m forced to use http://sci-hub.io/ (if that link gets blocked in the future, try the wikipedia entry, wikipedia is impartial and will therefore provide a proper link (unlike Google)).

Once I got access to the paper I will skim trough it to see if there is relevant information. If so I will make a copy to a paper folder and use Google scholar to generate the bibtex entry for me, there is a citation option at the bottom of the search result, click it and then bibtex. That little feature of Google scholar has already saved me probably several hours of making bibtex entries. The copied paper will have the same name as the bibtex entry key, this is important if you want to recheck your reference later again. Doing this will also lower the psychological barrier of re-checking something since you won’t have to go trough the entire obtain paper process again.

Note that you shouldn’t track it in your version control, because first of all you don’t expect it to change, and second of all if you push it to a public repository you’re breaking the law on a whole other level. (distributing rather than just consuming, consuming is more easily ignored by law enforcement).

1.1 Books

I haven’t completely solved books. It seems that getting books is a lot more tougher than papers, probably because most scientist feel that papers should be easy obtainable but don’t necessarily feel for books the same way (many would have written one or contributed to one). I as a programmer feel very deeply about the necessity for freedom of information and therefore will share some possible sources. It will be up to the reader to decide if they should be using such sources. However do note that these sources aren’t always successful and you should prefer obtaining papers since sci-hub works practically always.

library genesis should be your first source of books, it has a crappy interface and some mirrors may not work but if you get a result you usually also get a book.

Then if that fails you can try and use IRC, which is described very thoroughly here. But in short for archiving purposes, go to undernet, join bookz (/join #bookz) and then search for your book title (@search). Then if you get a result you need to save that file, which isn’t a book just the query result, open that and then if it contains your book use the code to download it.

Finally there is a desperate method I used one time. It takes time but it can be worth the effort. There is this concept called digital borrowing, where HTML drm is used to ensure only n copies get borrowed at a time. An example of such a website is the open library. The system is kind off dumb since making copies of digital stuff is practically free. However I do like the fact that some publishers fell for it. Anyway if it has your book you can just “borrow” it and make screen shots of each page. You just bypassed a bunch of HTML based drm and encryption with a button on your keyboard. Yes its pretty dumb. (not that I disliked the open library initiative or the internet archive, in fact I love there effort of tricking the publishers. There work may save some books from the copyright abyss, where literature gets lost forever because laws prevent copying before the last copy gets lost).

2 Time management

I have a pretty strict schedule by working 6 hours per day 5 days in the week. I won’t do any work on the thesis in the weekend. I only do 6 hours because personally I feel like those last two hours are usually wasted, only when I don’t notice the time pass by I will go overtime. I start every working day at 9 in the morning to about 3-ish. The days where I meet my teacher are of course the least productive. Currently this is on Wednesday, breaking up the week nicely.

I do have to say that when I start there is no distraction. I will block websites such as Facebook, reddit and YouTube. 6 hours is a short time and the personal contract I have with my self is that this time will be used productively.

Also note that annexing the weekend to try and finish the thesis a few weeks earlier is probably a bad idea. I mean focusing for extended amount of times on just one subject can only be done so long. The best I ever did was a commit streak on a hobby project on github for 3 weeks, and I had a lot of fun in making that. This probably won’t be true for all the work in your thesis. You may get burned out quickly if you try and do this. (Although I personally think it is quite a lot of fun to work on it.

3TODO management

Tracking what stuff you have to do is rather quite important. What I’ve found most effective is a latex package called todonotes. it allows you to insert todo items in the document itself, which will be shown as long as your document class options are drafting, but as soon as you set it to final they will be removed from the final document.

This integrates good with org, although misses any sort of highlighting. Org also doesn’t understand line breaks in todo items. Which makes it rather difficult to stay below 80 chars per line for todo items (this breaks my heart).

I use the general todo items for feedback from the teacher and also for my own thoughts. Things I think I should do end up in a todo item, this allows the teacher to see what goes on in my mind and also if I understood his feedback correctly.

Then with these notes I create some specialized commands:

\usepackage[obeyFinal, colorinlistoftodos]{todonotes}
\newcommand{\drafting}{\todo[noline, color=gray]{Working draft}}
\newcommand{\toReview}{\todo[noline, color=yellow]{To review}}
\newcommand{\newlycleared}{
\todo[noline, backgroundcolor=white, bordercolor=red]{Newly cleared}
}
\newcommand{\cleared}{\todo[noline, color=white]{Cleared}}


Drafting for paragraphs that are incomplete and should be finished. toReview for paragraphs that have been finished but should be checked again at a later time for spell/grammar reasons. newlycleared for the items that have been cleared but haven’t been seen by the teacher (he’s the guy giving me the grade, so gotta keep him on my side). Finally cleared for the items that should be done.

Usually I build up a bunch of toReview items throughout the week and then go on a clearing spree the day before meeting the teacher. This also helps me reminding what I wrote about.

Note that the idea of using todonotes I basically stole directly from one of my classmates. But this significantly made the quality of my documents better. Since I can manage my attention much more focused. Besides looking at the todo list and looking at the document have now become the same thing.

4 In short

This got way longer than I thought it would. I still even haven’t talked about editing tools, version control, org mode itself, and that awesome UML library called plantuml which integrates excellently with org. I will discuss these things in a later post. I hope these tips can be use full to you.