Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Recent version is v2 http://arxiv.org/abs/1210.0530v2

Summary:

  1. Write programs for people, not computers.
  2. Automate repetitive tasks.
  3. Use the computer to record history.
  4. Make incremental changes.
  5. Use version control.
  6. Don’t repeat yourself (or others).
  7. Plan for mistakes.
  8. Optimize software only after it works correctly.
  9. Document design and purpose, not mechanics.
  10. Conduct code reviews.


This sounds like best plans for computing in general, not just scientific computing


Yeah for scientific computing specifically i was more expecting to see concerns like ensuring intermediate working state is persisted to a durable medium and facilitating restarting from a working state "dump" instead of from the top each time.


Around the end of summer there was a post on just this topic. I can't find it now but it had really solid practices in this area. If anyone remembers it / finds it I'd love to be able to read it again.


You may be talking about a post by S. M. Ali Eslami called Patterns for Research in Machine Learning[1]. There was some discussion here as well[2].

The patterns he pointed out were:

  1. Use version control.
  2. Separate code from data.
  3. Separate input data, working data and output data.
  4. Modify input data with care.
  5. Save everything to disk frequently.
  6. Separate options from parameters.
  7. Do not use global variables.
  8. Record the options used to generate each run of the algorithm.
  9. Make it easy to sweep options.
  10. Make it easy to execute only portions of the code.
  11. Use checkpointing.
  12. Write demos and tests.
EDIT: Added list of patterns, formatting.

[1] http://arkitus.com/PRML/

[2] http://news.ycombinator.com/item?id=4384317




Consider applying for YC's Summer 2026 batch! Applications are open till May 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: