C++

Nikt mi nie powie, że C++ nie ma żadnych plusów - ma przynajmniej dwa!

Jeżeli Twoim młotkiem jest C++, wszystko zaczyna wyglądać jak kciuk.

Meandry C++

meandry-cpp.jpg

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ć.

Podobne strony

Podobne Strony
O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License