Guest User

Untitled

a guest
Nov 7th, 2015
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.09 KB | None | 0 0
  1. Mało pomocne komentarze łatwiej napisać niż dobre, a komentowanie może
  2. przynieść więcej szkody niż korzyści. Gorące dyskusje, w których podkreśla
  3. się najróżniejsze zalety szczegółowych komentarzy, przypominają często filo-
  4. zoficzne debaty nad wartościami moralnymi. Myślę, że gdyby Sokrates był
  5. programistą, mógłby przeprowadzić ze swoimi uczniami następującą dyskusję.
  6. Komento, czyli pamiętaj o komentarzach
  7. Osoby:
  8. THRASYMACHUS — początkujący purysta teoretyk, który wierzy we wszystko,
  9. co czyta.
  10. KALIKLES — zaprawiony w walkach weteran starej szkoły, czyli „prawdziwy
  11. programista”.
  12. GLAUKON — pewny siebie, ambitny młodzik.
  13. ISMENA — starsza programistka znużona wielkimi obietnicami i nadzieja-
  14. mi, szukająca prostego zbioru zasad, które sprawdzą się w praktyce.
  15. SOKRATES — stary, mądry programista.
  16. Miejsce i czas:
  17. KOŃCÓWKA CODZIENNEGO SPOTKANIA ZESPOŁU
  18. — Czy ktoś ma jeszcze jakieś tematy, zanim wrócimy do pracy? — spytał
  19. Sokrates.
  20. — Chciałbym zaproponować konwencję pisania komentarzy w naszych pro-
  21. jektach — powiedział Thrasymachus. — Niektórzy z programistów prawie
  22. nie komentują kodu, a wszyscy wiemy, że kod bez komentarzy jest nieczytelny.
  23.  
  24. — Widzę, że nauki szkolne są Ci jeszcze bliższe, niż myślałem — odpowiedział
  25. Kalikles. — Komentarze to akademickie lekarstwo na wszystko, ale każdy, kto
  26. miał do czynienia z programowaniem w praktyce, przekonał się, że komentarze
  27. bardziej utrudniają czytanie kodu, niż ułatwiają. Język naturalny jest mniej
  28. precyzyjny niż Java czy Visual Basic, wymaga też dużo więcej słów. Instrukcje
  29. języka programowania są krótkie i dokładne. Jeżeli nie jesteś w stanie zbudować
  30. przejrzystego kodu, jak wprowadzisz przejrzyste komentarze? Dodatkowo
  31. komentarze z czasem się dezaktualizują. Uwierzysz w taki nieaktualny komen-
  32. tarz i już po Tobie.
  33. — Też tak uważam — dodał Glaukon. — Kod z dużą liczbą komentarzy trud-
  34. niej czytać po prostu dlatego, że jest go więcej. Wystarczy, że muszę przeczytać
  35. program. Po co jeszcze męczyć się z komentarzami?
  36. — Moment — powiedziała Ismena, odstawiając kubek, aby dorzucić swoje
  37. dwie drachmy. — Wiem, że komentarzy może być za dużo i mogą być złe, ale
  38. dobre komentarze są na wagę złota. Pracowałam z kodem z komentarzami
  39. i z kodem bez komentarzy i zdecydowanie wolę pracować z kodem dobrze
  40. opisanym. Nie sądzę, żeby było celowe wprowadzanie konwencji, która mówi,
  41. że należy wprowadzać jeden komentarz na x wierszy kodu, ale lepiej zachęcać
  42. do komentowania niż twierdzić, że komentarze nie są potrzebne.
  43. — Jeżeli komentarze są stratą czasu, Kaliklesie, to po co w ogóle ludzie ich
  44. używają? — spytał Sokrates.
  45. — Albo dlatego, że są do tego zmuszani, albo dlatego, że przeczytali, że jest to
  46. korzystne. Nikt, kto zastanowił się nad tą kwestią, nie powie, że komentarze
  47. są naprawdę ułatwieniem.
  48. — Ismena tak uważa. Jest z nami od trzech lat, pracuje z Twoim kodem bez
  49. komentarzy i innym kodem z komentarzami, a woli ten drugi. Co Ty na to?
  50. — Komentarze nie mają sensu, bo są po prostu powtórzeniem kodu w bardziej
  51. rozwlekłym...
  52.  
  53. — Zaczekaj — przerwał Thrasymachus. — Dobre komentarze nie powtarzają
  54. i nie objaśniają kodu. Informują o jego celu. Komentarze powinny wyjaśniać
  55. na wyższym poziomie abstrakcji niż kod, co próbujesz zrobić.
  56. — Właśnie — powiedziała Ismena. — Przeglądam komentarze, gdy szukam
  57. części kodu odpowiedzialnej za to, co mam zmienić lub poprawić. Masz rację,
  58. że komentarze, które są powtórzeniem kodu, nie są żadną pomocą, bo wszyst-
  59. kie informacje są już w samym kodzie. Gdy czytam komentarze, oczekuję, że
  60. będą jak nagłówki lub spis treści w książce. Ułatwia mi to znalezienie właści-
  61. wego miejsca w programie. Dopiero po jego znalezieniu rozpoczynam czyta-
  62. nie kodu. Dużo szybciej można przeczytać jedno zdanie w języku naturalnym
  63. niż przeanalizować 20 wierszy kodu języka programowania — Ismena nalała
  64. sobie kolejny kubek kawy.
  65. — Myślę, że osoby, które nie chcą pisać komentarzy, (1) uważają, że ich kod
  66. jest bardziej przejrzysty, niż to w ogóle możliwe, (2) uważają, że inni progra-
  67.  
  68. miści są bardziej zainteresowani ich kodem niż w rzeczywistości, (3) uważają,
  69. że inni programiści są inteligentniejsi niż w rzeczywistości, (4) są leniwi i (5)
  70. boją się, że ktoś mógłby się zorientować, jak działa ich kod.
  71. — Przeglądy kodu byłyby w tej kwestii dużą pomocą, Sokratesie — kontynu-
  72. owała Ismena. — Gdy ktoś, kto twierdzi, że nie musi pisać komentarzy, zosta-
  73. nie zasypany pytaniami w trakcie przeglądu — gdy wszyscy ciągle będą pytać:
  74. „Co właściwie próbujesz tutaj zrobić?” — to szybko nauczy się dobrze komen-
  75. tować kod. Jeżeli nie dojdzie do tego sam, szef zespołu i inni będą przynajm-
  76. niej mieli argumenty.
  77. — Nie twierdzę, że jesteś leniwy czy boisz się tego, że inni zrozumieją Twój
  78. kod, Kaliklesie. Pracowałam z Twoim kodem i wiem, że jesteś jednym z najlep-
  79. szych programistów w firmie. Ale miej litość, co? Dużo łatwiej pracowałoby
  80. mi się z Twoim kodem, gdybyś wprowadzał komentarze.
  81. — Ale to marnowanie zasobów — zaprotestował Kalikles. — Dobry kod powi-
  82. nien opisywać się sam. Powinien zawierać wszystko, co potrzebne do jego zro-
  83. zumienia.
  84. — W żadnym razie! — Thrasymachus już zerwał się z krzesła. — W kodzie
  85. jest wszystko, czego potrzebuje kompilator! Równie dobrze można powie-
  86. dzieć, że wszystko, czego potrzebujesz, jest w binarnym pliku wykonywalnym!
  87. Gdybyś tylko był w stanie objąć to umysłem! Tego, co powinno się zdarzyć,
  88. nie ma w kodzie.
  89. Thrasymachus zdał sobie sprawę z tego, że stoi, i usiadł.
  90.  
  91. — Sokratesie, to jest niepoważne. Dlaczego rozmawiamy o tym, czy wprowadza-
  92. nie komentarzy jest korzystne? Cokolwiek czytałem, wszyscy piszą, że komenta-
  93. rze są ważne, choć można opisywać kod na różne sposoby. Wydaje mi się, że
  94. tracimy czas.
  95.  
  96. — Spokojnie, Thrasymachusie. Spytaj Kaliklesa o jego doświadczenie w pro-
  97. gramowaniu.
  98. — Ile to już lat, Kaliklesie?
  99. — Zacząłem od Acropolis IV 15 lat temu. Myślę, że miałem okazję obserwować
  100. już kilkanaście systemów od momentu powstania aż po ich koniec. W dwukrot-
  101. nie większej liczbie projektów pracowałem nad istotnymi częściami oprogra-
  102. mowania. Dwa z tych systemów miały ponad pół miliona wierszy kodu, więc
  103. wiem, o czym mówię. Komentarze praktycznie nic nie wnoszą.
  104. Sokrates spojrzał na młodego programistę.
  105. — Jak mówi Kalikles, z komentarzami wiąże się wiele istotnych problemów
  106. i trudno zdać sobie z nich wszystkich sprawę bez odpowiedniego doświadcze-
  107. nia. Złe komentarze są nie tylko bezużyteczne, ale i szkodliwe.
  108. — Nawet poprawne komentarze są bezużyteczne — powiedział Kalikles. —
  109. Komentarze są mniej dokładne niż język programowania. Wolę już, żeby ich
  110. w ogóle nie było
  111.  
  112. — Zaczekaj chwilę — powiedział Sokrates. — Ismena zgadza się z tym, że
  113. komentarze są mniej precyzyjne. Zwraca jednak uwagę na to, że zapewniają
  114. one wyższy poziom abstrakcji, a wszyscy wiemy, że poziomy abstrakcji to
  115. jedno z najpotężniejszych narzędzi programisty.
  116. — Nie zgadzam się z tym — odpowiedział Glaukon. — Zamiast koncentro-
  117. wać się na komentarzach, lepiej włożyć więcej wysiłku w czytelność samego
  118. kodu. Refaktoryzacje prowadzą do wyeliminowania większości moich komenta-
  119. rzy. Po odpowiednich przekształceniach w kodzie może pojawić się 20 czy 30
  120. wywołań procedur, które nie potrzebują żadnego dodatkowego opisu. Dobry
  121. programista odczyta zamierzenia autora z samego kodu, a co wnosi czytanie
  122. o czyichś intencjach, o tym, jak kod powinien działać, jeżeli kod ten zawiera
  123. błędy? — Glaukon był wyraźnie zadowolony ze swoich spostrzeżeń. Kalikles
  124. potakiwał ze zrozumieniem.
  125. — To, co mówicie, sprawia wrażenie, jakbyście nie mieli nigdy do czynienia
  126. z cudzym kodem — powiedziała Ismena. Kalikles nagle zainteresował się śladami
  127. ołówka na kasetonach pokrywających sufit.
  128. — Może spróbujecie kiedyś przeczytać swój własny kod pół roku czy rok po
  129. jego napisaniu? Byłaby to okazja do poprawienia umiejętności czytania kodu
  130. i dobrego komentowania. To nie jest kwestia wyboru typu „albo jedno, albo
  131. drugie”. Przy czytaniu powieści nagłówki rozdziałów mogą nie być potrzeb-
  132. ne. Jednak gdy czytasz książkę techniczną, musisz mieć możliwość szybkiego
  133. wyszukiwania potrzebnych informacji. Nie można zmuszać czytelnika do prze-
  134. glądania w pełnym skupieniu setek wierszy kodu w poszukiwaniu dwóch banal-
  135. nych wierszy do zmiany.
  136. — OK, rozumiem, że możliwość przeglądania kodu mogłaby być pomocna —
  137. powiedział Glaukon. Widział już kilka programów Ismeny i zrobiły one na nim
  138. duże wrażenie. — Ale co z drugim argumentem Kaliklesa, że w toku wpro-
  139. wadzania zmian komentarze ulegają dezaktualizacji? Pracuję jako programista
  140. dopiero od kilku lat, ale miałem już okazję przekonać się, że nikt nie dba o aktu-
  141. alizowanie komentarzy.
  142.  
  143. — I tak, i nie — powiedziała Ismena. — Jeżeli traktujesz komentarz jak świę-
  144. tość, a kod jak coś, czemu nie można ufać, prosisz się o kłopoty. W istocie
  145. znalezienie rozbieżności między komentarzem a kodem oznacza zazwyczaj,
  146. że i kod, i komentarz zawierają błędy. Sam fakt, że nie wszystkie komentarze są
  147. dobre i pomocne, nie oznacza jeszcze, że sama zasada komentowania kodu
  148. jest zła. Idę wstawić wodę na nową kawę. — Ismena wyszła z pokoju.
  149. — Moim głównym zarzutem dotyczącym komentarzy — powiedział Kalikles —
  150. jest to, że zajmowanie się nimi jest marnowaniem zasobów.
  151. — Czy ktoś może wskazać metody, które pozwalają zmniejszyć czas zajmowany
  152. przez pisanie komentarzy? — spytał Sokrates.
  153. — Projektowanie procedur w pseudokodzie i konwertowanie pseudokodu na
  154. komentarze przy wpisywaniu właściwego kodu — powiedział Glaukon.
  155.  
  156. — OK, to mogłoby mieć sens, o ile komentarze nie powtarzałyby kodu —
  157. powiedział Kalikles.
  158. — Pisanie komentarzy zmusza do głębszego przemyślenia tego, co dokładnie
  159. robi kod — powiedziała Ismena, która wróciła już z pokoju socjalnego. — Jeżeli
  160. napisanie komentarza sprawia trudności, oznacza to, że kod jest źle skonstru-
  161. owany lub sam programista słabo rozumie jego działanie. W każdym z tych
  162. przypadków trzeba poświęcić więcej czasu na pracę z kodem. W efekcie czas
  163. poświęcony komentarzom nie jest stracony, bo prowadzi do identyfikacji miejsc
  164. w programie, które wymagają dodatkowej pracy.
  165. — W porządku — powiedział Sokrates. — Nie przychodzi mi do głowy więcej
  166. pytań, ale myślę, że Ismena dała Wam dzisiaj w kość. Starajmy się komento-
  167. wać kod, ale nie róbmy tego bezmyślnie. Będziemy organizować przeglądy
  168. kodu, aby każdy mógł się zorientować, jakie rodzaje komentarzy są faktycznie
  169. pomocne. Jeżeli pojawiają się problemy ze zrozumieniem cudzego kodu, nie
  170. warto zwlekać z informowaniem autora o możliwościach jego poprawienia.
Advertisement
Add Comment
Please, Sign In to add comment