Een uitgebreide gids om autodidact programmeur te worden

Deel II: denken, plannen en uitvoeren als een programmeur

Nu u weet hoe u problemen kunt oplossen, redeneren over de oplossing en uw ideeën vloeiend kunt communiceren, is het tijd voor u om deze vaardigheden in te zetten om te oefenen, zoals een programmeur dat doet.

Donald Knuth: handen neer, een van de de beste computerwetenschappers die het veld ooit heeft gezien.

In dit deel, zijn er drie dingen die je moet leren. Ten eerste leer je C++ als een tweede taal, die dichter bij beschrijvingen op machineniveau ligt in vergelijking met Python. Python is dichter bij het spectrum van gewoon Engels, terwijl C++ is dichter bij het einde van het spectrum van 0s en 1s. Learning C++ maakt u bekend met meer programmeerconstructies zoals pointers. Ten tweede zult u uw codeersnelheid verbeteren door intensief te oefenen, documentatie te lezen en uw debugvaardigheden verder te verfijnen. Tot slot leer je recursie, wat de magische programmeurs en computerwetenschappers gebruiken om de kracht van berekening te benutten.

Leer C++ en begin met het schrijven van eenvoudige programma ‘ s

Je hebt Python al geleerd in het vorige deel. Python is een programmeur-vriendelijke taal, omdat het verbergt veel low-level details van de programmer voor het gemak-of-use. Echter, als je vooruitgang wilt boeken, is het absoluut noodzakelijk om de grondbeginselen van programmeren in C++te leren.

waarop moet worden gefocust: Het schrijven van code in C++ zal je meer programmeur-achtig laten voelen, omdat je meer naar beschrijvingen op machineniveau gaat. Leer het verschil tussen syntaxis en semantiek. Besteed tijd aan het leren van statische en dynamische typen, geheugenbeheer en aanwijzers. Leer om conditionals, loops, functies, Data-types, en dingen die je geleerd in Python helemaal opnieuw in C++implementeren. Als dit allemaal Grieks en Latijn lijkt, maak je geen zorgen. De resources sectie zal u alles duidelijk maken.

het verwerken van fouten: wanneer u een fout krijgt, raak dan niet ontmoedigd. Zelfs de meest ervaren programmeurs hebben fouten en bugs in hun programma ‘ s. Het enige wat je hoeft te doen is het lezen van de fout, doe een snelle Google-zoekopdracht, en het probleem in uw code op te lossen. Terwijl je dit doet, begrijp je waar je een fout hebt gemaakt, corrigeer je begrip en ga verder. Soms moet je wat documentatie lezen. Controleer de volgende sectie.

het lezen van documentatie zou een tweede natuur voor u moeten zijn

net als het doen van een Google-zoekopdracht, wordt de vaardigheid van een programmeur bepaald door hoe goed hij documentatie kan begrijpen en nuttige programma ‘ s kan schrijven. Terwijl je leert om documentatie te lezen, zul je ook leren om commentaar te geven op je code, leesbare code te schrijven en documentatie te schrijven voor de code die je schrijft.

waarom zou u dit moeten leren? Veel mensen worstelen met het leren van nieuwe technologieën en zoeken naar kant-en-klare cursussen om van te leren. Hoewel dit prima is in de beginfase, als je kennis verdiept, vindt u niet kant-en-klare tutorials om jezelf te voeden met de lepel. Je moet de documentatie doorlezen en ophalen wat je nodig hebt. Nogmaals, leer om informatie uit te filteren en neem precies wat je nodig hebt om de klus te klaren.

oefenen. Herhalen. Oefenen.

nu moet je gewoon blijven oefenen. Ga naar Hackerrank en los alle eenvoudige problemen op in de warming-up en implementatie sectie daar. Als er een probleem is dat je niet kunt oplossen, lees dan de discussies, Lees het hoofdartikel en kijk hoe je het zelf kunt oplossen. Als er iets is wat je niet begrijpt, gebruik Google.

als u de metingen in het vorige deel hebt gedaan, zou u hier geen probleem moeten hebben. Als je het moeilijk hebt, stel ik voor dat je teruggaat en die secties opnieuw bekijkt. Je moet goed worden in het schrijven van code, dus sla dit deel niet over. Het idee is om vloeiend te zijn in het uitdrukken van uw plain-English oplossingen in hun programmering equivalenten. Zodra u niet vastloopt door taalspecificaties, kunt u doorgaan. Neem alle programma ‘ s die je schreef in Python en code ze in C++.

u kunt de hype rond competitief programmeren tegenkomen, ik raad u aan om er in dit stadium van weg te blijven omdat het meer kwaad dan goed zal doen. Zodra u klaar bent met Deel III, kunt u experimenteren met het en, als het goed wordt gedaan, kan het uw probleemoplossende vaardigheden enorm verbeteren.

recursie goed begrijpen

dit zal u helpen begrijpen recursie beter. Haha.

het hart van een computerwetenschapper ligt in het vermogen om recursie te begrijpen. Recurse betekent iets uitdrukken in termen van zichzelf. Alles wat je kunt doen met behulp van loops kan recursief en op zeer elegante manieren worden gedaan. Probeer dit intuïtief te begrijpen en bekijk de video ‘ s die ik heb verstrekt in de bronnen. Als je een software-ontwikkelaar bent die recursie niet goed genoeg begrijpt, zou ik aanraden om het meteen te doen.

samenvatting

tot nu toe kent u een low-level en high-level taal en kunt u de verschillen in de “controle” die u hebt over uw programma ‘ s voldoende waarderen. Inmiddels zou je in staat moeten zijn om eenvoudige programma ‘ s te schrijven met behulp van Python en C++ en het verschil tussen beide talen te waarderen.

vanaf hier gaan veel mensen in de sleur van het leren van meer talen, wat niets anders is dan een nutteloze oefening op zich. Een van de meest voorkomende vragen die ik krijg gesteld door beginners is ” hoeveel talen ken je?”, wat me doet beseffen hoe misleid beginners over het algemeen zijn als ze betrekking hebben programmeervaardigheid aan het kennen van meer talen. Programmeren gaat niet over het kennen van veel talen. De taal die u gebruikt is slechts een manier voor u om uw probleem effectief uit te drukken en op te lossen. In dit stadium ben je een “programmeur”, maar dat is niet genoeg. Je moet nu leren Informatica om uw vaardigheden naar het volgende niveau.

deel III: Uw afspraak met Computer Science

een goed begrip van de middelen in deze fase zal u beter maken dan de meeste programmeurs in uw peer group. Je kan zelfs beter worden dan de meeste 2e/3e jaars ingenieursstudenten in India. Je vooruitgang vanaf hier hangt af van je dorst naar het materiaal in deze sectie. Dus concentreer je.

om iets van mijn filosofische touch toe te voegen, is het graven in computerwetenschap als het openen van Pandora ‘ s box.

De meeste onderwerpen in deze sectie worden behandeld in het tweede jaar van een bacheloropleiding Computer Engineering. Ik heb ze een beetje anders benaderd om het beste bij de doelstellingen van deze gids te passen.

Wat is het verschil met een reguliere undergraduate curriculum? Reguliere undergraduate curricula zijn zwaar beladen met theorie. De cursussen die ik heb voorgesteld in de resources sectie hebben een goede mix van theorie en praktijk. Hoewel dit een goede zaak kan zijn voor aspirant-ingenieurs, voor de leek daarbuiten, is het niet erg nuttig. Je verliest uit het oog waar de theorie eindigt en de praktijk begint. Ik zal je precies vertellen wat je nodig hebt om theorie te leren, zodat je rechtdoor kunt gaan en oefenen. Theorie is slechts een hulpmiddel om je te helpen betere code te schrijven in dit stadium, dus raak er niet te zwaar door verzand.

Fun Fact: In mijn 2e semester van engineering, hadden we een onderwerp genaamd DBMS (Database Management Systems). Ik was verrast om mensen te vinden die de beste ER-diagrammen voor hun databaseontwerpen tekenden, maar als het ging om het ontwerpen van een database voor praktische toepassingen, zouden ze jammerlijk falen. Ze waren zo gefocust om de details van het diagram goed te krijgen, dat ze de reden vergeten waarom ze het in de eerste plaats deden. Ik neem het ze niet kwalijk, omdat ze nooit geleerd hebben dat het diagram er voor hen is om betere databases te bouwen, niet om hun schetsen vaardigheden te verbeteren.

Discrete wiskunde

u hebt al onbewust discrete wiskunde gebruikt. Discrete wiskunde is een combinatie van gebieden in de toegepaste wiskunde die herhaaldelijk werden gebruikt in de informatica. De experts in het veld besloten om het allemaal samen te voegen en er een naam aan te geven — die we nu discrete wiskunde noemen.

Maak je geen zorgen meisjes, ze schreef het eerste programma

Bij het leren van een discrete wiskunde, volgen hetzelfde principe heb ik beschreven in Deel I. Denken in termen van wiskundige structuren en de procedures die gebruikt worden om ze te manipuleren. Discrete wiskunde verhoogt simpelweg het aantal instrumenten dat tot uw beschikking staat om problemen aan te pakken. Als je je angst voor wiskunde hebt overwonnen, zul je genieten van de cursus die ik heb gekoppeld in de sectie Hulpmiddelen.

datastructuren en algoritmen

Dit is de ruggengraat van uw hele reis. Sterker nog, je hebt al die tijd datastructuren en algoritmen gebruikt — opnieuw onbewust. Nu zullen we het formaliseren en dit meer in detail bestuderen.

Linus Torvalds bouwde de Linux Kernel — iets zonder welke Android niet zou zijn geweest wat het nu is

als een ervaren programmeur, zult u overal datastructuren en algoritmen gebruiken. Als u het goed genoeg begrijpt, breidt u uw wiskundige vaardigheden en tools uit om effectieve computationele structuren op te bouwen voor het aanpakken van veelvoorkomende problemen. Je leert ook verschillende algoritmeontwerptechnieken, die als blauwdrukken zijn voor het oplossen van een aantal thema ‘ s in de informatica.

veel tutorials zullen u vertellen om te beginnen met het leren van algoritmen en datastructuren recht omhoog. De reden waarom ik dit niet deed is omdat je in Einstellung zou komen, wat een gefixeerde mentaliteit en aanpak van problemen is. Geloof me, dat verstoort je denken omdat je niet buiten de kaders denkt. Tegen het einde van deze, zult u een groot probleemoplosser en coder.

Best Practices

software schrijven gaat niet alleen over het lukraak samenstellen van code om dingen gedaan te krijgen. In de meeste professionele omgevingen, zult u niet de enige programmeur werken op een code base. Het is belangrijk dat je bepaalde richtlijnen en conventies volgt om het programmeren van de code base makkelijker te maken voor iedereen in het team. Dit maakt het makkelijker om code geschreven door iemand anders te begrijpen en vervolgens maakt het makkelijker voor anderen om uw code te begrijpen. Als u een junior software ontwikkelaar, focus op deze sectie.

Wat kunt u doen? Besteed tijd aan het begrijpen en toepassen van het droge (herhaal jezelf niet) principe in de praktijk. Schrijf geen repetitieve code, want dit vertraagt je en maakt je meer vatbaar voor fouten. Schrijf nuttige opmerkingen en documentatie waar je maar kunt. Toen ik begon, dacht ik dat dit stom was, tot ik op een dag een oud project opende en besefte dat al mijn code onbegrijpelijk was. Als programmeur hoef je niet veel te onthouden. Je onthoudt wat belangrijk is en zoekt op wat nodig is.

Version Control (Git)

Dit is iets wat ik al vroeg begon te doen en het helpt enorm om code georganiseerd te houden. U houdt uw wijzigingen bij en weet precies welke wijzigingen u nodig hebt om bepaalde functies te implementeren. U leert ook hoe u bugs snel kunt voorkomen en oplossen. Ik zie veel jonge ingenieurs die niet eens weten wat Git is, en dat is extreem triest. Ze brengen hun hele carrière door met versiebeheer – als je een van hen bent, ga dan rechtstreeks naar de bronnen hieronder.

objectgeoriënteerd programmeren

een inleiding tot een volledig nieuwe manier van programmeren. Tot nu toe hebben we procedurele programmering gedaan. Nu gaan we over op objectgeoriënteerd programmeren, wat een nieuw paradigma is. Een inleiding tot data-inkapseling en abstractie zal u verder helpen de manier waarop deze gids is ontworpen te waarderen. In OOP is alles een Object en het idee is om je interface en implementatie duidelijk te scheiden. Je leert ook lessen en erfenissen. Uiteindelijk begin je objectgeoriënteerde oplossingen te ontwerpen en leer je slimme zwarte dozen te bouwen om problemen op te lossen. Java leren is een goede manier om aan de slag te gaan met dit nieuwe programmeerparadigma. Python ondersteunt OOP ook, dus probeer dat te verkennen!

oefen Hard

oefen elke vaardigheid/concept/algoritme in deze sectie door codefragmenten te schrijven. Herschrijf oude code met de nieuwe kennis die je hebt verworven. Blijf kleine programma ‘ s schrijven en leer er in elke fase iets nieuws van.

Bruce Lee: the super-human human. R. I.P legend

blijf leren naarmate je verder gaat. Ik heb rekenmachines gebouwd, bibliotheekbeheersystemen, numerieke rekenscripts op zoveel verschillende manieren, en elke keer leerde ik iets anders. Jullie zullen uiteindelijk tot het besef komen dat er geen gouden kogel is om alles op te lossen. Het leven zit vol compromissen. Dat is de schoonheid van onvolmaaktheid.

samenvatting

u weet meer dan genoeg om spelveranderende software te bouwen. Je moet alles tot Hier internaliseren om naar de volgende stap te gaan. Vanaf hier zal meer theorie je geen goed doen. Je moet alleen tijd investeren in het oefenen en het bouwen van nuttige projecten. Programmeren is een toegepaste wetenschap-volg de 80/20 regel, wat betekent dat 80% van de tijd oefenen en 20% van de tijd lezen theorie.

Deel IV: Het is tijd voor je om wat coole dingen te bouwen

als je de gids tot Hier tot aan de T hebt gevolgd, ben je goed uitgerust om vooruit te gaan en een aantal geweldige projecten te bouwen die je op je CV kunt zetten, pronken met je vrienden, of zelfs inkomsten uit je werk kunt genereren. In dit stadium wil ik jullie leren hoe je onderweg dingen leert. Elk nieuw project dat je aanneemt of waaraan je wordt toegewezen, vraagt om iets nieuws te leren. Het is belangrijk dat je dit met de juiste houding benadert.

ik heb altijd geïnspireerd geweest door Mark Zuckerberg voor zijn niet aflatende houding in de richting teniet te doen is mislukt

Er zijn enkele richtlijnen die je kan volgen wanneer u een project. Ik ontwikkelde deze rubriek voor mezelf en besefte dat het handig zou zijn voor jullie mensen het nemen van nieuwe projecten.

  1. Identificeer het probleem waaraan u werkt en wees zeer specifiek over de details. Wees duidelijk over uw doelen en doelstellingen.
  2. zoek bestaande of soortgelijke projecten op en identificeer waar ze uitblinken en waar ze ontbreken. Bekijk waar uw idee past, hoe het project aansluit bij de doelen en doelstellingen die u in gedachten hebt en noteer alles.
  3. Maak een lijst van alle vaardigheden die je nodig hebt om het project uit te voeren en de mate waarin je de vaardigheden moet ontwikkelen om het project af te krijgen. Ken je sterke en zwakke punten.
  4. Maak een plan om de nodige vaardigheden te leren. Identificeer de juiste mensen om u te helpen en de nodige tutorials om te beginnen. Focus uitsluitend op het ontwikkelen van de vaardigheid om uw project gedaan te krijgen. Het is gemakkelijk om mee te gaan in de diepte. Vergeet niet, je leert de vaardigheid om het project te voltooien en niet het schrijven van een Ph.D. thesis over. Tenzij dat je doel is.
  5. aan de slag met het project, werk uw doelen en doelstellingen bij en wees heel duidelijk over uw sterke en zwakke punten. Splits het project op in uitvoerbare subtaken en wijs voor elk een objectiviteitsmetrie toe. Dit betekent dat je moet weten wanneer je moet stoppen met het nastreven van perfectie en je moet concentreren op het grote plaatje.
  6. ongeduldig uitvoeren. Herhaal tot al uw doelstellingen zijn voldaan.

Lees dit voor tips en trucs om een betere leerling te worden.

Op basis van uw bestaande kennis kunt u leren websites, mobiele applicaties, games, kleine scripts, Chrome-plugins, desktop-apps en software voor gegevensanalyse te bouwen. Ik zal meer informatie over deze in de volgende post. Zodra u een aantal voltooide projecten onder je riem, zult u een goed genoeg ontwikkelaar om freelance en geld te verdienen aan de kant, dat is een grote bron van inkomsten als je een student. Als je uit een ander veld komt, geeft dit je een solide basis om je huidige werk te kunnen uitbreiden met technologie. Wat je kunt met uw huidige set van vaardigheden is eindeloos, zelfs een hele blog-post kan geen recht doen aan dat.



Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.