Programowanie i analogie

Co jakiś czas ktoś na jakimś forum próbuje opisać na czym polega programowanie poprzez jakąś analogię. Czasem chodzi o uświadomienie laikowi co to jest, co my właściwie robimy; czasem chodzi o coś innego, jak rozkminy nad tym, czy to w ogóle jest dziedzina inżynierska. I tak na przykład mamy porównanie do inżynierii lądowej: „programowanie jest jak budowanie mostu” (czyli to jest jednak inżynieria). Albo: „programowanie jest jak uprawianie ogrodu” (nie, to bardziej sztuka niż inżynieria). Wiadomo, że w ogólnym przypadku wszystkie analogie są niedoskonałe, ale te dwie nigdy mi nie przypadły do gustu. Budowanie mostu (albo nawet katedry) ma zupełnie inny charakter: masz stal, beton (lub bardziej współczesne materiały), kilka tysięcy lat tradycji i zaledwie trzy wymiary. Wiadomo gdzie co jest, co stoi, co się na czym solidnie opiera, a co można otworzyć. Z ogrodem jest trochę lepiej, bo lepiej obrazuje dynamiczny charakter oprogramowania, które nigdy nie jest „skończone” – cały czas coś wyrasta, obumiera i trzeba w kółko latać i przycinać, sadzić nowe sadzonki i wyrywać chwasty. Ale ogród jest jakoś mało funkcjonalny: on po prostu ładnie wygląda i nic ciekawego nie robi. A do tego jest płaski.

Być może w ogóle nie powinienem zajmować się tym tematem, ale widocznie potrzeba jest, a ja miewam czasami nietypowe skojarzenia. Na przykład programowanie w Javie kojarzy mi się z lepieniem w glinie. Programowanie w C++ – z rzeźbieniem w kamieniu (za pomocą dłuta). W C – z łupaniem kamieni (bez dłuta). Z pozostałymi językami może być trudniej, ale taki np. Haskell kojarzy mi się trochę z pleceniem z wikliny (chyba). A programowanie ogólnie? Ostatnio ukształtował mi się dość specyficzny obraz…

Programowanie jest jak konstruowanie skomplikowanej drucianej rzeźby bez lutowania.

Druty to oczywiście przepływ sterowania, który potrafi czasem być dość poplątany. Druty nie są połączone ze sobą na stałe – tam, gdzie w programie byłby jakiś interfejs pomiędzy węzłami / komponentami / modułami / klasami, tam w naszej metaforycznej rzeźbie jest przerwa – druty zbliżają się do siebie końcami, ale nie możemy użyć żadnego spoiwa. I jeśli coś gdzieś poruszymy, to ryzykujemy, że wszystko się zaraz porozjeżdża.

Tak z grubsza czuję się w pracy.

4 uwagi do wpisu “Programowanie i analogie

  1. Gdzieś już czytałem taki wywód. Na Joelonsoftware, a może smoliste grzęzawisko?
    Autor tam ostatecznie doszedł do wniosku, że programowanie to nie inżynieria tylko rzemiosło.

    Polubienie

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s