Hogyan lehet nagy programozó

Mi különbözteti meg az igazán nagy programozókat?

Mint mindannyian tudjuk, a nagy programozók elképesztő funkciókat, weboldalakat, alkalmazásokat és hasonlókat építenek. De mi a közös bennük?

Kutatásom során nem csak arról van szó, hogy valóban jól tudok-e egy nyelvet, vagy egy sajátos iskolai végzettséggel. Az igazán tehetséges programozók elsajátították az alapokat. Ez az alap az, ami lehetővé teszi számukra, hogy nagy dolgokat építsenek és áttörő ötletekkel álljanak elő.

Gondolj egy piramisra. Nagy az alapja, de fokozatosan egyre kisebb és vékonyabb a teteje felé. Az alapuló programozási formák alapjainak megismerése. Minden onnan indul.

Tehát mik azok az alapok? Tapasztalataim és a programozók alapján, akiknek hátterét kutattam, a programozás alapjait kétrészes megközelítésnek tekintem.

Problémamegoldó Extraordinaire

Először is hatékony problémamegoldónak kell lenned. Ez egy fontos kiindulási alap programozás jelentése problémamegoldás.

Bár sokféleképpen lehet megoldani egy problémát, a folyamat néhány része kiemelkedik számomra. A programozók, akik szintén nagy problémamegoldók, a problémát a lényegükig lepárolják annak érdekében, hogy azonosítsák általános céljukat és megkezdjék a problémát a céllal. Ezután az egyes problémákat apró, kezelhető részekre bontják - egymás után támadják meg az egyes részeket, és néha vizuális szempontból is úgy rajzolnak képet, hogy „való világgá” váljanak.

A folyamat nehezebb, mint amilyennek hangzik. Amikor elkezdtem programozni, falnak ütköztem: mint sok más, az iskolában sem tanultam meg soha a problémamegoldást; ez olyan készség, amelyet nem könnyű megtanítani. Kaptam egy matematika órán beállított feladatot, és csak belemerültem, amit akkor csináltam, amikor elkezdtem programozni. Nem meglepő, hogy feleslegesen pörgettem a kerekeimet, és a legegyszerűbb problémákra ütköztem az útlezárásokra.

A dolgok akkor kezdtek változni, amikor elkezdtem megismerni a problémamegoldás folyamatát és a problémamegoldás hatékony módját. Most a szándékkal kezdek problémát. Megvan George Polya: Hogyan oldjam meg című könyvem , hogy megköszönjem ezt a kis tanácsot.

Polya ötleteit a programozáshoz igazítottam, például megértettem a problémát. "A problémát meg kell érteni" - írja Polya. Ez magában foglalja azt, hogy képes "rámutatni a probléma fő részeire, az ismeretlenre, az adatokra és az állapotra". Minden probléma esetén előveszek egy papírlapot, és válaszokat írok ezekre a kérdésekre: mit oldok meg vagy próbálok megtalálni? (ismeretlen); mit kapok? (adat); és milyen korlátokról vagy részletekről kell tudnom? (állapot).

A probléma megértése nyilvánvalónak tűnhet, de a nyilvánvaló könnyen figyelmen kívül hagyható. Többször is órákat öntöttem egy problémába, hogy sokkal később rájöjjek, hogy hiányzott egy apró, de kritikus részlet a problémamegállapodásból. A probléma részleteinek leírása lelkileg lelassít, és segít abban, hogy pontosan átgondoljam, mit kell tennem, ami a csata fele.

Innentől készítek egy tervet, ami Polya másik javaslata. Van értelme. A cikk megírása előtt vázlatot írok. Egy művész vázlatot készít a festményről, mielőtt magára a festményre dolgozna. Az építtető rajzokat és tervrajzokat használ a ház építéséhez. Nincs ez másként a programozással sem. Ahelyett, hogy belevágnék a cselekvésbe , el kell gondolkodnom azon, mire készülök, és készítsek egy támadási tervet.

Ennek számos módja van. Néha számbeli sorrendben vázolom a lépéseket, amelyeket meg kell tennem: először ezt, másodszor ezt. Máskor látványossá teszem a problémát. Amikor a hurkokról tanultam, kihúztam egy marék mandulát, és fizikailag iteráltam a halmon. Ostoba példa, de segített végiggondolni a problémát.

Képeket vagy diagramokat is rajzolok. Rekurzív probléma esetén rajzolok egy diagramot arról, hogy mi történik az egyes rekurzív hívásokon, amíg el nem érem az alap esetet. Szinte mindig találok módot arra, hogy egyszerűsítsem a problémát, hogy jobban kezelhetővé váljon, és segítsen felismerni egy mintát. Mindenekelőtt az a célom, hogy céllal adjam meg a problémát, és mindvégig fenntartom ezt a céltudatot.

A legjobban megtervezett tervek ellenére a problémák még mindig nehézek, és még mindig elakadtam. A nagy problémamegoldóvá válás időbe telik; ez egy olyan képesség, amin még dolgozom, és mindenképpen megéri a fáradságot. Ez egy különbség, amelyet láthat.

Amikor elolvastam egy nagy problémamegoldó által írt kódot, az tiszta és könnyen érthető. A változók jól meg vannak nevezve. A funkciók rövidek és élesek. Minden kódsornak külön célja van; a szöszöt eltávolítják. A kód egyértelműsége tükrözi a programozó gondolkodási folyamatát: Felülről lefelé tudom olvasni a programot, és pontosan tudom, mi folyik itt. Ez nagyszerű problémamegoldás, és erre törekszem.

Mi van a számítógépével?

A számítástechnika elsajátítása a második programozási alap. Nemrég kezdtem el informatikát tanulni, és nagyon szeretem, mert túlmegyek a felszín szintjén. „A kulisszák mögé” megyek, hogy megtudjam, mi történik, ha például beépített funkciót használok. Megtanulom a memóriát és a futási időt is, sok más téma mellett. Röviden, megtanulom, miért teszi a számítógép azokat a dolgokat, amelyeket csinál.

A „miért” ismerete fokozza a kontextusbeli tudásomat, és tudatosabb programozóvá tesz. Ennek eredményeként jobban átgondolom az általam írt kódot. Most, hogy például tudok egy kicsit a futási időről, úgy döntök, hogy bináris keresést használok ahelyett, hogy a lista egyes elemeit iterálnám.

Ez gazdagítja az alapvető programozási koncepciók működésének megértését is. Például rekurzív problémán dolgoztam, és nem kaptam meg a várt megoldást. Alapos vizsgálat után megtudtam, hogy miért: a hívásverem végrehajtásával függ össze, ez az ötlet néhány hónapja elkerülte volna.

Vagy vegyen órákat. A leghosszabb ideig rendkívül küzdöttem az osztályokkal, és rettegtem attól, hogy egyet használok. Tudtam, hogyan kell osztályt írni, de nem voltam benne biztos, mikor és miért használom. Ez megváltozott, amikor megtudtam, mi történik valójában a számítógépemen, amikor példányokat és hívási módszereket hozok létre. Végül kattant, ha volt némi kontextusom. A rekurzió és az órák során is az informatika áthidalta ismereteim hiányosságait.

Túl gyakran kerülnek félre az alapok. A haladás lassú lehet, és az emberek hajlamosak több „szórakoztató” dolgot választani, amikor dolgoznak, ha lehetőséget kapnak rá. Ez szégyen. A programozók, akik elsajátítják az alapokat, úgy tűnik, magabiztosan kódolnak: ismerik programozási döntéseik „hogyan” és „miért” elemeit, ami javítja munkájukat és növeli hitelességüket másokkal szemben.

Ráadásul az alapok megértése megkönnyíti az új nyelvek és technológiák megtanulását. Például az, ha időt szánunk arra, hogy valóban megértsük azokat az alapvető fogalmakat, mint az iteráció, a rekurzió és az absztrakció az egyik nyelvvel, ez segít a másik megtanulásában. Egyszerűen fogalmazva: az alapok elsajátításával sokat lehet nyerni és kevés vesztenivalót.

Író vagyok (amymhaddad.com), és kezdő programozó.