
Ha érdekel a programozás, akkor már láthatta ezt az idézetet korábban:
"Ebben az országban mindenkinek meg kell tanulnia programozni a számítógépet, mert az megtanít gondolkodni." - Steve JobsValószínűleg arra is kíváncsi volt, hogy pontosan mit jelent programozóként gondolkodni? És hogy csinálod ??
Lényegében,mindez a problémamegoldás hatékonyabb módjáról szól .
Ebben a bejegyzésben az a célom, hogy így tanítsalak.
Végére pontosan tudni fogja, milyen lépéseket kell tennie a jobb problémamegoldó érdekében.
Ez miért fontos?
A problémamegoldás a meta-készség.
Mindannyiunknak vannak problémái. Nagy és kicsi. Néha nagyon jól esik, ahogyan velük bánunk.
Hacsak nincs rendszere, valószínűleg így „oldja meg” a problémákat (ezt tettem, amikor elkezdtem kódolni):
- Próbálja ki a megoldást.
- Ha ez nem működik, próbálkozzon másikkal.
- Ha ez nem működik, ismételje meg a 2. lépést, amíg nem sikerül.
Nézd, néha szerencséd van. De ez a legrosszabb módszer a problémák megoldására! És ez hatalmas, hatalmas időpazarlás.
A legjobb módszer a) keretrendszer megléte és b) gyakorlása.
"Szinte minden munkáltató elsődlegesen a problémamegoldó készségeket helyezi előtérbe. A problémamegoldó készségek szinte egyöntetűen a legfontosabb képesítés, amelyet a munkáltatók keresnek.. , az összetett problémák ugyanolyan értékesek (ha nem is inkább), mint a munkához szükséges alapvető technikai készségek. ” - Hacker Rank (2018. évi fejlesztői készségjelentés)Legyen kerete
A megfelelő keretrendszer megtalálásához követtem Tim Ferriss tanulásról szóló könyvében szereplő „A 4 órás séf” tanácsokat.
Két igazán lenyűgöző emberrel készítettem interjút: C. Jordan Ball-ot (a Coderbyte több mint 65 000 felhasználója közül az 1. vagy 2. helyet), és V. Anton Spraulot (a „Gondolj úgy, mint egy programozó: Bevezetés a kreatív problémamegoldásba” című könyv szerzője) ”).
Ugyanazokat a kérdéseket tettem fel nekik, és tippelj mit? A válaszaik elég hasonlóak voltak!
Hamarosan te is megismered őket.
Sidenote: ez nem azt jelenti, hogy mindent ugyanúgy csináltak. Mindenki más. Más leszel. De ha olyan alapelvekkel indul, amelyek mindannyian egyetértünk jónak, sokkal gyorsabban és sokkal előrébb jut.
"A legnagyobb hibát, amelyet új programozóknak elkövetek, a szintaxis megtanulására összpontosít, ahelyett, hogy megtanulná, hogyan kell megoldani a problémákat." - V. Anton SpraulSzóval, mit kell tennie, ha új problémával találkozik?
Itt vannak a lépések:
1. Értsd meg
Pontosan tudja, mit kérnek. A legtöbb nehéz probléma azért nehéz, mert nem érted őket (ezért miért ez az első lépés).
Hogyan lehet tudni, ha megérti a problémát? Amikor egyszerű angolul meg tudja magyarázni.
Emlékszel, hogy elakadtál egy problémán, elkezded magyarázni, és azonnal lyukakat lát a logikában, amelyet korábban nem láttál?
A legtöbb programozó ismeri ezt az érzést.
Ezért írja le a problémáját, rajzoljon egy diagramot, vagy mondja el másnak (vagy valami ... néhány ember gumikacsát használ).
- Ha valamit nem tudsz egyszerűen megmagyarázni, akkor nem érted. - Richard Feynman2. Terv
Ne merüljön el közvetlenül a megoldás nélküli megoldásban (és valahogy remélje, hogy át tudja zavarni). Tervezze meg megoldását!
Semmi sem segíthet, ha nem tudja leírni a pontos lépéseket.
A programozásban ez azt jelenti, hogy ne kezdj el azonnal hackelni. Adjon az agyának időt a probléma elemzésére és az információk feldolgozására.
A jó terv elkészítéséhez válaszoljon erre a kérdésre:
"Az X bemenetnél milyen lépések szükségesek az Y kimenet visszaadásához?"
Sidenote: A programozóknak van egy remek eszközük, amely ebben segítségükre van ... Megjegyzések!
3. Oszd meg
Figyelj. Ez az összes legfontosabb lépés.
Ne próbáljon megoldani egy nagy problémát. Sírni fogsz.
Ehelyett ossza fel részproblémákra. Ezeket az alproblémákat sokkal könnyebb megoldani.
Ezután oldja meg egyes részproblémákat egyenként. Kezdje a legegyszerűbbel. A legegyszerűbb azt jelenti, hogy tudja a választ (vagy közelebb áll ehhez a válaszhoz).
Ezt követően a legegyszerűbb azt jelenti, hogy ez a megoldandó részprobléma nem attól függ, hogy mások megoldódnak-e.
Miután megoldott minden részproblémát, kösse össze a pontokat.
Az összes „almegoldás” összekapcsolása megadja a megoldást az eredeti problémára. Gratulálunk!
Ez a technika a problémamegoldás sarokköve. Ne feledje (olvassa el újra ezt a lépést, ha szükséges).
"Ha minden kezdő programozónak egy problémamegoldó képességet tudnék megtanítani, az a" csökkentse a probléma technikáját "lenne. Például tegyük fel, hogy Ön új programozó, és felkérik, hogy írjon egy programot, amely tíz számot és számot olvas melyik szám a harmadik legnagyobb. Egy vadonatúj programozó számára ez nehéz feladat lehet, annak ellenére, hogy csak az alapszintű programozási szintaxist igényli. Ha elakadt, a problémát valamivel egyszerűbbre kell csökkentenie. Mi lenne a harmadik legnagyobb szám helyett, ha összességében a legmagasabb lenne? Még mindig túl kemény? Mi lenne, ha megtalálnád a legnagyobbat a három szám közül? Vagy a kettő közül a nagyobb? Csökkentse a problémát addig a pontig, ahol tudja, hogyan kell megoldani, és írja meg a megoldást. Ezután kissé bővítse ki a problémát, és írja át a megoldást, hogy megfeleljen, és folytassa addig, amíg vissza nem tér vissza oda, ahol elkezdte. " - V. Anton Spraul4. Beragadt?
Mostanra valószínűleg ott ülsz, és azt gondolod: "Hé Richard ... Ez klassz és minden, de mi van, ha elakadtam és még egy alproblémát sem tudok megoldani ??"
Először vegyen egy mély lélegzetet. Másodszor, ez igazságos.
Ne aggódj, barátom. Ez mindenkivel megtörténik!
A különbség az, hogy a legjobb programozók / problémamegoldók inkább a hibákra / hibákra vannak kíváncsi, mintsem ingerültek.
Valójában három dolgot kell kipróbálni, amikor szembesülünk:
- Hibakeresés: Menjen lépésről lépésre a megoldásán, és próbálja megtalálni, hol tévedett. A programozók ezt hibakeresésnek hívják (valójában mindezt egy hibakereső teszi).
- Újraértékel:Lépj egy lépést hátra. Nézd meg a problémát más szempontból. Van-e valami, ami elvonatkoztatható egy általánosabb megközelítéstől?
Sidenote: Az átértékelés másik módja az újrakezdés. Törölj mindent, és kezdd újra friss szemmel. Komoly vagyok. Meg fog döbbenni, hogy ez mennyire hatékony.
- Kutatás:Ahh, jó a Google. Ezt jól olvastad. Nem számít, milyen problémád van, valószínűleg valaki megoldotta. Keresse meg azt a személyt / megoldást. Valójában tegye ezt akkor is, ha megoldotta a problémát! (Sokat tanulhat mások megoldásaiból).
Figyelem: Ne keressen megoldást a nagy problémára. Csak az alproblémákra keressen megoldást. Miért? Mert hacsak nem küzdesz (még egy kicsit sem), nem tanulsz meg semmit. Ha nem tanul semmit, akkor pazarolta az idejét.
Gyakorlat
Ne számíts arra, hogy csak egy hét múlva lesz nagyszerű. Ha jó problémamegoldó akarsz lenni, oldj meg sok problémát!
Gyakorlat. Gyakorlat. Gyakorlat. Csak idő kérdése, hogy felismerje, hogy „ez a probléma könnyen megoldható”.
Hogyan kell gyakorolni? Vannak lehetőségek a wazoo-n kívül!
Sakkrejtvények, matematikai feladatok, Sudoku, Go, Monopoly, videojátékok, cryptokitties, bla… bla… bla….
Valójában a sikeres emberek körében általános szokás a „mikroproblémamegoldás” gyakorlata. Például Peter Thiel sakkozik, Elon Musk pedig videojátékokat játszik.
"Byron Reeves azt mondta:" Ha meg szeretné tudni, hogyan nézhet ki az üzleti vezetés három-öt év múlva, nézze meg, mi történik az online játékokban. " Elon [Musk], Reid [Hoffman], Mark Zuckerberg és még sokan mások azt mondják, hogy a játékok megalapozták a cégeik felépítésében elért sikereiket. " - Mary Meeker (2017. évi internetes trendjelentés)Ez azt jelenti, hogy csak videojátékokat kellene játszania? Egyáltalán nem.
De miről szólnak a videojátékok? Így van, problémamegoldás!
Tehát meg kell találnia a gyakorlatot. Valami, amely lehetővé teszi számos mikroprobléma megoldását (ideális esetben valami tetszik).
Élvezem például a kihívások kódolását. Minden nap megpróbálok megoldani legalább egy kihívást (általában a Coderbyte-on).
Mint mondtam, minden problémának hasonló a mintázata.
Következtetés
Ez van, srácok!
Most már jobban tudja, mit jelent „programozóként gondolkodni”.
Azt is tudja, hogy a problémamegoldás hihetetlen művelési képesség (a meta-készség).
Mintha ez nem lenne elég, vegye észre, hogyan is tudja, mit kell tennie problémamegoldó képességeinek gyakorlásához!
Phew ... Nagyon klassz, igaz?
Végül azt szeretném, ha sok problémával találkozna.
Ezt jól olvastad. Legalább most tudod, hogyan lehet megoldani őket! (azt is megtudhatja, hogy minden megoldással javul).
- Éppen akkor, amikor úgy gondolja, hogy sikeresen áthaladt egy akadályon, előkerül egy másik. De ez az, ami érdekesnek tartja az életet. […] Az élet ezen akadályok áttörése - megerősített vonalak sora, amelyeken át kell törnünk. Minden alkalommal megtanulsz valamit. Minden alkalommal erő, bölcsesség alakul ki , és perspektíva. Minden alkalommal elmarad a verseny egy kicsit. Amíg csak te maradsz: a legjobb verziód. " - Ryan Holiday (Az akadály az út)Most menjen megoldani néhány problémát!
És sok szerencsét?
Külön köszönet C. Jordan Ball-nak és V. Anton Spraulnak. Minden jó tanács tőlük származott.
Köszönöm, hogy elolvasta! Ha tetszett, tesztelje, hányszor tud eltalálni 5 másodperc alatt. Nagyszerű kardió az ujjaihoz, ÉS segít másoknak meglátni a történetet.