These design principles are a good read. Not necessarily directly applicable to most types of software, but the spirit and direction of thought is broadly relevant across many types of software.
The fish design has three high level goals. These are:
- Everything that can be done in other shell languages should be possible to do in fish, though fish may rely on external commands in doing so.
- Fish should be user friendly, but not at the expense of expressiveness. Most tradeoffs between power and ease of use can be avoided with careful design.
- Whenever possible without breaking the above goals, fish should follow the Posix syntax.
To achieve these high-level goals, the fish design relies on a number of more specific design principles. These are presented below, together with a rationale and a few examples for each.