Hello programiranje, al' čestito, hernad "The agresivni"

U jednom od po meni najboljih članaka na temu obrazovanje i FIT:

"Mogućnost izbora" je stvar koja se takođe uči ! 

u poglavlju "Zašto je Microsoft Visual studio pogrešan izbor" dotakao sam se ove teme.

Jutros sam se u to još jednom uvjerio radeći sa Samrom na njenom CT projektu.

Jutros je Samra bila u svojoj "nja-nja" fazi:

Ja ovo ništa ne razumijem, šta je 'pascal', šta je free pascal compiler ? Kako ću ja objasniti kad nisam imala pascal(*), nja-nja-nja-nja ...

Ovo nja-nja ponašanje me uvijek razbjesni. To je Samrina metoda da "okupira" čitavu kuću da se bavi njenim problemom. Ako je to i bilo prihvatljivo za dijete, došao je vakat da takvo ponašanje ne nagrađujemo.

Zato sam odlučio da je za takvo ponašanje kažnjavam:

"Njanjanje" ničemu ne vodi. "Reziliš" mater, "reziliš" mene. Svi smo "otrovani" nakon ovakve kuknjave. Mi se "ubismo" da ti pomognemo, ali ako nastaviš sa "njanjanjem" nećeš dobiti NIKAKVU pomoć. Od ocjene iz CT-a meni je puno bitnije da postaneš RAZUMAN čovjek. Razuman čovjek razumije da i drugi ljudi imaju obaveze, da cijeni napore drugih, i da njegov problem nije jedini na svijetu. 

Zato sad "razguli" - u svoju sobu.

Neki će sigurno prokomentarisati:

Ja ovog čovjeka! Pravi agresivac. Sa djecom treba lijepo ... peace brothers

Ja sam međutim ubijeđen da je ovo nešto najbolje što mogu učiniti za svoje dijete. 

Ostavimo po strani odgoj djece. Vratimo se učenju i CT-u.

(Ne)razumjevanje koncepta

Zašto Samra ne razumije da je svejedno da li će:

1) Compile & Link iz vi editora

u vi editoru ukucati:

   :cd ~/github/CT_pascal

   :!fpc geometry_calculator.pas

2) Compile & Link iz TurboPascal IDE-a

Ili će u Turbo pascal IDE-u kreirati novi projekat (koji će mu automatski kreirati ime_projekta.pas fajl i otvoriti ga u internom editoru pa pokrenuti "Compile" menu.

3) Compile sa konzole:

ili će na konzoli - terminal aplikaciji svoje Mac OSX mašine zadati:

    $ cd ~/github/CT_pascal

    $ fpc geometry_calculator

4) Compile na komandnom promptu na Windows OS-u(**)

     > c:

     > cd \github\CT_pascal

     > bpc gemetry_calculator.pas

Sve ovo daje rezultat. Ali samra to jednostavno ne konta. Zato što ne razumije osnovne koncepte (***) da bi razumjela ono što radi.

Source code

source code je set linija koje imaju određena pravila (sintaksu) koje određeni programski compiler može prevesti u izvršni kod.

Executable code

Source code je input, executable code je output.

Još jednom:

    SOURCE_CODE

        => COMPILE PROCES(***)

              => EXECUTABLE_CODE

Izvršni kod je ono što će naš računar, tačnije naš operativni sistem znati pokrenuti.

Operativni sistem

Ako program nema greške, kompajler generiše - proizvodi executable code - izvršni program.

Taj izvršni program se različito imenuje i pokreće na različitim operativnim sistemima:

a) linux, Mac OS X (unix like operativni sistemi)

Kada se nalazimo na terminal konzoli,

      ~/github/CT_pascal$ ./geometry_calculator

b) Microsoft DOS/Windows OS familija operativnih sistema (DOS, Windows XP, Windows 7)

Slično, na komandnom promptu Windows OS-a:

      c:\github\CT_pascal> geometry_calculator.exe

Razlike su minorne, ali ipak postoje.

Tako vidimo da na unix operativnim sistemima moramo navesti "./" + <ime executable fajla>.

Razlog leži u tome što unix operativni sistemi u PATH varijabli ne sadrže tekući direktoriji dok je tekući direktorij kod Windows-a explicitno uvršten u listu direktorija koje operativni sistem traži prilikom pokušaja da pokrene - izvrši program. 

c) GUI

Ovo isto se može dobiti i tako što u Mac OSX finder-u  ili Windows Exploreru dva puta kliknemo na geometry_calculator, odnosno geometry_calculator.exe:

dupli klik, pokrećemo naš program:

Program compiler

Programski kompajler je taj koji je zadužen za ovaj proces prevođenja.

Compile = kompajliranje => prevođenje. 

Slično jeziku čovjeka,  "source code"-a može biti napisan na različitim programskim jezicima.

Sintaksa programskog jezika "Pascal"

Za razliku od čovjeka, programski kompajleri su puno osjetljiviji na greške.

Pa počnimo od hello world pascal programa:

hello world pas verzija 1

Keywords

Ovdje imamo sljedeće ključne riječi(keywords):

  1. program
  2. begin / end programski blok

Pored ključnih riječi imamo i znakove kojima označavamo kraj komande ili komandnog bloka ";", odnosno kraj programa ".".

Šta je ovdje bitno uočiti: Svaki pascal kompajler mora ove kewords na isti način interpretirati.

Nije bitno da li je to fpc ili borland_turbo_pascal ili neki treći.

"Writeln" funkcija

"Writeln" je funkcija koja na ekran ispisuje ono što joj zadamo. Ona postoji u svakoj implementaciji pascal-a. Međutim, ona u užem smislu te riječi, nije keyword.

Operatori, if-then-else konstrukt

Napravimo novu verziju našeg hello world programa.

Na početku programa ćemo definisati "samrin_babo". Na na osnovu vrijednosti te konstante u programu treba ispisati:

    hello from Samra Husremović

ako je samrin_babo = 'hernad'. Ako je neka druga vrijednost, program treba ispisati:

   hello from neka druga Samra

Navešću rješenje: hello world verzija 2

A sada, idemo u analizu i razumjevanje nove verzije:

Novi programski elementi/konstrukti:

  1. if-then-else
  2. const - deklarisanje konstante. vrijednosti koja se tokom izvršenja neće mijenjati

Pored toga treba uočiti i sljedeće:

  1. stringovi(****) u pascal-u se ograničavaju jednostrukim navodnik separatorom 

Iterativni, Step-by-step proces

Jedan od glavnih problema u procesu učenja je iterativnost, odnosno nedostatak iste.

Samra je svoj CT zadatak krenula rješavati kao da je to tekst iz bosanskog - prepisujući program od početka do kraja.

To je kardinalna greška. Greška svih greški u procesu učenja programiranja.

Ako pišete programski kod, a da pri tome ne možete identificirati osnovne elemente programskog jezika, idete u pogrešnom smjeru.

Primjeri Samrinih grešaka

Tokom rada uočio sam sljedeće nerazumjevanje:

1) "a : = 1" nije isto što i "a := 1"

Na prvi pogled ovo izlgeda kao obični tipfeler, međutim nije. Ona je pokazala da Samra nije razumjela da je operator ":=" asignment operator u pascal-u.

Pascal opet ne razumiije da "s a m r a" znači "samra" :)

2) If-then-else i "borba" gdje treba a gdje ne treba staviti ";".

Ovo je po meni boljka pascal sintakse, ali kako god. Bila sintaksta intuitinivna ili ne, ona se mora savladati da bi se moglo programirati.

Kritika nastavnika

Razumjevanje. Razumjevanje. Razumjevanje.

Rad Samrinog nastavnika mi se ne sviđa previše. 

Podržavam konkretan projekat. Međutim priprema đaka mora ukazati na ovo o čemu sam ovdje pisao. 

Priprema mora biti usmjerena na principe i osnovne pojmove - šta, kako, čemu služi.

Davati djeci zadatke koji su daleko od baznog znanja rezultira sljedećim:

  1. učenik ne može završiti zadatak
  2. učenik "podžoni" zadatak sa interneta ili svojih drugova
  3. roditelji pišu učeničke radove

Znači postoje samo dvije opcije: plagijat ili negativni rezultat.

Ne znam koja je gora. U stvari znam. Ova prva. Ona je rak-rana bosanskog obrazovnog sistema.

Treba ovdje još par stvari dodati: talentovanim učenicima ne treba sve rastavljati na proste faktore. Međutim, odgovorno tvrdim da većina učenika mora biti pripremljena na ovakav način. 

Sve dok ne dođu do tačke da razumjevaju sve sve bazne elemente i ključne koncepte(*****) učenici ne mogu pristupiti izradi konkretnog projektnog zadatka.

Pohvala koncepta u Samrinoj školi

U svim tim Samrinim projektima se ukazuje na metodološki pristup: planiranje, dizajn rješenja, pisanje dokumentacije kada se radi o informatičkom projektu.

To je odlična stvar. To je ispravno. Ali, bez bazičnog razumjevanja materije sva ta metodologija pada u vodu.

Postignuće

Projektni zadatak čiji bi finalni artifakt po pitanju izvornog koda bio hello world verzija 2 zajedno sa kvalitetnom dokumentacijom bi bilo VELIKO POSTIGNUĆE za učenika drugog razreda opće gimnazije. Dovoljno za najveću ocjenu.

Ako bi se tome dodala realizacija u još jednom statičkom jeziku (C/C++ ili java) i  jednom dinamičkom jeziku (python ili ruby), nakon čega bi slijedila komparativna analiza pojedinih rješenja, taj učenik bi bio "mraka".

Rezultat bi bio:

  1. učenik je ovladao osnovnim konceptima software development-a
  2. GENERALNI (multi OS, multi programming language) pristup bi mu pomogao suštinskom razumjevanju materije  

Sve dok se u školama na ovaj način ne bude pristupalo, prosječan učenik NEĆE NAUČITI GOTOVO NIŠTA.

Mi djeci moramo dati znanje da rasuđuju. Znanje da budu stvaraoci a ne konzumenti.

Zato kao roditelj tražim od prosvjetnih radnika ovom prilikom sljedeće:

Nastavnici i profesori učite našu djecu. Al oprave.

Za to vas plaćamo. Mogućnost izbora se uči.

hernad "The agresivni"

Ako mi kojim slučajem neki prosvjetni radnik kaže da su oni ograničeni nastavnim planom i programom ... uh .... bolje da mi ne bude u blizini.

Bojim se da bih izgubio moć samokontrole. Ja vas plaćam (plaćanjem poreza) da mi učite djecu, a ne da ispunite nastavne planove i programe !

Efekat nastavnika koji na kritike roditelja odgovaraju krilaticom: "Poštovanja plana i programa" redovno je poražavajuće za učenike, za ovu zemlju, za društvo u cjelini.

---

(*) misleći na Turbo Pascal okruženje koje imaju instalirano u školi a ona kod sebe nema

(**) Pretpostavka je da u direktoriju c:\github\CT_Pascal postoji source code projekta - u ovom slučaju geometry_calculator.pas. 

(***) Ovo je pojednostavljeno, nakon Compile procesa koji proizvodi objektne fajlove (.o), slijedi Linking proces. fpc compiler automatski nakon uspješne kompilacije vrši link proces i proizvodi executable code. Za profil čitaoca kao što je Samra, gornja šema je sasvim dovoljna.

(****) string - niz znakova

(*****) U konkretnom primjeru, sve dok u potpunosti ne razumiju hello.pas verziju 1 i hello pas verziju 2

613 views and 13 responses

  • Oct 21 2011, 3:06 AM
    Ernad Husremović responded:
  • Oct 21 2011, 5:18 AM
    Ernad Husremović responded:
  • Oct 21 2011, 11:52 AM
    famous samra responded:
    a) linux, Mac OS X (unix like operativni sistemi)

    Kada se nalazimo na terminal konzoli,

    ~/github/CT_pascal$ ./geometry_calculator

    b) Microsoft DOS/Windows OS familija operativnih sistema (DOS, Windows XP, Windows 7)

    Slično, na komandnom promptu Windows OS-a:

    c:\github\CT_pascal> geometry_calculator.exe

    je li ovo imenuje fajl ili ga pokreće ili oboje?

  • Oct 21 2011, 12:03 PM
    Ernad Husremović responded:
    Samra, tim primjerima se pokreće execute fajl (geometry_calculator) koji je dobijen procesom kompajliranja
  • Oct 21 2011, 12:12 PM
    famous samra responded:
    a kako se imenuje fajl?
  • Oct 21 2011, 12:33 PM
    Ernad Husremović responded:
    Ne pratiš pažljvo tekst.

    prije toga imaš: "3) Compile sa konzole" u kome se navode mogući načini kompilacije. Proizvod te kompilacije je u svakoj opciji izvršni fajl koji se imenuje na osnovu imena source fajla (.pas fajla).

    fpc samra_1.pas će generisati samra_1 execute na unix sistemu, samra_1.exe na windows sistemu.

    Jesam li ti sada dovoljno pojasnio.

    Probaj na svom računaru i razmišljaj. Pročitaj onoliko puta dok ne shvatiš principe.

  • Oct 22 2011, 2:17 AM
    famous samra responded:
    Zato kada napisem i spasim neki code kao npr samra.pas ne mogu odmah kompajlirati jer mi prijavljuje gresku da nisam kompajlirala souce file? Kada sam otvorila file na finderu i kompajlirala proces je bio uspjesan.
  • Oct 22 2011, 2:39 AM
    Ernad Husremović responded:
    Budi konkretnija. Ne mogu ti pomoći dok jasno ne izložiš problem koji imaš.

    Konkretno, nemoj PREPRIČAVATI o grešci koju ti program prijavljuje nego je doslovno navedi.

    > Kada sam otvorila file na finderu i kompajlirala proces je bio uspjesan

    Iz ovoga ne mogu znati KAKO, ŠTA si ti ovom prilikom učinila.

    Zaključak: ne mogu ti pomoći dok jasno ne izložiš ŠTA si radila na koje probleme (prijave grešaka) si naišla.

  • Oct 22 2011, 2:42 AM
    Ernad Husremović responded:
    Iako ti ovo može djelovati kao još jedno babino "mučenje", kako ti ne želim pomoći, nisi u pravu.

    Moraš naučiti prijaviti svoj problem. On podrazumjeva da svom mentoru jasno i prezicno izložiš ono što si radila.

    Ovo je vrlo bitna vještina.

  • Oct 22 2011, 3:38 AM
    famous samra responded:
    kada napisem neki kod u editoru i sacuvam ga ne mogu da ga kompajliram jer se prijavi greska da nisam kompajlirala source code. Kada taj fajl otvorim u finderu moze se kompajlirati. Drugi fajl ni tako nisam mogla kompajlirati jer je opet prijavio gresku da nisam kompajlirala source code
  • Oct 22 2011, 9:29 AM
    Ernad Husremović responded:
    Opet si prepričala bez potrebnih detalja, vrlo slično kao predhodni put.

    Opet ne mogu razumjeti šta si radila.

  • Oct 22 2011, 11:07 AM
    Ernad Husremović responded:
  • Oct 28 2011, 5:09 AM
    sladja responded:
    :D