Category Archives: IT

Ciklas for ir kiti apokalipsės raiteliai

... arba kodėl C++ – netinkama kalba programavimo mokymui mokyklose.

Prieš kokius dvejus metus (dabar tai atrodo taip seniai) juokiausi iš tų, kurie informatikos pamokose kalė Paskalį ir džiaugiausi, jog mokyklose pereinama prie C++. „Pagaliau moksleiviai bus mokomi naudingos, pritaikomos daugelyje sričių kalbos“ skambėjo mano galvoje ir nekantriai laukiau tos akimirkos, kai sėdėdamas informatikos prieš savo akis pamatysiu krūvą riestinių skliaustų.

Lol nope

Trumpai mano priekaištus galima apibendrinti taip: nesimokydamas papildomai, mokykloje C++ nesuprasi. Taip, galbūt tu iškalsi kažkurias sritis (kiek baitų tikriausiai ant mokyklos kompailerio užims int ar float tipas), galbūt išmoksi mintinai, kaip rašyti programą, sprendžiančią kvadratinę lygtį, tačiau vis tiek suprasi ne visą savo rašomą kodą ir kodėl jį turi rašyti.

Kokiais kriterijais mokymui apskritai buvo pasirinkta C++ – man mįslė. Ar mokiniui labai svarbu, kad jo programa įsivykdytų per vieną tūkstantąją sekundės, bet neduokdie ne per dvi tūkstantąsias? C++ yra labai gera kalba dėdėms su unix barzdomis, bet ne dešimtokui, abejojančiam, kas yra bitas, o kas – baitas...

Estija pradeda mokyti programavimo pirmokus. Mes – atvirkščiai – dešimtokus bandome atbaidyti tokiais siaubais kaip C++ ir vietoj to, kad sudomintume juos programavimu, IT pamoką paverčiame nemėgstamiausia iš visų.

Baltosios dėmės

Pirmą kartą atradęs šį straipsnį tiesiog įsimylėjau tą terminą. Pabandykim panagrinėti pirmąją programą, su kuria supažindinamas kiekvienas žalias mokinukas, pasirinkęs programavimą.

Nagrinėti kiekvieną kodo eilutę kurse paprasčiausiai neskirta laiko, todėl skatinama visą boilerplate  tiesiog ignoruoti. Nesvarbu, kas tas int main, svarbu, kad jis yra ir turi būti. Kitaip nieko nesigaus. O štai čia – analogiško kodo pavyzdžiai Python, Ruby ir netgi Perl kalbomis:

Šiek tiek skiriasi nuo C++, tiesa? Ką lengviau įsiminsite, suprasite, kaip veikia kiekviena eilutė? Būtent taip turėtų būti mokoma programavimo – be jokių bereikalingų, blaškančių dėmesį užrašiukų. Jei kažkas kartojasi kiekvienoje programoje, tą tikrai galima pašalinti iš programuotojo akių. DRY.

Mokykite programuoti, o ne C++

Būtent tai turėtų būti programavimo mokymo mokyklose uždavinys. Tu mokomas ne tam, kad sėdėdamas mokykliniame suole sukurtum Windows 9, o tam, kad minimaliai susipažintum su tuo, kaip yra programuojama. Taip, jei pasirinksi informatikos mokslus tęsti toliau, universitete programuosi kita kalba, darbe – galbūt ir dar kita. Tačiau ne kiekvienas bus programuotoju, o didžiąją dalį informatikos egzamino vis tiek sudaro būtent programavimas.

Tai kokia kalba tada tiktų geriausiai? Ogi tokia, su kuria galėtum tiesiog imti ir dirbti, o ne mokytis kalbos įnorių ir keistenybių. Netgi ta, gal šeštoje klasėje mylėta, Komenskio LOGO vietomis yra daug aiškesnė už C++.

Šis kodas – LOGO ciklo kartok palyginimas su C++ ciklu for. Taip, aš puikiai suprantu, kad for galingesnis (žr. sakinį apie unix barzdas) – tačiau dažnu atveju mokantis tas skaitikliukas i – visiškai nereikalingas, o veiksmus tereikia pakartoti – todėl ir kartok.

C++ nėra vien blogų sprendimų krūva. cin >> a >> b; yra daug smagiau negu C variantas scanf("%d %d", &a, &b);. Pastarasis verstų mokytis dar du dalykus – scanf/printf formato kalbą ("%d %d") ir kas per velnias yra tie &. Čia nusileidžia net mano mylimas Python, neturintis funkcijos „skaityk failą iki tarpo ir paversk duomenis į tokį tipą, kokio noriu“.

Tačiau čia C++ smagumas ir baigiasi. Toliau eina tik segfault'ai, astronominiai skaičiai dėl to, kad kažkur neparašei x = 0, sėdėjimas ir žiūrėjimas bukomis akimis į monitorių kiekvienąkart, kai kodas nesikompiliuoja.

Tai ką siūlai, gudruoli?

Kol kas nieko. Idealios kalbos nėra, tačiau yra keletas sprendimo variantų:

  • Imame kurią nors iš dinaminių kalbų (Python, Ruby, ...) ir vietoj vienų quirk'ų taikomės su kitais.
  • Imame kurios nors iš dinaminių kalbų minimalią implementaciją ir modifikuojame pagal savo poreikius. Netikiu, kad Lietuvoje nerastume nei vieno tą sugebančio programuotojo.
  • Kuriame savą programavimo kalbą nuo nulio. Nežinau, kam galėtų to reikėti, kai yra antras variantas.

Aišku, yra ir dar vienas variantas – mokinius palikti prie C++. Deja, šis - prasčiausias, nes įstatymai smurtą prieš vaikus griežtai draudžia...

PyCon-LT 2012 – buvau!

Kadangi savo mylimiausio Python kol kas neišdaviau su jokia kita programavimo kalba, buvo labai smagu vieną gražią dieną sužinoti, jog po trejų metų vėl organizuojama lietuviška python konferencija. Nors iš kitos pusės šiek tiek liūdnokas, kad lietuviškoji Ruby bendruomenė sugeba susirinkti jau penktą kartą (kur dar visokie workshop'ai...), o štai pythonistams taip dažnai neišeina.

Ir visgi, negaliu neįkišęs trigrašio ir neparašęs vieno-kito žodžio apie PyCon'e skaitytus pranešimus.

Fabric (Remigijus Jarmalavičius)

Jau pats pirmasis pranešimas man patiko - Fabric galimybės apžvelgtos tikrai puikiai, jokių priekaištų. Galbūt live demo, o ne paveikslėliai, būtų buvę smagiau, tačiau pilnai užteko ir to, kas buvo (o ir kam kankinti serverius be reikalo...).

Python paketai (Marius Gedminas)

Pranešimas buvo platesnis, nei tikėjausi, ir iš dalies tinkamas ne vien Python paketams, kadangi __init__.py ir setup() laiką maždaug lygiai dalinosi su patarimais turėti README, changelog'ą ir MANIFEST.in (kurio niekad nenaudojau... galbūt laikas pradėti :) ). Galbūt visiškam naujokui informacijos ir būtų kiek daugoka...

Django, nuo ko pradėti, kaip pabaigti (Mantas Zimnickas)

Pranešimas nebuvo blogas, tačiau iš esmės buvo visai ne tai, ko tikėjausi. Labai pasigedau „kaip pabaigti“ dalies, visas pranešimas buvo skirtas labiau „nuo ko pradėti“, tačiau ir čia parodytas tik vienas kelias - su paties Manto sukurtu šablonu django-starter. Kyla klausimas, ar pirmąkart django bandamčiam „startproject“ nebūtų lengviau, nei susipažinimas su trimis build sistemomis vien tam, kad pašalinti kažko, ko iš startinio paketo nereikia.

Python Androide (Albertas Agejevas)

Pagrinde - nesėkmės istorija, kaip pranešėjas bandė bandė kurti androidui ir nieko nesigavo. Nieko nuostabaus, kaip ir pranešimo metu sakyta, Python šioje OS vis dar lieka hakerių pasižaidimui. Anksčiau sklandė visokie gandai, neva Androidui bus galima pilnavertiškai programuoti Ruby ar dar kažkuo, tačiau turbūt ir toliau rašysim visų mylimą Javą, o Google dėl jos bylinėsis su Oracle...

Python ir Google App Engine (Skirmantas Jurgaitis)

Pranešimas, kurio dėka darkart įsitikinau, kad App Engine man nereikia - nenoriu nei apženyti savo aplikacijų su vienintele platforma, nei vienąryt atsikėlęs rasti už tai sąskaitą su keliais nuliais už tą pačią lėtą lėta platformą... :)

VU skaičiavimo resursai Python aplinkai (Albertas Gimbutas)

Pranešimas kiek užsitęsė, o tema man neaktuali - nesu VU studentas, tad minėtais resursais negalėsiu pasinaudoti. Tačiau vis tiek šiek tiek pavydu buvo pranėšėjui - jis turi priėjimą prie kompiuterio su 1080 procesorių (ar branduolių?)... :)

Python priemonės programavimo mokymui (Jurgis Pralgauskis)

Dalis resursų - žinomi, tačiau pasitaikė ir nematytų, todėl labai tikiuosi, jog skaidrės atsiras konferencijos tinklalapyje - nespėjau nei įsidėmėti, nei užsirašyti kai kurių knygų pavadinimų.

Kivy - Python UI Library for Any OS (Zogg)

Apie Kivy girdėti jau teko ir anksčiau, tačiau nesu jo išbandęs - netgi ir žinodamas apie kūrėjų vykdomą konkursą, patingėjau ką nors sukurti. Ir nors GUI programavimas nėra ta sritis, kurioj jausčiausi kaip žuvis vandeny, Kivy atrodo gan neblogai - pačiupinėti neskaudės.

--

All in all, geriau nei vakar, o rytoj turėtų būti dar geriau. O jei dar tas rytojus būtų ne už kalnų... Rengti dar vieną PyCon'ą greitu metu būtų overkill, bet jeigu kas nors panašaus į jau minėtus Rubyninkų workshop'us? ;)

Piratavimo problema sprendžiama ne per tą galą

Nebuvau šiandien Vilniuje vykusiame proteste prieš ACTA, tačiau įdėmiai sekiau gyvas video transliacijas ir naujienų portalus. Senų diskusijų prisiminimus sužadino šioje 15min.lt nuotraukoje užfiksuotas plakatas „-Už ką sėdi? -Dalinausi muzika“. Su visa pagarba protestuotojams (aš ir pats nepalaikau ACTA) norėčiau pasakyti, kad ši mintis - bloga.

Bent jau šią frazę supratau kaip „nedrįskite mūsų bausti už piratavimą“. Tačiau manau, kad reikia ne žiūrėti į pirataujančius gyventojus pro pirštus, o suteikti galimybę nepiratauti. Geriausias to pavyzdys - iTunes, kurioje ne tik pigu vartotojui, bet paprasta ir naudinga publikuotis muzikos atlikėjui. Viena daina dažniausiai tekainuoja amerikietišką dolerį. Pritaikius Big Mac indeksą Lietuvoje ji turėtų kainuoti maždaug 1.80Lt. Atrodo visai normalu - juk netgi nereikia dėl dainos pirkti viso albumo. Be muzikos, dar galima nuomotis (deja, dėl DRM, tai yra nuoma, ne pirkimas) TV serialus, filmus ir t.t. Tad kodėl nebūtų galima to atnešti į Lietuvą? Ar interneto kabeliai sudils?

Bet amerikietiška muzika ar TV serialai - menka bėda. Serialus, nors ir su metų ar poros vėlavimu parodo lietuviškosios TV, CD kada nors atsiranda parduotuvėse, matosi netgi viena kita internetinė muzikos parduotuvė (gaila, su tuo pačiu blogiu - DRM). O aš mėgstu žiūrėti anime. Dažniausiai vakaruose jie platinami per tokius gigantus, kaip FUNimation ar Crunchyroll. Jei turi mokamą narystę juose, naują seriją gauni tuo pačiu metu, kai ji rodoma Japonijos TV, o neretai net ir keliomis valandomis anksčiau. Yra ir visiškai nemokamas planas, su kuriuo serijos teks palaukti savaitę, tačiau ją gausi nemokamai (Captain Obvious), tik turbūt su kažkur šone mirgančiu reklaminiu banneriu (kurio, įsijungus fullscreen, turbūt nebesimato).

Tuo tarpu kokios galimybės pažiūrėti anime man būtų Lietuvoje? Per TV kažkada rodytas serijas galima ant pirštų suskaičiuoti, DVD parduotuvėse taip pat nesimato (nes neapsimoka Lietuvai leisti tokių DVD). Turbūt vienintelė viltis - laukti, kol bus išleistas angliškas DVD ir jį pirkti iš JAV. Oi, visai pamiršau, juk egzistuoja DVD regionai - nehakindamas negalėsiu pažiūrėti DVD iš JAV savo lietuviškame grotuve. Gerai, pripažinsiu - galimybė legaliai pažiūrėti anime, neskaitant lietuviškos TV - nulinė.

Sugrįšiu prie to, kas kartota daug kartų - skaičiuoti nuostolius dėl piratavimo dauginant kainą iš atsisiuntimų skaičiaus - kvaila. Nes mano minėtu atveju, ar siųsčiausi, ar nesisiųsčiau - pirkęs vis tiek nebūčiau, nes to daryti tiesiog negalėčiau. Kainuoja produkto sukūrimas, o ne tai, kad failą turiu savo kompiuteryje. Šiek tiek per daug nuklydau į asmeninį atvejį, tačiau mintis išlieka: nesipeškime dėl to, ar reikia bausti pirataujančius. Sudarykime sąlygas, kaip kitose šalyse - gauti produkciją nemokamai ar už labai mažą kainą ir vieno mygtuko paspaudimu. :)

Versijų kontrolės sistemos ir kodėl jums jų reikia

Kartais tenka nusistebėti, kaip kai kurie programuotojai tvarkosi su savo kodu. Nei lokalių, nei nutolusių kopijų nėra, viskas laikoma ten, kur publikuojamas serveris. Netgi kodas, pasitaiko, redaguojamas būtent ten.

Į lietuvišką Google įrašius „versijų kontrolės sistema“ pirmosios nuorodos: Vikipedija, kuri tikrai neįtikina, kodėl to reikia, ir FWD.lt straipsnis, kur versijų kontrolės sistema (VCS, VKS, RCS, SCM - trumpinkite kaip norite) sumaišyta su paslaugų tiekėju... Na, pasitaiko ir keletas teisingų nuorodų (jos - įrašo pabaigoje).

KPŠ ta VCS?

Paprastai tariant, programa, kurios dėka galite tvarkyti savo kodą patogiau. Procesas gan paprastas, tačiau protingas: parašę dalį kodo (dažniausiai kažką viena tema ir reikšmingo, pvz. naują funkcionalumą ar tam tikros klaidos pataisymą), sukuriate naują pakeitimų sąrašą (dažniausiai vadinamą commit) (tikiuosi pasirinkau teisingą vertalą). Jam suteikiamas unikalus ID ir commit'as tampa lyg kodo versijos atžyma - pasižiūrėjus istoriją aiškiai matyti, kada, kas ir ką (pagal commit aprašymą) pridėjo (ar pašalino :) ).

Kodėl?

Versijavimas. Vien iš šių programų bendro pavadinimo galima numanyti apie šią paskirtį Ką darote, jei norite padaryti pakeitimų kode, tačiau bijote kažko pridirbti ir norite turėti veikiančią, stabilią kopiją? failas.old ir failas.new? Gal dar failas.2011.09.10? :) Yra geresnis variantas! Su VCS visi pakeitimai aiškiai matysis palyginus commit'us. Taip pat bet kada galėsite grįžti prie senesniojo, nes senas kodas niekur nedings.

Darbas komandoje. Šiuo metu dirbu prie projekto kartu su Simonu ir tikrai neįsivaizduoju, kaip galėtume atsinaujinti darbinius failus vienas iš kito be VCS. Siuntinėti per skype ar email? O jei dar reikia persiųsti kelis failus, tai tikriausiai prieš siunčiant spausti į archyvą (ir taip vėl turėti kodas.2011.09.10.tar.gz)? Ne! :) Su VCS atlikus commit'ą jį viena komanda patalpiname į bendrą serverį. Su decentralizuotomis VCS galima juos netgi išsiųsti tiesiai vienas kitam, be jokio tarpinio serverio. Kodą pasiimti gali ne vien kitas komandos narys, bet ir, pavyzdžiui, serveris, kuriame veikia pati jūsų programa.

Atvirumas. Būtent tokių VCS repozitorijų tiekėjų, kaip GitHub ar BitBucket puslapiuose šiais laikais vyksta atvirų programų kūrimas. Projektui turint viešą repozitoriją, kiekvienas gali pasidaryti savo projekto šaką (fork) ir, pamodifikavęs, pasiūlyti projekto autoriui priimti pakeitimus.

Kaip pradėti?

Pirmiausiai reiks išsirinkti pačią sistemą. Jų yra įvairių, nuo dar amžiaus pradžioje išleistos Subversion iki naujesnių ir smagesnių Git, Mercurial ar Bazaar.

Jei norėsite kodą laikyti ne vien savo kompiuteryje, bet ir dalintis su kitais, teks pagalvoti, kur talpinti repozitorijas. Jei turite VPS ar dedikuotą serverį - problemos nėra, serveris puikiai pasitarnaus ir šiam reikalui. Tas pats galioja ir jūsų asmeniniam kompiuteriui, jei tik turite išorinį IP adresą.

Kitu atveju gali tekti naudotis tokiomis svetainėmis kaip GitHub (Git sistemai), BitBucket (Mercurial) ar Launchpad (Bazaar). Viską vainikuoja Google Code, palaikanti Subversion, Mercurial ir Git sistemas. Visos šios svetainės leidžia nemokamai kurti viešas kodo repozitorijas, tiesa, norint turėti privačių, kai kurios prašys sumokėti kelis dolerius.

O tada jau tik mokytis, tyrinėti savo pasirinktą sistemą, kadangi gerų dalykėlių būna jose daug daugiau, nei aprašiau - stengiausi paminėti tik pačius pagrindus. Pats, naudodamas Git, skaitinėju nemokamą Pro Git knygą.

Pavėluotas įspėjimas: aš nesu profesionalas, netgi ir pats VCS pradėjau visai neseniai ir rimtai esu bandęs tik Git. Jeigu kur nusišnekėjau - praneškite... :) Šiuo įrašu nebandžiau reklamuoti nei vieno konkretaus produkto, tiesiog norėjau įtikinti, kad VCS sutaupo daug laiko ir jėgų, nes... taip ir yra! :)

Teisingai lietuviškai apie VCS:

Nebūkite nuobodūs (programuotojai)

Man patiko straipsnis, sakantis priešingai, tačiau šįkart kalbu ne apie tokį nuobodumą.

Penktus metus esu turbūt didžiausios IT bendruomenės Lietuvoje uždarbis.lt narys ir neabejotinai būtent ten daugiausiai diskutuoju su programuotojais. Būtent iš ten susidariau nuomonę apie besimokančius programuotojus ir panašių IT sričių atstovus.

Tinklalapių kūrėjai

Trumpas supažindinimas su šio įrašo terminologija: tinklalapių kūrėjas - žmogus, iš esmės neprogramuojantis, tačiau statantis tinklalapius TVS ir panašių įrankių pagalba. Tinklalapių kūrėjai yra nuobodūs. Dažniausiai kuriami arba copy/paste turinio (anekdotų, sveikinimų, citatų) puslapiai, arba warez (muzika parsisiuntimui, filmai online). Dar vienas variantas - žaidimų (visiems gerai žinomų Counter-Strike, Minecraft, Lineage 2) serverių, klanų tinklalapiai. Tikrai dėmesio vertų tinklalapių - vos vienas kitas.

Kiekvienas lietuvis paauglystės metais turi sukurti CS serverį, piratinės muzikos webą, filmai.in kloną ir cha.lt kloną.
@silkuze
Justinas

Programuotojai

Nemanau, kad šį žodį jau reiktų paaiškinti. Džiugu, kad yra žmonių, norinčių programuoti, tačiau jie irgi yra nuobodūs. Čia vėlgi tenka susidurti būtent su tinklalapiais, nes kone visi renkasi tą patį technologijų rinkinuką: PHP, HTML, CSS, JavaScript, SQL (ir būtinai nori išmokti viską iškart). Na, retkarčiais užsimenama apie Java, bet dažniausiai - dėl studijų. Paklauskite tokių programuotojų, kas  yra Memcache, NoSQL, design patterns ar kas sukelia 2038-ųjų metų problemą ir laikas, per kurį toks programuotojas atsakys labai priklausys nuo Google atsako laiko :)  Mokomasi dažniausiai iš tokių netikusių šaltinių,kaip w3schools.com. Mokymosi rezultatai: tipinės saugumo skylės, negražus, neefektyvus, tiesiog blogas kodas. Ir jei dar to negana, kiekvienas nori pasijusti mokytoju - parašę savo pirmuosius kodo gabalėlius tokie programuotojai skuba rašyti pamokas, tokias pat nevykusias, kaip ir tos, iš kurių mokytasi.

Tai ką daryti?

Tinklalapių kūrėjams - nebijoti įgyvendinti savų idėjų. Nesakykite, kad tokių neturite - net, rodos, kvailiausia idėja gali pasiteisinti. O net jeigu ir ne - niekam neskaudės. Laikai tokie, kad pradžią galima padaryti visai pigiai, o toliau jau tobulėti. Programuotojams - nebijoti atrasti kažką daugiau, nei tai, ką „daro visi“. Jei iš tikrųjų mylite šį užsiėmimą, naują dalyką priimsite kaip iššūkį, o ne kaip kažkokią naują naštą :)

Vėlgi, visa tai - tik mano du centai ir nuomonė, susidaryta apie daugumą. Pats tikrai nesu patyręs, tuo labiau, kad žmogus mokosi visą gyvenimą, o tuo labiau tokio dalyko, kaip programavimas. Komentarai visad laukiami :)