Articles

Hoe leer je jezelf informatica? De 100-uren reis van een ontwikkelaar

Ik heb me lang afgevraagd: helpt alleen kennis van de basis van informatica om een betere ontwikkelaar te worden? En kan het een ontwikkelaar meerwaarde bieden?

Als je jezelf deze vragen ook stelt, en je (nog) geen tijd wilt investeren in het leren van informatica, dan lees je hier mijn ervaringsverhaal. In dit artikel beantwoord ik de volgende vragen:

  • Waarom informatica leren?
  • Wat was mijn studieplan?
  • Welke bronnen heb ik gebruikt?
  • Heb ik iets nuttigs geleerd dat ik kan overbrengen naar mijn dagelijkse werk als ontwikkelaar?

Ik begon met deze fantastische lijst van bronnen: teach yourself computer science. Het is in feite een richtlijn over hoe je informatica kunt studeren als software engineer, zonder veel geld uit te geven om te proberen MIT binnen te komen.

Dus, waarom zou je zelf informatica leren?

Dat is een simpele maar belangrijke vraag: waarom zouden we dat überhaupt doen?

Voor elk project waarvoor een flinke dosis motivatie nodig is, probeer ik eerst goede doelen te definiëren:

  1. Het sneller kunnen leren van een nieuwe taal / nieuwe technologie door een aantal kernconcepten te kennen die je op elke taal / technologie kunt toepassen.
  2. Het vergroten van mijn begrip van lagere abstractieniveaus. Een beetje beter begrijpen “hoe het werkt onder de motorkap” zou mijn begrip kunnen verbeteren en daarmee mijn efficiëntie voor het oplossen van bugs of het ontwerpen van algoritmen.
  3. Het verbeteren van mijn logische redeneervaardigheden om mijn code ook logischer te maken.
  4. Ik geloof dat het begrijpen van de onderliggende concepten een sleutel is om te innoveren op het gebied van ontwikkeling.
  5. Inzicht in de geschiedenis van de industrie: waarom zijn we waar we nu zijn, wat kunnen we doen om de computerwereld te verbeteren?

Computer science 101: het studieplan

Ik ben niet geïnteresseerd in het proberen om elk boek over informatica te lezen. Het moet me in ieder geval enig gevoel van begrip geven.

Daarom was mijn studieplan gericht op geheugenbehoud, begrip en het opbouwen van een snelle referentie over wat ik heb geleerd, om er gemakkelijk op terug te kunnen komen.

  1. Ik studeerde elke week ongeveer 2 tot 3 uur, afhankelijk van mijn prioriteiten. Ik wilde niet te veel doen en me opgebrand voelen en genoeg hebben van informatica. Het belangrijkste voor mij was om regelmatig te studeren, ongeacht de hoeveelheid tijd. Het moest iets zijn wat ik graag deed.
  2. Tijdens het bestuderen van nieuwe stof, schreef ik er samenvattingen over in de vorm van mindmaps. Dit heeft twee voordelen: schrijven helpt om te onthouden wat ik heb geleerd en ik kan me sommige belangrijke concepten gemakkelijk herinneren wanneer ik ze nodig heb, in een mum van tijd.
  3. Mijn studietijd is verdeeld in twee categorieën:
    • Nieuw leren (nieuw hoofdstuk in een boek, een nieuwe videocursus bekijken, voorbeelden en oefeningen doen)
    • Wat ik “knowledge base recall” noem. Het is voornamelijk het doen van (meer) oefeningen over het nieuwe materiaal dat ik de week ervoor heb gelezen / gezien, het lezen van mijn mindmaps, en proberen te onthouden wat ik daarin heb geschreven.
  4. Wat betreft de oefeningen, ik probeer niet meer dan 30min aan elk van hen te besteden. Het doel is om genoeg te worstelen om het concept te onthouden, maar niet te veel om je verbrand te voelen. Het is een delicaat evenwicht.
  5. Ik probeer sommige oefeningen die ik de eerste keer niet kon, dagen (zelfs weken) na de verschillende pogingen opnieuw te doen, om te zien of ik mijn begrip heb verbeterd.

Ik probeer een aantal actieve leerprincipes toe te passen door zoveel mogelijk oefeningen te doen als ik kan, en mezelf vragen te stellen terwijl ik mijn mindmaps nakijk.

Het herlezen van wat ik van week tot week heb geleerd, is echt heel bevorderlijk voor het verbeteren van mijn geheugen en mijn begrip.

Wat ik tot nu toe heb gedaan

motivatie om discrete wiskunde te leren

Hierbij wat ik precies heb gedaan tijdens deze (bijna) 100 uur informatica-studie, in chronologische volgorde.

I. Programmeren (32 uur 55m)

grafiek pomodoro gedaan overwerk programmeer gedeelte
Pomodoro (25 min) gedaan per week voor het programmeergedeelte

In het artikel met de titel “leer jezelf informatica” stond dat ik “ongeveer” de volgorde van studie moest volgen die zij voorstellen, te beginnen met programmeren.

Hoofdbron: Structure and Interpretation of Computer Programs (SICP)

Dit boek wordt door velen beschouwd als de bijbel die elke ontwikkelaar zou moeten lezen. Het is gratis en je kunt de beste epub en PDF versies hier vinden.

Je kunt de oplossingen van de oefeningen hier vinden.

Het is me gelukt om bijna alle oefeningen te maken tot 1.2.5 Greatest Common Divisors.

Aanvullende Bronnen: Berkeley Video’s

De video’s zijn hier beschikbaar. De aantekeningen van de cursus zijn hier. Als je enkele voorbeeldexamens van Berkeley zoekt, vind je ze hier.

Deze zijn een zeer goede aanvulling op het boek: concepten worden uitgelegd zonder je al te veel over wiskunde te vragen, in tegenstelling tot het boek. Als je de SICP wilt bestuderen maar je wiskundige achtergrond is niet sterk genoeg, volg dan gewoon deze cursus. Mijn aantekeningen en oefeningen staan hier.

Wat ik tot nu toe van SICP heb geleerd

  • Het begin van dit boek is erg interessant om de wortels van functioneel programmeren en recursies echt te begrijpen.
  • Het definieert een heleboel termen die programmeurs dagelijks gebruiken, op een erg precieze manier. Perfect om nog preciezer te zijn tijdens technische discussies.
  • Het boek duwde mijn analytische en probleemoplossende vaardigheden met zijn oefeningen.

Wat kan ik gebruiken in het echte leven?

De hele discussie over recursies in het boek heeft me behoorlijk geholpen om ze gemakkelijk te schrijven. Het is een onderwerp waar ik altijd een beetje moeite mee heb gehad. Nu is het een koud kunstje om elk probleem dat ik met recursie wil oplossen te doorlopen.

Welke moeilijkheden kwam ik tegen?

Dit boek is niet voor wiskundehaters. Het is geschreven voor MIT-studenten die al behoorlijk wat wiskundige kennis hebben. Zonder deze voorkennis kunnen de oefeningen soms behoorlijk moeilijk en frustrerend zijn.

Het was de oorzaak van een ander probleem: ik besteedde te veel tijd aan de oefeningen. De meeste kon ik wel oplossen, maar in sommige gevallen kostte het me uren.

Ik heb toen besloten dat ik niet meer dan 30 minuten aan de oefeningen zou besteden om de frustratie laag te houden zonder het grote voordeel van het maken ervan teniet te doen.

II. Discrete Wiskunde (50 uur)

grafische pomodoro gedaan overuren programmeergedeelte
Pomodoro (25min) gedaan per week voor discrete Wiskunde

Hoe meer ik SICP. aan het lezen was, hoe moeilijker ik de oefeningen vond, vooral omdat er wiskundige concepten in voorkwamen waarvan ik niet op de hoogte was. Daarom besloot ik verder te gaan en te beginnen met het bestuderen van het Mathematics onderwerp.

Main resource: Discrete wiskunde en haar toepassingen

Teach yourself computer science raadt je aan de lecture notes van László Lovász te lezen, hier vrij beschikbaar als ps-document. Ik heb het hier geconverteerd naar PDF voor degenen die niet weten wat een ps document is. Ik wist het ook niet.

Hoe dan ook, ik heb een andere hoofdbron van studie gekozen, blijkbaar meer beginnersvriendelijk: Discrete Mathematics and its Application van Kenneth H. Rosen. Het is een vrij groot boek, vrij goedkoop in de eerdere edities.

In 50 uur was ik in staat om het eerste hoofdstuk (propositionele logica) uit te lezen en 54 oefeningen te maken.

Aanvullende bron: MIT 6.042J mathematics for computer science, Fall 2010

Deze video’s van MIT zijn meer gevorderde cursussen over Discrete Wiskunde. Ook hier gaan ze ervan uit dat je al heel wat wiskunde kent. Toch zijn ze erg interessant, ook al had ik moeite om ze te volgen.

In het ergste geval geeft het je in ieder geval een goede indruk van wat Discrete Wiskunde inhoudt.

Een docent (Tom Leighton) heeft betere didactische vaardigheden dan anderen. Ze hebben echter allemaal een zeer diepe kennis van hun respectievelijke onderwerpen.

Wat ik tot nu toe heb geleerd

  • Het boek heeft me de basis van logica geleerd, een zeer goede vaardigheid om te hebben als ontwikkelaar. Ons werk is immers gebaseerd op de juiste logica.
  • Propositionele logica met quantifiers en inferentieregels. In principe is het de manier om logische verklaringen te schrijven, te controleren of logische verklaringen zinvol zijn en hun waarheidswaarden te bewijzen.
  • Basiskennis van verzamelingen en grafentheorie, met dank aan de video’s. Het is erg interessant en het is erg nuttig voor veel dingen: toestandsmachines, netwerken…

Wat kan ik in het echte leven gebruiken?

  • Waarheidstabellen kunnen erg nuttig zijn om complexe voorwaardelijke verklaringen uit te zoeken of om ze te refactoren.
  • Recentelijk kon ik DeMorgan-wetten toepassen om de leesbaarheid van sommige voorwaardelijke verklaringen te verbeteren.
  • Het uitdrukken van verwarrende en korte specificaties met predikaten, voegwoorden en disjuncties (de taal van de propositionele logica) kan tegenstrijdigheden en de ontbrekende details laten zien. Het kan zeer beknopt complexe specificaties precies samenvatten. Het kan een goede brug zijn tussen de specs en de code zelf.

Welke moeilijkheden ben ik tegengekomen?

  • Hoe je een wiskundig bewijs schrijft is moeilijk, vooral als niemand je kan helpen of je bewijs kan corrigeren.
  • Ik miste nog wat basiskennis van wiskunde, vooral nodig voor de video’s van MIT.

III. Terug naar de basis van wiskunde (11 uur 15)

grafische pomodoro gedaan overwerkelijk programmeergedeelte
Pomodoro (25 min) per week gedaan voor de basis van Wiskunde

Nadat ik wat andere (kleine) problemen had met mijn Wiskunde kennis in Discrete Wiskunde, besloot ik terug te keren naar de basis.

Een andere belangrijke reden die mijn keuze heeft bepaald: ik vond het erg leuk om wiskunde te doen. Zonder dat zou ik niet verder zijn gegaan met de studie Informatica.

Wis je niet in de war: de wiskunde die met informatica te maken heeft, is anders dan de wiskunde die je op school hebt gestudeerd (en misschien haatte). Ik zou je aanraden om het eens te proberen.

Op dat moment besloot ik om afwisselend Discrete Wiskunde en de basis van Wiskunde te studeren.

Main resource: How to learn basic arithmetic fast

Deze video van 4 uur is echt goed om een heleboel dingen op te frissen, van de sommen en product via de percentages, exponenten, logaritmen… Het bestrijkt een heleboel grond heel snel met een heleboel oefeningen.

De tips die worden gegeven zijn ook erg goed om basisproblemen snel te begrijpen en op te lossen.

Je kunt op youtube een uur lange preview van de video zien. Als het je bevalt, kun je hem kopen op Vimeo.

Wat ik tot nu toe heb geleerd

  • Mijn mentale rekenvaardigheden zijn erg goed verbeterd. Als je moeite hebt om snel percentages te berekenen of zelfs eenvoudige vermenigvuldigingen te doen zonder rekenmachine, zal deze cursus je veel helpen.
  • Basisbeginselen om breuken, exponenten, vierkantswortels, logaritmen enzovoort te manipuleren.

Wat kan ik in het echte leven gebruiken?

  • Het mentaal kunnen berekenen is erg handig voor een heleboel dingen in het echte leven. Snel promoties uitrekenen, ongeveer uitrekenen hoe duur een volle winkelwagen zal zijn…
  • Al deze kennis kan ik toepassen tijdens mijn studie informatica.

Welke moeilijkheden ben ik tegengekomen?

Na de studie SICP en Discrete Wiskunde was het heel ontspannend om uiteindelijk alles met een beetje werk te begrijpen. Ik heb niet veel moeilijkheden gehad.

Mijn advies voor beginners in de informatica

basis-wiskunde-illustratie

Als ik terug kon naar het begin van dit avontuur, zou ik de verschillende vakken in deze volgorde hebben bestudeerd:

  • I. Basis Wiskunde
  • II. Discrete Wiskunde
  • III. SICP

Ik zou de Basics en Discrete Mathematics parallel hebben bestudeerd en daarna verder zijn gegaan met de SICP, waarbij ik heb geprobeerd de wiskundekennis die ik nog miste onderweg op te doen.

Ik zal de basis van Wiskunde en Discrete Wiskunde minstens 150 uur blijven leren:

  • Het weinige dat ik ervan weet, heeft me al aardig geholpen in mijn dagelijkse ontwikkelaarsleven.
  • Ik heb het gevoel (en gelezen) dat het een fundament is voor elk ander gebied in de informatica.
  • Ik vind het leuk om het te bestuderen! Nogmaals, het is een essentieel onderdeel om gemotiveerd te blijven.

In het kort: een zeer goede ervaring, die veel van mijn zwakke punten heeft blootgelegd, maar me ook solide fundamenten heeft bijgebracht die ik miste.

Bedenk wel: als je verwacht een super-tovenaar-programmeur te worden door informatica te studeren, kun je teleurgesteld worden. Informatica is moeilijk te bestuderen. Het heeft sterke theoretische kanten en ook al heb ik er in mijn dagelijkse werk al wat aan gehad, het is helemaal niet mind-blowing.

Het doorlopen van deze reis vraagt werk, geduld en toewijding. Duidelijke doelen, een concreet studieplan en plezier in het proces zijn verplicht.

Dit artikel is geschreven door Matthieu Cneude en is oorspronkelijk gepubliceerd op The Valuable Dev, een blog gericht op de belangrijke en tijdloze concepten in software ontwikkeling. U kunt het stuk hier lezen.

Gepubliceerd op 1 oktober 2020 – 12:46 UTC

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *