- Something one tells a computer to do, no matter how small
- Should you write something?
- Improvements to science
- Finding and implementing what is already there
- Making it work
- Making it answer the questions you want it to
- Who are your users?
- Think about software as always having a user who's not you
- General software design principles
- You're not going to necessarily become a great developer, but can be a pretty good developer by thinking of your code as having a life cycle
- Think beyond the script to do one experiment
- Participate in open source
- Two way street
- Everyone benefits
- Steal like a developer - learn & build on the code don't just slot in a pretty good solution because you don't know how to do it
- Requires codesharing as well as data sharing
- ... And there are so many good options!
- Requires a community to reuse and/or update the code.
- Why agile will feel more natural to scientists (than waterfall)
- Agile isn't one thing and you don't have to follow a particular process
- Agile is a mindset not a process
- Not letting your software work against you
- Making sure that everyone gets the same answer, every time
- Pyunit
- Flask and coverage.py for code coverage
- But what about R?
- Documentation for science part
- Documentation for software part
- Keep em separate as practical
- Do both
- What software artifacts are most useful
- Making it part of experimental design
Database Design: Setting Yourself up to Make the Data Work for You and Others -- Not the Other Way Around.
- Solr faceting of flat files
- Organizing your data - think beyond relational databases