Problem oprogramowania, czyli dlaczego w przyszłości powinniśmy się poprawić

W obliczu zmian, które miały miejsce w ostatnich 50 latach rozwoju informatyki, trzeba wielkiej odwagi (lub zupełnego braku rozwagi), by czynić dokładne przewidywania na następnych 50 lat. Jednak bez jakiejkolwiek wizji przyszłości będziemy poruszać się dość bezładnie, nie mając możności właściwego rozwiązania otaczających nas problemów. Dlatego z możliwą do osiągnięcia dokładnością musimy jednak przewidywać.

W obliczu zmian, które miały miejsce w ostatnich 50 latach rozwoju informatyki, trzeba wielkiej odwagi (lub zupełnego braku rozwagi), by czynić dokładne przewidywania na następnych 50 lat. Jednak bez jakiejkolwiek wizji przyszłości będziemy poruszać się dość bezładnie, nie mając możności właściwego rozwiązania otaczających nas problemów. Dlatego z możliwą do osiągnięcia dokładnością musimy jednak przewidywać.

Stowarzyszenie ACM (Association for Computing Machinery) założone w 1947 jest najstarszą organizacją skupiającą informatyków. Obchodom 50-lecia jej istnienia towarzyszą liczne imprezy, które zamiast zajmować się przeszłością, mają dać wgląd na następnych 50 lat rozwoju informatyki.

Jednym z najważniejszych wyznaczników tej rocznicy ma być specjalnie przygotowana książka pt. "Beyond Calculation: The Next 50 Years of Computing". Peter Denning i Robert Metcalfe zaprosili do współpracy ponad dwudziestu myślicieli, naukowców i pionierów informatycznego rynku. W efekcie powstał zbiór esejów podejmujących naukowe, społeczne i ekonomiczne aspekty rozwoju informatyki.

Uznając wagę tej publikacji, Computerworld uzyskał wyłączne prawo przedrukowania wybranych fragmentów książki. W tym tygodniu esej Richarda W. Hamminga.

Właściwie możemy chyba po cichu oczekiwać, że znaczna część tego, co nazywamy dzisiaj "programowaniem", zostanie włączona do narzędzi, które będą dostarczane użytkownikowi wraz z komputerem. Niemniej wcale nie rozwiąże to "problemu programowania".

Często posługuję się analogią, w której tworzenie oprogramowania przyrównuję do pisania prozy. W obu przypadkach najistotniejsze jest przenoszenie słów, które zależą od wcześniejszego jasnego myślenia. Do jakiego stopnia pisanie może być przedmiotem nauki? Ani Szekspir, ani Jane Austin nie brali udziału w konkursach twórczego i poprawnego stylu pisania, a większości z tych, którzy je ukończyli, żadną miarą do wielkich pisarzy zaliczyć nie można. Podobnie jest z programistami i pisaniem programów - kursy co najwyżej mogą ze złych programistów uczynić nieco lepszych. Doświadczenie, aczkolwiek niezmiernie ważne, to niestety jeszcze nie wszystko. Mamy niewiele dowodów na to, że wieloletnia praca z wieloma językami wpływa zasadniczo na umiejętność programowania. Dzieła literackie nie powstają poprzez wykorzystanie fragmentów poprzednich - dlatego sądzę, że wielorazowe wykorzystanie tego samego kodu tylko w ograniczonym stopniu wpłynie na tworzenie oprogramowania.

Najnowsze raporty wskazują, że wydajność procesu pisania programów ulega poprawie o ok. 4,5% rocznie. Oznacza to, iż stworzenie aplikacji jest obecnie 10 razy łatwiejsze niż 50 lat temu (co wydaje się niewielkim osiągnięcie w porównaniu do tempa wzrostu mocy obliczeniowej komputerów ponad milion razy w tym samym okresie).

Dopóki nie będziemy dysponować językami programowania, które pozwalałyby nam myśleć jednocześnie o problemie i zaproponowanym algorytmie, dopóty wszelki postęp w będzie co najmniej wolny. Stoi to w oczywistej sprzeczności z informacjami o coraz wyraźniejszym skracaniu czasu procesu programowania, przedstawianymi w literaturze fachowej - gdyby były one prawdziwe, już dzisiaj powinniśmy uzyskiwać działający program prawie jednocześnie z pojawieniem się problemu.

Współczynnik, mówiący o 4,5% rocznej poprawie w tworzeniu jakości oprogramowania, zapewne zostanie utrzymany przez następnych 50 lat. Oznacza to, iż "problem programowania" nigdy nie znajdzie rozwiązania - niezależnie od tego, co będzie można przeczytać o "złotym środku" bądź "nieustającym przełomie".

Pewną obietnicę stanowi stosowanie sieci neuronowych - wystarczy raz przygotować program, który ją symuluje, by później, przenosząc problem na odpowiadającą mu strukturę, pozwolić maszynie znaleźć rozwiązanie - wszystko bez konieczności pisania skomplikowanego programu. Czy istnieją inne podobne metody? Czy ich stosowanie jest ograniczone - podobnie jak w przypadku sieci neuronowych - do dość wąskich dziedzin?

Programowanie automatyczne można postrzegać jako odmianę kodowania Huffmana. Ciągi bitów, których maszyna potrzebuje do rozwiązania problemu, są z reguły długie w przeciwieństwie do tych, które realizują obliczenia, jakimi nie jesteśmy zainteresowani. W idealnej sytuacji powinno być na odwrót - krótkie ciągi stanowią program, długie zaś dotyczą rzadko spotykanych problemów.

Problem programowania zasadniczo sprowadza się do zagadnienia, w jaki sposób uwolnić się od złych programistów. Już od dawna wiadomo, że ci bardzo dobrzy spośród nich potrafią być 10 razy bardziej wydajni od reszty. Nauka programowania w niczym nie przypomina sposobu, w jaki wiedzę i umiejętności zdobywają sportowcy. Dlatego powinniśmy z większą uwagą przyjrzeć się temu, jak wyglądają studia informatyczne. Nieszczęście polega na tym, że znaczna część profesorów i nauczycieli, przekazujących innym wiedzę o tworzeniu programów, słabo i niewiele programuje bez poczucia sensu i dobrego stylu. Zdają się sądzić, że najważniejsze jest nauczanie precyzyjnego i szybkiego programowania. Właśnie dlatego postęp w profesji informatyka jest tak powolny - zależy bowiem od podciągania się w górę kawałek po kawałku na bazie stopniowych ulepszeń.

Wsparcie z zewnątrz

Inżynierowie będą w stanie nadal obniżać cenę komputerów i poprawiać ich wydajność. Jednak innowacje, które całkowicie odmienią informatykę, dopiero nas czekają. Większość znaczących odkryć także w tej dziedzinie pochodziła z zewnątrz. Tranzystor był wynalazkiem firmy telekomunikacyjnej, a dokonano go, dążąc do poprawy jakości oferowanych usług telefonicznych. Podobnie datowanie węglem do archeologii trafiło dzięki osiągnięciom fizyków.

Zasadniczą trudność w przewidywaniu tego, co może zdarzyć się, sprawia nasza niewiedza co do dziedziny, dzięki której pojawią się istotne nowości. Wątpię, by w ciągu następnych 50 lat nasze spojrzenie na informatyczne problemy nie zmieniło się w znaczący sposób. Kto tego dokona? Jaką dziedziną będzie zajmował się? Raczej nie będzie to żaden z dzisiejszych informatycznych ekspertów.

Społeczny odbiór informatyki jest całkowicie niejednoznaczny. Z jednej strony humorystyczne postrzeganie programistów jako komputerowych moli przez całe życie zapatrzonych w ekran, zaś z drugiej rozbudzone oczekiwania, że komputery - jeśli nie dziś, to już jutro rozwiążą wszystkie nasze problemy. Entuzjaści zdają się nie dostrzegać, że samo dostarczanie coraz większej ilości informacji znaczy niewiele. Potrzebna jest jeszcze ich kwalifikacja, mówiąca przede wszystkim o tym, czy otrzymywane dane są prawdą czy fałszem. Ludzie wcale nie potrzebują słabo uporządkowanych informacji, menu z wieloma rozbudowanymi opcjami zaś jedynie rozdrażnia użytkownika.

Próbowałem powstrzymać się od wyrokowania, co jeszcze w informatyce może zdarzyć się - zwłaszcza czego bym sobie życzył. Oczywiście, nie do końca mi się to udało. Sądzę jednak, że zbliżyłem się bardziej do podstaw niż większość przewidywań, mówiących o przyszłości w 50 następnych latach. Czas pokaże, kto miał rację. Sam zapewne tego nie doczekam, ale młodsi ode mnie sami będą mogli to sprawdzić.


IBM Think Digital Summit Poland, 16-17 września 2020
TOP 200