Are there any proven methods for keeping a computer science lab notebook? What sort of stuff goes into a CS lab notebook, and what notation is used? Are there any reliable ELN methods, preferably integrating with Git?
I want to keep a lab notebook that helps me keep a running narrative of my research as well as my programming, in the same way you would keep a natural science lab notebook. It would be handy to be able to write down what I'm doing as I'm programming, then when a bug mysteriously appears in the software, I can see the last time the software was working, see where the bug started, then read the running narrative in between to help figure out what is causing it.
I devised this method when trying to organize story ideas (as a side project). It (for me, at least) is adaptable to my robotics projects and Neural Net research.
The basics for are as follows:
- Phase 1 - [Discovery][Hacking]
- Phase 2 - [New Frontiers][Learning]
- Phase 3 - [Flagship][Publication]
"Feeds" is a Word Document containing... tweets. For example:
20180214_1322. Hyperbolic TanH is outperforming Sigmoid for the 2-input XOR.
I try to keep each one short and to the point. There are hundreds of them. If I think of something on the go, I type it in Google Keep on my phone and move it to the Feeds later. These include comments, observations, thoughts, opinions, expectations, and agenda items. If something requires later attention, I mark the line bold (to do). If I am looking for ideas, I scroll down through the file and mark "interesting" entries bold.
Phase 1 is the discovery or hacking phase. Here, I keep files documenting each beginning step. Example CAD drawings, initial literature, code that was "hacked-together," and short writings are kept here. During this phase, I figure out if a project is worth exploring, and often get my hands dirty.
Phase 2 is the learning and refining phase. In the event of a robot, all mistakes are documented. New code is created. Conference papers are prepared. Experiments are outlined. Characters are further developed.
Phase 3 is the publication or deployment phase. My robot is refined and ready for competition or "showing off." The book is now in the drafting phase to be presented to a publisher. A full research article, concluding a specific sub-area is research, is prepared for submission to IEEE.
The key, for me, is to name everything by the date it was originally created (meaning expansion from Feed to [whatever file is necessary]). If significant changes are made, create a new file. Sorting files by date would be OK for most, but I jump between clouds and operating systems too often, and this metadata is often lost. Significant versions of code are zipped away when seriously updated. Experiments (source code, raw output files, and Excel files) are zipped and dated accordingly.
Again, this is how I manage my projects and research. I imagine that a post-grad researcher would need to split these phases by each publication. The part I would recommend above all else to maintain is the Feeds. A chronological-order "change log" of all ideas, thoughts and changes has become indispensable to keeping things organized.