W słynnym eseju Richarda Gabriela The Rise of Worse is Better kontrastuje karykaturalne wersje filozofii projektowych MIT / Stanford (Lisp) i New Jersey (C / Unix) wzdłuż osi prostoty, poprawności, spójności i kompletności. Podaje przykład „problemu utraty komputera” ( omówionego gdzie indziej przez Josha Habermana ), aby argumentować, że Unix przedkłada prostotę wdrożenia nad prostotę interfejsu.
Innym przykładem, jaki wymyśliłem, są różne podejścia do liczb. Lisp może reprezentować dowolnie duże liczby (do wielkości pamięci), podczas gdy C ogranicza liczby do stałej liczby bitów (zwykle 32-64). Myślę, że to ilustruje oś poprawności.
Jakie są przykłady spójności i kompletności? Oto wszystkie opisy Gabriela (które, jak przyznaje, są karykaturami):
Podejście MIT / Stanford
- Prostota - projekt musi być prosty, zarówno pod względem implementacji, jak i interfejsu. Ważniejsze jest, aby interfejs był prosty niż implementacja.
- Prawidłowość - projekt musi być poprawny we wszystkich możliwych do zaobserwowania aspektach. Niepoprawność jest po prostu niedozwolona.
- Spójność - projekt nie może być niespójny. Projekt może być nieco mniej prosty i mniej kompletny, aby uniknąć niespójności. Spójność jest równie ważna jak poprawność.
- Kompletność - projekt musi obejmować tyle ważnych sytuacji, ile jest praktycznych. Wszystkie uzasadnione spodziewane przypadki muszą zostać uwzględnione. Prostota nie może nadmiernie zmniejszać kompletności.
Podejście New Jersey
- Prostota - projekt musi być prosty, zarówno pod względem implementacji, jak i interfejsu. Ważniejsze jest, aby implementacja była prosta niż interfejs. Prostota jest najważniejszym czynnikiem przy projektowaniu.
- Prawidłowość - projekt musi być poprawny we wszystkich możliwych do zaobserwowania aspektach. Nieco lepiej jest być prostszym niż poprawnym.
- Spójność - konstrukcja nie może być nadmiernie niespójna. W niektórych przypadkach spójność można poświęcić dla uproszczenia, ale lepiej jest porzucić te części projektu, które dotyczą mniej powszechnych okoliczności, niż wprowadzić złożoność implementacyjną lub niespójność.
- Kompletność - projekt musi obejmować tyle ważnych sytuacji, ile jest praktycznych. Należy uwzględnić wszystkie uzasadnione spodziewane przypadki. Kompletność można poświęcić na rzecz jakiejkolwiek innej jakości. W rzeczywistości należy poświęcić kompletność za każdym razem, gdy zagrożona jest prostota implementacji. Aby zachować kompletność, można zachować konsekwencję, jeśli zachowana zostanie prostota; szczególnie bezwartościowa jest spójność interfejsu.
Pamiętaj, że nie pytam, czy Gabriel ma rację (co jest pytaniem nieodpowiednim dla StackExchange), ale o przykłady tego, do czego mógł się odnosić.