Programing on paper

Messziről jött ember azt mond, amit akar. A felvételi folyamán a legnagyobb részben az számít, hogy miként tudja a tudását demonstrálni.

Egyik nagyon tanulságos módszerem a papíron kiadott programozási feladat.

A feladat valami hasonló (szóban - fontos - mondom el):

Adott egy halom vasúti kocsi összekapcsolva. Minden egyes kocsi rendelkezik egy egyedi számmal, mint azonosítóval. A kocsikat úgy tudják mozgatni a szerelvényen belül, hogy rátolják egy nagy kör alakú platformra, amin egyszerre két kocsi fér el. A platformon álló két kocsit lecsatolják, majd a platformot 180 fokban megforgatják és a megfordult kocsikat újra összekötik a teljes szerelvénnyel. másik kocsipár forgatásához oda-vissza tologatják az egész szerelvényt.

A feladat: Írj egy olyan függvényt, ami a vasúti szerelvény tetszőleges reprezentációjára visszaadja, hogy mennyi forgatás szükséges ahhoz, hogy a szerelvények azonosító szerint sorrendben legyenek.

Kiemeltem pár kifejezést, amik fontosak, mivel azokkal voltak a legtöbb gondok. Lásd egy kicsit később.

Szándékosan szóban mondom el és tudatosan helyezek el benne nem tiszta részeket. Elvárásom, hogy a jelölt, jegyzetelje le a feladatot. Hagyom egy kicsit gondolkodni és felteszem a kérdést, hogy tiszta-e minden. Ha teljesen meg is érti, akkor a “sorrendben legyen” kifejezésre tisztázó kérdést kell feltenni (csökkenő vagy növekvő - válasz: tetszőleges :)).

A feladat nem bonyolult. Ha egy kicsit is jártas vagy az algoritmusokban, akkor rájössz, hogy egy buborékrendezés az alapja, plusz egy számolás, hogy hányszor volt csere. Mindig kihangsúlyoztam, hogy elfogadható, ha az algoritmus nem teljesen pontos, mivel papíron kell dolgozni, de valami buborékrendezés szerű kódot akkor is elvárok. Természetesen a pontos szintaxis sem szükséges.

Voltak jelöltek, akik ugyan felismerték, hogy rendező algoritmus kell, de a nekiálltak egy egyszerű kiválasztással vagy valami mással. És csak pislognak, amikor megkérdezem, hogyan is fog ez működni egy száztonnás vagonnal…

A “tetszőleges reprezentáció” kifejezéssel is gondok voltak. Volt, aki bizonyítani akarta, hogy milyen okos és nekiállt modellezni a vonatokat (egy halom osztály és leszármazott, meg ki tudja még mi minden). A “tetszőleges” kifejezés igazából a legegyszerűbbet jelenti. Jelen eseteben számok tömbjét vagy listáját.

Egy függvénynek értéket kell visszaadnia. Sokan teljesen elégedettek voltak, a számolással és az algoritmussal, de értéket már nem adták vissza. És a legfontosabb, a mellékhatása, pontosabban annak hiánya. Gyakorlatilag minden jelöltnél az történt, hogy az eredeti inputot rendezték. Az elvárt megoldás az input másolatával dolgozik.

Lehet, hogy szőrszálhasogatásnak tűnik, de ha jobban belegondolsz a minden fenti pont elképesztően fontos a való életben:

Egy egyszerű feladat és mégis rengeteget elárul a fejlesztőről.


Management stack
Oct 14, 2013
comments powered by Disqus

Links

Cool

RSS