It's been a while, about four months, since the last blog post. A lot of changes took place in my life. In this blog post, I want to share my experience of writing a master thesis. These are personal advices, my perspective, you or others might think differently. I was a student in computer science, therefore some of the aspects only relate to computer science and programming. But most of the aspects I'm going to mention are in my humble opinion worth considering in general. In the following I want to give a brief summary of how I've chosen the topic of my thesis.
Research Field and Topic
A year ago, I attented to a course 'Computational Intelligence' at my university. I have heard about evolutionary algorithms before, but this was my first serious encounter to these nature-inspired optimization algorithms. These algorithms focus on the optimization of black box problems. In this category of problems the fitness function and the restrictions are unknown and not explicitly given respectively. Besides particle swarm optimization, which seems very outdated if you compare it to present optimizers, I learned the 101 of evolution strategies, which are used as robust optimizers in continuous black box optimiziation. I won't go into the details, but if you're not familiar with the concept of evolutionary algorithms, the open book Nature of Code explains the principles very well. If you want to dig deeper into evolutionary algorithms, I like to refer to the open books Clever Algorithms and Global Optimization Algorithms - Theory and Application.
After the course, I took the subsequent course, which focussed on machine learning. From the k-nearest-neighbour algorithm, self-organizing maps to linear and non-linear support vector machines for classification and regression. I took the opportunity to write my masterthesis in the fields of evolutionary algorithms and machine learning. The main topic is a support vector classification constraint surrogate model for evolution strategies. If you're interested, the source code of the improved algorithms is publically available. Because this blog article focusses on the important aspects I stumbled upon during writing or working on the thesis, I will skip the details on my thesis and get right into my advices. The advices are structured in planning advices, reading advices and working advices. In the end, I'll give a brief summary.
At first, I just want to give a heads up, because working on a thesis can be very satisfying. To keep it satisfying, I think very important aspects are planning and sticking to the plan - Lets start with planning advices. Progress while working brings confidence and motivation. If you got stuck and the thing isn't a blocker - revisit the task another day. One of the most fundamental things I really learned in university is time management and that starting is one third of the work. Starting work can be difficult, specially if you work at home. I recommend at least to try working in the library to avoid interruptions. Further, starting on a fixed time of the day might be a good habit. Personally I started in the morning at 9 AM and tried to concentrate for at least 4 to 5 hours to get important tasks done. Later I discovered that Jason Fried & David Heinemeier Hansson have described this rule in the Rework book. The rest of the work time I completed tasks, which require less concentration, but need to be done for finishing the thesis, for example adding literature references and creating illustrations.
I worked single-threaded, one thing at a time, to keep my focus. There are several techniques to keep track of your progress. I prefered a simple Kanban board (a simple ASCII text file) and annotated a deadline for each task. This visualization of the workflow helped me to focus on specific tasks and to monitor the progress. Overall, monitoring is important, because you'll probably discover parts of your workflow which can be improved to increase productivity. For example, you can save a lot of time even if you automate small workflows (e.g. by a little script). Using a relatively small automation for example over 6 months might save significant time and increase productivity. A summary of awesome time management hacks is given by the presentation 26 Time Management Hacks I Wish I'd Known at 20. After finishing my thesis, I really appreciate this list and think it's worth practicing the tips.
Reading Books and Papers
The next paragraph focusses on reading advices. I guess any student, who wrote a text, knows that searching for references, books etc., is an essential preparation when starting to write about a certain topic. Books are great to get into the basics. Is your topic relatively new, books might be outdated and you have to read the original papers. If this field is new to you, you might get a headache at this stage. Paper reading is different from reading a book, which most of the time covers all the needed basics. A good start is to read all the references of the original paper with elementary know-how. If you mastered the basics you've earned the requirements to understand the original paper. After reading and understanding the original paper you can follow the current research and get a big picture. The way I described the process seems pretty straight forward, but to be honest I had to read a paper multiple times to understand it. Further, I revisted papers after a while of reading other papers, which helped me to understand aspects which weren't stated clearly enough.
Programming and Writing Text
In this paragraph I would like to give some writing advices. I'll start with programming and continue with advices in regards to writing texts. For my thesis I had to write a lot of code, which extends certain evolution strategies. Some were easier to understand, for some algorithms I needed literally days to finally understand how they work (to practically use and modify them). Just keep in mind that understanding algorithms can be tough, but if you understood them - gratualations - you're one of the guys who could theoretically analyze it, use it practically or improve the algorithm. In my humble opinion you can test if you finally understood it, when implementing the algorithm for yourself. I found an article How to Implement a Paper regarding implementing from a paper. Further I would refer to another article which analyzes the interruptions while programming: Programmer Interrupted. Maybe you can learn something from it, to keep yourself in the zone when you need to. As I mentioned earlier I tried to stay in a single-tasking work mode, but nevertheless sometimes in a task new subtasks with different priorities emerge. In this case I reorder my tasks in the Kanban board and continue in a single-tasking mode.
If you didn't write any text so far, it might be difficult at first to express complex ideas. Don't underestimate the time you need to write text. Writing text is a valueable skill: What's an idea worth, if nobody comprehends it? Learn the flowers of speech and don't be a perfectionist at the beginning: A well known tip is to start writing no matter if the words dont fit perfectly. In the first place, try to form a structured and comprehensive text. Feel free to experiment with different styles to explain things, be creative and don't refuse text too early. Let this rough version grow, e.g. for a day. Afterwards, remove unnecessary sentences or whole descriptions. Try to keep it precise. Be brave to modify or remove entirely paragraphs or sections. I think it's normal that you iterate the text multiple times until the final version meet a certain quality. So do not overly attach to existing text. If your final version is ready, ask your friends or colleagues, whether they could correct typos and grammar.
After finishing my thesis I felt the need of writing my advices down. There might be plently of other tips I've missed in this blog post, but I hope that I've given you a different perspective or even yet another motivation to organize yourself. Personally, I try to improve my writing skills constantly. Like any other craft, practice makes perfect. Have fun, Good luck & enjoy the spring!