- * version control - Git is the most popular version control option. It can be a bit complicated to use, but it's become the standard that everyone's using and lots of open source projects are hosted on github.com. (Mercurial is another option if you want to keep things simple and know you aren't going to contribute to any open source projects for doing calculations or whatever, but I don't have any experience with it.) You can download Git for Windows here: http://git-scm.com/download/win Here's a free online book: http://git-scm.com/book/en/v2 Here's a game that will teach you how it works with some nice visuals: http://pcottle.github.io/learnGitBranching/
- * test-driven development - The simplest way is to use the Python doctest module: https://docs.python.org/2/library/doctest.html In the long run you might want to try a more sophisticated solution, this looks like a good option: http://pytest.org/latest/ There's a fair amount of controversy in the programming world about how thoroughly you should write tests for your code, e.g. here is a hardass perspective: http://chimera.labs.oreilly.com/books/1234000000754/ch04.html#_programming_is_like_pulling_a_bucket_of_water_up_from_a_well I would lean towards being a hardass given the nature of your application.
- * assert statements - Really simple, just write a line that says "assert A == 4" and your code will throw an exception if A is not 4. Good for ensuring that invariants are being preserved and things are behaving the way you expect, and also debugging. Google "python assert statement" for more.
- * bug tracking - There are all sorts of tools like Fogbugz for larger teams. Personally when writing highly reliable software, I find it really useful to have a text file (or a sheet of paper) where I write something down whenever I have the tiniest doubt about whether there might be something wrong with my code and then follow up on it later. (Basically the idea is to avoid interrupting yourself if possible... e.g. if you are working on one thing and partway through your task it occurs to you that there might be an unrelated corner case you didn't consider, you don't want to interrupt yourself to investigate that corner case because then you'd lose mental context related to what you were doing--stopping and then restarting tasks is what leads to mistakes. So that's why it's useful to have an external memory aide. I've found thinking about how I manage my working memory while programming very useful in general.)
- * This talk is great: http://www.infoq.com/presentations/Simple-Made-Easy
RAW Paste Data