engineering?

Pytanie o zasadność słowa engineering w wyrażeniu software engineering nie jest bynajmniej nowe ani dziwne. Jest wręcz uzasadnione, a uzasadnione pytania tego kalibru zawsze są kłopotliwe. Jeśli nie niebezpieczne...

Wikipedia podaje definicję tradycyjną:

Inżynieria — nauka o wykorzystaniu właściwości materii oraz źródeł energii dla tworzenia konstrukcji, maszyn i produktów.

Jakoś słabo to pasuje... Natomiast w haśle inżynieria oprogramowania (jako zastosowanie inżynierii systemów do dziedziny oprogramowania) nie pada żadne odwołanie do definicji inżynierii jako takiej. Dla odmiany anglojęzyczna Wikipedia zawiera interesujące porównania dziedziny software engineering z programowaniem, informatyką i tradycyjną inżynierią. O ile powiązania z programowaniem czy informatyką są dosyć intuicyjne (wykorzystywane techniki i/lub podstawy teoretyczne), o tyle porównanie do inżynierii ogólnej nie jest już takie proste — niby to samo, a jednak coś całkiem innego. Nic dziwnego, że sprawa jest kontrowersyjna.

Osobiście świadomie (nad)używam określenia "inżynieria oprogramowania" z naciskiem na "inżynieria", chociaż jasne jest dla mnie występowanie fundamentalnych różnic w stosunku do inżynierii "tradycyjnej". Wiele zagadnień wspólnych dla budowy najróżniejszych maszyn i budynków ma się nijak do budowy oprogramowania. Rozbieżności dotyczą spraw tak istotnych jak choćby:

  • nienaruszalność projektu — przy budowie oprogramowania w przeciwieństwie do budowy np. mostu projekt niemal z założenia zmienia się w trakcie trwania inwestycji,
  • sekwencyjność etapów budowy — prosta sekwencja jest prawie niemożliwa w oprogramowaniu (co wynika z poprzedniego punktu),
  • zarządzanie ryzykiem — w inżynierii tradycyjnej największe ryzyko jest zazwyczaj na początku inwestycji, w tworzeniu oprogramowania odwrotnie.

Jednak sama koncepcja projektu jako złożonego, wielowarstwowego planu, znaczenie dokumentacji (przed, w trakcie i po wykonaniu produktu), mnogość różnych umiejętności i odpowiedzialności na przestrzeni całego przedsięwzięcia oraz właściwie wszystko, co kojarzę ze słowem "inżynier", pasuje do tworzenia systemów informatycznych tak samo jak do jakichkolwiek innych. Modelowanie procesów w systemie informatycznym czy dowolnych procesów przemysłowych z dziedziny np. chemii czy energetyki wydaje mi się zbyt podobne by można było to podobieństwo zaniedbać.

Uważam również, że inżynier w projekcie informatycznym (czyli ktoś na poziomie technicznym, bo np. poziom analityczny czy zarządczy to zupełnie inna bajka i inne umiejętności) powinien faktycznie być inżynierem z wykształcenia i to najlepiej w dziedzinie informatyki (ewentualnie robotyki, automatyki czy czegoś podobnego), a nie np. malarzem pokojowym. Taka rola wymaga pewnych specyficznych umiejętności i konkretnej wiedzy, nie tylko doświadczenia i wcale nie prawda, że każdy może to robić. Jednak nie chodzi nawet o to, że trzeba się nauczyć, bo wiedza książkowa w dziedzinie inżynierii oprogramowania bardzo ciężko znosi konfrontację z rzeczywistością. Kształcenie na kierunku informatycznym powinno zawierać elementy inżynierii tradycyjnej (np. fizykę czy nawet znienawidzoną przeze mnie elektronikę) i wydaje mi się, że takie wykształcenie wyrabia pewien specyficzny zmysł, który ośmieliłbym się nazwać inżynierskim. Opiera się on na świadomości subtelnych różnic i równoczesnej równowagi między naukowym opisem zjawisk, a praktycznym zachowaniem rzeczy w przyrodzie. W efekcie prowadzi to do zrozumienia dwóch niezwykle istotnych pojęć:

  • "dobrze zrobione" — czyli nie tylko "jeśli działa to jest ok" jak zwykli podchodzić do sprawy programiści, ale jest zrobione/wymyślone/zaprojektowane/napisane zgodnie z zasadami sztuki, choć nie koniecznie ze 100% precyzją, jeśli precyzja taka nie jest w danej sytuacji wymagana,
  • "jakiś" — to słowo używane w odpowiednim momencie ujawnia zdolność pomijania nieistotnych szczegółów i dostosowania rozdzielczości do wagi problemu; wyraźnie widzę to w rozmowie np. z analitykiem, który nie potrafi opisać współdziałania trzech obiektów bez konkretnego określenia ich wszystkich cech, podczas gdy 90% tych cech nie ma żadnego wpływu na omawiany rodzaj interakcji.

Jeśli z całego grzęzawiska wykroimy tylko warstwę techniczną (technologie i narzędzia, pomijając politykę i psychologię), to dostaniemy coś, co mimo specyficznego charakteru jest inżynierią i wymaga inżynierskich umiejętności. WIEM za "Słownikiem Encyklopedycznym - Informatyka" podaje:

Inżynieria oprogramowania (angielskie software engineering) — wiedza i umiejętność przydatna do budowy programów, a szczególnie dużych systemów oprogramowania. Obejmuje tworzenie specyfikacji, metody programowania, aspekty uruchamiania i testowania oraz opracowywanie dokumentacji [...]

Zmieniłbym "przydatna" na "wymagana"...

Komentarze

Brak komentarzy do tego wpisu.

 

Uwaga: Ze względu na bardzo intensywną działalność spambotów komentowanie zostało wyłączone po 60 dniach od opublikowania wpisu. Jeżeli faktycznie chcesz jeszcze skomentować skorzystaj ze strony kontaktowej.