…meie igapäevast IT’d anna meile igapäev…

2008-01-13

Miks Java, PHP või C#/.NET pole head keeled programmeerimise õppimiseks?

Filed under: Programmeerimine,Rant — Sander @ 16:01:49

Java-Evil-Edition

Tänapäeval alustavad enamikud programmeerijad kas oma kodulehte PHP’s kribades või siis koolikursusel Java õppimisega. Microsoft näeks muidugi veel suurima heameelega, et noored alustaksid C#/VB.NET’iga, kuid seda Eestis minuteada kusagil (üli-)koolis veel esimese programmeerimiskeelena ei õpetata.

Miks mul sellega probleeme on? On ju Java, C# ja PHP Eestis kõige levinumad keeled programmeerimiseks, töökuulutusi ja firmade kodulehti vaadates on need kõige nõutumad.

Aga probleemiks on… kasutajasõbralikkus. Nimelt nende keelte oma. Nii Sun kui ka Microsoft poevad lausa nahast välja, et nende produktid oleksid mugavad, lihtsad ja kiired programmeerida. PHP on juba disainilt selline, Zend on küll uutes versioonides järjest rohkem keerukust lisanud, kuid PHP on siiski algtasemel väga kergelt omandatav.

Ning uued programmeerijad ei mõista enam näiteks mäluhaldust. Garbage collector valitseb nende eest mälu. Ja kui mingi operatsioon võtab rohkem mälu, siis pole probleemi – tuleb lihtsalt kliendil kästa mälu serverisse juurde osta. Ise on jobud, miks neil siis selline vanaraud on!

Mälukasutus ja programmi kiirus on muutunud järjest väheolulisemaks. Noorprogrammeerija ei näe mingit probleemi selles, et ta virutab mälus olevasse massiivi 80MB datat. See pole ju mitte midagi, tavalisel kontoriarvutilgi on vähemalt giga mälu.

Aga kui see tehakse ASP.NET lehel, igas sessioonis eraldi? Kas siis ka probleemi pole? Arendaja enda masinas testis ta ise läbi arenduse käigus, IIS oli nii kiire/aeglane nagu IIS ikka on, aspnet_wp.exe võttis mingit mälu, aga kas seda tasub üldse vaadata? Testija ei taibanud sellisele asjale üldse tähelepanu pöörata, kõik töötas nagu vaja.

Ja siis läks kood livesse või kliendi testmasinasse, arendaja jaoks teadmatusse-tunnetamatusse serverisse. Ja üks inimene kasutas rakendust testimise ajal, vahepeal ka kaks, isegi kolm. Kõik töötas, mingeid probleeme polnud.

Ning ühel päeval tehakse leht avalikuks, lubatakse väljastpoolt sisse pääseda – ja tulebki mitukümmend inimest lehte kasutama. Ja siis veel mõned. Ja veel. Ja… äkki saadakse serverilt teade OUT OF MEMORY. Süsadmin vaatab – ja rakendus võtab gigades mälu…

PHP puhul lisanduvad veel tüüpimata muutujad. Tundub, et progejad, kes on alustanud ja harjunud nõrgalt tüübitud või tüüpimata muutujatega, ei saa pärast – muus keeles programmeerides – kaua aru miks tugevalt tüübitud muutujad on head ning kuidas tugevalt tüübitud muutujate kasutamine mõjutab mälukasutust ja programmi kiirust.

Samuti on eelpoolmainitud keeled võtnud praktiliselt ligipääsu riistvarale. Mitte et ma seda tagasi tahaksin, oh ei – ühe korra C’s hiire draiveri kirjutamine oli täiesti piisav kogemus minu jaoks. Aga mul on vähemalt see kogemus olemas. Ma tean, kuidas liigutatakse protsessori registrites infot (ei, ma ei taha ka assembleri-aegu tagasi), ma tean mis on kernel mode. Kas need teadmised annavad mulle kui programmeerijale midagi juurde? Jah, päris kindlasti.

Ma ei soovita kindlasti hakata kogu äritarkvara kirjutama C’s. Kuigi see võiks tore olla, siis keegi ei ole nõus kolm rohkem aega kulutama ja riskima kordades rohkemate vigadega. Ei, kindlasti mitte.

Aga mida ma soovitaks on see, et algajad arendajad tutvuksid keeltega, kus sa pead ise mälu haldama. Võiks kirjutada mõned pisikesed või mitte nii pisikesed programmid keeltes nagu assembler, C, C++ ja Delphi/Pascal. Vabastada ise loodud objekte, saata COM-porti käske, uurida hiire käest, mis nuppu vajutati. Ja tekib teadmine sellest, kuidas riistvara ja programm suhtlevad, kuidas mälu efektiivsemalt kasutada, miks ei ole hea deklareerida pidevalt uusi muutujaid…

Minust oluliselt autoriteetsemalt ja põhjalikumalt on seda teemat käsitlenud kaks Chicago ülikooli emeriitprofessorit, Computer Science Education: Where Are the Software Engineers of Tomorrow? Kes ei viitsi pikemat teaduslikku teksti lugeda, siis vaadake Inquireri lühikokkuvõtet, Boffins deride Java.

12 kommentaari »

  1. Noh, vanasti oli BASIC root of all evils nyyd on Java. Moronid j22vad morniteks, ratardid j22vad retardideks. Java pole siinkohas syydlane rohkem kui vaid nii palju, et moronid ja retardid v6ivad selle abil nyri 2ritarkvara genereerida. Yldine seisukoht on selline, et esialgu s6eluTakse v2lja need, kes OOP kontseptist aru ei saa ja siis s6lutakse yelj22nutest v2lja need, kes funktsionaalse programeerimise kontseptist aru ei saa. J2rele j22vad Programeerijad suure algust2hega, aga need on v2hesed. Vajadus tarkvara j2rele on KORDADES suurem kui nende inimeste protsent, kes v6iks areneda Programeerijateks v6i koguni T6elisteks Programeerijateks. Selle t6ttu ongi loodud Java-sarnased keeled mille abil nyride programmistide-kodeeriajte neegrihordid loovad gigantseid nyrisid krigisevad 2rirakendusi. Mis parata, elu on selline. Kunagi vedasid orjade hordid piitsade plaksumise saatel kiviplokke toore lihasj6uga pyramiidideks. Nyyd veavad koodiorjade hordid massiivseid ja kohmakaid protseduure gigantseteks 2rirakendusteks.

    A.

    P.S. Mina ei ole arendaja vaid admin ja haldan igap2evaselt p2ris mitut sellist java-s6nnikut.

    kommentaar kirjutas Offf — 2008-01-13 @ 20:50:45 | Vasta

  2. Minu arust on kehva programmeerimise põhjuseks mäluhalduse kogemuse puudumise pidamine natuke vale.

    Olgugi, et suured ja targad võivad seda toetada, ja ka Ülikooli juures tuuakse seda tihti välja (php on progejad ära solkinud) ja arvatavasti sellel on oma osa selles kõiges olemas, ei saa seda kindlasti pidada kõigi probleemide juureks.

    Või võtame http://thedailywtf.com/Default.aspx – vaata neid probleeme – paljudel juhtumitel pole vähimatki seost mäluhaldusega. lihtsalt mõtlematus, kogenematus, mittesüvenemine jne..

    Pigem on mure põhjus seal, et arvutid on muutunud massinähtuseks ning seetõttu on ka kasutajate üldpilt kirjum – ühelt poolt on muutunud olematuks riskikäitumine ning teiselt poolt arvavad paljud, et on sündinud programmeerijad. Varem oli nende üheks “eksamiks” C mäluhaldus, lõigates ära nende edasise tee seda mõistmata, ning nõnda jäid programmeerijate hulka alles mõtlevad ning asjadest arusaavad inimesed. See muidugi ei tähenda automaatselt, et C mäluhaldust mõistev inimene mõistis ka programmeerida – jõudluse ning algoritmi realiseerimise juures läks paljut muudki vaja kui lihtsalt mälu puhastamist.

    Mälukasutuse probleemini jõuab ka teistpidi. Kas see on üldse põhjus? Pigem on see ju tagajärg. Inimene ei viitsi debugida, analüüsida, profileerida. Vanasti tuli see lihtsalt ära teha, kuna masinad olid nõrgad, aga nüüd jõuavad nad programmeerija lolluse kinni taguda. Küsimused peaks peas käima: miks nii, kas saab teisiti, kas saab paremini? Aga need küsimused ei tule “mälu halduse oskusega”. Ja selle järgi pole ka mina hea programmeerija.

    Aga see lugu “näe, läks live ja ei tööta, aga eile testisin oma masinas ja kõik oli ok” on nii neetult tuttav. Väga väga valus teema. Igaljuhul peaks programmeerija olema keegi kes armastaks oma ala, uuriks ja puuriks, ning hangiks kogemust mitte ainult kliendi veebi arendades. Sest paljusid asju hakatakse mõistma alles peale pikaajalist kogemust, hoolimata et “raamatutes ju kirjutatakse sellest”.

    kommentaar kirjutas urmas — 2008-01-13 @ 22:11:02 | Vasta

  3. Mäluhaldus on vaid üks osa – tegelik probleem on süüdimatus mälukasutuse suhtes. “Kasutab 300 MB mälu? No ja mis siis?” Ja isegi see on vaid osa suurest pildist, nagu sa ütlesid – masinad ei ole enam nõrgad, nad taovad programmeerija lolluse kinni. Ei mõelda automaatselt optimeerimise peale – küll kuidagi jookseb läbi. Samas, muidugi pole ka kunagi aega optimeerida või korralikult kirjutada, isegi teinud “kiire-kiire-homme-läheb-livesse” käkke.

    Eestis on osaliselt veel lisaks ka teatud… lapseaeg tarkvaraarenduses, imho. Ei saada aru korralike tööprotsesside (sh. dokumenteerimise, code review, koodikommentaarid) vajadusest, põhjalikust testimisest, miks agiilse arenduse (ptüi!) korral peab arvestama rohkemate vigadega, mida on samuti raskem leida ja parandada, jne. Loodetavasti see muutub…

    @Offf – FORTRANit saab kirjutada igas keeles (googelda, kui ei tea mida see fraas tähendab). Ise ei süüdistakski Javat nii väga, pigem PHP’d – ja halba õpet ülikoolis. Või õigemini, inimest ei saa ju sundida õppima – kes tahab, see õpib ise juurde – aga 90% üritavad võimalikult lihtsalt diplomi saada ja suurt pappi teenima hakata.

    kommentaar kirjutas dukelupus — 2008-01-14 @ 08:19:21 | Vasta

  4. “süüdimatus” on küll nagu rusikas silmaauku kirjeldamaks probleemi:) aga mitte ainult mälukasutuse suhtes. Pole mingi probleem neil kirjutada suurde tsüklisse väikseid tsükleid mis igaüks teeb veel mingi päringu baasi. Jah, teinekord muudmoodi lihtsalt ei saa, aga enamasti on siiski tegu lauslollusega. ja siis tulebki see imestus kus live poolaasta andmetega lehed enam avaneda ei taha..

    ja see “kiire-kiire-homme-läheb-livesse” võib isegi suurem probleem olla kui esmapilgul tundub. See võtab suures osas võimaluse optimiseerida, uurida, analüüsida, _mõelda_, leida alternatiivseid lahendusi. Vanasti ju progeti kodus, põlveotsas, aga seal oli aega ja rahu, keegi ei peksnud pidevalt jalaga, et homme on tähtaeg su imelisel pascali kontaktide andmebaasil. Nüüd aga kõlbab “töötab ju küll” vägagi hästi…

    kommentaar kirjutas urmas — 2008-01-14 @ 08:42:03 | Vasta

  5. Jah, ma tean, mis t2hendab fraas: “T6elised Programeerijad suudavad kirjutada FORTRANit igas keeles”. So. Ma r6hun sellele, et meil on liiga palju inimesi, kes oma vaimsete v6imete, isiksuseomaduste ja olemuse t6ttu sobiks pigem sitalaaduriks kui arendajaks. Paraku, kuna “kuidagiviisi ikka saab” ja VAJADUS koodi j2rele on niiv6rd suur, siis toodavad k6ik need neegrid meile p2evast p2eva Halba Koodi[tm]. Java ja muud sellised vahendid on lihtsalt suurfirmade VASTUS n6udlusele “odava koodineegri” j2rele. Minu arust on siin veel yks nyanss – Keskastme Juhile (PHB) lausa meeldib neeger. Neeger on odav. Neeger on asendatav. Neeger ei vaidlusta iial PHB otsuseid. V6tame arendusvahendi millega saab iga loll kuidagiviisi hakkama, lisame ebakompetentse juhtimise ja saamegi suurep2rase jaava-arenduse keskkonna. Esitame endale nyyd kysimuse – KAS MINUL KUI TELLIJAL ON VALIKUT? Vastus – ei ole. Mul on valida a) koodineegrite jaavak2kk b) yldse mitte mingisugust tarkvara c) komptentsete kodanike loodud tarkvara, ajuvigase hinna eest, viie aasta p2rast kui t88de j2rjekord minuni j6uab. Ei Zaporozhets, Moskvitsh ega Zhiguli ei olnud head autod. Ometi osteti neid MASSILISELT. Defitsiit! Isand dukelupuse analyys p2deks, kui tegu oleks vabaturumajadusega. Paraku, rakenduse tellimise koha pealt on tegu DEFITSIIDIMAJANDUSEGA nagu NLiidu ajal. Sellest ka probleemid kvaliteediga.

    kommentaar kirjutas Offf — 2008-01-14 @ 17:43:33 | Vasta

  6. Ei kommenteeri ise, aga Joelil on ka sarnasel teemal artikkel:
    http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

    kommentaar kirjutas liriel — 2008-01-15 @ 16:38:56 | Vasta

  7. Mäletan kui sai õpitud algprogemist Turbo Pascalis. Küll ikka õpetaja pahandas, kui ma olin inimese nime hoidva sõnemuutuja pikkuseks valinud 200 märki, olevat suur raiskamine. Pärast oli klassis pikk arutelu, kui palju märke peaks ikkagi nime jaoks reserveerima – vot see oli põhjalik lähenemine. Modernsed keeled on automaatse mäluhaldusega ja stringide pikkust ei pea ka enam ette ära valima. Kuna enam pole tarvis madala taseme jamaga tegeleda, siis noorprogeja ei õpigi rakenduse mäluvajaduse peale mõtlema. Seda ei õpi ülikoolis ka mitte, sest olen isegi osalenud kursusel, kus lektor soovitas andmebaasis valida väljade pikkuse maksimaalse võimaliku, põhjendades seda sellega, et nagunii andmebaas oskab kasutada täpselt niipalju nagu vaja. Php progejate hulgas olen näinud küll, et rakenduse efektiivsuse peale mõeldakse (echo vs. print kiiruse arutelu, sihipäraselt lühemate muutujanimede kasutamine, et parser kiiremini käiks, rakenduse päevade viisi monitoorimine ja pidev andmebaasi optimeerimine isegi otse live keskkonnas), seda enam et paljud php rakendused istuvad kuskil hostingupakkuja masinas, kus võib olla sadu teisi php rakendusi, mis kõik ühe riistvara peal käivad. Küll aga ei oska efektiivsuse peale mõelda java progejad, kes javat esimese keelena kuskil ülikooli kursusel õppisid (neid inimesi on päris palju ja paljud neist on ka tööjõuturule jõudnud), nende jaoks on tähtsam, et saaks kursusel mingigi positiivse hinde ja see on kõik. Sama asi on ‘vanade’ progejatega, kes on toiduahelas ülespoole liikunud, enam otse koodi kirjutamisega seotud pole, ja kes usuvad, et java kasutamine lahendab kõik tehnilised probleemid, st. rakenuse koodi kirjutamiseks piisab neegrikarjast. (algprogemist õppisin nrg-s, lõpetatud on tü inf, hetkel olen (veel) java progeja)

    kommentaar kirjutas JC — 2008-01-28 @ 18:21:55 | Vasta

  8. See tekst pani mind mõtlema!

    kommentaar kirjutas AL — 2008-03-01 @ 17:56:05 | Vasta

  9. Sa näed ja sa ei mürista või kuidas see lause oli:) PHP on tegelikult väga hea keel mäluhalduse õppimiseks erinevalt javast ja .njet-ist. Pole erinevaid layereid ning lausa süsteemne funktsioon tagastamaks hetke mälukasutust. Olen ise täielikult pettunud .jamade ja .njetide maailmas. No ei saa niimoodi asja. Tõesti, koodi kirjutajate hulgas ei ole enam enamuses need, kes tegelikult seal olema peaksid.

    Aga minu 2 lihtsat soovitust:
    * Kujundusele 15″ crt molud.
    * Testbed virtual PC-sse ning 5%(muuda vastavalt ennustatud kasutajate arvuga) protsessori aega.

    Saab nii mõnegi kala kätte enne laivi. Reaalsus on see, et ilma koodineegriteta me it-riiki ei ehita, seega ei tasu halada et nad ei oska, ei taha, ei mõtle. Tuleb lihtsalt parendada QA ja code review valdkonda.

    kommentaar kirjutas Fog — 2008-03-03 @ 23:04:40 | Vasta

  10. Fog:

    Lause on: “Issand, sa näed ja sa ei mürista”.

    Aga kui tihti sa vaatad PHP peal mälukasutust, aru saades *mis* parajasti mälu kasutab. .NET’i peal vaata System.Diagnostics ja System.Reflection namespace peale – lisaks on .NET’i jaoks olemas superhead profilerid. Oletan, et PHP jaoks on ka sellised asjad olemas.

    Ise arvan, et PHP on algaja jaoks halvim võimalus. Võibolla jah, esmatutvus programmeerimisega – aga midagi muud kohe otsa oleks parem.

    kommentaar kirjutas dukelupus — 2008-03-06 @ 10:51:22 | Vasta

  11. Mõnusalt karmid postitused – saatsin kohe mitmele oma endisele ja saadan ka tulevastele programeeriatele kes kilkavad oma oskustega selle lingi mille kohustuslikus korras peavad läbi lugema ja siis tagasisidet andma mis arvavad sellest ning kuhu nad selle sitaladuri ja Programeeria vahepealses skaalas mahuvad :)

    kommentaar kirjutas Waffa — 2010-11-12 @ 12:26:42 | Vasta

  12. Päris hea tekst :)

    kommentaar kirjutas reaperbro — 2014-06-24 @ 22:04:42 | Vasta


RSS feed for comments on this post. TrackBack URI

Lisa kommentaar

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Muuda )

Twitter picture

You are commenting using your Twitter account. Log Out / Muuda )

Facebook photo

You are commenting using your Facebook account. Log Out / Muuda )

Google+ photo

You are commenting using your Google+ account. Log Out / Muuda )

Connecting to %s

Blog at WordPress.com.