Ludzie pragną czasami się rozstawać, żeby móc tęsknić, czekać i cieszyć się z powrotem.
Programowanie stale ewoluuje. Nie możesz pójść do szkoły, nauczyć się wszystkiego co akurat chcesz wiedzieć, po czym stwierdzić: “Teraz już umiem. Nauczyłem się programować."
Za każdym razem, gdy przyzwyczajam się do świata, ktoś radykalnie wszystko zmienia. Przeniosłem się z dużych komputerów Univac na mikrokomputery Data General. Potem musiałem nauczyć się o mikroprocesorach. Następnie nauczyłem się kochać Unixa. Potem Windows (być może słowo “kochać" jest w tym przypadku trochę za mocne). Gdzieś pomiędzy porzuciłem C dla C++. Uczyłem się Visual Basica, Delphi i kilku innych języków. Przesiadłem się z SDK do MFC.
Co jutro przyciągnie moje zainteresowanie? Nie wiem. Jeśli bym wiedział, prawdopodobnie teraz pisałbym właśnie o tym. Wiele osób ekscytuje się Javą. Oczywiście, Java jest interesująca. Ale naprawdę interesujące są te zagadnienia, o'których jeszcze nawet nie wiemy. Oczywiście, to coś czego nie można przewidzieć. Jednak myślę że możemy spojrzeć na postęp technologii i na tej podstawie wysnuć kilka przypuszczeń co do przyszłości oprogramowania.
Rzeczy, które nadejdą
Pomyśl o innowacjach zmieniających nasze życie. Kto w 1910 roku mógł przewidzieć powstanie tranzystora czy komputera osobistego? Nawet jeśli przewidziałbyś ich istnienie, czy przewidziałbyś ich ogromny wpływ na nasze życie? Powszechnie znana (i prawdopodobnie prawdziwa) jest historia, według której IBM przewidywał, że światowy rynek zadowoli się kilkoma (sześcioma czy siedmioma) komputerami.
Większość zmian jest jednak bardziej ewolucyjna niż rewolucyjna. Weźmy pod uwagę bankomat. Jednym z największych problemów w podróżach była konieczność posiadania przy sobie odpowiedniej ilości pieniędzy. Szczególny kłopot pojawiał się wtedy, gdy podróż trwała dłużej niż zamierzałeś. Nikt nie przyjmował zwykłego czeku. W tamtych czasach najważniejszym powodem posiadania karty American Express była możliwość płacenia nią w większości hoteli. W biurach American Express mogłeś zamienić na gotówkę także większe kwoty.
Obecnie, w czasie bankomatów, kto by się tym przejmował? Już nawet nie wożę ze sobą czeków. Mogę pojechać prawie wszędzie, włożyć kartę do automatu i wyciągnąć pokaźną ilość gotówki. Któż mógłby przewidzieć taką prostą zmianę w życiu? Bankomat sam w sobie nie jest niczym rewolucyjnym. Stanowi jedynie rozwinięcie małego, taniego komputera i sieci telekomunikacyjnej. Z kolei te rzeczy wyewoluowały z innych technologii.
Układy scalone a pamięć rdzeniowa
Według mnie, największą rewolucją technologiczną naszego świata było powstanie układu scalonego. Mało kto tak naprawdę wie czym jest układ scalony, mimo że jego istnienie ma wpływ na życie każdego z nas.
Sam w sobie układ scalony nie jest niczym niezwykłym. Istnieje tylko kilka rzeczy, których wykonanie bez układów scalonych mogłoby sprawić poważne trudności (a i tak większość z nich da się jakoś wykonać w inny sposób). To co sprawia, że układy scalone są tak użyteczne, to łatwość i niskie koszty ich powielania.
Dawniej, gdy w komputerach stosowano pamięć rdzeniową, firmy komputerowe zatrudniały ludzi z małymi rękami do nawlekania na druty małych rdzeni ferrytowych. Na małym obszarze (może pięćdziesięciu centymetrów kwadratowych) upychano setki takich rdzeni. Był to szczególnie drogi sposób produkcji pamięci.
Obecnie załoga kilku techników wykonuje czynności bardzo podobne do wywoływania rolki filmu. Gdy skończą, otrzymują duży krzemowy krążek zawierający setki układów pamięci. Każdy z układów ma pojemność setki i tysiące razy większą od starych pamięci rdzeniowych.
Ponieważ tworzenie układów scalonych jest takie tanie, firmy mogą je tanio sprzedawać. Dzięki niskiej cenie mogą sprzedać ich dużo więcej. To oznacza, że koszt projektowania układu scalonego można rozłożyć na miliony lub nawet miliardy sprzedanych sztuk. Dzięki temu firmy mogą poświęcać ogromne nakłady na opracowywanie nowych i lepszych układów.
Inną interesującą cechą układów scalonych jest to, że firmy je produkujące starają się aby układy różnych firm były między sobą zgodne. Zwykle można bez problemu łączyć mikroprocesory Intela z pamięcią Hitachi i układami wejścia/wyjścia firmy Texas Instruments. Jeśli z jakiegoś powodu Hitachi nie ma na składzie potrzebnych układów, możesz udać się do NEC-a i zakupić podobną część. Układ NEC-a (lub nowszy układ Hitachi) może być nawet lepszy (ale w dalszym ciągu zgodny).
Wyobraź sobie jak mogłoby to wyglądać w przemyśle oprogramowania. Co by było, gdybyś mógł poświęcić trzy lata opracowując składnik oprogramowania, wiedząc, że mógłbyś go sprzedać w milionach egzemplarzy? A co by było, gdybyś mógł kupić składniki, którym poświęcono tak dużo czasu? Oczywiście, takie składniki musiałyby bez przeszkód współpracować z innymi składnikami stworzonymi przez kogoś innego. Przy takim nakładzie włożonej pracy mógłbyś oczekiwać, że składniki będą współdziałały bez żadnych problemów i będą bardzo wydajne. I oczywiście, że będą tanie.
Fantazje? Nie, już widzimy, że to się zaczyna. W ten czy inny sposób kontrolki VBX (Visual Basic Extension), kontrolki ActiveX (OCX) czy JavaBeans, stanowią szkielet takiego mechanizmu. Czy już istnieje? Nie. Obecne komponenty nie współpracują ze sobą zbyt dobrze. Oprócz tego nie posiadają standardowych interfejsów, koniecznych, aby różni producenci mogli tworzyć zgodne ze sobą składniki. Ale na razie to tylko początek.
Trudno sobie wyobrazić środowisko programowe przyszłości, nie będące niczym więcej niż pojemnikiem do umieszczania kontrolek. W rzeczywistości, Visual Basic, Delphi i Internet Explorer już tym są.