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