Stroustrup i C++

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 ?
Redaktor:
OK, to mogΩ zrobiµ.

T│umaczenie: Maciek Durman

Ostatnia modyfikacja: 1999-10-03