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.
1 komentarze:
"procedura jest prawdopodobnie jedynym największym wynalazkiem"
Prześlij komentarz