Największy wynalazek w dziedzinie informatyki

Oryginalny post: The Greatest Invention in Computer Science

Autor: Jeff Atwood

Jak myślisz, co jest największym wynalazkiem w dziedzinie informatyki? Oprócz komputera oczywiście.

Poważnie, przed dalszym czytaniem, zatrzymaj się na chwilę i rozważ pytanie.

Mówiłem wcześniej o tym, jak młode są w rzeczywistości tak zwane nowoczesne języki programowania i warto to powtórzyć dla kontekstu.

C ma z grubsza tyle lat co ja; FORTRAN jest w wieku moich rodziców. Ale co z nowymi dzieciakami na osiedlu? Strona z metrykami TCPI firmy TIOBE software dostarcza pewnych danych odnośnie popularności języków programowania od 2001 roku. Weźcie pod uwagę dziecięcy wiek wielu najnowszych i najmodniejszych języków programowania:

Ruby jest zaledwie nastolatkiem. JavaScript oraz PHP nie osiągnęły jeszcze nawet wieku nastoletniego.

We wszystkich naszych rozmowach o nowych, wymyślnych cechach języków programowania, czasem myślę, że zapominamy o fundamentalnym budulcu, który leży u podstaw każdej z nich: skromna procedura. Uwierzcie na słowo Steve'owi McConnellowi, który zachęca nas do rutynowego używania procedur:

Oprócz wynalezienia komputera, procedura jest prawdopodobnie największym wynalazkiem w dziedzinie informatyki. Sprawia, iż programy są łatwiejsze w czytaniu i rozumieniu. Skraca je (wyobraź sobie, o ile dłuższy byłby Twój kod, jeśli musiałbyś powtórzyć kod procedury dla każdego jej wywołania). Przyspiesza je (wyobraź sobie, jak trudno byłoby zwiększać wydajność w kodzie, który jest użyty w setkach miejsc, zamiast zwiększać wydajność w jednej procedurze). W większości, procedury są tym, co czyni nowoczesne programowanie możliwym.

Jeśli nie jesteś na tyle stary, by pamiętać życie przed procedurami, pomyślałem, że James Shore dał świetny przykład czystej różnicy w swoim doskonałym artykule Quality With a Name:

Przed programowaniem strukturalnym:

1000 NS% = (80 - LEN(T$)) / 2 1010 S$ = "" 1020 IF NS% = 0 GOTO 1060 1030 S$ = S$ + " " 1040 NS% = NS% - 1 1050 GOTO 1020 1060 PRINT S$ + T$ 1070 RETURN

Po programowaniu strukturalnym:

public void PrintCenteredString(string text) { int center = (80 - text.Length) / 2; string spaces = ""; for (int i = 0; i < center; i++) { spaces += " "; } Print(spaces + text); }

Skromna procedura jest podporą programowania w jakimkolwiek nowoczesnym języku. Jestem pewien, że jesteście dobrymi przykładami nowoczesnych programistów, więc nie będę Was zanudzał wyjaśnieniami, dlaczego procedury są dobrym pomysłem. Oryginalny artykuł McConnella z IEEE z 1998 roku pokrywa całkiem dobrze przesłanki stojące za procedurami. W rozdziale 7 książki Code Complete 2 znajduje się rozwinięta wersja tego materiału.

Procedury są tak fundamentalne dla dzisiejszego programowania, że są w zasadzie niewidoczne. I to jest problem z procedurami: zajmują tylko minutę, by się ich nauczyć, ale całe życie, by je opanować. Jeśli było możliwe złe programowanie niestrukturalne, tak też możliwe jest strukturalne. Możesz pisać stylem FORTRANowym w dowolnym języku. Siłowanie się z niewymowną istotą procedur jest, na pierwszy rzut oka, tym czym jest teraz programowanie:

  • Jak długa powinna być ta procedura? Jak długa jest już za długa? Jak krótka jest za krótka? Kiedy kod jest "za prosty", żeby zostać procedurą?
  • Jakie parametry powinny być przekazane do tej procedury? Jakie struktury danych bądź typy? W jakiej kolejności? Jak będą używane? Które będą zmodyfikowane jako wynik procedury?
  • Jaka jest dobra nazwa dla tej procedury? Nazywanie jest trudne. Naprawdę trudne.
  • Jak ta procedura ma się do sąsiednich procedur? Czy są wywoływane w tym samym momencie, albo w tej samej kolejności? Czy dzielą wspólne dane? Czy naprawdę stanowią całość? W jakiej powinny być kolejności?
  • Po czym powinienem poznać, że kod w procedurze zakończył się sukcesem? Powinna zwrócić kod sukcesu czy błędu? Jak będą obsługiwane wyjątki, problemy i błędy?
  • Czy ta procedura powinna w ogóle istnieć?

Dobrzy programiści -- niezależnie od tego w jakim języku mają okazję pisać -- rozumieją znaczenie tworzenia każdej procedury z najwyższą uwagą. Procedury w Twoim kodzie powinny być traktowane jak malutkie, dobrze wypolerowane diamenty, gdzie każdy kolejny jest bardziej wykwintnie wypolerowany i wyszlifowany niż poprzedni.

Przyznam się, że to nie jest szczególnie głęboka wnikliwość. To nie jest nawet oryginalna rada. Ale jeśli wierzysz, tak jak ja, w nieustanne powtarzanie podstaw, nigdy nie przestaniesz opanowywać sztuki pisania perfekcyjnej procedury.

To jest, jakby nie było, największy wynalazek w dziedzinie informatyki.

Data publikacji oryginału: 6 czerwca, 2008

1 komentarze:

Anonimowy pisze...

"procedura jest prawdopodobnie jedynym największym wynalazkiem"

Prześlij komentarz

Related Posts with Thumbnails