Kodėl PHP netinka mokymuisi programuoti

Straipsnis skirtas tiems, kurie galvoja apie „viliojantį programavimo pasaulį“ ir norėtų pradėti mokytis programuoti… pasitelkiant PHP.

Nežiūrint to, kad PHP šiuo metu yra bene populiariausia tinklapių programavimo kalba, ir to, kad šį straipsnį skaitote PHP ir MySQL programuotojų tinklarštyje, aš nerekomenduoju pradėti mokytis programuoti naudojant PHP. Tai yra ne tik mano nuomonė ir argumentų tam yra gana daug.

Taip, PHP yra lengva, lanksti, populiari…, bet nepamirškime, kad mokymosi programuoti procese yra labai svarbu turėti galimybę nuosekliai, žingsnelis po žingsnelio, aiškiai ir vienareikšmiškai susipažinti su programavimo technologija, suprasti, kas yra tipai, kintamieji, kaip veikia programa ir jos struktūros, kaip sukonstruoti uždavinių sprendimo algoritmus. Su PHP tą padaryti yra kur kas sunkiau neturint pakankamo žinių bagažo bei patirties lyginant su kitom, ypač mokymuisi specialiai skirtom, programavimo kalbom.

Norą pradėti mokytis programuoti panaudojant PHP aš prilyginčiau norui, gyvenant Lietuvoje, išmokti japonų kalbos dar nemokant dorai kalbėti lietuviškai, tarkim vaikui būnant 2-3 metų amžiaus. O kodėl – pabandysiu išdėstyti pora svarbių argumentų.

Taip par noriu atkreipti dėmesį, kad rašau apie žmones, kurie dar visai nemoka programuoti.

Sudėtinga infrastruktūra

Norint su PHP parašyti „Sveikas pasauli!“ tipo programą tuo stiliumi, kuriuo veikia tipinis tinklapis mums reikės: PHP interpretatoriaus, web serverio, naršyklės. Veikiančios programos demonstravimas, nusiunčiant ją draugui, jau yra sudėtingas. Praktiškai kiekviena PHP pradžiamokslio knyga prasideda nuo to, kaip į savo kompiuterį įsidiegti ir kaip suderinti PHP, Apache ir MySQL. Manau, kad iš pradžių žmonėms sunku pradėti nuo kliento-serverio architektūros. Ne be reikalo mokyklose senais laikais programuoti mokindavo dirbant su Turbo Pascal’iu, kur programavimo kalbos interpretatorius yra iš karto sujungtas su redaktoriumi bei derintuvu ir vieno mygtuko paspaudimu galima pamatyti programos rezultatus, dokumentaciją; sukompiliuota programa veiks kitame kompiuteryje be jokių papildomų pastangų, diegimo ar derinimo. Tuo tarpu pradedant dirbti su PHP atsiranda labai daug pašalinių veiklų, kurias turi atlikti ir perprasti „mokinys“. Dažnai pradedantieji ištisas valandas ir dienas leidžia prie darbinės aplinkos derinimo ir bandymo suprasti, kodėl naršklėje nemato savo programos rezultatų. Teisingumo dėlei reikia paminėti, kad yra gaminami ir platinami patogūs pradiniai programų paketai skirti lengvai įdiegti visas reikalingas darbui su PHP programas, bet vistiek yra susiduriama su eile blaškančių ir pradžiai tikrai nereikalingų dalykų mokymosi procese.

Teisingumo dėlei taip par reikia paminėti, kad minimalistiniui programos paleidimui užtenka vien tik PHP interpretatoriaus, bet ar daug knygų pradedantiesiems prasideda nuo „php -f hello_world.php“ paaiškinimo?

Negriežta sintaksė ir tipai

Kad ir kaip ten bebūtų, kintamųjų tipų suvokimas ir supratimas yra svarbus programavimo aspektas. PHP leidžia per daug liberaliai interpretuoti kintamųjų reikšmes, todėl rezultate turime aibę iš to sekančių problemų, kai yra nesuvokiama, kuo skiriasi 0, „0“ ir 0x0.
Problema čia ta, kad PHP kalboje:

  • Nėra griežto reikalavimo deklaruoti kintamuosius;
  • Nėra griežto reikalavimo konvertuoti kintamųjų tipus;
  • Nėra vieningos standartinės bibliotekos funkcijų pavadinimų sistemos;

Alternatyvios kalbose, minėtame Pascal’yje, C/C++, Java ar k.t. reikalavimas deklaruoti moko disciplinos, neblaško ir leidžia kiekvienoje programos vietoje tiksliai žinoti kokio tipo yra kintamasis.

Nevieninga standartinių funkcijų vardinimo sistema taip pat papildomai painioja pradedančiuosius ir rodo blogą pavyzdį. Beveik visi vieningai sutinka, kad derėtų naudoti viena funkcijų ir kintamųjų vardinimo metodika, kai tuo tarpu PHP viduje to nesilaikoma, pvz.: htmlentities() ir html_entity_decode().

Sudėtingas duomenų saugojimas

Nepaslatis, kad didžioji dalis tinklapių duomenis saugo MySQL duomenų bazėse. Nepaslaptis ir tai, kad pradedantysis programuotojas internete labai greitai gaus pasiūlyma „pamiršti tekstinius failus“ ir „pradėti naudoti MySQL“. Rezulatatas – papildomi klausimai, neaiškumai, keista ir nauja SQL sintaksė, MySQL serverio diegimas ir derinimas, nauji ir neaiškūs klaidų pranešimai.

PHP neturi tipizuotų failų. Taip, kintamuosius (kad ir kokie jie bebūtų) galima paversti į eilutės tipo objektus ir tada juos nesunkiai saugoti failuose. Tačiau čia vėl pradedančiajam yra nevienareiškmiai suvokiamas dalykas, greitai susiduriamama su tokio funkcionalumo ribojimais. Pvz.: duomenys paprastai nuskaitomi vienos operacijos pagalba – nėra galimybės slankioti failo rodyklės ir duomenis nuskaityti/rašyti pasirinktinai. Visi bandymai imituoti tipizuotų failų veiklą veda prie per daug sudėtingos ir nepatikimos sistemos.

Koks tinkamiausias redaktorius?

PHP kalbai redaktorių ar integruotų redagavimo sistemų (IDE) yra nemažai ir gerų, tačiau nepaslaptis, kad dauguma savo pirmąjį PHP scenarijų parašė su Notepad’u. Ko pasekoje labai greitai susidūrė su netikėtai atsiradusiomis „šiukšlėmis“ (ar „jeroglifais“) naršyklės lange. Sekantis pradedančiojo programuotojų žingsnis tampa ilga ir varginanti „geriausios redagavimo aplinkos“ paieška. Problema tame, kad šiuo metu dar nėra tokio integruoto ir pilno paketo, kurį pradedančiajam būtų galima lengvai parsisiųsti, įsidiegti ir naudoti. Egzsituoja bandymai tokius sukurti, bet nėra daugumos pripažinto ir palaikomo standarto. O jeigu yra, gal kas nors komentaruose galėtų pasidalinti?

Apibendrinimas

Reikia atskirti du dalykus: „mokėjimą programuoti“ ir „mokėjimą programuoti su PHP“. Aš asmeniškai smerkiu bandymus mokytis programuoti su PHP dar nemokant programuoti aplamai. Ir labai rekomenduoju pradėti nuo: Free Pascal. Manau, kad ilguoju periodu tai būtų naudinga tiek pačiam programuotojui tiek PHP bendruomenėms taupant visų taip brangiai vertinamą laiką.

Nepaklausę draugiško patarimo tikriausiai turės ieškoti informacijos apie: PHP, MySQL(ar alternatyvas), SQL, Apache, Firebug, HTML, Javascript, Jquery(ar alternatyvas), CSS ir t.t.

Taip pat noriu priminti, kad straipsnyje yra išsakyta mano asmeninė nuomonė. Egzistuoja ir daugiau argumentų už ir prieš minėtą temą.

Sėkmės renkantis programavimo kalbas!

Temos ateičiai:

  • Darbinė PHP programavimo aplinka: LAMP/WAMP, redaktoriai, derintuvai, IDE;
  • Klaidų valdymas ir apdorojimas PHP aplinkoje;
Žymos:

15 komentarų

  1. qutwala

    Visu 100% pritariu Mindaugui.
    Viskas turi turėti tam tikrą dėsningumą, kaip pirma išmokstama ropoti, o tik vėliau vaikščioti, bėgioti.
    Asmeniškai pats pradėjau nuo PHP savo klajones po kodą, o tik vėliau perėjau prie pascal’io, kai mokykloje pradėjo mokyti pascal’io. Nors daug kas pascal’į laiko ne rimta programavimo kalba ir nori šokti per du laiptelius aukštyn, – griebiasi kitų kalbų, ko pasekoje ir painiojami tipai, nesilaikoma dėsningumo, tačiau nereiktų pamiršti, kad ir tokios programavimo kalbos kaip „delphi“ paremtos būtent pascal’iu tik + daugiau bibliotekų.
    Pradėjus nuo PHP pereinant Pascalio klaidingai aprašomi ir šiame tipai, nes PHP kalboje INT tipus su STRING tipais, kad ir if($kint== ‘0’){} , if($kint == 0) {} if($kint === 0) {} ir t.t. Nors asmeniškai PHP esu įgudęs jau šiek tiek, tačiau su paskaliu nei pusės tiek nepadaryčiau kiek gebu su PHP ir ne dėl to, kad PHP programuoju web’us, o dėl to, kad maišytų ydos kurias įgavau pradėdamas nuo PHP.

  2. Neodan

    Geras straipsniukas, kai pagalvoji tai dauguma programuotoju anksciau pradedavo mokintis nuo BASIC, TP kalbu, po to sekdavo C/C++, Java ir tik tada galiausiai kiekvienas pasirinkdavo ta kalba kuri labiausiai tenkina jo poreikius ir kuri jam labiausiai patinka. O dabar vaikai galvoja kad programuoti ismokti tas pats kas saldaini issilupti, o visi juk sako, kad paprasciausia kalba PHP, tai ir davai visi ja „mokintis“. Paskui pilni forumai kvailu klausimu buna. :)

  3. xeranas

    Sutinku, kad PHP ne ta programavimo kalba nuo kurios reiktų pradėti, kita vertus Pascal yra viena iš nemėgstamiausių ir „ugliškiausių“ programavimo kalbų man.. nuo mokyklos laikų tas bjaurus dosinis editorius stovį akyse fuuuu.
    Mano manymu Python yra bene geriausia žaisliukas pradėti mokytis programuoti. Elegantiška ir neperkrauta sintaksė, turi jaunuosius programuotojus dominančias bibliotekas (pvz: pygame), kurias ne taip sunku įsisavinti. Bet žinoma kalba viena iš tolerantiškesnių, tad galima ir prie jos prikibti.

    • Neodan

      taip TP yra atgyvenes (as jo ir nemegstu, bet su ja teko padaryti pirmas programas pagal uzsakyma :) ), Python yra geris, taciau pas ji irgi yra dinaminiai kintamieji. Siaip jaunuju PHP „programuotoju“ didziausia beda, esminiu programavimo pagrindu nemokejimas (neturejimas suvokimo apie kintamuju tipus, veikimo logikos, nes daznai maiso client-side su server-side).
      o matai kokios kalbos kaip TP, C/C++, Java neleidzia jokiu nesamoniu ir reikalauja viska aprasyti grieztai pagal taisykles, todel jos pradzei yra geriausios. Su jom pradzia buna sunki, taciau kai igauni suvokima apie programavima ir esminius pagrindus, visos programavimo kalbos nebeatrodo taip mistiskai nes esminiai pagrindai pas visas vienodi.

  4. Na Pascal gal ir ne geriausia kalba pasaulyje, tačiau pirmiems žingsniams tinka beveik ideliai. Kaip alternatyva manau galėtų būti tik c++.

  5. Darius

    Pvz.: duomenys paprastai nuskaitomi vienos operacijos pagalba – nėra galimybės slankioti failo rodyklės ir duomenis nuskaityti/rašyti pasirinktinai.

    rašyt nebandžiau, bet php puikiai skaito binarinius failus :)
    ir rodyklę slankiot galima :)

    http://php.net/manual/en/function.fseek.php

    • Dariau: gal gali pademonstruoti, kaip su PHP atrodo masyvų arba objektų surašymas ir nuskaitymas iš binarinių(tipizuotų) failų? (-;

      • Darius

        aš neminėjau masyvų ir objektų 😀
        norėjau pasakyt, kad turi seeką ir gali dirbti su binariniais failais (aišku built in funkcijų nėra).
        pvz. ip2location.com duoda 300 ar 500MB failą iš kurio pagal IP galima pasiimti šalį, regioną, miestą ir t.t. ir tikrai nereikai daryt file_get_contents() :)

        • Tas tai taip, bet tu komentavai mano tekstą, kur kalba ėjo apie visų tipų kitamuosius. Tai kad galima dirbti su paprastais tipais yra žinoma. Bet kiek ilgai užtenka elementarių tipų? (-; Su PHP standartinėm priemonėm neįrašysi jokios dinaminės struktūros.

          Šitas dalykas yra pasekmė to, kad neįmanoma pasakyti, kiek užima jokia sudetingesnė struktūra, nes nėra griežto kintamųjų tipizavimo. Užtai PHP ir nežino kiek realiai vietos užima klasė, nes neaišku kiek vietos reikia „var $i = 0;“ kintamajam saugot (-;

          • Darius

            Pilnai su Tavim sutinku!
            dar galiu pridėti, kad užknisa ne tik funkcijų vardinimo sistema, bet ir parametrų eliškumo pvz. in_array() ir strpos() abi jos iš esmės daro ta patį ieško :), tik viena masyve, o kita stringe. Bet pirmoj f-joj pirmas parametras ko ieškai antras kur ieškai, o antroj f-joj atvirščiai :)

            be to aš komentavau Tavo frazę „duomenys paprastai nuskaitomi vienos operacijos pagalba – nėra galimybės slankioti failo rodyklės ir duomenis nuskaityti/rašyti pasirinktinai.“ ir kaip pavyzdį daviau binarinį failą norėdamas pasakyti, kad nereikia visada daryti file_get_contens().
            čia kaip ir su xml ten paprastas textas, bet turėdamas 5GB xml failą nedarai gi simplexml_load_file()

  6. D.

    Mokytis programuoti, priklauso ką tu nori programuoti. Mokytis Pascal’į, vien dėl to, kad poto galėtum kažką kodinti nesutikčiau. Žinoma galima, galima ir pasižiūrėti kaip ir kas, ta prasme nesimokyti Pascal’io A-Z nuo tipų iki įrašymo į txt failus ir t.t. Esmė tame, kad pradėjus nuo Pascal’io, tas programavimas gali visiškai nekabinti… Jei žmogus nebandęs PHP, Java ir kt. pagalvos, kad va čia unreal sunku ir t.t. neįdomu ir pan (ribotos galimybės ir kt.). Aš pats pradėjau nuo Pascal’io, tačiau tik pagrindus. Poto atradau PHP ir pradėjau programinti vien PHP. Kas dėl sudėtingumo ‘infrastruktūros’, tai beabejo įsirašyti Apache, PHP, MySQL, konfiguruoti gali nesigauti. Tačiau juk yra visokie XAMPP, WAMP ir kt. nemanau, kad čia yra sudėtinga įdiegti ir atsidaryti control panel įsijungti PHP ir kodinti. Dėl sintaksės, tai reikia pradėti mokytis nuo pagrindų. Sintaksės, tipų, sąlygos sakinių, f-jų, ciklų… Dėl duomenų saugojimo, tai juk nebūtina iškarto programuoti, kad saugotum duomenis… Paprasčiausia, tai yra nusiperki knygą ir mokaisi, ten būna juk nuo pačio serverio paleidimo… Tai vat. :)

    • > Mokytis programuoti, priklauso ką tu nori programuoti.

      Mokytis programuoti aplamai – mokėti kurti algoritmus. Ir nesvarbu kokia kalba ar technologija. Jeigu mokėsi programuoti – pasiimsi kalbą ar technologiją ir joje realizuosi savo uždavinio sprendimą. Mokytis programuoti galima ant popieriaus lapo.

      Mintis parašyta ta, kad „pradėti mokytis nuo nulio su PHP“ yra mažiau efektyvu ir naudinga, nes yra per daug „pašalinio triukšmo“.

  7. D.

    „Mintis parašyta ta, kad “pradėti mokytis nuonulio su PHP” yra mažiau efektyvu ir naudinga, nes yra per daug “pašalinio triukšmo”.“ – Taip su šituo sutinku. 😉

  8. Manau priklauso ir nuo žmogaus poreikių – ar jis nori tik tinklapius kurti, ar ir dar kažką.

    Pats faktiškai pradėjau su Paskaliu (mokykloje). Bet, turiu pasakyti, ilgą laiką nejaučiau jokio ryšio tarp to, ką dariau su Paskaliu (visokių matematinių veiksmų sprendimu, raidžių rikiavimo) ir visos tos programinės įrangos, su kuria realiai susidurdavau gyvenime. Tik paskui atėjo tas suvokimas, kad viską galima realizuoti per tuos kintamuosius, kai žaidžiau kokių 1988 m. žaidimą ir supratau, kad žinau, kaip visa tai gali būti realizuota.

    PHP gerai tas, kad iš karto matosi realus rezultatas, besimokantysis gali sukurti tinklapį kuris galbūt kažkam bus naudingas (o ne tik programą kuri atlieka tą patį, ką gali kalkuliatorius arba kas išvis nereikalinga).

  9. Atgalinis pranešimas: Nuo PHP prie C++, pirmoji programa | Blog.MySQL.Lt

Parašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *

Galite naudoti šias HTML žymas ir atributus: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>