Programozási problémákat old meg, vagy teljesít gyakorlatot? (A különbség számít.)

Az emberek hajlamosak egymással felcserélni a „problémák” és a „gyakorlatok” kifejezéseket. De van különbség - és ez számít.

Paul Zeitz professzor különbséget tesz.

Vegyünk 5 × 5-öt. Ez egyszerű, és ez egy gyakorlat. Így az 5 490 900 × 496. Kicsit nehezebb, és több időt vesz igénybe a megoldás, de tudja, mit kell tennie. Ez a legfontosabb pont.

"A gyakorlat egy matematikai kérdés, amelyre azonnal tudsz válaszolni" - magyarázza Zeitz a problémamegoldásról szóló előadássorozatban. "Lehet, hogy nem válaszol helyesen, valójában soha nem válaszol helyesen ... de kétségtelen, hogyan tovább."

Nem így a problémákkal. A probléma Zeitz szerint „olyan matematikai kérdés, amelyre legalább kezdetben nem tudsz válaszolni”.

A problémákat és gyakorlatokat a matematikai problémamegoldás szemléletén keresztül határozza meg, de ezek alkalmazhatók a programozásra is.

Minden nap problémamegoldó készségünket programozóként alkalmazzuk: hibakeresés, új téma megtanulása vagy akár egy probléma megoldása. A gyakorlatoknak megvan a helyük, de programozóként a problémák megoldása nem pótolható.

Gyakorlat Gyakorlatokkal

Kétféle módon profitálhat a gyakorlatokból. Először is hasznosak, ha új témát tanulnak.

Most tanulom a JavaScript-et, és ehhez gyakorlatok és problémák keverékét használom. A gyakorlatok segítenek abban, hogy lássam a mintákat, és hogy jól érezzem magam a fogalmakkal és a szintaxissal.

Íme egy példa egy olyan projekt gyakorlatára, amely felkért, hogy írjak egy függvényt, amihez egy sor autó kellett.

const cars = [ { id: 1, car_make: "Lincoln", car_model: "Navigator", car_year: 2009 }, { id: 2, car_make: "Mazda", car_model: "Miata MX-5", car_year: 2001 }, { id: 3, car_make: "Land Rover", car_model: "Defender Ice Edition", car_year: 2010 }, ... ] 

Az objektumok tömbjét a car_modelkulcs szerint kellett rendezni , növekvő sorrendben.

Nem azt jelenti, hogy ez a gyakorlat szellő volt - nem az volt. Időbe telt, és megkaptam a hibaüzenetek megfelelő részét.

Ez azonban gyakorlatnak minősül, mert kezdettől fogva tudtam, mit kell tennem.

Nemrégiben tanultam a JavaScript tömbjeiről. A Pythonban szerzett tapasztalataim alapján ismerkedtem az adatok rendezésével, bár meg kellett vizsgálnom, hogyan lehet ezt JavaScript-ben végrehajtani. A kifejezett útmutatások is segítettek.

De a koncepciók még mindig újak voltak. Szükségem volt az összerakásuk gyakorlására, ezért volt értékes ez a gyakorlat. Az ismétlés ismertséget teremt, és a gondolatok szilárdulni kezdtek a fejemben.

Fenntartani, amit megszerzett

A gyakorlatok segítenek a tanult információk frissen tartásában is.

Ahogy megtanulom a JavaScript-et, nem akarok elfelejteni mindent, amit az első megtanult nyelvről, a Pythonról tanultam. Tehát naponta többször használom az Anki-t, egy kártyát.

Ebben az összefüggésben a gyakorlatok segítenek abban, hogy az anyagok hegye egyenes maradjon, emlékeztessenek a fontos fogalmakra, és kényelmesebbé váljanak egy adott adatstruktúra vagy megközelítés használatával. Ez az eddig megszerzett ismeretek karbantartási munkája.

Több mint 1000 kártyám van, amelyek tele vannak olyan anyagokkal, amelyeket már sokszor láttam. Néhány kártyának kérdései vannak a szintaxissal kapcsolatban. Mások arra kérnek, hogy írjak SQL lekérdezéseket vagy parancssori vagy Git parancsokat. Sokan olyan gyakorlatokkal vannak tele, mint például: „a számok listájának jobbra forgatása egy helyértékkel”.

Fontos megjegyezni, hogy ez a gyakorlat egykor problémát jelentett számomra. Ha eleget tesz egy problémával, gyakorlattá válhat. Ugyanakkor egy gyakorlatot problémává tehet korlátozás hozzáadásával.

A gyakorlatok csúszós pályát jelentenek. Egyrészt hasznosak tanulási célokra. Másrészt könnyű kényelmet elérni, ha kizárólag gyakorlatokhoz ragaszkodunk.

Ez a hátrány: maradjon a kényelmi zónájában.

A kétértelműség kezelése

A programozás a problémamegoldásról szól. A problémák megoldása pedig a komfortzónádon kívülre visz . Ez jó dolog.

Számomra a problémáknak két megkülönböztető tulajdonságuk van. Az első a kétértelműség. A problémamegoldás nagyrészt arról szól, hogyan lehet hatékonyan kezelni a kétértelműséget.

  • A program minden futásakor hibaüzenet jelenik meg. Miért? Mi történik? Hol a hiba? Hogyan lehet kijavítani?
  • Felhúz egy új problémamegállapítást. Elolvastad és újraolvastad. Első ránézésre fogalma sincs arról, hogy mi történik, nem beszélve arról, hogy mit kell tennie a megoldás érdekében. Akár a „szarvas fényszórókban” érzést is elérheti, amelyet egy gyomor alján lévő gödör kísér. (Jó problémát választottál!)
  • Meg kell ismernie a relációs adatbázisokat. Ez elég széles. Hogyan fogod folytatni? Mire kell először összpontosítani? Mi számít a legjobban? Valójában mit kell tudni jobb most ?

Ezek a példák mind kétértelműséggel járnak. És mindegyik megköveteli a problémák megoldását , legyen szó hibakeresésről és hibaelhárításról, tényleges probléma megoldásáról vagy új téma megtanulásáról.  

Az előrelépés érdekében kutat, kísérletez, kivonja a tényeket, elkészít egy tervet és különféle problémamegoldási taktikákat alkalmaz. Röviden, megtanulod kitalálni. Minél több időt tölt egy problémával és a különböző nézőpontokkal, annál több réteget tár fel, és annál közelebb kerül az „aha” pillanathoz.

Ölelje át a küzdelmet

A másik különbség a problémákkal a küzdelem. Valódi.

A problémamegoldás próbára teszi szellemi állóképességét és türelmét. A haladás lassú lehet, és a folyamat unalmas. Órák, napok, sőt hetek óta kínlódtam a problémákon.

Nem azt jelenti, hogy a gyakorlatok nem fognak kihívást jelenteni. Ők tudnak. Egy dolog, ha tudod, hogy egy adott módszert kell használnod; csak meg kell kapnia, hogy megfelelően működjön. Ez egy olyan kihívás, amely néha egyenesen frusztráló lehet.

De ez egészen más, ha fogalmad sincs mit kell kezdeni, ami többször előfordulhat egy probléma megoldásakor. Számomra a problémák küzdelem.

A legjobb megoldás az, ha kibírod, és elszabadulsz. Tapasztalatom szerint a küzdelem azt jelenti, hogy sokat tanulok, és az áttörés általában a sarkon van.

A lelki kényelmetlenség átélésekor azon kapja magát, hogy kreatívan gondolkodik, és olyan megoldásokat talál ki, amelyekre soha nem gondolt. (Megleped és lenyűgözöd magad - többet tudsz, mint gondolnád!) Erősebb programozóvá válsz.

Még azon kapja magát, hogy jól érzi magát. A probléma megoldása kihívást jelent, az biztos, sőt időnként frusztráló is. De hihetetlenül kifizetődő is.

Olyan ez, mint egy félmaraton célvonalának átlépése. Kétségtelen, hogy az elmúlt 13,1 mérföld megterhelő volt, de a célvonal átlépése megérte, és megismételném. Egy probléma megoldása ugyanígy érez.

Melyik: problémák vagy gyakorlatok?

Amikor feltörik a laptopot, megoldja a problémákat vagy elvégzi a gyakorlatokat?  

A gyakorlatoknak vannak előnyei, és jó, ha beépítjük őket a programozásba. A gyakorlatokat bemelegítésként használom a programozás előtt. Tíz-tizenöt percig átlapozom egy Anki kártyalapot, és átdolgozok néhány gyakorlatot. Ha valami újat tanulok, például a JavaScript-et, akkor lehet, hogy egy teljes programozási foglalkozást szentelek a gyakorlatoknak.

Mindazonáltal minden nap időt fordítok a problémák megoldására - függetlenül attól, hogy mit tanulok vagy építek még. Még azokon a napokon is, amikor nagy időt szánok a gyakorlatokra, rengeteg időt szánok a problémák megoldására is.  

Tehát amikor egy programozási munkamenetbe kezd, tisztában kell lennie azzal, hogy mit kezd el: gyakorlatok vagy problémák. És bármi is legyen, szánjon időt a problémák megoldására.

A problémamegoldás olyan készség, amelynek fejlesztése sok gyakorlatot és időt igényel. A javulás egyetlen módja az, hogy minden nap dolgozzon rajta. Ez annyira fontos, és jó okkal.

Programozóként minden nap megoldjuk a problémákat, és sokféle módon. Időt szakítani a problémamegoldásra nem okoskodás; programozói munkánk attól függ.

Írok a programozás megtanulásáról és a legjobb módszerekről (amymhaddad.com).