From Jtkwiki
Jump to navigationJump to search

Programming Principles


  • Keep code and data strictly separate.
    • Be aware of whether your programming creates executable content.
  • Computers are deterministic machines. All bugs can be reproduced.
    • When using random number generators, seed them explicitly to keep your results reproducible.
    • See "Rediscovering Computational Autopoiesis" by Barry McMullin & Francisco Varela for a very instructive example of possible consequences of complex computing that was not fully reproducible.

Object Oriented Programming

  • An instance in a computing process must represent exactly one instance in the modelling domain.
  • Use random number generator objects where possible.


  • Identification and description must be kept separate.
    • Primary keys should be generated where reasonably possible.

User Interface Design

  • Computers are symbol processing machines. Hence, symbol based user interfaces are most general and powerful.
  • The claim that graphical user interfaces are easier or more intuitively to use than symbolic interfaces is problematic.
    • It is difficult to state the objective meaning of "intuition". In a reasonable approximation, intuition can be defined as a summarised background of experience that is unconscious or semi-conscious.
    • See The Command Line - The Best Newbie Interface? by Richard Wareham.


An incomplete list of software that I use.

  • The R statistical computing language and system
  • Python, a scripting language with a very decent level of support for object oriented programming
  • The editors emacs for larger edits, and vi for smaller edits (yes, I use both)
  • Java
  • PostgreSQL, a free SQL database management system
  • the transsys simulator for regulatory gene networks (which I've written myself)