Programozasi logika oktatasa koleganak

Sziasztok!

Egy nem mindennapi kerdessel fordulnek hozzatok. Van egy kollegank akinek sajnos nincs semmilyen programozasi ismerete. A mi rendszerunkhoz viszont szukseges a programozasi logika. Na ezt kellene valahogy fejlesztenem nala. Sajnos arra nincs ido, hogy egy programozasi nyelvet megtanuljon.
Van esetleg valami gyors bevalt otlet? Csak alap dolgok kellenenek (for, switch, adatbekeres, adatkiiras), annak is a logikaja. Sajnos a mi rendzserunkben levo peldak magas szintuek neki. Probaltam par peldat kuldeni pl for ciklusrol, de nem ertette mi miert tortenik.

Varom otleteiteket.

SZERK:
Megtortent az oktatas. Probaltam minel interaktivabb lenni. Sikerult. Gyerek modszerekkel mutattam be a regi projektjeinket, hogyan mukodnek. Vegere eleg jol belejott. Utolso peldana, mar nagyjabol elmagyarazta mi is tortenik ott.

Koszonom a segitsegeteket! Nagyon hasznos volt!

Hozzászólások

Az meg milyen?


<?php
$j=1;

while ($j!=5) {
for ($i=1;$i<=4;$i++) echo $i.",";
echo "\n";
switch ($j) 
{
case 1: printf("%d kis mackó vígan lép.\n%d kismackó ugrál, fordul,\nÚgy nevet a könnye kicsordul.\n",$j,++$j); break; 
case 2: printf("%d kis madár %d-t lép.\n%d szem búza volt ott,\nAbból %d-et bekapott.\n", --$j,++$j,++$j,$j-2); break;
case 3: printf("%d kis nyuszi jaj de szép.\n%d füle %d kis lába.\nPuha fehér a bundája.\n",$j-2,$j-1,++$j); break;
case 4: printf("Ez %d mese vígan légy\n", $j++-3); break;
};
printf("\n");
};

A kb. egy-két percbe amit a megírására szántam kb. ennyi fért bele (ezért is php ott lehet gyorsan randán). Tudom, egy jó programozó ennyi idő alatt dokumentációval együtt megszülte volna, de én üzemeltető vagyok.
Bár amilyen magyar szoftvercégek által szállított megoldásokkal találkoztam eddig (bár a mellény mindig nagy), néha elgondolkodom, hogy ennél még talán nekem is sikerülne jobbat. :P
Egyébként mi vele a baj, nem lehet belőle megérteni a for ciklust, vagy valahol elszámolja a malackákat? :D

[off]
Nem kötekedés, de tényleg érdekel: mi annak az oka, hogy a Liferay thingy fél oldalas üres részekkel generálja a html forrást (valami enterprise olvashatósági ?)?
[/off]

Értem én, nem is nagy dolog, de végülis CMS-t (is) árulnak, szerintem ha az ember CMS-t választ az első 10-be tutira benne van, hogy nézzük már mit is generál (mivel úgye az egyetlen dolog amit kívülről a látogatók látnak belőle). És az, hogy az első 100 sorba egy HTML tag sincs a forrásba legalábbis nálam nem esik bele az "enterprájz gréd" kategórába igazából a "vállalható"-ba se. (Főleg, hogy a pagespeed is alacsonyabb mint egy self-hosted kábelnetes joomla install)
És nem azt mondom, hogy az én óvodás php scriptem beleesett, de nem állásra pályáztam és nem is próbáltam eladni enterprise grade versmondóként. :D


/* This was a very serious effort to teach peeps from kindergarden to programming.
   (v. 2.02) have to keep up with Linux
   Man they hate me so from now this is under GPL (whatever version) or BSD who cares how many clause
*/
$j=0;
do {         
for ($i=0;$i<4;printf("%d,",++$i)) ; 
printf ("\n");
switch ($j) 
{
case 0: printf("%d kis mackó vígan lép.\n%d kismackó ugrál, fordul,\nÚgy nevet a könnye kicsordul.\n",++$j,++$j); break; 
case 2: printf("%d kis madár %d-t lép.\n%d szem búza volt ott,\nAbból %d-et bekapott.\n", --$j,++$j,++$j,$j-=2); break;
case 1: printf("%d kis nyuszi jaj de szép.\n%d füle %d kis lába.\nPuha fehér a bundája.\n",$j,++$j,++$j+1); break;
case 3: printf("Ez %d mese vígan légy\n", $j++-2); break;
};
printf("\n");
} while ($i!=$j);

Valamit fejlődtem azért? :D Hogy csinálná egy "IT építész"?

szerintem az a gond vele, hogy "sok",

olyan "finomságokat" is használsz, amelyek további magyarázkodásra/gondolkodásra késztetnek, és ezáltal elvonod a tanuló figyelmét a "lényegről", a for ciklusról(?) (mivel arra hivatkozol, ezért feltételezem, hogy annak bemutatása volt a szándék),

pld. megkérdezheti a kolléga, hogy a paraméterek kiértékelési sorrendjére van-e valamilyen szabály?

akinek nem egyértelmű, hogy mire gondolok:
a te kódod online futtatva: http://ideone.com/G4LuIk
"átírva" (nem gondolkodva, csak az elvárt szintaxishoz alkalmazkodva) C-re: http://ideone.com/FusO37 (nem így tördelném, de tartottam magadat a példádhoz)

azt írod, hogy üzemeltető vagy, nem programozó, és ez alapján esetleg meg is lepődhetsz a C-s kód kimenetén,

ha tisztában voltál a felvetett "problémával", akkor meg feleslegesen leterheled a tanulót, annak a "tárgyalásával", ha meg nem említed, akkor berögzülhet neki olyan "minta", ami egy megváltozott környezetben nem fog működni,

Én nem vagyok tanár, ami a for cikluson kívül van egyszerűen felkelti a kíváncsiságot és legalábbis nálam mindig az volt a mozgató erő. (azzal sosincs baj, ha valami gondolkodásra késztet mert az vezet végülis a megoldáshoz) :)

Szerintem nem azt akarod vele megtanítattni mi az a for ciklus, hanem gondolkodni akarod megtanítani.

Nem vagyok programozó, de volt alkalmam villamosmérnökök számára programozást tanítani (C, alapszinten; hallgatók: mindenféle elméleti alapismeret nélkül). Egy lényeges dologra rájöttem (jó, valójában többre is): Az olyan példák/problémák, amik sokkal egyszerűbben is megoldhatóak, csak rontanak a helyzeten. A csoportban mindig lesz legalább egy ember*, aki rájön, hogy ez messze nem a legegyszerűbb megoldás. Ezt jelezni is fogja. Ilyenkor meg lehet próbálni hivatkozni arra, hogy ilyen-olyan okok miatt választottad a bonyolult módszert, de megvan az esélye, hogy az oktatott azt gondolja, hogy nem is értesz ahhoz amit oktatni akarsz. Pedig csak tanítani nem tudod.

Ha már mindenképpen egy bonyolult, felesleges dolgokat tartalmazó megoldást választasz (mert például nem ismersz egyszerűbbet), akkor még az ismertetése előtt el kell mondani, hogy ezt most csak pedagógiai céllal teszed, és a gyakorlatban nem így oldanád meg. Utána pedig elmagyarázod, hogy miért nem találtál jobb példát.

*: Mivel az eredeti problémafelvetésben csak egy emberről van szó, így lehet reménykedni, hogy elég hülye ahhoz, hogy ezt észrevegye. Bár ebben az esetben nem biztos, hogy megéri nagy erőket bevetni az illető „okosítására”.

-----

(&%;_98\<|{3W10Tut,P0/on&Jkj"Fg}|B/!~}|{z(8qv55sr1C/n--k**;gfe$$5a!BB]\.-

Az nem baj, ha talál egyszerűbbet (a sikerélmény is előre visz), de értse , hogy miért működik a bonyolult. Mintaprogramokkal amik elszámolnak 1-től 4-ig (szerintem) nem fogod fejleszteni a logikai készséget, mivel ami ránézésre egyértelmű nemigen fogja gondolkodásra sarkalni az embert.
Márpedig ha nem hajlandó agyalni akkor veszett fejsze nyele az egész.

És ha sikerült megérteni, akkor lehet demózni C-ben mint fenn és felvetni, hogy vajon mi lehet az oka, hogy ott más az eredmény, egyszerűen azért mert szerintem amire magától ébred rá az ember jobban berögzül.

Tapasztalataim szerint ez nem így működik. Ha rájön az oktatott, hogy van egyszerűbb megoldás is, akkor már nem akarja megérteni a bonyolultat, mert már magától ráébredt, hogy itten-mostan őt át akarják verni.

Olyan feladatokat kell kitalálni, amire a bemutatni kívánt utasítás/módszer/elv adja a legegyszerűbb megoldást. Legalábbis a „józan paraszti ész” szerint. Ez ugyan több kreativitást kíván az oktatótól, de az eredmény kárpótolni fogja. Ha valakinek ez problémát okoz, akkor ne akarjon másokat oktatni. Ettől függetlenül még kiváló programozó is lehet az illető. Legfeljebb nem jó tanár.

-----

(&%;_98\<|{3W10Tut,P0/on&Jkj"Fg}|B/!~}|{z(8qv55sr1C/n--k**;gfe$$5a!BB]\.-

Lehet igazad van, de ha visszagondolok én soha se gondoltam, hogy a tanárom hülye, csak hogy másként állt hozzá, volt ez a remek Nebulo-1:

http://www.hobbielektronika.hu/forum/getfile.php?id=232543

Volt a feladat, hogy ki kell írni a displayre xy-z memória címen lévő értéket, és ő úgy oktatta mikor hogy az előről-hátra mikor hátulról-erőle olvasva jópár lépést meg lehetett spórolni, és nem gondoltam, hogy hülye csak nem szerettem gépelni annyira (elég volt egyetlen byteot félrenyomni és kezdődhetett a műsor előről) :(
De ha egyvalamire megtanította az embert, az az volt, hogy "think more like a computer" (and yes, i can tell you there are no objects :P)

Teljesen egyetértek. Én is tanítottam már sok mindent (matematika, szoftverfejlesztés, küzdősportok), de a legjobb megoldás rendszertől függetlenül az volt, hogy
vegyünk egy problémát, majd adjunk rá egy egyszerű megoldást. Majd nehezítsük a problémát, és ezáltal hozzuk be az újabb-újabb módszereket, amivel a problémát meg
lehet oldalni.

Hogy sikerült ilyen kollégát tenni ilyen rendszer mellé? :)

--

Ezek első féléves anyagok voltak, ha jól emlékszem.
Nincs esetleg valakinek érthető és használható jegyezte?

Mozgassatok/forgassatok együtt teknőcöt logoban, előbb egyenként léépkedve, aztán ismétléssel (aka. ciklusban), kérjetek be osztandót, osztót, ellenőrizzétek a nulla voltát, és osszatok, ha lehet... mint bárki más, amikor kezdi.

Hacsak nem jó matekos (absztraktos) az illető, akármilyen programnyelv nélkül nehezebb lesz, mint kiszúrva egy egyszerű nyelvet, közösen átvenni, hogy mit, miért és ott konkrétan milyen paranccsal csinál.

(SZERINTEM, a mosógépes, meg teát főzős rávezetők eleinte csak a homályt növelik.)

Szerintem működő példán keresztül könnyebb megérteni a dolgokat, ahhoz meg kell egy konkrét nyelv. Na persze az alap dolgok szintaxisának megtanulását még nem nevezném a nyelv megtanulásának, szóval az, hogy phpban $x a változó, és annak lehet értéket adni, meg if, for, stb. esetleg függvények, ez jó kezdésnek. Ez az elvek megértéséhez elég lehet, de ez még nem a php megtanulása szerintem. De persze később az is lehet belőle, ki tudja.

Próbáld meg előbb az alapvető programszerkezeteket (szekvencia, elágazás, ciklus) elmagyarázni akár rajzos formában.

Ha azt megértette akkor tovább lehet lépni egy programnyelv felhasználásával a strukturált programozás felé egészen a magasabb absztrakciós szintekig.

Új kolléga?

szerk:
Úgy értve, hogy új kolléga után nézni esetleg.
Persze ha kifizetődőbb tanítani, mint egy olyat alkalmazni, akinek már megvan ez a készsége, akkor sok sikert hozzá.

Awk script? Egyik haverom elte fizikára jár, ott volt ilyen. Nulla programozási ismerettel (mármint nála) simán megértettem vele néhány óra alatt, és nagyon egyszerű, de vannak benne feltételek, ciklusok stb. És viszonylag C szerű.

Motiváció a kulcsszó. Motivált? Akar tanulni? Ha nem, akkor teljesen felesleges tanítani.

Aztán olyannak is hívják ám, mint szintaktika meg szemantika, no é_s_truktúra .
A logikus, az a Mr. Spock. :)

Kezdd a code.org-on. A scratch volt nálunk is az induló, de csak közepesen sikerült felkelteni az érdeklődésüket. A code.org-on szépen vezetik fel a rakás feladattal, ugyanaz a struktúra mint a scratch-ben, és mivel népszerű játékokból vették át a grafikát, egyből rácuppantak.

Néhány adatponttal szeretnék hozzájárulni a témához.

A $cégnél egy ideje úgy alakult, hogy az addig nem programozóként dolgozó kollégákat kellett átképezni programozással kapcsolatos munkakörbe (pl. tesztelőnek).

Hárman (mind értelmes, jól oktató emberek) háromféle elképzeléssel álltak neki bevezető programozást oktatni nekik:

Az egyik elemi példákból kiindulva (hogyan cserélnél meg egy tojástartóban két tojást, ha csak egy kézzel nyúlhatsz bele és egyszerre egyet foghatsz meg stb.) flowchartokkal és struktogramokkal magyarázott programozási tételeket.

Eredmény: mérsékelten negatív, amennyire követtem, azt is eltántorította a témától, akiben amúgy lett volna hajlandóság.

A másik awk-ban írt példákon mutatta be az alapfogalmakat, mint változók, feltételek, ciklus.

Eredmény: alig valami. Elméletben lehet, hogy megértették, de a vizsgafeladatokat jellemzően nem tudták megoldani.

A harmadik egy nagyon rövid elméleti bevezető után egy kész, nem egészen triviális, pygame-ben írt játékot mutatott be, aztán elemzett, hogy mi mit csinál.

Eredmény: látványosan pozitív. A résztvevők közül többen pofás és egész élvezetes játékot tudtak összerakni - nyilván a példa alapján, segítséggel, nem optimális módon, de saját ötletből és működően.

A tanulság talán annyi, hogy a motiváció fenntartása és a minél hamarabb visszajelzés nagyon fontos:
a tanulónak leginkább azt kell meglátnia és elhinnie, hogy a programozás megtanulásával olyan dolgokat is meg tud majd csinálni, amelyeket korábban nem; tehát hogy mindez neki hasznos lesz.

https://scratch.mit.edu

Ha nem fiatalabb a kolléga ~6 évnél akkor ez tuti hasznos :). A 6-7 éves korosztályon tesztelve. És "látszik" minden.

Üdv
tabatip