blog

Personal blog
git clone git://git.laack.co/blog.git
Log | Files | Refs

my-definition-of-good-software.md (1749B)


      1 # My Definition of Good Software
      2 
      3 ## Obvious Attributes of Good Software
      4 
      5 These are attributes of good software that I deem so obvious they needn't be discussed any further.
      6 
      7 - Distributed under a Free license
      8 - Free from malware, as described by the FSF [1]
      9 
     10 ## Less Obvious Attributes
     11 
     12 1. Written in C, assembly, a functional programming language, or POSIX shell
     13 
     14 Software written in C can be good because C is a performant language that has compilers for most operating systems and architectures. Moreover, C compilers are simple to make which allows for ease of distribution of C code across new operating systems and architectures.
     15 
     16 Software written in functional programming languages can be good because functional languages provide assurances about the software. Functional languages enforce no side effects and immutability. While this can slow down software, it gives useful guarantees about its correctness. 
     17 
     18 Software written in POSIX shell can be good because, similar to C, it is highly portable, and there are cases where using scripting languages can make sense.
     19 
     20 2. Minimal Dependencies
     21 
     22 Software with more dependencies is more brittle. It often relies on the continued development of other projects, often when not entirely necessary. 
     23 
     24 There is no expectation for software to be entirely self contained, but lots of consideration should be given prior to adding dependencies to software.
     25 
     26 3. Easy Patching
     27 
     28 DSLs suck. Patching the software should be easy and done in the language the program was written in. This allows for users to transfer their understanding of languages to the tools they use without having to learn idiosyncratic syntax for config files.
     29 
     30 ## Citations
     31 
     32 [1] - https://www.gnu.org/proprietary/proprietary.html