It has been eight long months since I started my thesis work.
While studying I also work full time as a software development team lead and with a prior experience in software development. I would talk about the differences in attitude needed for both soon.
This is the first time I’m doing academic research, which again is in contrast from research I did during my positions.
I have made mistakes, and I have gathered them in the hopes that another (you) will not repeat them, or for the very least be able to recognize then sooner than I was able to. Among the lines there are also some tips, things I found helpful and may benefit you as well.
My thesis focuses on algorithms, but the lessons are not limited to this subject alone. As always, one should make adjustments based on his own circumstances.
Algorithms as black box
In software development I learned that it is important to understand what a function does: its input and output, under which conditions it may fail and even computational complexity when needed. However, it was usually not important exactly how the method is implemented.
In classic OOP we learn to encapsulate – implementation details may change.
This is where a developer approach has first failed me.
While attempting to make an improvement using basic “building blocks” – other algorithms. it is crucial to understand how these blocks work. One way to get a non trivial result at least one algorithm can have a better guarantee for your specific problem then in the general case.
Know thy literature
First and foremost you should see what is the current best result for the problem you’re solving. If it doesn’t have a result yet there can be a number of reasons, maybe it is too difficult? (are there variants solved?), maybe it is not interesting? Maybe it is equivalent to another, solved, problem?
If you do find results – understand them completely, not just what the result is but how we get it.
Even though it may feel as a waste of time, I can begin to express the feeling when you discover someone else already has a result which may be better then what you currently hope to achieve.
Moreover, this knowledge can help you develop your own algorithm – reading and understanding is always few orders of magnitude easier then reproducing known results.
Tip: keep a folder with various references. Sometimes a paper becomes relevant only in retrospect and it may be difficult to find it again.
Writing a thesis work or a paper has a lot of work not directly related to the core work which is what was developed and analyzed such as writing abstract, previous work, discussions etc’.
Before doing all this work it is crucial to verify correctness as soon as possible.
Do “unit tests” – take small examples and see it works there. If I is reasonable to code the work and test it on some test cases do it – it is not a waste of time to be able verify your work early on.
Most importantly you need peer review, either by the professor you’re working with or with someone else if he isn’t available, even a fellow student with a background similar to yours (you can quickly catch him up on the subject to the point he can understand and verify your claims).
As always, comments are welcomed!