Hej.
Dziś ten topic będzie nieco jak wpis na blogu. Piszę go jednak tylko dlatego, że chciałbym poznać Wasze zdanie na temat moich przemyśleń dotyczących dziedziny jaką jest programowanie.
Zacznijmy od początku
Od jakiegoś czasu pracuję nad małym programem / grą, ale to nie istotne, najważniejsze, że piszę jakiś program tak jak w naturze mają to programiści. Nadszedł jednak czas, iż mój kod popełniał minimalny błąd, a ja nie za bardzo wiedziałem gdzie leży problem. W tym miejscu każdy normalny programista sięga po debuggera i pracuje, tak więc i ja zrobiłem i moja praca po kilku godzinach przyniosła zadowalający skutek wyeliminowania błędu.
Po kilku minutach naszła mnie refleksja: "Programowanie jest jak medycyna, a program jest jak pacjent w szpitalu".
Proces debuggingu jest według mnie podobnym procesem jak wyszukiwanie diagnozy choroby. Lekarz mając pacjenta najpierw szuka przyczyny, przez którą pacjent choruje. W odniesieniu do programu komputerowego jest to wyszukiwanie błędu po widocznych skutkach. Program może nie działać w ogóle, może działać, ale się wysypywać albo w końcu może podawać jedynie błędne dane użytkownikowi. Pacjent również ma różne objawy choroby, a każda ma inną przyczynę.
Idąc tym tropem dalej dochodzimy do wniosku, że przyczynę choroby należy wyeliminować, toteż wyszukujemy błędu w programie. Robimy to na wiele sposobów podobnie jak lekarze szukający choroby u pacjenta. Metod jest mnóstwo od sprawdzania choroby (debugging / testy) po podawanie stopniowe leków i czekania na wyniki (poprawienie kodu na ślepo).
Lekarz czeka na wyniki i jeśli będą negatywne to szuka przyczyny gdzieś indziej podobnie jak programista, który wyszukuje błędu w programie, a jeśli miejsce podejrzane o błąd jest nieprawidłowe, poszukiwania trwają dalej.
Po odkryciu przyczyny zarówno przez lekarza jak i programisty, podejmuje się leczenie pacjenta (poprawienie kodu).
Lekarz podaje pacjentowi pigułki, co jest według mnie odpowiednikiem poprawienia pojedynczej funkcji, ewentualnie dwóch (dwie pigułki). Zdarza się jednak, że pacjent w szpitalu musi mieć podjętą operację. Po przełożeniu na programistyczny fach sądzę, że można to przyrównać do dogłębnej refaktoryzacji kodu. Cały program jest poprawiany, czasami lekko modyfikowany pod względem funkcjonalności, tak jak pacjent podczas operacji jest pod lupą dość intensywnych prac.
Lekarze dzielą się na różne specjalizacje. Przykładowo są chirurdzy, jednak to nie wszystko. Chirurg również posiada swoją dziedzinę specjalną jak np:
- Chirurgia dziecięca
- Chirurgia klatki piersiowej
- Chirurgia ogólna
- Chirurgia plastyczna
- Chirurgia szczękowo-twarzowa
Podobnie jest w zawodzie programisty. Są programiści c++, c#, delphi, pascal, assembler, java, php, javascript i tak można wymieniać w nieskończoność. Każdy taki programista ma jednak swoją technologię, którą lubi najbardziej i zna się na niej najlepiej. - Budowa aplikacji kompatybilnych z systemem Mac OS
- Spring Framework
- Tworzenie aplikacji mobilnych
- Produkcja aplikacji desktopowych
- Net
- Struts
itd...
Nad dużym projektem siedzi cały sztab programistów. Podobnie jak podczas operacji, albo podczas konsultacji lekarskich jest cały sztab lekarzy.
Z kolei proste przypadki nie wymagają takich nakładów pracy i wystarczy jeden lekarz od przeziębienia, grypy itp, tak jak w programistycznych fachu gdzie przy małym projekcie jedna osoba wystarczy, jednak przy dużym potrzebny jest zespół.
i na koniec nieco humorystycznie: kod programu jest dla przeciętnego człowieka tak samo nieczytelny jak pismo doktora :)
Co sądzicie o porównaniu programowania do medycyny? Widzicie jakieś jeszcze podobieństwa?
Wiem też, że programowanie można przyrównać do innych fachów jednak nie znalazłem żadnego innego, który by miał aż tyle "wspólnych" punktów z programowaniem jak medycyna.
Są też oczywiście pewne różnice jak choćby odpowiedzialność, wszak lekarz pracuje z żywym człowiekiem, a programista z "nieżywą" maszyną, której zgon może mieć konsekwencje najczęściej tylko na papierze, ewentualnie w wynagrodzeniu., niemniej jednak sądzę, że programowanie ma bardzo dużo wspólnych szczegółów z medycyną. Co Wy na ten temat sądzicie?