Re: Expertyza, czyli o Jacku slow kilka

Autor: Michal Zalewski (lcamtuf_at_coredump.cx)
Data: Sat 23 Jun 2001 - 18:01:29 MET DST


On 23 Jun 2001, paranoy wrote:

> a, to bardzo ciekawe, zaznacze tylko ze javy nie lubie i sobie
> pokomentuje. zalozeniem javy bylo wyeliminowanie bledow C++.

Ale Java nie eliminuje wiekszosci bledow C++. Ja Javy po prostu nie lubie,
a jakze, natomiast nie jestem fanatykiem, i uwazam, ze nie jest niczym
zlym zaczepienie o ten jezyk na studiach, wszak moze kogos spotkac
nieszczescie programowania w nim. Ba, kogos moze nawet spotkac
programowanie w C# z jego bardzo sprytnie rozwiazanym wlaczaniem i
wylaczaniem range checking ;>

Natomiast zupelnie nietrafione wydaje mi sie uzywanie Javy jako pierwszego
albo podstawowego jezyka. Rozsadne wydaja mi sie dwie mozliwosci - albo
uczymy powaznego, eleganckiego programowania i tworzenia stabilnego,
uzytecznego kodu, i chcemy miec jezyk, ktory jakos do tego pasuje - wtedy
Java nadaje sie dosc srednio, lepiej siegnac po cos innego, Ada, jezyki
funkcyjne, czy cus - ktorych czytelnosc i sklonnnosc do propagowania
niebezpiecznych praktyk programistycznych jest duzo nizsza. Albo uczymy
"jak komputer piszczy", jakie sa relacje miedzy kodem i maszyna, i
wybieramy do tego narzedzie typu asembler lub C, jak ktos lubi, od biedy
moze wybrac C++... Java ani tu, ani tu nie pasuje (nie, nie jest
kompromisem, nie jest ani ladna, ani niskopoziomowa ;), wydaje mi sie, ze
uczy calej masy brzydkich rzeczy dziedziczonych z C++, wielu rzeczy w niej
po prostu brakuje (np. dosc prymimtywny strong typing dziedziczony po
przodku), i rownoczesnie alienuje takiego poczatkujacego od maszyny i
systemu.

Po prostu przeraza mnie to, ze wiele ludzi bedzie umialo napisac "Hello
world" tylko wykorzystujac klasy, przeciazanie operatorow, strumienie itp,
natomiast nie bedzie umialo zrobic tego bez tych technik
programistycznych, w C, w assemblerze, i ze swiat miedzy obiektami a tym,
jak teoretycznie dziala komputer (bo tego na PJWSTK, szczesliwie, ucza),
bedzie niebawem mial wielka ostrzegawcza tablice "here be dragons". I ze
ludzie nie beda mieli pojecia, czemu taki a nie inny kod odpowiada ich
obiektowemu hello world, co wlasciwie robi z tym kodem system, co system
(znany lub nieznany) chce nam przekazac pokazujac jakis stack dump, jak
ten system zrozumiec i stwierdzic, czy to my, czy jego autorzy popelnili
blad... skoro tak sie sklada, ze wiekszosc systemow operacyjnych nie jest
napiana w Javie, nie uzywa obiektow ;)

No i widzialem paru programistow uprawiajacych voodoo... tzn gdy cos nie
dziala w ich kodzie (w przypadkach, ktore widzialem - w C++), chociaz
teoretycznie powinno, nie zastanawiaja sie, co sie dzieje na stosie, co
sie dzieje z pamiecia, w ktorym momencie pojawiaja sie problemy, tylko po
prostu panikuja, i zaczynaja wstawiac komentarze, zmieniac jedna postac
kodu, ktory powinien dzialac na inna, i tak dalej... Straszne.

> a porownanie z C.. hmm.. dosc podobna skladnia, sporo wbudowanych
> funkcji... z lista funkcji na ekranie i lekkim pojeciem o tym jak sie
> w javie pisze da sie pisac niewiele wolniej niz w C, gdy np. pierwszy
> raz uzywa sie jakiegos wikeoszego liba.

Niz w C++, owszem. W C klepie sie dosc bezmyslnie, tysiac linii w dwie
godziny to nic nadzwyczajnego - tylko, oczywiscie, pozniej zarzadzanie tym
kodem (czytaj: odczytanie go nastepnego ranka, nie mowiac juz o zmianach
przez inna osobe ;) jest ciezkie. C++ probowal byc odpowiedzia na te
problemy i ograniczenia C, ale pomieszanie wolnej amerykanki z C z
namiastkami strong typingu, i metodami "ladnego programowania" (klasy ;)
wyszlo tak sobie - tzn. podobnie jak w C, trzeba patrzec sobie na palce
zeby nie popelniac bledow, ktore moglyby byc dosc latwo unikniete w innych
jezykach, i zeby kod byl pozniej czytelny. Java moim zdaniem nieco
podniosla czytelnosc, ale nadal daleka droga ;> Wyprowadzanie czytelnych i
bezpiecznych jezykow z C jest conajmniej dziwnym pomyslem.

-- 
_____________________________________________________
Michal Zalewski [lcamtuf_at_bos.bindview.com] [security]
[http://lcamtuf.coredump.cx] <=-=> bash$ :(){ :|:&};:
=-=> Did you know that clones never use mirrors? <=-=


To archiwum zostało wygenerowane przez hypermail 2.1.7 : Wed 19 May 2004 - 16:50:09 MET DST