Programavimo kalbos pasirinkimas

Tęsiu savo rašinių ciklą apie programavimą šiandien noriu papasakoti apie programavimo kalbų pasirinkimą. Prisiminimui galite paskaityti mano ankstesnį rašinį pasakojantį nuo ko pradėti norint išmokti programuoti. Per 15 programavimo metų išmokau pagrindinio dalyko: atlikti užduotį programavimo kalba yra visiškai nesvarbi. Daug svarbiau – jau sukurtos kalbos pagalbinės priemonės palengvinančios programuotojo darbą.

Paimkite bet kurią programavimo kalbą ir suprasite, kad semantiniu požiūriu viena nuo kitos skiriasi tik sintakse. Visos modernios programavimo kalbos turi objektus, paveldimumą, objektų deklaravimą, kintamuosius, įvairius ciklus iteracijai, funkcijų deklaracijas ir t.t. Skirtumas tik tas, kad su viena programavimo kalba turėsite parašyti daugiau teksto ne su kita. Pavyzdžiui, ta pati funkcija

Pascal

procedure SayHi(Name: String)
Begin
  WriteLn("Hi, " + Name);
End;

C#

public void SayHi(String name)
{
  Console.WriteLine("Hi, " + name);
}

Ruby

def SayHi(name)
  puts "Hi, " + Name
end

VB.NET

Private Function SayHi(name)
  Console.WriteLine("Hi, " & name)
End Function

Visi šie kodo gabaliukai pateikia tą patį rezultatą: iškvietus funkciją SayHi(„Arvydas“) ekrane bus parodytas tekstas „Hi, Arvydas“. Žinant kaip gauti rezultatą su viena programavimo kalba tampa nesunku tai padaryti su kitom, nes viskas ko reikia – išsiaiškinti sintaksės subtilumus.

Jeigu programavimo kalba nesvarbu, tuomet programuojant kas yra svarbu? Ogi visos papildomos programavimo priemonės su kuriom kuriamos programos.

IDE

IDE (Integrated Development Environment) – kodo redaktorius, kompiliatorius ir pagrindinis programuotojo pagalbininkas. Jo pagalba galima greitai aptikti paliktas sintaksės klaidas, sustabdyti programą jos vykdymo viduryje ir analizuoti kintamųjų reikšmes. IDE yra sukurta labai daug ir skirtų vienai ar kelioms programavimo kalboms. Kai kurie programuotojai mėgsta programuoti vien tik su teksto redaktorium, bet man asmeniškai IDE yra būtinas, nes smarkiai pagreitina darbą pateikdamas kiekvieno objekto metodus ir savybes.

API

API (Application Programming Interface) – standartinių funkcijų ir objektų visuma. Tai visos pagalbinės paprogramės ir objektai, kurios yra programavimo kalbos dalis. Jie smarkiai pagreitina darbą ir supaprastina kodą, nes nereikia rūpintis kaip atidaryti failą, nuskaityti teksto gabaliuką ar išskaidyti sakinį žodžiais. Absoliučiai visą programavimo kalbos API nebūtina žinoti, nes tai ne tik kad neįmanoma, bet visada yra Google, kurio pagalba galima susirasti pavyzdinį kodą ir jį panaudoti programoje.

Frameworks

Frameworks yra programavimo karkasai, kurių pagalba programos kuriamos daug greičiau nei jas kuriant vien su tos programavimo kalbos API. Vienas mano mėgstamiausių framework tipų yra ORM (Object Relational Mapping), kuris smarkiai supaprastina darbą su duomenų bazėm ir prgoramavimo kalbos objektuose paslepia tiesiogines duomenų bazės užklausas, kurie tuo pasirūpina už programuoją. Be ORM norint įrašyti tarkim naują įrašą į duomenų bazę aš turėčiau prirašyti virš 50 eilučių kodo kuris atliktų šiuos veiksmus naudojantis programavimo kalbos API:

  1. Prisijungtų prie duomenų bazės
  2. Pradėtų tranzakciją
  3. Sugeneruotų duomenų bazės užklausą
  4. Ją įvykdytų
  5. Užbaigtų tranzakciją

Tuo tarpu su ORM tai atrodo maždaug taip:

post = Post.new
post.title = "Programavimo kalbų pasirinkimas"
post.body = "Mano rašinio tekstas"
post.save

Tai ne tik supaprastina kodo skaitomumą, bet kartu ir smarkiai palengvina jo priežiūrą ateityje. Programuojančius be freimworkų aš vadinu mazochistais. :)

Programavimo metodikos

Dar visai nesenai buvo naudojamas panašus į namo statymą programos kūrimo metodas: visų pirma sukuriama pilna programos specifikacija, kaip namo pamatai, o tada programuotojai imasi darbo ir ją kuria. Rezultate gaudavosi taip, kad galutinė programos versija neatitinka vartotojų reikalavimų: vartotojai buvo neteisingai suprasti, dėl to sistemos architektas pasirinko netinkamą framework, o per tuos metus kai programa buvo užbaigta, firmos poreikiai kardinaliai pasikeitė. Šis senovinis metodas remiasi tuom, kad pastačius namo pamatus ir pirmą aukštą yra labai sudėtinga po to jį nugriauti ir pradėti viską iš naujo: juk gyventojai namą galės išbandyti tik kai jis bus užbaigtas ir kai į jį įsikraustys.

Šis dešimtmečiais naudotas projekto kūrimo metodas programavime visiškai netinka, nes programavimas yra daug lankstensis, nei namo statymas. Dėl to dabar labai smarkiai išpopuliarėjo Agile programavimo metodika: Test Driven Development (TDD) ir Behaviour Driven Development (BDD). Jų pagalba programos kuriamos vartotojams koncentruojantis į vartotojo poreikius visos programos kūrimo metu įtraukiant vartotojus į testavimo ir naudojimo procesą nuo pirmos dienos. Šios metodikos pritaikomos tam sukurtais programavimo kalbos frameworkais ir yra labai svarbus sėkmingo projekto aspektas. Juk kam kitam, jei ne vartotojams kuriamas programinis produktas?

Bendruomenė

Programuotojų bendruomenė yra labai svarbu, nes tai yra pagrindinė vieta iš kurios galima semtis žinių ir kodo pavyzdžiui. Kuo ji draugiškesnė ir platesnė – tuo daugiau informacijos galima surasti ir tuo lengviau kurti programas. Labai dažnai su iškilusia problema jau būna kažkas susidūręs ir viskas ko reikia – pasinaudoti Google paieška ir surasti sprendimą.

Programavimo kalbos skiriasi ne tik programavimo sintakse, bet ir pritaikymo galimybėmis:

  • Žemo lygio kompiliuojamos programavimo kalbos kaip C naudojamos kuriant operacines sistemas ar žaidimus dėl greito kodo veikimo, kuris yra būtinas tokio tipo programoms (taip, operacinė sistema irgi yra programa, tik labai didelė).
  • Kitos kompiliuojamos programavimo kalbos kaip C++, C#, Delphi, Objective C, Java naudojamos kurti įprastas kompiuterio programas (desktop applications).
  • Interpretuojamos programavimo kalbos tokios kaip Perl, Python, PHP ar Ruby daugiausia naudojamos kurti internetines svetaines. C# čia irgi galima dėti dėl ASP.NET framework.

Pritaikimo galimybes riboja tik frameworkų trūkumas, tačiau jokiais būdais nereiškia, kad su Python ar Ruby negalima kurti įprastų kompiuterio programų, o su C negalima sukurti internetinio puslapio: kodas bus sudėtingas prižiūrėti, jo bus daug, trūks kokių nors vizualinių elementų, bet programą yra įmanoma parašyti. Niekas nepainioja programavimo kalbų rimtuose projektuose, nes su kita programavimo kalba tai galima padaryti daug greičiau ir efektyviau.

Tai kokią gi rinktis programavimo kalbą? Pilnus projektus man teko kurti ir prižiūrėti su: Pascal, Delphi, Delphi.NET, C++, Perl, VB, VB.NET, C#, PHP ir Ruby. Šiandien, jei man reikia kurti internetinę aplikaciją aš naudoju Ruby on Rails framework dėl fantastiško BDD metodikos palaikymo, išplėtoto ORM ir malonios akiai programavimo sintaksės. Priežasčių yra daugiau, bet tam reiktų rašyti atskirą įrašą. Jeigu reikia kurti desktop application, tuomet renkuosi C# ir Microsoft.NET/Mono 2.0 framework dėl galimybės programas leisti tiek Windows, Linux ar MacOSX operacinėse sistemose. Kaip bus rytoj? Nežinau. Svarbu neapsiriboti viena programavimo kalba, todėl nuolat tobulėju ir stebiu ką gero turi pasiūlyti kitos programavimo kalbos ir jų frameworkai, klausau kuom džiaugiasi ar skundžiasi kiti programuotojai. Blogiausia ką gali padaryti programuotojas – užsistovėti ties viena technologija ir programavimo kalba. Būtina išlaikyti balansą ir domėtis populiariausių programavimo kalbų tendencijom, nes visuomet galima pasisemti žinių iš vienos ar kitos programavimo kalbos ir pritaikyti dabartiniam projektui prie kurio dirbi.

Turiu džiugią žinią: nesvarbu kokią programavimo kalbą pasirinksi, norint ją išmokti nereikia talento, kaip kad dainavimui ar piešimui. Viskas ko reikia – daug ir sunkiai praktikuotis. Tuomet ateis tokia diena, kai neberūpės programavimo kalbos sintaksė, nes projekto įgyvendinimui svarbiausia lankstūs frameworkai, kurių pagalba ateityje galima bus lengvai ir be skausmo tobulinti projektą. Kiek teko dirbti dar nemačiau programinio projekto, kuris būtų iki galo užbaigtas. :)

Jeigu šis įrašas patiko, nepatingėkit pakomentuoti arba užsiprenumeruoti RSS srautą.

33 komentarai

      • Kadangi pats truputėlį dainuoju (sakykim gana mėgėjiškai), tai aš linkęs manyti, kad balsas yra išlavinamas reikalas :)

        Na bet čia labai jau offtopic :)

        • Na gerai padiskutuojam čia :) Aš turėjau omeny jeigu neturi dainavimui balso tai nelabai to jo ir išlavinsi. Juk balso stygoms operacijos nepadarysi vien tam kad galėtum dainuoti, ar aš klystu?

          • Šiaip yra tokia 10000 valandų taisyklė (kad per 10000 valandų galima išvystyti bet kokį sugebėjimą, kurį kiti vadintų talentu). Dėl dainavimo – nemanau, kad čia kažkas neįmanomo. Tai iš tikro yra labiau klausimas apie balso valdymą (jautimą kokiame diapazone gali dainuoti ir pan.) negu apskritai jo turėjimą. Sugebėjimas dainuoti per 7 oktavas (jei toks iš viso yra) galbūt ir neišvystomas (čia matyt reiktų gimti su tikrai ilgu kaklu). Aišku teoriškai gali būti ir kažkokie fiziniai trūkumai, kurie trukdo dainuoti, bet spėju tai liečia mažiau negu 1% populiacijos

  1. Na Java galima labai puikiai kurti puslapius, o jos privalumas tai efektyvesnis užklausų apdorojimas nei interpretuojamų kalbų atžvilgiu. Ir tai nėra labai sudėtinga, yra daugybė frameworkų – Struts, JSF, Tapestry ir krūvos kitų…

  2. Puikui įrašas, su tuo ir sveikinu. Tiesa, vienas dalykas visgi užkliuvo, jei siūlymas domėtis kitomis tecnologijomis yra paremtas pavirštinišku technologijų įvertinu tai pilnai sutinku. Bet jei turi omenyje, jog reikia giliau domėtis, kiek įmanoma daugiau programavimo technologijų, tai drįsčiau paprieštarauti. Visgi programavimas pastaruoju metu vystosi neitikėtinu tempu (bent jau .NET srityje tai tikrai) ir tiesiog neįmanoma visko aprėpti pakankamai giliame lygmenyje. Kaip sakoma (nepykite angliškai) – you may be good at everything, but, in the same time, no expert at anything. Tikiuosi supratau, ką norėjau pasakyti.

    • Dėl domėjimosi kitomis technologijomis aš kiekvienam siūlau susirasti balansą. Pats per metus iki galo sukuriu bent po 2 pilnus projektus su mane dominančia nauja technologija, taip kad čia kaip kam. Kitiems gal užtenka tik pasiskaityti pavyzdžius, bet aš manau, kad iš pavyzdžių suprasti freimworkų neužtenka, nes pilnai pajausti juos gali tik programuojant pilnus projektus.

  3. Atgalinis pranešimas: Tweets that mention arvydas.net » Blog Archive » Programavimo kalbos pasirinkimas -- Topsy.com

  4. Atgalinis pranešimas: Savaitnukas #1 | Lukas Karalius

    • Tai čia žinoma, kad subtilybės, kuriu skirtumai apibrėžiami programavimo kalbos API. Visi šie smagumai su kuriais tu susidūrei su Python programavimo kalboje tiesiog „paslėpti“. Žinoti tas subtilybe ir yra dalis programavimo kalbos mokinimosi proceso.

      • Kad čia nebe API (bent jau laikantis šio API apibrėžimo http://en.wikipedia.org/wiki/API), čia jau programavimo kalbos sintaksė, t.y. nieko nėra paslėpto. Ir čia tik vienas pavyzdys :)

        T.y. ką pamiršau tau asmeniškai pridėti – kai programuotojas dirba keliomis skirtingomis kalbomis, tai dažnai susiduriama su tokiais dalykais, kad programuotojas vienos kalbos patirtį bando permesti į kitą kalbą. O tai ne visada yra teisinga ir pakankamai dažnai yra klaidinga. T.y. kodas galbūt ir veikia, bet toli gražu nėra optimalus.

        • Ok, ten ne API. Nusišnekėjau :) Bet kokiu atveju man labiau vertingesnė ta programavimo kalba, kurios kodas užima mažiau eilučių. Čia tik vienas aspektas. Svarbiausia – freimworkai, o konkrečiam projektui renkuosi ne programavimo kalbą, o freimworkus. Tokias programavimo kalbos subtilybes galima labai lengvai išmokti, bet freimworko sutaupytas laikas yra daug svarbesnis.

          • Tada kitas klausimas – kaip dažnai tu dirbi prie tokių projektų, kad pradedi jausti, jog rašai savo framework’ą? Aš sutinku, kad darbui reikia pasirinkti tinkamas priemones, bet dauguma didelių projektų yra framework’ai patys sau.

          • Prieš pradėdamas kurti projektą aš visada išsianalizuoju kuris freimworkas jam tinka geriausiai. Tada belieka tik rūpintis projekto funkcionalumu, o ne freimworko kūrimu. Freimworkais vadinu: ORM, testavimo, MVC (tai labiau design pattern, bet yra freimworkai, kurie jį implementuoja) ir t.t. Visas kitas kodas, kuris parašytas naudojantis šiais freimworkais yra business logic ir presentation layer. Juos man tik ir reikia implementuoti.

  5. dainuoti ir piesti ismokstama lygiai taip pat kaip ir programuoti, yra zmoniu skirtumai vienas turi labaiu matematine analizuojancia galva kitas labiau vizualia, bet visi gali gerokai istobulinti piesimo, dainavimo ar programavimo sugebejimus. Jai netiki rimtai pabandyk ir pamatysi. Pats ir dainuoti ismokau ir piesti ir programuoti, beje vienas kita papildo gerai, dainavimas labiau fizinis gerklu raumens lavinimas ir tiek, bet piesimas turiu omeny geras piesimas, o ne abstrakciu meniniu nesamoniu tepliojimas yra labai analogiskas programavimui.

  6. „Visos modernios programavimo kalbos turi objektus, paveldimumą, objektų deklaravimą, kintamuosius, įvairius ciklus iteracijai, funkcijų deklaracijas ir t.t.“

    Cia priklauso ka vadinti „modernia kalba“.
    Va paimkime CIKernel – GLSL kalbos subset’a-
    http://developer.apple.com/mac.....g_ext.html
    Tai ten tiek apribojimu (pvz. nera normaliu ciklu, nera normaliu IF’u, nera netgi masyvu), kad telieka tik 2 keliai:

    1. CIKernel vadinti „nemodernia kalba“, nors ja programuojami GPU Mac’ams siuolaikinese programose.
    Taigi nera „atgyvena“, bet nera ir „moderni“.

    2. Atsisakyti tavo apibrezimo, ka „modernios kalbos“ turi savyje tureti. Mat koks assembleris vis dar yra labai modernus, kai reikalas pasisuka apie iterptiniu (embedded) sistemu/ mikroprocesoriu programavima.

  7. liux, kad radau si bloga, noriu pradeti mokytis, ir kaip tik buvo sunku nuspresti ka pasirinkti, beveik susigalvojau, bet jei galetumei, patark kokias kalbas geriausia rinktis del tokio programavimo, kad ateityje butu kazka imanoma i zaidimuka (RUNESCAPE) kazka sukurti, ten kiek zinau tai java, bet gal butu kas patogiau, ar paprasciau? :) aciu

  8. Sveiki,

    Kokia programavimo kalbą patartumėte pasirinkti norint sukurti įmonės programą? Reikalinga programa tokia, kad vienam įmonės kompe būtų galima suvedinėti informaciją, o kitame sakykim daryti ataskaitas ir pan. Su Excel deja jau nelabai pavyksta išsisukti :))

Parašykite komentarą

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