Fundamental principles
- clarity and simplicity
- Module: any reusable software components, could be a individual method, could be a complex system consisting with multiple packages.
- Module should be as small as possible, but no smaller.
- Code should be reused rather than copied.
- Dependencies between modules should be kept to a minimum.
- Errors should be detected as soon as possible after they are made, ideally at compile time.