1 Stycznia 1998 roku, Bjarne Stroustrup udzieli│ wywiadu dla jednego
z czasopism komputerowych - "IEEE Computer". Wydawcy my╢leli, ┐e bΩdzie
to nawi▒zanie do minionych siedmiu lat programowania obiektowego za
pomoc▒ jΩzyka, kt≤ry sam stworzy│. W trakcie wywiadu, prowadz▒cy go
redaktor zosta│ do╢µ niemile zaskoczony przez swojego rozm≤wcΩ, co
by│o powodem p≤╝niejszej chΩci zatajenia tre╢ci wywiadu przez wydawc≤w,
t│umaczonej "dbaniem o dobro przemys│u komputerowego". Jednak jak to zwykle
bywa w takich przypadkach, r≤wnie┐ i tutaj wyst▒pi│ tzw. przeciek informacji.
Oto kompletny odpis tego co zosta│o powiedziane, bez jakichkolwiek obr≤bek
merytorycznych. Dlatego te┐ nie wygl▒da to tak, jak w przypadku innych,
wcze╢niej uzgadnianych wywiad≤w. Jednak my╢lΩ, ┐e spotka siΩ to
z zainteresowaniem....
Redaktor:
MinΩ│o ju┐ parΩ lat odk▒d zrewolucjonizowa│e╢ ╢wiat programowania.
Co o tym my╢lisz, patrz▒c wstecz na swoje dokonania?
Stroustrup:
W│a╢ciwie my╢la│em o tym tu┐ przed twoim przyj╢ciem.
PamiΩtasz?... Wszyscy pisali w C, a problemem by│o to, ┐e byli w tym
cholernie dobrzy. R≤wnie┐ uniwersytety by│y dobre w nauczaniu tego jΩzyka.
W bardzo szybkim tempie wypuszczali na ╢wiat wykwalifikowanych (podkre╢lam
s│owo: wykwalifikowanych) absolwent≤w. To w│a╢nie spowodowa│o problem.
Redaktor:
Problem?
Stroustrup:
Tak, problem. PamiΩtasz jak dawniej wszyscy pisali w Cobol-u?
Redaktor:
Oczywi╢cie, ja te┐ w tym pisa│em...
Stroustrup:
WiΩc na pocz▒tku ci ludzie byli jak p≤│bogowie. Mieli wysokie
pensje, i traktowani byli niemal┐e jak cz│onkowie rodziny kr≤lewskiej.
Redaktor:
To by│y czasy..., prawda?
Stroustrup:
W│a╢nie! I co siΩ sta│o? Firma IBM mia│a tego dosyµ, wiΩc
zainwestowa│a miliony dolar≤w na wytrenowanie tylu programist≤w, a┐ by│o
ich dos│ownie na pΩczki.
Redaktor:
Z tego w│a╢nie powodu ja te┐ odszed│em. Pensje spad│y w przeci▒gu
roku na tyle, ┐e bardziej op│aca│o siΩ pisanie artyku│≤w do magazyn≤w.
Stroustrup:
Dok│adnie. To samo sta│o siΩ z programistami pisz▒cymi w C.
Redaktor:
No tak. Ale do czego zmierzasz?
Stroustrup:
Ot≤┐ pewnego dnia, kiedy siedzia│em w swoim biurze, my╢la│em
nad czym╢ co wprowadzi│oby trochΩ r≤wnowagi do ≤wczesnej sytuacji.
Zastanawia│em siΩ co by by│o, gdyby istnia│ jΩzyk na tyle skomplikowany
i trudny do nauczenia, ┐e nikt nie by│by w stanie zalewaµ rynku programistami.
Mia│em parΩ pomys│≤w z X10, no wiesz, X windows. To dopiero by│o okropne
╢rodowisko graficzne... chodzi│o tylko na maszynach typu Sun 3/60. Ale mia│o
╢wszystkie sk│adniki jakich potrzebowa│em: naprawdΩ ╢miesznie skomplikowan▒
sk│adniΩ, mΩtne i niejasne funkcje oraz pseudo obiektow▒ strukturΩ. Nawet
w dzisiejszych czasach, nikt kto chce pozostaµ przy zdrowych zmys│ach, nie
pisze w czystym kodzie X-windows.
Redaktor:
Chyba ┐artujesz...?
Stroustrup:
Ani trochΩ. By│ te┐ kolejny problem. Unix zosta│ napisany w C,
a to znaczy│o ┐e ka┐dy programista pisz▒cy w tym jΩzyku, m≤g│ bardzo │atwo
przej╢µ na pisanie system≤w operacyjnych. PamiΩtasz chyba ile wtedy
programista takich g│≤wnych system≤w zarabia│ ?
Redaktor:
Jasne ┐e tak, sam te┐ siΩ tym zajmowa│em....
Stroustrup:
Zatem ten nowy jΩzyk musia│ oddzieliµ siΩ od Unix-a, ukrywaj▒c
wszystkie wywo│ania systemowe. To umo┐liwi│oby zarobienie paru groszy r≤wnie┐
tym, kt≤rzy znali tylko DOS-a.
Redaktor:
Nie wierzΩ, ┐e to powiedzia│e╢...
Stroustrup:
No c≤┐, minΩ│o ju┐ trochΩ czasu i moim zdaniem wiΩkszo╢µ ludzi
odkry│a, ┐e ca│e C++ to tylko strata czasu, choµ muszΩ powiedzieµ, ┐e zajΩ│o
im to o wiele d│u┐ej ni┐ przypuszcza│em.
Redaktor:
Zatem, jak uda│o ci siΩ osi▒gn▒µ taki sukces ?
Stroustrup:
To mia│ byµ tylko ┐art. Nigdy nie s▒dzi│em, ┐e ludzie mogliby
braµ moj▒ ksi▒┐kΩ na powa┐nie. Ka┐dy, nawet p≤│g│≤wek dostrze┐e, ┐e
programowanie zorientowane obiektowo jest nielogiczne, niewydajne i dzia│a
wbrew intuicji.
Redaktor:
Co?
Stroustrup:
A co do wielokrotnego wykorzystywania kodu... - kiedy s│ysza│e╢,
┐eby jaka╢ firma dzia│a│a w ten spos≤b ?
Redaktor:
No..., w│a╢ciwie to nigdy, ale...
Stroustrup:
No w│a╢nie! To znaczy, kilka pr≤bowa│o w tamtych czasach. By│a
taka firma z Oregonu - Mentor Graphics, kt≤ra w '90 albo '91-szym roku
pr≤bowa│a przepisaµ wszystko na C++ i niestety nie wysz│o im to na dobre.
By│o mi ich naprawdΩ ┐al ale uwa┐am, ┐e ludzie powinni uczyµ siΩ na w│asnych
b│Ωdach.
Redaktor:
Dok│adnie. A im siΩ to nie uda│o ?
Stroustrup:
Niestety ani trochΩ. Problem w tym, ┐e wiΩkszo╢µ firm ma
tendencjΩ do tuszowania swoich powa┐niejszych zaniedba±, a wyt│umaczenie
siΩ akcjonariuszom ze straty 30 milion≤w dolar≤w, by│oby do╢µ trudne.
Sprawiedliwo╢ci sta│o siΩ zado╢µ, jednak w ko±cu uda│o im siΩ jako╢ wyj╢µ
na prost▒.
Redaktor:
NaprawdΩ? No wiΩc sam widzisz, ┐e programowanie obiektowe skutkuje.
Stroustrup:
Prawie. Pliki .EXE by│y tak du┐e, ┐e ich za│adowanie na maszynie
HP ze 128MB RAM-u, trwa│o piΩµ minut. Programy uruchamia│y siΩ w ╢limaczym
tempie. W│a╢ciwie my╢la│em, ┐e bΩdzie to g│≤wn▒ wad▒ nowego jΩzyka, jednak
nikogo to nie obchodzi│o. Firmy takie jak Sun czy HP by│y zbyt zadowolone
ze sprzeda┐y swoich mocnych komputer≤w z ogromnymi zasobami, a wszystko po
to tylko, ┐eby uruchamiaµ na nich proste, banalne programy. Wyobra╝ sobie,
┐e kiedy pojawi│ siΩ pierwszy kompilator C++ na komputerze AT&T, skompilowa│em
pod nim zwyk│e "Hello World" i wprost nie mog│em uwierzyµ rozmiarowi tego pliku
- 2.1 MB.
Redaktor:
Co? Zgoda, ale kompilatory bardzo siΩ od tamtego czasu zmieni│y.
Stroustrup:
Czy┐by? We╝my na przyk│ad ostatni▒ wersjΩ g++ - nie uzyskasz
wiΩkszej redukcji objΩto╢ci jak zaledwie o nieca│e 0.5 MB. M≤g│bym przytoczyµ
ci jeszcze kilka innych przyk│ad≤w z ca│ego ╢wiata. Swego czasu firma British
Telecom mia│a z tego powodu nie lada katastrofΩ, ale na szczΩ╢cie uda│o im
siΩ w porΩ usun▒µ problemy i zacz▒µ od nowa. Australian Telecom nie mia│a
tyle szczΩ╢cia, co ich brytyjski odpowiednik. Teraz dochodz▒ mnie s│uchy,
┐e Siemens buduje kolejnego "dinozaura" martwi▒c siΩ coraz bardziej o to,
aby sprzΩt r≤wnowa┐y│ wymagania program≤w. Czy zatem wielopoziomowe
dziedziczenie nie jest po prostu pomy│k▒ ?
Redaktor:
Przecie┐ C++ jest bezpiecznym jΩzykiem.
Stroustrup:
NaprawdΩ w to wierzysz ? Czy kiedykolwiek pracowa│e╢ nad
projektem w C++? Oto co siΩ dzieje: po pierwsze, w C++ istnieje wystarczaj▒co
du┐o pu│apek, dziΩki kt≤rym tylko najbanalniejsze projekty dzia│aj▒ za
pierwszym razem. We╝ np. prze│adowanie jakiego╢ operatora. Pod koniec
projektu, prawie ka┐dy modu│ je posiada, bo w mniemaniu programist≤w powinno
ono wyst▒piµ, przecie┐ o tym m≤wiono im na kursach szkoleniowych. Zatem ten
sam operator w ka┐dym kolejnym module oznacza co╢ zupe│nie innego. A spr≤buj
nad tym zapanowaµ, kiedy bΩdziesz mia│ oko│o setki modu│≤w... A co do
ukrywania danych: O Bo┐e, czasami nie spos≤b siΩ nie roze╢miaµ, kiedy s│yszΩ
o firmach staraj▒cych siΩ sprawiµ aby ich modu│y ze sob▒ wsp≤│pracowa│y.
My╢lΩ, ┐e s│owo "synergetyczny" zosta│o specjalnie wymy╢lone, aby mo┐na by│o
szefowi projektu "przekrΩcaµ n≤┐ w ┐ebrach".
Redaktor:
MuszΩ przyznaµ, ┐e zaczynam byµ tym wszystkim przera┐ony. M≤wisz,
┐e stworzy│e╢ ten jΩzyk po to, aby wzros│y pensje programist≤w? To okropne!
Stroustrup:
Nie zupe│nie. Przecie┐ ka┐dy ma wyb≤r. Nie przypuszcza│em, ┐e a┐
tak bardzo wymknie siΩ to spod kontroli, jednak sta│o siΩ. C++ ju┐ stopniowo
wymiera, ale programi╢ci dalej s▒ dobrze op│acani - szczeg≤lnie ci, kt≤rzy
zajmuj▒ siΩ tworzeniem projekt≤w za pomoc▒ tego steku bzdur. Zdajesz sobie
sprawΩ, ┐e pracowanie nad du┐ym modu│em programu w C++ nie jest mo┐liwe, je╢li
sam go nie napisa│e╢ ?
Redaktor:
Jak to ?
Stroustrup:
Nie kojarzysz o czym m≤wiΩ, prawda? A pamiΩtasz dyrektywΩ:
typedef?
Redaktor:
Oczywi╢cie ┐e tak.
Stroustrup:
Przypomnij sobie ile czasu zabiera ╢ledzenie "po omacku" plik≤w
nag│≤wkowych tylko po to, aby dowiedzieµ siΩ ┐e np. 'RoofRaised' to liczba
typu double. Wyobra╝ sobie ile czasu zabiera znalezienie wszystkich
konkretnych dyrektyw typedef we wszystkich klasach jakiego╢ wiΩkszego
projektu.
Redaktor:
Po czym zatem pozna│e╢ sw≤j sukces ?
Stroustrup:
PamiΩtasz ile zajmowa│o stworzenie ╢redniej objΩto╢ci projektu
w C ? Oko│o 6 miesiΩcy. To trochΩ za kr≤tko, aby facet maj▒cy ┐onΩ i dzieci
m≤g│ zarobiµ na utrzymanie i w miarΩ godziwy standard ┐ycia. A we╝ teraz
napisz ten sam projekt u┐ywaj▒c C++...i co otrzymasz? Powiem ci - jeden
do dw≤ch lat. Czy┐ to nie wspania│e zapewnienie sobie pracy? Kolejna rzecz.
Uniwersytety nie naucza│y C od tak dawna, ┐e teraz brakuje porz▒dnych
programist≤w pisz▒cych w tym jΩzyku. Szczeg≤lnie tych, kt≤rzy wiedz▒ co╢
na temat programowania pod systemami z rodziny Unix-a. Ilu teraz wiedzia│oby
co zrobiµ z 'malloc', skoro przez tyle lat u┐ywali 'new' - i nigdy nie
zaprz▒tali sobie g│owy sprawdzaniem warto╢ci zwracanego kodu.
W rzeczywisto╢ci, wiΩkszo╢µ z programist≤w C++ pomija te zwracane warto╢ci.
Co siΩ sta│o ze starym, dobrym '-1' ? Przynajmniej wiedzia│e╢, ┐e masz b│▒d,
bez grzΩ╝niΩcia w ca│y ten ba│agan z 'try', 'throw' i 'catch'.
Redaktor:
Ale przecie┐ dziedziczenie oszczΩdza mn≤stwo czasu i pracy...
Stroustrup:
Tak s▒dzisz? Czy kiedykolwiek zauwa┐y│e╢ r≤┐nicΩ miΩdzy
planowaniem projektu w C, a planowaniem projektu w C++? To drugie jest trzy
razy d│u┐sze. Musisz dok│adnie upewniµ siΩ, ┐e wszystko co powinno byµ
dziedziczone, jest dziedziczone, a wszystko co nie powinno - nie jest.
A potem i tak wystΩpuj▒ w tym b│Ωdy. Kto przedtem s│ysza│ o jakiej╢
konsumpcji pamiΩci przez program napisany w zwyk│ym C? A teraz znajdywanie
ich, to chleb powszedni. WiΩkszo╢µ firm pod tym wzglΩdem poddaje siΩ,
wypuszczaj▒ na rynek sw≤j produkt, wiedz▒c ┐e cieknie z niego jak z dziurawego
worka, no ale wtedy unikaj▒ koszt≤w zwi▒zanych z │ataniem tych dziur.
Redaktor:
S▒ do tego odpowiednie narzΩdzia...
Stroustrup:
...z kt≤rych wiΩkszo╢µ zosta│a napisana w C++.
Redaktor:
Czy zdajesz sobie sprawΩ z tego, ┐e je╢li opublikujemy ten wywiad,
to prawdopodobnie zostaniesz "zlinczowany" ?
Stroustrup:
W▒tpiΩ. Jak ju┐ powiedzia│em, C++ min▒│ ju┐ sw≤j szczyt rozkwitu
i popularno╢ci i ┐adna firma przy zdrowych zmys│ach nie zacznie tworzenia
projektu w C++ bez wstΩpnych pr≤b. One powinny ich przekonaµ, ┐e zmierzaj▒
prosto ku katastrofie. A je╢li tego nie zauwa┐▒, to niech maj▒ na co
zas│u┐yli. Wiesz, pr≤bowa│em kiedy╢ przekonaµ Dennis'a Ritchie, aby przepisa│
Unix-a w C++.
Redaktor:
O m≤j Bo┐e..., i co powiedzia│?
Stroustrup:
Na szczΩ╢cie ma poczucie humoru. My╢lΩ ┐e obaj, on i Brian
Kernighan ju┐ wtedy zorientowali siΩ o co mi chodzi, ale trzymali to
w tajemnicy. Dennis powiedzia│, ┐e je╢li chcΩ, to pomo┐e mi napisaµ w C++
wersjΩ DOS-a.
Redaktor:
A chcia│e╢ ?
Stroustrup:
W│a╢ciwie to napisa│em DOS-a w C++. Jak sko±czymy, to dam ci
wersjΩ demo. Dzia│a to u mnie na Sparc 20. Chodzi jak rakieta przy czterech
procesorach i zajmuje tylko jakie╢ 70 MB twardego dysku.
Redaktor:
A jak siΩ sprawuje na zwyk│ym PC ?
Stroustrup:
Teraz to sobie ┐artujesz. Czy nigdy nie widzia│e╢ Windows'95?
My╢lΩ o nim jak o moim najwiΩkszym sukcesie. Prawie przegra│em, zanim
cokolwiek siΩ zaczΩ│o.
Redaktor:
Wiesz, ten pomys│ na Unix++ naprawdΩ mnie zastanawia. Gdzie╢
na ╢wiecie kto╢ na pewno siΩ za to we╝mie.
Stroustrup:
Na pewno nie, je╢li przeczyta ten wywiad.
Redaktor:
Przykro mi, ale nie wydaje mi siΩ, ┐eby╢my mogli cokolwiek
z tego opublikowaµ.
Stroustrup:
Ale to jest opowie╢µ stulecia. Ja chcΩ tylko, ┐eby wszyscy
moi koledzy po fachu pamiΩtali mnie za to, co dla nich zrobi│em. Wiesz ile
zarabia w dzisiejszych czasach programista znaj▒cy C++ ?
Redaktor:
Ostatnio s│ysza│em, ┐e ci najlepsi dostaj▒ $70 - $80 za godzinΩ.
Stroustrup:
Widzisz? I za│o┐Ω siΩ, ┐e s▒ tyle warci. ªledzenie wszystkich
tych "pu│apek" jakie umie╢ci│em w C++ nie jest wcale │atwe. Tak jak ju┐
m≤wi│em wcze╢niej, ka┐dy programista pisz▒cy w C++ czuje siΩ zwi▒zany jak▒╢
mistyczn▒ obietnic▒ do u┐ywania w swoich projektach ka┐dego przeklΩtego
elementu tego jΩzyka. Czasami to naprawdΩ mnie denerwuje, nawet je╢li jest
zgodne z moim pierwotnym celem. Po tych wszystkich latach, prawie polubi│em
ten jΩzyk.
Redaktor:
To znaczy, ┐e przedtem go nie lubi│e╢ ?
Stroustrup:
Nienawidzi│em go. Wydaje siΩ nawet niezgrabny, zgodzisz siΩ?
Ale kiedy zaczΩ│y przychodziµ do mnie tantiemy..... no c≤┐, sam rozumiesz.
Redaktor:
ChwileczkΩ. A co z referencjami? Musisz przyznaµ, ┐e ulepszy│e╢
wska╝niki zwyk│ego C.
Stroustrup:
Hmm... Zawsze siΩ nad tym zastanawia│em. Najpierw my╢la│em,
┐e faktycznie je ulepszy│em. Potem jednak rozmawia│em o tym z pewnym facetem,
kt≤ry od pocz▒tku pisa│ wszystkie swoje programy w C++. Powiedzia│ mi,
┐e nigdy nie mo┐e zapamiΩtaµ czy jego zmienne przekazywane s▒ przez
referencjΩ czy przez dereferencjΩ, wiΩc zawsze u┐ywa wska╝nik≤w. Powiedzia│,
┐e ta ma│a gwiazdka zawsze mu przypomina.
Redaktor:
C≤┐, w tym momencie zwykle m≤wiΩ: 'dziΩkujΩ ci bardzo za wywiad',
ale tutaj nie wydaje siΩ to stosownym.
Stroustrup:
Obiecaj mi, ┐e to opublikujesz. Po prostu gryzie mnie sumienie,
dlatego ciΩ o to proszΩ.
Redaktor:
Dam ci znaµ, ale ju┐ przeczuwam co powie m≤j wydawca.
Stroustrup:
Ale kto by w to uwierzy│? Mimo wszystko, czy mo┐esz przys│aµ mi
kopiΩ ta╢my z tym wywiadem ?