Every bit of your work that can go in a computer should go in a version control system repository.
Everything you do that can be generated on your computer should be stored in a format such that regenerating it from original human-editable sources is as easy as typing “make”.
One that applies to everyone who has to write some form of software:
Everything that you write should be accompanied by tests, which should be run regularly, preferably by some “buildbot” system as well as yourself. Otherwise, if you’re writing reusable code it’s all to easy to break use case A while improving use case B or adding use case C. Even when you’re writing use case A, it’s easy to trick yourself into thinking the result is more correct than it is unless you’ve tested it.
There is a world of psychological health in between “This isn’t working!?! It was working fine six months ago! I’m screwed!” and “Oops, time to write another test for git bisect to play with. I should probably increase the line thickness in all my thesis’ graphs by a smidge while waiting for that to finish.”
I don’t have time to flesh this out into a full post. Plus, the more material I add the more narrowly focused on applied-mathematics-on-Linux it would get. I hope the abridged version is still helpful.
Every bit of your work that can go in a computer should go in a version control system repository.
For those not aware of it: Google Drive counts as a “version control system” for many document formats. It saves edit histories and allows you to jump back and compare different versions, at least for text documents.
So feel free to use that if it’s just for regular writing or essays! (particularly great for essays and papers, because you also gain the ability to painlessly share it and do collaborative reviews and edits, with features to comment on specific parts of the text)
Two that apply to everyone:
Every bit of your work that can go in a computer should go in a version control system repository.
Everything you do that can be generated on your computer should be stored in a format such that regenerating it from original human-editable sources is as easy as typing “make”.
One that applies to everyone who has to write some form of software:
Everything that you write should be accompanied by tests, which should be run regularly, preferably by some “buildbot” system as well as yourself. Otherwise, if you’re writing reusable code it’s all to easy to break use case A while improving use case B or adding use case C. Even when you’re writing use case A, it’s easy to trick yourself into thinking the result is more correct than it is unless you’ve tested it.
There is a world of psychological health in between “This isn’t working!?! It was working fine six months ago! I’m screwed!” and “Oops, time to write another test for git bisect to play with. I should probably increase the line thickness in all my thesis’ graphs by a smidge while waiting for that to finish.”
I don’t have time to flesh this out into a full post. Plus, the more material I add the more narrowly focused on applied-mathematics-on-Linux it would get. I hope the abridged version is still helpful.
For those not aware of it: Google Drive counts as a “version control system” for many document formats. It saves edit histories and allows you to jump back and compare different versions, at least for text documents.
So feel free to use that if it’s just for regular writing or essays! (particularly great for essays and papers, because you also gain the ability to painlessly share it and do collaborative reviews and edits, with features to comment on specific parts of the text)