{"id":1446,"date":"2022-01-26T12:03:15","date_gmt":"2022-01-26T12:03:15","guid":{"rendered":"https:\/\/kalkus.dev\/?p=1446"},"modified":"2023-08-24T23:14:48","modified_gmt":"2023-08-24T23:14:48","slug":"rozklad-oprogramowania","status":"publish","type":"post","link":"https:\/\/kalkus.dev\/blog\/2022\/01\/26\/rozklad-oprogramowania\/","title":{"rendered":"Rozk\u0142ad oprogramowania"},"content":{"rendered":"\n<p>Od lat zajmuje mnie rozk\u0142ad. J\u0119drne, g\u0142adkie cia\u0142a obumieraj\u0105 w zmarszczone, poplamione truch\u0142a. Imperia pe\u0142ne chwa\u0142y i pot\u0119gi rozpadaj\u0105 si\u0119 na symetryczne zgliszcza gruzu, obmywane deszczem i spiekane s\u0142o\u0144cem. L\u015bni\u0105ce atomowym blaskiem gwiazdy zapadaj\u0105 si\u0119 w paruj\u0105ce oddechem wymar\u0142ych \u015bwiat\u00f3w czarne dziury. Nic nie jest wolne od rozk\u0142adu, bo <em>panta rhei kai ouden menei<\/em>. R\u00f3wnie\u017c to, co spod naszych palc\u00f3w wyrasta \u2013 oprogramowanie.<\/p>\n\n\n\n<p>Kod oczywi\u015bcie jest doskona\u0142y, cyfrowy, nie poddaje si\u0119 entropii. Tak samo jak nie poddaje si\u0119 jej cho\u0107by Odyseja Homera. Tyle, \u017ce stworzony dawno temu program, jak i wieki temu spisana Odyseja nie \u017cyj\u0105 w pr\u00f3\u017cni. Powsta\u0142y dla odbiorc\u00f3w. I tak jak dzi\u015b inni s\u0105 Europejczycy od Grek\u00f3w sprzed tysi\u0105cleci, tak samo ewoluuje ekosystem, w kt\u00f3rym przychodzi egzystowa\u0107 oprogramowaniu.<\/p>\n\n\n\n<p>Cho\u0107 jest w\u0142a\u015bciwie jeszcze gorzej. Programy bowiem powstaj\u0105 latami. Rozwijane s\u0105 nowe funkcjonalno\u015bci, aktualizowana jest ich integracja ze \u015bwiatem zewn\u0119trznym, czasami wr\u0119cz zmianie ulegaj\u0105 technologie, z jakich aplikacje si\u0119 sk\u0142adaj\u0105.<\/p>\n\n\n\n<p>I tu pojawia si\u0119 rozk\u0142ad. I b\u0142\u0119dne ko\u0142o.<\/p>\n\n\n\n<p>Na pocz\u0105tku program tworzy si\u0119 szybko. St\u0105d pewnie zachwyt wielu pocz\u0105tkuj\u0105cych programist\u00f3w (oraz gorycz do\u015bwiadczonych). Im wi\u0119cej kodu, tym wi\u0119cej zmartwie\u0144, jak i w przys\u0142owiowym lesie wi\u0119cej drzew im g\u0142\u0119biej. Za\u015b im wi\u0119cej ludzi w projekcie tym ju\u017c piek\u0142o jest wybrukowane\u2026<\/p>\n\n\n\n<p>Pierwsi programi\u015bci w projekcie cz\u0119sto s\u0105 bardzo doceniani. Siadaj\u0105, pisz\u0105, dzia\u0142a. Mo\u017cna wdra\u017ca\u0107 na produkcj\u0119 albo pokaza\u0107 klientom lub prze\u0142o\u017conym. Sukces. Za ten sukces zwykle s\u0105 nagradzani. Awansuj\u0105 albo s\u0105 kierowani do kolejnych nowych projekt\u00f3w. Ci mniej lubiani trafiaj\u0105 za\u015b do projekt\u00f3w ju\u017c istniej\u0105cych. Im ni\u017cej w hierarchii dziobania tym do starszych i bardziej zaple\u015bnia\u0142ych.<\/p>\n\n\n\n<p>S\u0119k w tym, \u017ce bod\u017ace kszta\u0142tuj\u0105ce zachowanie s\u0105 zwykle roz\u0142o\u017cone niekorzystnie. Tworzy to koszmarne zjawiska i prowadzi do wspomnianego b\u0142\u0119dnego ko\u0142a. B\u0142\u0119dnego ko\u0142a tworzenia, pr\u00f3chnienia i burzenia.<\/p>\n\n\n\n<p>Programi\u015bci tworz\u0105cy projekty greenfield (nowe, od zera) nie zmagaj\u0105 si\u0119 z konsekwencjami swoich czyn\u00f3w. Mog\u0105 pisa\u0107 co chc\u0105, jak chc\u0105, byle wytrwa\u0107 z rok, czy dwa, do odkorkowania szampana i wdro\u017cenia projektu. Mog\u0105 eksperymentowa\u0107, ale te\u017c nagradzani b\u0119d\u0105 ci, kt\u00f3rzy jak najszybciej i jak najtaniej zaimplementuj\u0105 zestaw podstawowych funkcjonalno\u015bci. Bod\u017ace wi\u0119c s\u0105 proste \u2013 pisz szybko, byle jak (cho\u0107 nie za bardzo), u\u017cywaj nowych technologii, kt\u00f3re \u0142adnie wygl\u0105daj\u0105 w CV, a jak napiszesz to oczekuj, \u017ce trafisz do nowego projektu albo poszukaj go na rynku pracy. Co dalej z kodem? Pal licho, nie tw\u00f3j interes.<\/p>\n\n\n\n<p>Programi\u015bci utaplani w b\u0142ocie legacy z kolei maj\u0105 ma\u0142e albo wr\u0119cz \u017cadne \u2013 w zale\u017cno\u015bci od stopnia rozk\u0142adu \u2013 szanse na poprawienie sytuacji. Je\u015bli projekt jest jeszcze wzgl\u0119dnie nowy, mog\u0105 pr\u00f3bowa\u0107 co\u015b ratowa\u0107, ale nie mog\u0105 ucieka\u0107 od tworzenia nowych funkcjonalno\u015bci. W ka\u017cdym wypadku wypadn\u0105 gorzej od pierwotnych tw\u00f3rc\u00f3w \u2013 b\u0119d\u0105 zawsze pisa\u0107 wolniej. Dlatego, \u017ce tw\u00f3rcy narobili ba\u0142aganu, w kt\u00f3rym teraz trzeba si\u0119 odnale\u017a\u0107 albo dlatego, \u017ce kodu jest wi\u0119cej i jest trudniej nawet jak jest schludnie albo te\u017c jest \u015brednio i trzeba posprz\u0105ta\u0107, wi\u0119c r\u00f3wnie\u017c robi si\u0119 to wolniej, ni\u017c na pocz\u0105tku. Bod\u017ace s\u0105 takie, \u017ce najlepiej nic nie sprz\u0105ta\u0107 i nie usprawnia\u0107, bo za to chwa\u0142y nie b\u0119dzie. Wi\u0119c zwykle si\u0119 nie sprz\u0105ta. Tym bardziej, \u017ce biznes r\u00f3wnie\u017c tym sprz\u0105taniem nie jest zainteresowany \u2013 kosztuje to, skutki ba\u0142aganu nadejd\u0105 za rok, dwa, pi\u0119\u0107, gdy ju\u017c ich nie b\u0119dzie, a poza tym trzeba klepa\u0107 nowe ficzery, bo to przynosi zysk.<\/p>\n\n\n\n<p>Finalna faza rozk\u0142adu oprogramowania to legacy dojrza\u0142e. Taka gorgonzola cremoso. Ju\u017c nie tylko ple\u015b\u0144 zielonymi \u017cy\u0142kami przecina nam kod jak w Matriksie, ale te\u017c sama struktura jest mi\u0119kka i z lekka galaretowata. Poprawi\u0107 nic si\u0119 nie da, jak nie da si\u0119 sklei\u0107 szklanki. Mo\u017cna j\u0105 tylko &#8211; cytuj\u0105c klasyka \u2013 pogry\u017a\u0107 i po\u0142kn\u0105\u0107. I to te\u017c robi\u0105 ca\u0142ymi dniami deweloperzy skazani na opiek\u0119 paliatywn\u0105 nad projektami u progu \u015bmierci. Bug za bugiem, debug za debugiem, w beznadziei dnia codziennego. Nikt nie porywa si\u0119 tam na zmiany. Zmieni\u0107 mo\u017cna co najwy\u017cej prac\u0119, ale i o to trudno, bo pracuje si\u0119 przecie\u017c w starych technologiach, a i zapomnia\u0142o si\u0119 ju\u017c nawet jak pisa\u0107 przyzwoicie, patrz\u0105c przez d\u0142u\u017cszy czas na starcze wynaturzenia &#8211; zrakowia\u0142e struktury danych, zdegenerowane algorytmu i u\u0142omne, antyczne narz\u0119dzia o finezji cepa bojowego, ewentualnie wekiery\u2026<\/p>\n\n\n\n<p>Programowanie w ostatniej fazie czeka na decyzj\u0119. Na decyzj\u0119 o przepisaniu go od nowa. I tak zamyka si\u0119 b\u0142\u0119dne ko\u0142o \u2013 projekt dostaj\u0105 programi\u015bci z \u0142adnym CV, kt\u00f3rzy zawsze robi\u0105 greenfieldy, potem ci mniej bohaterscy, kt\u00f3rzy utrzymuj\u0105 systemy wieku \u015bredniego, a\u017c w ko\u0144cu trafia on zn\u00f3w do piel\u0119gniarzy i piel\u0119gniarek, kt\u00f3rzy ostatnim ticketem zamkn\u0105 mu oczy i wy\u015bl\u0105 na wieczny odpoczynek do krainy wiecznych p\u0119tli.<\/p>\n\n\n\n<p>Tyle, je\u015bli chodzi o diagnoz\u0119. Pytanie &#8211; co z recept\u0105? Nie umiem sobie do tej pory na nie odpowiedzie\u0107. Wydaje si\u0119, \u017ce wi\u0119kszo\u015b\u0107 system\u00f3w informatycznych ko\u0144czy w\u0142a\u015bnie w taki spos\u00f3b i jest to jakim\u015b naturalnym biegiem w cyklu \u017cycia oprogramowania. A wy, znacie jakie\u015b alternatywy?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Od lat zajmuje mnie rozk\u0142ad. J\u0119drne, g\u0142adkie cia\u0142a obumieraj\u0105 w zmarszczone, poplamione truch\u0142a. Imperia pe\u0142ne chwa\u0142y i pot\u0119gi rozpadaj\u0105 si\u0119 na symetryczne zgliszcza gruzu, obmywane deszczem i spiekane s\u0142o\u0144cem. L\u015bni\u0105ce atomowym blaskiem gwiazdy zapadaj\u0105 si\u0119 w paruj\u0105ce oddechem wymar\u0142ych \u015bwiat\u00f3w czarne dziury. Nic nie jest wolne od rozk\u0142adu, bo panta rhei kai ouden menei. R\u00f3wnie\u017c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1443,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[204],"tags":[104,165,193,92],"_links":{"self":[{"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/posts\/1446"}],"collection":[{"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/comments?post=1446"}],"version-history":[{"count":3,"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/posts\/1446\/revisions"}],"predecessor-version":[{"id":1451,"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/posts\/1446\/revisions\/1451"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/media\/1443"}],"wp:attachment":[{"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/media?parent=1446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/categories?post=1446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/tags?post=1446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}