Problémakeresés, megoldás, implementáció¶
Miből is áll egy projekt?¶
Amikor a technológiáról beszélünk, legtöbben csak a konkrét programozást értik alatta - és azon belül is főleg az algoritmusokat, szinte teljesen elfeledkezve az ipari programozásról (“software engineering”). Ezek valóban nagyon fontos dolgok, de csak egy részük a valós projekteknek.
Nézzünk egy konkrét projektet, pl. a Facebookot. Ha teljességében akarjuk megérteni, akkor három részre bonthatjuk:
- Implementáció - szoftvertervezés (“software engineering”) és projektvezetés (“project management”). Amikor már világos, hogy mit akarunk megépíteni, akkor a megvalósítás a cél. Tudjuk, hogy news feedet szeretnénk, photo tagginget és üzeneteket - de hogyan implementálunk egy olyan webappot, ami képes felhasználók százmillióit kiszolgálni egyszerre, elképesztő mennyiségű adatot feldolgozni, és ami az év egyetlen percére sem válik elérhetetlenné, a világ semelyik pontján? Ez a technológiai rész. A másik egy szervezési kérdés: hogyan találunk elég és megfelelő embert hogy megvalósítsuk a tervünket, és hogyan hajtunk végre egy hosszú és bonyolult tervet?
- Megoldás - terméktervezés (“product design”). Ehhez azonban tudni kell, hogy mit akarunk építeni. Tegyük fel, hogy szociális kapcsolatokra építő, azokat segítő alkalmazást szeretnénk készíteni. Mit építsünk? Legyen egy levelező app? Legyenek csak képek? Esetleg a képek tűnjenek el néhány másodperc után? Legyen news feed? Legyen mindenkinek publikus, vagy legyen privát? Követni lehessen másokat, vagy barátokat hozzáadni, vagy valami más? Hogyan döntjük el, hogy melyik megoldást választjuk? Hogyan fordítjuk le a megoldást technológiára?
- Probléma. Végül ami ezt is megelőzi, az a probléma beazonosítása. Hogyan vesszük észre egyáltalán, hogy van igény egy szociális alkalmazásra?
Tehát a technológia egy eszköz. Sajnos a mai világban szinte kizárólag végrehajtásra tanítják az embereket: valaki megmondja neked a tutit, te pedig azt leprogramozod. Szinte minden cég is így működik. És habár a magas minőségű implementáció valóban nagyon fontos, az odáig vezető út - egy fontos probléma beazonosítása és arra a megfelelő válasz kitalálása - talán még fontosabb - és mindenképpen kevesebben csinálják. Ezt a részt nem tanítják, és főleg nem gyerekeknek.
A techtábor¶
Tehát akkor miket is fogunk tanulni?
- Hogyan találjunk problémákat?
- Hogyan találjunk rájuk működő megoldásokat?
- Hogyan valósítsuk meg azokat az ötleteket?
Ezek főleg gondolkodásmódok, és kevésbé konkrét technikák (habár azokból is van bőven). Gondolkodásmódokat pedig szinte csak gyakorlás és felfedezés útján lehet megtanulni/felfedezni - legfeljebb gyorsítani lehet mentorok segítségével - ezért ez egy gyakorlati tábor lesz, és nektek is valami valós problémát kell majd találnotok majd azt teljességében megvalósítani.
Mi tehát a célotok az év végére? Valami “hasznos” kreálása. Fontos, hogy nem akkor számítotok sikeresnek, ha ügyesen prezentáljátok a munkátokat, vagy ha szép a kód, vagy ha menő technológiát használtok, vagy ha ötöst ad a tanár - hanem akkor, ha igazán megoldottatok valami problémát és/vagy készítettek valami hasznosat/szórakoztatót/használhatót.
Eközben persze mindenféle akadályba és ütköztök majd - mindenképpen nagyon meredek lesz a tanulási görbe. De pontosan ezáltal tanulhatjátok majd meg a megfelelő eszközöket és gondolkodásmódokat. Mi, a táborvezetők és mentorok, ebben állunk a rendelkezésetekre: mindegyikőnk másfajta tapasztalattal, erősséggel és gyengeséggel bír, és így mindegyikőnk másban fog majd tudni segíteni.
Nagyon fontos érteni, hogy ez egy nagyon flexibilis program, és rajtatok múlik, hogy mennyit tanultok belőle. Használjátok ki a lehetőséget arra, hogy minél többet tanuljatok: beszéljetek sokat a mentorokkal, kérdezzetek, dolgozzatok keményen, küzdjetek, és minél több gyereket ismerjetek meg.
Eredettörténetek¶
Kezdjük a problématalálással. Nagyon gyakran az emberek elintézik annyival a feltalálók és vállalkozók munkáját, hogy “jókor voltak jó helyen”, vagy “szerencsések voltak”. De ha megnézed a konkrét példákat, a valóság mást mutat.
Note
Mit gondolsz, miért mondják ezt az emberek? Egy magyarázat az, hogy ha nem ezt állítanák, az belső konfliktushoz vezetne: akkor ezek szerint én is csinálhattam volna valamit, csak vagy nem voltam elég jó hozzá, vagy nem küzdöttem eléggé - és ez ellentmond azzal a belső képpel, hogy én jó vagyok és bármire képes lennék.
Az egyik legjobb módja a megfelelő intuíció kifejlesztésének az, ha utánanéztek, hogy mások miket gondoltak és mit csináltak amikor nekiestek egy-egy problémának.
Az egyik példám a Codecademy. Sims nem tudott programozni, és nem bírt a könyvekből megtanulni. Ehelyett a projektalapú, valós programozás sokkal jobban működött neki. Úgyhogy megoldotta a saját problémáját, és csinált egy weboldalt, amiben konkrét feladatokat megoldva programozhatott. Az igazán fontos észrevétel az, hogy ez nem csak számára volt probléma, hanem sok-sok másik embernek is: úgyhogy a weboldalával százezrek/milliók problémáját oldotta meg. Így lett egy sikeres projektje.
Ő tehát észrevette a saját problémáját, rájött, hogy ez másoknak is probléma, és talált egy jól működő megoldást.
Note
Most nézz utána a kedvenc cégednek vagy projektednek: hogyan kezdődött? Példák: Google, Facebook, Scratch, Tesla, SpaceX, Palantir, Snapchat, Prezi, Apple (iPod, iPhone), Wiki, Quora, PayPal. Próbáld meg szétválasztani a problémát, a megoldást, és a megvalósítást!
Egy másik példa a Tesla. Elon Musk egy ismert, mindenkit érintő problémát vett elő: a globális felmelegedést és a potenciális katasztrófát amit a fosszilis üzemanyagok felélése hozna. Erre talált ki egy kreatív megoldást: csökkentsük drasztikusan a fosszilis üzemanyagok felhasználását úgy, hogy elektromos autókra állunk át az egész világon. Ez persze egy méretes feladat, úgyhogy egy sok lépésből álló tervet dolgozott ki: ezen az oldalon elolvashatjátok a részleteket - nagyon izgalmas és tanulágos. A rövid verzió az, hogy luxus elektromos autókat kezdett gyártani, hogy az így befolyó összegből felgyorsíthassa az elektromos motorok és elemek kutatását, és egyre olcsóbban adhasson el autókat. Végül a találmányait ingyenesen elérhetővé tette, hogy az összes autós cég átállhasson az elektromos autók gyártására. Egyelőre jól halad :)
Találmányok¶
Ezek a projektek gyakorlatilag találmányok. Ezért aztán ezek is jó példákat mutatnak a probléma/megoldás/megvalósítás hármasra.
Note
Válassz egy teljesen hétköznapinak tűnő dolgot, és nézz utána annak. Például: golyóstoll, papír, futószalag, telefon.
Hasznosság¶
Mielőtt mi is belekezdenénk a problémakeresésbe, mégegy fontos dolgot meg kell említeni: a hasznosságot.
Sokszor az emberek az alapján választanak projektet, hogy mi menő, vagy érdekes, vagy szórakoztató. Ezek persze szempontok, de egy fontos dimenzió amit ritkábban vesznek figyelembe az emberek az a hasznosság. Megoldasz-e valami problémát, és ha igen, akkor mennyire komolyat, mennyi embernek, mekkora hatással? Ez a nehéz része a projektek értékelésének, illetve ez egy nagyon fontos kritériuma minden valamirevaló projektnek, ezért ezt fogjuk gyakorolni. Erre van szükség ha valami maradandót és hasznosat akarsz csinálni.
Note
A fenti projektek/cégek közül melyik mennyire tűnik hasznosnak? Melyikben mi az érték?
Fontos, hogy a hasznosságot ne keverjétek össze a pénzzé tevéssel (“monetisation”).
Note
Melyik projekt hogyan teszi pénzzé a generált értéket?
Projektválasztási szempontok¶
Összességében tehát a következő értékelési pontokat vedd figyelembe a választáskor:
- Legyen a projekt számodra kifejezetten izgalmas/vonzó.
- Legyen a projekt hasznos/újszerű (vagy neked vagy a környezetednek).
- Legyen a projekt megvalósítható.
Kis példaprojektek a közeli köreinkből¶
- Preferenciamátrix. Egy beszélgetés során észrevettem, hogy nem tiszták a saját preferenciáim. Például ha lakást választok, mik a számomra legfontosabb szempontok? Ugyanebben a beszélgetésben egy megoldás is előkerült: az úgynevezett preferenciamátrix. Ebben páronként hasonlíthatod össze az elemeket, és az eredményből egy sokkal valósabb, és általában meglepő listát kapsz. A webapp elérhető itt.
- MaMuT daloskönyv. A MaMuT nyári matektáborban az egyik táborzáró esemény a tábortűz. Ehhez mindig papíron osztottuk a szövegkönyveket, de ennek sok hátránya volt: sok papírt pazarolt, nehéz volt frissíteni a tartalmat, nehéz volt gyorsan megtalálni a dalokat, nehéz volt sötátben olvasni azt, stb. Úgyhogy Nikházy Laci csinált egy daloskönyv weboldalt, ami offline elérhető volt a gyerekeknek az okostelefonjaikon.
- Barkochbatörténetek. A matektáborokban barkochbatörténeteket mesélünk. Itt két probléma is felmerül: nem tudom, hogy melyik történetet ismeri már a szoba 2) nem ismerem a barkochbatörténeteket. Úgyhogy készítettem egy appot, amin követhetem a történeteket, a megoldásokat, és azt is, hogy ki melyik történetet ismeri.
- Tar Zoli: Lajos bácsi állatkertje. Az egyik gyerek a Beluga matekcsoportban észrevette, hogy nagyon sok állatbecenév létezik már, de nem világos, hogy kihez mi tartozik. Úgyhogy csinált egy kis játékot, amiben minden állat és a hozzájuk tartozó emberek szerepelnek.
- Tábori időpontok. A táborvezetők igyekeznek úgy beosztani a hétvégéket a tábori csoportok között, hogy minél kevesebb gyerek hiányozzon. Ez eddig egy nagyon manuális feladat volt, úgyhogy írtam egy programot, ami az összes esetet végignézi. Ez hasznos a táborvezetőknek, mert gyorsabb, és mert jobb eredményeket kapunk (azaz kevesebb hiányzó lesz).
- Techtábor. Maga a techtábor is egy ilyen projekt, habár a megoldás nem közvetlenül technológiai, hanem inkább oktatási és szervezési. A megoldandó problémát az előbb beszéltük át: ilyen hasznos készítését nem oktatják.
Hogyan találjak ötletet?¶
Nincsen általános módszer arra, hogy hogyan talál az ember ötletet. Meglepően nehéz tud lenni, mivel a legtöbbünk nem gyakran találkozik ilyen feladattal - az iskola tipikusan nem várja el, hogy ilyeneken gondolkodjunk, hanem előre kitalált feladatokat ad. A jó hír az, hogy ez is egy gyakorolható képesség.
Azért néhány tippem mégiscsak van, ami segíthet egy ötlet találásában.
- Van-e valami, amit te magad hasznosnak találnál? Valami, amit te is szívesen használnál.
- Van-e valami, ami valaki másnak segítene?
- Van-e valami téma vagy eredmény ami téged nagyon érdekel vagy nagyon szórakoztat?
- Például: Egy barátomat nagyon érdekelte, hogy a két kupac kavicsos játékban mik a nyerő állások különböző esetekben: pl. ha maximum 4 kavicsot lehet egyszerre elvenni, vagy ha három kupac kavics van. Ezért írt egy programot, ami nemcsak kiszámolja ezeket a nyerő helyzeteket, hanem kis is rajzolja őket - és nagyon szép eredményeket talált. Itt meg is nézheted néhány ábráját: https://github.com/patrickszmucer/cubes
Egyéb tippek.
- Amikor ötletelsz, ne dobj el ötleteket azért, mert nem tudod, hogy hogyan programozd le. Tartsd meg az ötletet, írd meg, és segítek megmondani, hogy hogyan tudod leprogramozni.
- Az ötletek sajnos nem kérésre jönnek. Érdemesebb valamilyen huzamosabb időtartam alatt, páldául egy héten keresztül újra és újra elgondolkodni; illetve fontos nyitva tartani a szemünket, és észrevenni, ha egy új lehetőség vagy ötlet jön elő.
- Nem attól jó egy projekt, hogy az ötletét te találtad ki, hogy egyedül találtad-e ki, vagy hogy teljesen eredeti-e. Az ötletek nem így működnek. A lényeg az, hogy valami megvalósult. Hogy az hogyan jött létre, ki adott hozzá ötleteket, ki vett részt a leprogramozásában stb., az már csak a megvalósítás részlete.
Több ötletem is van. Hogyan válasszak? Ez rajtad múlik! Én a következő kérdések alapján döntenék:
- Mennyire találod te magad érdekesnek a projektet?
- Mennyire hasznos az eredménye?
- Mennyire új az eredménye? (Más programmal is meg lehetne csinálni ugyanezt?)
- Mennyit tanulsz a projektből?
- Belefér az évbe?
A projektek¶
A projekt koncepciókat írjátok is le, majd osszátok meg őket a csoporttal a közös google drive mappánkban.