PHP niekam tikusi programavimo kalba ar kas iš tiesų darosi?

Labai dažnai įvairiose programuotojų grupėse ar tiesiog internete vis tenka išgirsti/pamatyti pasisakymų nuspalvintų labai neigiamom spalvom. Niekam tikusi, lėta, nesaugi, iš principo neteisingo dizaino, leidžianti padaryti daug klaidų ir t.t. ir pan. Tokius dalykus apie ją šneka.

Asmeniškai aš su daug kuo nesutinku, o ir statistika byloja kad nepaisant visų į ją laidomų akmenų, ji net labai naudojama, ir tikriausiai ne veltui – negali juk visi pasaulyje staiga išsikraustyti iš proto? Nedariau detalaus tyrimo, bet spėju kad greičiausiai beveik visi shared hosting tipo serveriai turi PHP instaliuotą pagal nutylėjimą, kai kurie net kelias jos versijas (nors dabar rekomenduojama naujiems projektams imti nuo PHP v7, o senus kiek įmanoma greičiau migruoti į naują versiją). Su PHP yra parašyta krūva programinės įrangos, kuria žmonės naudojasi kasdien (esu net matęs tinklo routerių ir tinklinių kietųjų diskų, kurių administracinės dalys buvo parašytos su PHP). Pati kalba yra tiek lengvai perprantama, kad naujokas vos kelias dienas paskaitęs žinyną jau gali sėsti ir programuoti kažką apčiuopiamo, veikiančio ir net naudingo. Kaip tik šis kalbos aspektas yra ir didelė josios dovana, ir didelė bausmė 🙂

Dirbu su PHP jau virš 10 metų. Mačiau kaip ji keitėsi, kaip keitėsi mūsų su ja rašomi projektai bei tų projektų kodo kokybė ir, manau, turiu atsakymą kodėl kai kurie žmonės jos taip nemėgsta.

PHP yra dinaminė kalba, leidžianti parašyti kaip tik sugalvosite, nesilaikant jokių gerųjų praktikų, saugumo standartų, o kartais net ir elementarios logikos principų. Kitaip tariant, nežinantis ką daro žmogus gali tikrai pridaryti keistų dalykų. Kai šviežiai iškeptas programuotojas dar tik pradeda mokytis ir neturėdamas gero mokytojo pats savarankiškai ieško internete atsakymų, didelė surastų pavyzdžių dalis tikrai bus prastos kokybės. Mačiau žmonių, kurie pernelyg nesukdami sau galvos kopijuoja minėtus kodo fragmentus į savo projektus ir skuba toliau ieškoti kitų abejotinų sprendimų.

Naudojant šią kalbą, rašyti galima labai greitai, pernelyg nepersitempiant prigeneruoti daug turinio (kurio palaikymas ateityje gali pasirodyti esąs itin brangus), o tada pakeisti savo darbovietę ir toliau daryti tą patį kitur, o po kelių mėnesių dar kitur (juk šiais laikais pakeisti darbą pasidarė labai paprasta), to pasekoje metų metus negaunant tinkamo grįžtamojo ryšio. Arba galima panašų reikalą daryti dirbant ilgesnį laiką komandoje su tokio pačio žinių lygio žmonėmis, kur tai laikoma netgi gera praktika, tokiu būdu suformuodami vieni kitiems komforto būseną ir paslėpdami rimtą problemą – anksčiau ar vėliau už tai kažkam teks susimokėti savo brangiu laiku, pinigais, nervais, reputacija. Aš labai viliuosi kad „protingų“ automobilių programinę įrangą gamina aukštesnės kvalifikacijos specialistai 😀

Žinau jau garbaus amžiaus žmonių, kurie vis dar daro tas pačias klaidas, bet taipogi pažįstu ir jaunų žmonių, kurie jau dabar laikosi daugumos rekomenduotinų disciplinų ir stengiasi dirbti pagal geriausias praktikas. Pats buvau dalimi ir vienos, ir kitos grupės.

Kodėl aš nepuolu kaltinti pačios kalbos? Nes yra įrankių įrodančių, kad su PHP galima rašyti kokybišką ir efektyvų kodą. Įrankių, kurių pagrindu yra kuriami verslai, įrankių, už kurių stovi ištisos bendruomenės žmonių ir juos pastoviai tobulina, pritempinėja prie šiuolaikinių poreikių, standartų, taiso saugumo spragas, daro juos patogesnius naudoti. Ir visa tai vyksta lengvai bei sklandžiai, nes tobulinti tvarkingai parašytą kodą yra malonumas. Tokia programinė įranga turi ateitį.

Dalis vyresnės kartos programuotojų pradėjo savo karjeras dar tais laikais, kai nelabai buvo iš kur gauti kokybiškos informacijos, kai reikėjo patiems pasirašyti turinio valdymo sistemas nuo nulio, nes jų tiesiog dar nebuvo, arba niekas iš aplinkinių dar nebuvo girdėjęs apie opensource. Laikais, kai nebuvo stack overflow ir panašiai gerų forumų, N-tąjį kartą išradinėjant algoritmus kurie jau seniausiai buvo kažkieno išrasti ir ištobulinti ir t.t. Tie žmonės pasuko kitu keliu, iki šios dienos klaidžioja ieškodami, išradinėdami, kurdami savo pačių standartus, darydami visas tas klaidas ir rimtais veidais perduodami jas savo kolegoms kaip know-how.

Jaunesnės kartos programuotojai (arba ir tie, kuriems pasisekė laiku užčiuopti teisingo siūlo galą) užaugo mokydamiesi iš vadovėlių apie visus teisingus būdus spręsti užduotis, nuo pat pradžių gavo krūvą informacijos apie algoritmus, įvairius metodus, standartus ir t.t. Jiems nereikėjo nieko išradinėti patiems, tik sugalvoti kaip pritaikyti įgytas žinias.

Kiek man teko pažinoti vienus ir kitus – darbštesnė, deja, yra būtent savamokslių „išradingųjų“ grupė. Jie greit parašo daug kodo, kepa produktus vieną po kito. Nepaisydami (o kartais ir nesuprasdami) to, kokia jų produkcijos kokybė, nes klientai jais lieka patenkinti dėl greitų rezultatų (nes juk laikas=pinigai?). Tada nutinka kitas įdomus dalykas – į įmones su tokiu prikauptu „paveldu“ ateina jauni programuotojai, balti švarūs popieriaus lapai, ir laikui bėgant prastas kodas ir seni „specai“ ima mokyti naujus žmones blogųjų praktikų. Laikas eina, universitetuose įgytos žinios nublanksta prieš „praktiškus“ dalykus, o tada ir visai pasimiršta…

Kitas dalykas – situacija su mokyklomis. Koks tikrai „kietas“ ir padorius pinigus uždirbti geroje užsienio įmonėje galintis specialistas nuspręs savo karjeros aukštumų eiti ieškoti įsidarbindamas programavimo mokytoju mokykloje?  Universitete? Tik labai idėjinis žmogus, tikriausiai… Ar daug tokių mes turime šiais laikais? Kiek laiko savo šeimą gausis pamaitinti iš šios idėjos?…

Tai palaukite, o kas tada moko mūsų vaikus?

Ir… nepanašu jog ši tendencija silpnėtų, nes kuo daugiau yra programuotojų, tuo daugiau įvairių įrankių yra sukuriama, ko pasekoje atsiranda dar didesnė naujų programuotojų paklausa. Seni, bloga patirtimi persisunkę darbuotojai (ir tai jokiais būdais nėra blogi žmonės! koreguotinos tik jų žinios ir taikomos praktikos) moko naujai į rinką atėjusius būsimus „specialistus“ ir vėl viskas užsisuka iš naujo. Laikai, kai atsirado pirmieji kompiuteriai ir juos programuoti ėmė patys šviesiausi tos dienos pasaulio protai, mokslininkai, jau seniai užnugary, dabar programavimo gali išmokti bet kas, kad ir vaikas, namuose savaitę pasižiūrėjęs mokomųjų video filmukų seriją. Laikai, kai atėjęs į pasimatymą su mergina ir netyčia išsidavęs jai jog esi programuotojas jau iškart žinodavai, kad jos daugiau nebepamatysi jau irgi praeity. Dabar programuotojai tapo visai neprastu „laimikiu“ 🙂 Ši profesija pritraukia vis daugiau ir daugiau labai skirtingų žmonių su pačiu įvairiausiu išsilavinimu. Laikai pasikeitė taip, kad sunku ir nuspėti kas mūsų laukia ateityje.

Viena aišku – prastos kokybės kodo tikrai bus daug, nes šiai dienai trūksta gerų mokytojų. Augančios ekonomikos šalys gigantės tokios kaip Kinija ar Indija pagaliau gali leisti savo vaikams nusipirkti kompiuterius ir stipriai įsilieti į šią industriją labai konkurencingomis kainomis. Yra tekę matyti jų darbo kokybės pavyzdžių ir nevyniosiu į vatą – teko beveik viską perdaryti, o ko neperdarėm – pasigailėjom vėliau, ir ne kartą.

Taigi programuotojai jau seniai nebėra tie keli mokslininkai, šiandien tą gali daryti bet kas, kas tik turi kompiuterį ir turi pakankamai noro + užsispyrimo. Ir tas yra nuostabu! Nes mano giliu įsitikinimu reikia nepasiduoti mėginimams viską pakeisti dirbtiniu intelektu 🙂 reikia bent šią sritį išlaikyti žmonių rankose!

Kodėl yra svarbu rašyti kokybišką kodą? Juk visada galima atrastas klaidas ištaisyti vėliau? Arba dažnai girdimas „kaip neveikia? mano kompiuteryje veikia kuo puikiausiai“ ir t.t. ir pan. Leiskite jums duoti keletą pavyzdžių:

  • Europos kosmoso agentūros projekto Ariane 5 skrydis 501 žlugo praėjus vos 40 sekundžių nuo pakilimo (1996 06 04). 1 milijardo dolerių vertės raketos prototipas susinaikino dėl programinės klaidos
  • Klaida programinėje įrangoje valdžiusioje Therac-25 radioterapijos įrenginį 80-jų metų periode į kapus nuvarė bent šešis pacientus, skyrusi jiems padidintą radiacijos dozę
  • Programinės įrangos klaida MIM-104 Patriot sausuma-oras sistemoje leido išsiderinti jos vidiniam laikrodžiui, ko pasekoje pastaroji nesugebėjo laiku aptikti ir numušti į karinę bazę (1991 02 25, Dhahran, Saudo Arabija) paleistos raketos. Žuvo 28 kariai.
  • Taip vadinamas „Ping of Death“. Labai reikalingos apsaugos nebuvimas TCP/IP protokolo kode leido tam tikru būdu suformavus kenksmingą užklausą „nulaužti“ daugumą Windows O.S. kompiuterių, bei pakenkti MacOS ir Unix sistemoms.
  • Ir daug kitų atvejų…

Taigi tai jau toli gražu nebėra vien tik skaičiai jūsų ekranuose. Prarandami didžiuliai pinigai, miršta žmonės, neveikia svarbios sistemos.
Šiomis dienomis kompiuteriai valdo dar daugiau įrangos, nei bet kada anksčiau. Planai ateičiai dar didesni! O dar dirbtinio intelekto atsiradimas ir tolimesnis tobulinimas? Tikriausiai esate matę kas būna kai du žmonės nesusikalba ir iki ko tai gali privesti? O kas bus jei vieną gražią dieną dėl kažkada anksčiau įveltos programinės klaidos dirbtinis intelektas neteisingai supras žmogų?
Prastos kokybės programinę įrangą šiom dienom matau visur. Net tokia įmonė kaip Apple kadaise garsėjusi savo nepriekaištingos kokybės produktais nūdien nebeblizga taip gražiai. Mums kaip šios specialybės atstovams reikia pradėti kažką daryti. Jei mūsų darbdaviai nesiima kelti kokybės reikalavimų savo darbuotojams, juk galite tai daryti patys sau. Ieškokite mokytojų, o jei tokių žmonių nėra artimiausioje aplinkoje, tegu jais tampa virtualūs mokytojai, tokie kaip Udemy, Lynda, Udacity ir kt. Šiais laikais mes turime kaip niekad daug galimybių savo kvalifikaciją kelti tiesiog internetu, visai nemokamai arba už tiesiog juokingus pinigus… O neretai protingas darbdavys dar ir padengs jūsų mokslų kaštus, nes protingas darbdavys supranta jog jeigu jis investuos į savo darbuotoja, tai anas pamatys naujų gerų dalykų ir pritaikys juos grįžęs atgal. Taigi laimi abi pusės.

Na ir grįžtame prie antraštėje iškelto klausimo. Turėdamas reikiamas žinias specialistas su bet kuria programavimo kalba galės parašyti patikimą, stabilų ir nemažiau svarbu – architektūriškai patogų kodą. Iš kitos pusės – kad ir kokia tobula visais savo aspektais programavimo kalba X būtų, kad ir kokius kosminius pinigus jūsų įmonė investuos į technologiją Y ir Z, jos neapsaugos darbuotojo nuo žmogiškos klaidos, nežinojimo ar tingumo. Tą galima padaryti taikant tam tikras gerąsias praktikas, rašant testus savo programoms, leidžiant naujai parašytą kodą peržvelgti/pakomentuoti kolegoms, na ir žinoma pasirenkant tinkamą įrankį užduočiai atlikti, tame tarpe ir pačią programavimo kalbą. O viso to reikia mokytis, vėl ir vėl. Yra sakoma, kad dirbant mūsų srityje dabar jau reikia bent kas 2 metus atsinaujinti žinių bagažą ir nebe tiek svarbu kiek mes visko žinojome baigę mokslus, daug svarbiau – kaip mes sugebame įsisavinti naują informaciją, nes šiais laikais vos ne kasdieną atsiranda nauji dalykai.

Mano palinkėjimas visiems – neužverkite sau durų į ateitį, išlikite smalsūs, atviri, išlikite alkani žinioms, išlikite idealistai ir dalinkitės tuo su kitais.

Visiems bus daug ramiau žinoti važiuojant su ateities self-driving mašina, kad jos programinę dalį darė tikrai kieti savo srities asai ir kad mes bei mūsų mylimieji saugiai pasieksime kelionės tikslą 🙂