Spartańskie programowanie

Oryginalny post: Spartan Programming

Autor: Jeff Atwood

W miarę jak staję się starszy i mądrzejszy jeszcze starszy jako programista, zauważyłem, że mój osobisty styl pisania kodu podąża mocno w stronę minimalizmu.

Byłem zadowolony, dowiedziawszy się, iż wiele z konwencji kodowania, na które się zdecydowałem w ciągu ostatnich 20 lat zostało usystematyzowanych w Spartańskim programowaniu.

Nie, nie w tym sensie spartańskie, aczkolwiek istnieje historyczne powiązanie. Konkretne znaczenie słowa spartański, do którego się odnoszę to:

(przymiotnik) ascetyczny, surowy, spartański (praktykujący wyrzekanie się) "Być systematycznie ascetycznym...robić...coś z tego samego powodu, dla którego wolałbyś tego nie robić" - William James; "skromne życie pustynnego koczownika"; "spartańska dieta"; "spartański byt"

Próbowałem pisać skromniej, nawet do tego stopnia by nie pisać żadnego kodu tam, gdzie mogę się bez niego obyć. Spartańskie programowanie doskonale zrównuje się z tymi celami. Dążysz do jednoczesnej minimalizacji swojego kodu w wielu wymiarach:

  1. Złożoność pozioma. Głębokość zagnieżdżania struktur sterujących.
  2. Złożoność pionowa. Liczba linii bądź długość kodu.
  3. Liczba tokenów.
  4. Liczba znaków.
  5. Parametry. Liczba parametrów procedury bądź struktury generycznej.
  6. Zmienne.
  7. Instrukcje pętli. Liczba instrukcji iteracyjnych oraz ich poziom zagnieżdżenia.
  8. Warunki. Liczba wyrażeń if oraz switch.

Dyscyplina spartańskiego programowania oznacza oszczędne używanie zmiennych:

  1. Minimalizuj liczbę zmiennych. Zmienne używane tylko raz deklaruj inline. Wykorzystuj pętle foreach.
  2. Minimalizuj widoczność zmiennych oraz innych identyfikatorów. Definiuj zmienne w możliwie najmniejszym zakresie.
  3. Minimalizuj dostępność zmiennych. Preferuj lepsze kapsułkowanie zmiennych private.
  4. Minimalizuj niestałość zmiennych. Staraj się robić zmienne final w Javie i const w C++. Używaj adnotacji albo restrykcji gdzie to możliwe.
  5. Minimalizuj czas życia zmiennych. Preferuj krótkotrwałe zmienne od tych długożyjących. Unikaj trwałych zmiennych takich jak pliki.
  6. Minimalizuj nazwy zmiennych. Krótkożyjące, mające wąski zasięg zmienne mogą używać treściwych i zwięzłych nazw.
  7. Minimalizuj używanie zmiennych tablicowych. Zastępuj je kolekcjami dostarczonymi przez Twoje standardowe biblioteki.

Dyscyplina ta również oznacza oszczędne używanie struktur sterujących, z możliwie najwcześniejszym zwracaniem wartości. Najlepiej to zilustrować konkretnym przykładem, zaczynając od nieprzerobionego kodu i refaktoryzując go używając technik programowania spartańskiego:

Nie zgadzam się ze wszystkimi przedstawionymi zasadami i wskazówkami, ale kiwałem głową przy większości rzeczy na tej stronie. Minimalizm nie zawsze jest dobrym wyborem, ale rzadko jest złym wyborem. Z pewnością mógłbyś zrobić coś gorszego niż zaadoptowanie dyscypliny spartańskiego programowania przy swoim następnym projekcie programistycznym.

(czapki z głów dla Yuval'a Tobias'a za przesłanie mi tego odnośnika)

Data publikacji oryginału: lipiec 8, 2008

9 komentarze:

Kos pisze...

Drobny buraczek w tłumaczeniu:
"Zmienne inline, które są używane tylko raz."
Gdzieś się tu zgubił czasownik :) Oryginał:
"Inline variables which are used only once. "
Tutaj "inline" pełni rolę czasownika, vide 'every noun can be verbed'.
Nie znam dobrego polskiego odpowiednika; w miarę sensownie brzmiałoby tu "zwijaj zmienne (...)".

rafek pisze...

Dziękuję za znalezienie "buraczka" (proponuję tego typu sprawy wpisywać w sugestiach -- po prawej). Ciężko o polski odpowiednik czasownika "inline". Zmieniłem to tłumaczenie, moim zdaniem sens oryginalnego zdania jest zachowany. Pozdrawiam i dziękuję.

Anonimowy pisze...

korzystając z okazji:
a jak by za to było po ang owe zdanie "zmienne inline, które są uzywane tylko raz"? Bo w sumie nagle złapałem dylemat.

rafek pisze...

@Anonimowy: Wg mnie po angielsku byłoby "Inline variables which are used only once." Aczkolwiek tak jak zauważył Kos (i moim zdaniem słusznie) z kontekstu wynika, że "inline" jest czasownikiem. Nie przychodzi mi do głowy lepsze tłumaczenie niż to obecne.

Anonimowy pisze...

Inlajnowane zmiennne, które są... ;)

Anonimowy pisze...

Raczej "Inlajnuj zmienne ...". Ale co dokładnie miał autor na myśli w kontekscie kodu programu? Wstawienie deklaracji tuż przed użyciem czy wstawienie stałej (napisu, liczby) zamiast zmiennej?

rafek pisze...

@Anonimowy: Myślę, iż ten przykład dobrze obrazuje sytuację inlajnowania zmiennych.

lothar pisze...
Ten komentarz został usunięty przez autora.
Anonimowy pisze...

:) tjaaak ...... a w real life gdy zwracam młodziencowi uwagę, iż w serwlecie metoda doGet nie powinnna mieć 900 linii i prawie 300 if else to słyszę że jestem głupi bo przecież działa a po skompilowaniu i tak będzie JMP.
Niska kohezja? też dla aroganckich młodzienców jest bzdurą. Teraz nie liczy się jakość i niezawodność kodu tylko znajomość 250 frameworków i praca w stresie za 15 pln na godz.

kłaniam się,
Piotr

Prześlij komentarz

Related Posts with Thumbnails