Re: Edukacja informatyczna (Bylo: Generator dzwieku)

Autor: Gregorio Kus (Grego_at_RMnet.IT)
Data: Wed 08 Jan 1997 - 14:11:00 MET


On Tue, 7 Jan 1997 22:36:41 +0100, Andrzej Karpinski wrote:

>> to jest wlasnie cholerny dowod potwierdzajacy moja teze!
>> gdybys NAJPIERW znal pascala to przejscie na c czy napisanie
>> jakiegos g... w basicu nie sprwailoby Ci najmniejszych
>> klopotow, bo mialbys DOBRA baze. natomiast nauczyc sie jako
>> pierwszego GOWNIANEGO jezyka - to oznacza wlasnie miec
>> klopoty ze zmiana narzedzia. to dokladnie jak z plywaniem -
>> latwiej nauczyc plywac kogos kto wogole tego nie potrafi
>> niz kogos kto juz jakims-tam-rozpaczliwcem nazwijmy to - plywa.
>
>zaden dowod!. znam pascala, te wszystkie durne petle itd. jedynie nie uzywam
>ich wszystkich jednoczesnie w 30tu roznych wariantach codzien, bo uwazam to za
>rzecz mocno zbedna. jesli ktos nie potrafi sobie przy pomocy ifow i goto
>stworzyc dowolnej petli to co z niego za programista? :)

a jednak dowod Karpio, i tym powyzszym jedynie to potwierdzasz.
Konstrukcji petli w pascalu jest 3 (slownie trzy) a nie trzydziesci,
i zapewniem Cie ze wybor odpowiedniej jest znacznie latwiejszy
niz uzycie 'for' w C, ktorej skladnia (jak i calego C) przyprawia
o bol zebow (juz nawet nie glowy) kazdego kto kiedykolwiek
zetknal sie z elegancja i czystoscia skladni porzadnego jezyka.
Juz na pierwszy rzut oka widac ze autorzy C (Kerningham, Ritchie)
nigdy tego jezyka nie zaprojektowali. Oni zwyczajnie usiedli
i zaczeli pisac kompilator. W miare jak im rosl pod rekami -
dodawali nowe funkcje i zawsze poswiecali skladnie na rzecz mocy
jezyka. Dla nich to mial byc wylacznie jezyk, ktory pozwli im
napisac system operacyjny nie robiac tego w assemblerze.

>a co do plywania to
>nie jestem przekonany. gosciu ktory costam/rozpaczliwie przynajmnie sie wody
>bac nie bedzie, wezmie deske i zacznie systematycznie sie uczyc. ;)

ilu znasz ludzi ktorzy z wlasnej woli ucza sie systematycznie?
ja bardzo niewielu. wiekszosc programistow jakich znam uzywa do
dzis jezyka ktorego sie nauczyla jako pierwszego. najwiekszy
skok jakosciowy do jakiego jest zdolny przecietny programista
to przejscie z QuickBasic do PowerBasic, albo z dBase do clippera.

nie mowimy o hobbystach, ktorzy z reguly ucza sie, poznaja wciaz
cos nowego z ulubionej dziedziny lecz o "wyrobnikach informatyki",
a w tym przypadku analogia z plywaniem jest jak najbardziej
na miejscu - tego co plywa rozpaczliwcem musisz najpierw ODUCZYC
wszystkich zlych nawykow, aby wpoic mu nowe, a jest to znacznie
trudniejsze niz uczyc od razu poprawnych (powie Ci to kazdy
instruktor plywania, nie wierzysz - spytaj)
Z programowaniem jest jeszcze gorzej, bo to sa jednak JEZYKI
i choc z naturalnymi nie maja wiele wspolnego, jednak cos maja:
sa srodkami porozumiewania sie i jako takie maja znacznie wiekszy
zwiazek z MYSLENIEM niz sie to zazwyczaj zauwaza. Jezeli mamy
do czynienia z delikwentem, ktory "nie ma w glowie" odpowiednich
zupelnie abstrakcyjnych struktur (sterowania czy danych),
kazda nowa rzecz ktora sie bedzie usilowac mu wytlumaczyc z np. C
on bedzie sobie usilowal tlumaczyc w myslach na BASIC (jesli to
jest akurat jego jezyk). to oczywiscie nie tylko mu nie pomaga
ale nawet i przeszkadza.
  Co najsmieszniejsze - jezyk bez watpienia najtrudniejszy
do pisania zlozonego oprogramowania (mam na mysli assembler)
bylby w tej sytuacji narzedziem niema optymalnym :-))))
Po prostu kogos kto zna assembler mozesz bardzo latwo i szybko
nauczyc dowolnego jezyka programowania - wystarczy tlumaczac
mu dana konstrukcje, opisac jak to jest zaimplementowane,
i facet natychmiast wie o co w tym biega!
  Oczywiscie, mimo iz to prawda - nie namawiam wcale na uczynienie
z assemblera jezyka do nayuki programowania :-)))

>zreszta. nie przecze ze bez rozbicia sobie wszystkiego na procedurki
>i od poczatku pisania w sposob usystematyzowany nie da sie stworzyc
>wiekszego programu. ale ladny program mozna napisac w czymkolwiek,
>a czasem potrzeba programow brzydkich, na co tp nie bardzo pozwala ;)
>takie goto np. nierzadko bywa niezastapione...

mylisz PASCAL z paradygmatem programowania strukturalnego,
co jest tym dziwniejsze ze nie piszesz o pascalu lecz z uporem o tp
czyli o konkretnej implementacji. W przeciwienstwie do purystycznych
konstrukcji programowania strukturalnego (Hoare, Dijkstra i inni)
zarowno w oryginalnym pascalu Wirth'a jak i w kolejnych standardach
(np. pascal 1900) instrukcja goto zawsze istniala, a we wszystkich
znanych mi konkretnych implementacjach - te odstepstwa szly znacznie
dalej: w tp jest np instrukcja exit (wyjscie z procedury w dowolnym
miejscu a nie tylko na koncu), mozna spotkac tez instrukcje
typu loop czy continue (skok na koniec petli) czy instrukcje
umozliwiajace "niestrukturalne" wyskoczenie z petli. Wszystkie
konkretne implementacje (tp w szczegolnosci) pozwalaja tez na
"purystycznie niedozwolone" manipulacje danymi, dzieki ktorym
w przypadku koniecznej optymalizacji mozna uzyskac efektywnosc
kodu naprawde zblizona do C nawet bez pomocy optymalizujacego
kompilatora.

>> po trzecie w normalnym programie 5% kodu zuzywa 95% czasu wykonania
>> i na tych 5% nalezy sie skupic zamist pisac caly program w jezyku
>> ktory powstal w czasach kiedy liczyl sie kazdy bajt i kazdy cykl
>> maszynowy, a zamierzalo sie napisac przenosny system operacyjny
>> C to naprawde swietny jezyk ALE DO TEGO CELU DO JAKIEGO ZOSTAL
>> STWORZONY! uzwanie go powszechne jako jezyka do wszelkich
>> zastosowan jest wylacznie kwestia mody i to CHOLERNIE GLUPIEJ
>
>wiesz. ja pisalem raczej o polaczeniu basica (jak trzeba cos szybko
>i od reki napisac) z asm (jak trzeba cos szybkiego napisac)
>c pozostawiajac jedynie dla wiekszych projektow (na sprzedaz).

nie ma znaczenia wielkosc. C jest bardzo kiepskim narzedziem do
pisania wielkich programow (a to czy na sprzedaz czy nie to juz
zupelnie nie rozumiem jaki ma wplyw na wybor jezyka).
Rowniez argumenty o przenosnosci sa kompletnie pozbawione sensu.
Powiecie JAK TO przeciez C sprawdzil sie jako narzedzie do
napisania najbardziej przenoscnego s.o. na swiecie ...
WALSNIE - do przenoszenia s.o. - jak najbardziej. Po napisaniu
kilku tysiecy bajtow kernela w assemblerze, caly unix mozna
postawic na zupelnie nowej architekturze korzystajac juz wylacznie
z C. Ale to wcale nie odnosi sie do aplikacji w dowolnym systemie.
A NAWET W TYM SAMYM SYSTEMIE! Niech mi ktos powie ze przeniesienie
duzej aplikacji napisanej w C pod windoze z uzyciem MFC na "to samo"
C w tym samym windoze ale z uzyciem OWL - jest latwe!

>a o te 5% powaznie bym dyskutowal. nie wiem co nazywasz programem, ale jesli
>wewnatrz petli mam 3000 instrukcji operujacych na zmiennym przecinku to taka
>petla wykonuje sie wiecej niz 5% dluzej niz wykonujaca to samo petla
>skladajaca sie z 100 instrukcji i operujaca np. na zwyklych liczbach 64-bit.

to zaledwie procedurka - ja piszac o programie mialem na mysli cala
aplikacje.

>zwlaszcza jesli musisz takie petle wykonywac w petlach przez czas dluzszy.
>czesci obliczen nie da sie zrobic w inny sposob.

i to jest wlasnie te 5% kodu

>zreszta zastosowanie asm potrafi dac niesamowite rezultaty.
>wiem ze nie wszedzie jest potrzeba, ale "krytyczne" rzeczy
>(np. drivery do grafiki, kernel) powinny byc imho pisane
>wylacznie w asm.

ilu jest potrzebnych programistow piszacych drivery czy grzebiacych
w kernelu s.o.? 0.1% wszystkich programistow, ktorzy i tak satnowia
mniej niz 0.1% ludzi uzywajacych komputerow.

> po czwarte KTO CI POWIEDZIAL ZE W PASCALU NIE MA 'goto' ????

>nie ma :) jednym z zalozen bylo, ze nie wolno zastosowac ani jednego goto,
>a w wielu miejscach naprawde wiele czasu bym zaoszczedzil.

zob. wyzej na temat programowania strukturalnego a pascal

>a ja napisalem ze pisalem troche szerzej, co zreszta na koncu zaznaczylem.
>pisalem o nauce informatyki a wlasciwie to powinnismy mowiec nauce
>korzystania z komputerow, ktora z informatyka ma coraz mniej wspolnego.
>umiejetnosc programowania uczy logicznego myslenia i systematycznego
>podejscia do problemu.

nie sadze. z mojego doswiadczenia (zajmowalem sie rowniez odrobine
dydaktyka tej dziedziny) wiem, ze kto w szkole nie zrozumial zasady
indukcji matematycznej, ten nigdy prawdziwym programista nie zostanie.
to mniej wiecej tak jak ze sluchem muzycznym - kto go nie ma, zadna
szkola muzyczna mu nie pomoze.

>usystematyzowana wiedza teoretyczna? nie! to jest wlasnie praktyka!
>zreszta wiesz to chyba najlepiej z wlasnego doswiadczenia. dlatego nauka
>programowania na etapie o ktorym mowimy (a wlasciwie o jakim etapie
>mowimy?) jest imho marnowaniem czasu i zniechecaniem ludzi do komputera
>jako cholernie przydatnego narzedzia. czasu mamy nie za duzo, wiec moze
>szkoda go tak po prostu marnowac.

jak widzisz zgadzamy sie w tym wzgledzie calkowicie
ja rowniez nie widze potrzeby masowego nauczania nawet podstaw
programowania.

zreszta - programista to wymierajacy zawod.
za kilka lat maszynki beda tak potezne, ze przemysl informatycznych
klockow lego - programowanie obiektowego (bardziej smalltalk niz c++)
[nie w sensie konkretnego jezyka lecz w sensie idei], systemow
obiektowych (NextStep), obiektow sprzetowo/jezykowo niezaleznych
(SOM, Corba) upowszechnia sie naprawde i niewielu bedzie potrzebnych
prawdziwych programistow. Aplikacje bedzie sie skladac z gotowych
komponentow.

Grego

p.s. smutno zyc w takich czasach. Gdzie te epoki w ktorych zawod
  przekazywano nieraz przez dziesiatki generacji z ojca na syna.
  kiedy ja zaczynalem - na uczelniach dopiero powstawaly dzialy
  informatyki, a ludzie pracujacy jako programisci z wyksztalcenia
  byli matematykami, elektronikami itp. A dzis, mimo iz calkiem
  wlasciwie jeszcze mlody jestem - zawod programisty chyli sie
  ku upadkowi.

--
/-----------------------------------------------------------------
Gregorio Kus    Grego_at_RMnet.it                Grego_at_cyberspace.org
ROMA, Italy     http://www.RMnet.it/~grego    Grego_at_FreeNet.hut.fi
Anonymous Mail Service - http://free.rmnet.it/~grego/AnonMail.html


To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 15:51:17 MET DST