Tytuł zbioru maksym François de La Rochefoucaulda wydanego w roku 1664 w Hadze.
Maksymy programistyczne
Maksymy są jak kierunkowskazy ułatwiające nam poruszanie się w rozpatrywanej dziedzinie. Pozwalają unikać błędów i omijać piętrzące się rafy problemów. Poniżej zebrano maksymy programistyczne na jakie można natknąć się w literaturze albo przeglądając sieć WWW. Warto się z nimi zaznajomić i postarać się stosować je w praktyce.
Niektóre z nich są na tyle stare, że odnoszą się do paradygmatów programowania mniej popularnych w obecnych czasach. Postanowiono jednak pozostawić je z kronikarskiego obowiązku.
Maksymy z książki Van Tassela
Projektowanie programu
BUZI³ — bez udziwnień zapisuj idioto.
- Kelly Johnson
Dobieraj reprezentację danych zgodną z zadaniem.
Efekt projektowania ma być poprawny.
Krótki moduł to dobry moduł.
Ma być w porządku od początku.
Najpierw projekt, potem kodowanie.
Napisz pseudoprogram, zanim zaczniesz kodować.
Nie bój się zaczynać od nowa.
Nie programuj od nowa obliczania pierwiastka kwadratowego.
Ograniczaj do minimum stosowanie skoków.
Parametryzuj za pomocą zmiennych a nie stałych.
Pisz najpierw po polsku.
Projektując, dbaj o uniwersalność programu.
Projektując, planuj zmiany programu.
Projektuj zawczasu dane testowe.
Wybieraj jak najstaranniej algorytm rozwiązania.
Wyznacz realistyczne cele zawczasu i jasno je formułuj.
Zacznij dokumentować na etapie kodowania.
Sprawność² programu
Czytelność jest zwykle ważniejsza niż sprawność.
Gdy coś nie działa, jego sprawność nie ma znaczenia.
Inicjuj zmienne podczas kompilacji⁴.
Optymalizuj najpierw pętle wewnętrzne.
Sporządzaj profile dynamiczne swoich programów⁵.
Sprawność, jaką chcesz osiągnąć, ustalaj na etapie projektowania.
Stosuj kompilatory optymalizujące.
Stosuj moduły ładowalne.
Stosuj sprawne bloki wejścia/wyjścia.
Stosuj wskaźniki zalecanego typu⁶.
Unikaj mieszanych typów danych⁷.
Styl programowania
Błędne komentarze to gorzej niż zupełny brak komentarzy.
Dawaj więcej komentarzy niż będzie ci, jak sądzisz, potrzeba.
Komentarz ma dawać coś więcej niż tylko parafrazę tekstu programu.
Nawiasy kosztują mniej niż błędy.
Porządkuj listy według alfabetu⁸.
Programy mają być czytane przez ludzi.
Stosuj do komentarzy te same wcięcia, co do tekstu, który komentują.
Stosuj komentarze wstępne⁹.
Stosuj odstępy do poprawiania czytelności.
Stosuj przewodniki w długich programach¹⁰.
Stosuj wcięcia dla uwidocznienia struktury programu.
Stosuj wcięcia dla uwidocznienia struktury danych.
Używaj dobrych nazw mnemonicznych.
Używaj przedrostków lub przyrostków w nazwach plików¹¹.
Wystarczy jedna instrukcja w wierszu.
Testowanie programu
Gruntowne testowanie nie jest możliwe, testuj więc mądrze.
Każdy zestaw testowy ma reprezentować inną klasę danych.
Próbuj testować metodą zstępującą.
Przeprowadzaj najpierw ręczne testowanie programu.
Spróbuj stworzyć prostą pierwszą wersję, aby przetestować podstawowe cechy projektu.
Stosuj minimalną liczbę zestawów testowych.
Testuj sytuacje normalne, krańcowe i wyjątkowe.
Układaj dane testowe dla każdej drogi¹².
Wcześnie zaczynaj testować.
Uruchamianie programu
Dowiaduj się, z jakich pomocy możesz skorzystać podczas uruchamiania.
Najpierw sprawdzaj na piechotę.
Niech będzie od razu w porządku.
Sprawdzaj sensowność danych wejściowych.
Stosuj echo-testy do danych wejściowych.
Stosuj kompilatory diagnostyczne¹³.
Wprowadzaj zawczasu wydruki kontrolne.
Maksymy znalezione w WWW
Język programowania
A language that doesn’t affect the way you think about programming is not worth knowing.
- Alan Perlis
Projektowanie programu
Nie należy mnożyć bytów ponad potrzebę.
- William Ockham¹
Przypisy
¹ Autorem tak sformułowanej maksymy jest być może Johannes Clauberg albo John Punch.
² Sprawność w znaczeniu szybkość działania.
³ W oryginale: "KISS - keep it simple, stupid!".
⁴ Inicjuj zmienne przy ich deklarowaniu.
⁵ Na przykład zestaw narzędzi do profilowania Instruments dla środowiska Xcode.
⁶ Na szybkość działania progarmu może mieć wpływ np. użycie odpowiedniego typu danych dla indeksów tablicy. Inny typ może wymagać dodatkowych konwersji.
⁷ Unikaj zbędnych konwersji danych.
⁸ Deklarując dużą liczbę zmiennych uporządkucj ich deklaracje alfabetycznie.
⁹ Komentarz wstępny, to dłuższy komentarz do podprogramu zawierający między innymi opis co podprogram wykonuje, jak go wywoływać, co przekazują jego parametry formalne, jakie zmienne globalne odczytuje, jakie zmienne globalne zmienia, jakie wyjątki może zgłosić, jakie błędne sytuacje mogą wystąpić podczas jego wykonania.
¹⁰ Przewodnik to długi komentarz na początku bardzo długiego programu stanowiący jego spis treści.
¹¹ Dotyczy definiowania plików i rekordów w takich językach jak np. COBOL czy PL/1. Można podobną zasadę stosować i w innych językach. Dla przykładu, nazwy wszystkich strumieni standardowych w C zaczynają się od przedrostka std.
¹² Drogi czyli ścieżki obliczeń.
¹³ Dzisiejsze kompilatory nie tylko kontrolują składnię ale również starają się kontrolować poprawność semantyczną programu. Wykrywają np. niezainicjowanie zmiennych czy fragmenty programów, które nigdy nie będą wykonane. Kompilator clang potrafi nawet przeprowadzić analizę statyczną kodu (opcja --analyze).
Bibliografia
- Dennie Van Tassel. Praktyka programowania. Wydawnictwa Naukowo-Techniczne, Warszawa, 1982.