Hogyan lehet nagy programozó

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

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

Vizsgálataim során nem csak arról van szó, hogy valóban jól tudjak-e nyelvet, vagy egy sajátos iskolai végzettségem. Az, hogy 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, akiknek a hátterét kutattam, a programozás alapjait kétrészes megközelítésnek tekintem.

Extraordinaire problémamegoldó

Először is hatékony problémamegoldónak kell lenned. Ez egy fontos hely a kezdéshez, mivel a programozás problémamegoldás.

Bár a probléma megoldásának számos módja van, a folyamatnak néhány része kiemelkedik számomra. A programozók, akik szintén nagy problémamegoldók, lepárolják a problémát a lényegükig, 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áknál ütköztem az útlezárásokhoz.

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 könyve, a Hogyan lehet megoldani , 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? (feltétel).

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 megírása lelkileg lelassít, és segít abban, hogy pontosan átgondoljam, mit kell tennem, ami a csata fele.

Innen kezdve elké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 csinálásba , el kell kezdenem gondolkodni azon, hogy mit is csinálok, és készítsen 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 átgondolni 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ő legyen, és segítsek egy minta felismerésében. 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 továbbra is nehézek, és még mindig elakadtam. A nagy problémamegoldóvá válás időbe telik; ez egy olyan készség, amin még dolgozom, és mindenképpen megéri az erőfeszítést. Ez egy különbség, amelyet láthat.

Amikor egy nagy problémamegoldó által írt kódot olvasok, 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ítjuk. 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 történik. Ez nagyszerű problémamegoldás, és erre törekszem.

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

A számítástechnika elsajátítása a második programozási alap. Nemrég kezdtem el informatikát tanulni, és 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, hogy a számítógép miért miért csinálja azokat a dolgokat, amelyeket csinál.

A „miért” ismerete fokozza a kontextuális 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 minden elemét végigvezetném.

Ez is gazdagítja az alapvető programozási koncepciók működésének megértését. 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: ez a hívásverem végrehajtásával függ össze, egy olyan ötlettel, amely alig néhány hónappal ezelőtt került el tőlem.

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, hogy hogyan kell írni egy osztályt, de nem voltam benne biztos, hogy mikor és miért használok egyet. 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 az alapok félretolódnak. A haladás lassú lehet, és az emberek hajlamosak több „szórakoztató” dolgot választani, ha dolgoznak rajta, 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.

Ráadásul az alapok megfelelő ismerete megkönnyíti az új nyelvek és technológiák megtanulását. Például, 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ó egy nyelvvel, ez segít a másik megtanulásában. Egyszerűen fogalmazva: sokat kell nyerni és kevés vesztenivalót kell elsajátítania az alapok elsajátításával.

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