absorbeo.net
maintained by André Reffhaug (andrer *AT* opera *DOT* com)
Lær deg selv programmering på 10 år
Norsk oversettelse av Peter Norvigs essay Teach yourself programming in 10 years
Hvorfor har alle det så travelt? Ta en tur inn i en hvilken som helst bokbutikk, og du vil se Lær deg Java på 7 dager ved siden av et variert utvalg bøker som tilbyr seg å lære deg Visual Basic, Windows, Internett, og så videre på bare et par dager eller timer. Jeg gjorde det følgende søket på Amazon.com:
De første 78 treffene var databøker (nummer 79 var Lær deg Bengali på 30 dager). Jeg byttet ut "dager" med "timer" og fikk like bemerkelsesverdige resultater: 253 bøker til, med 77 databøker, etterfulgt av Lær deg selv gramatikk og stil på 24 timer på nummer 78. Av de 200 første treffene var 96% databøker.
Konklusjonen er at enten har folk det utrolig travelt med å lære om datamaskiner, eller så er det mye lettere å lære om datamaskiner enn alt annet. Det finnes ingen bøker som reklamerer med at de på et par dager vil lære deg om kvantefysikk, hunde- stell eller hvordan spille Beethoven.
La oss analysere hva en tittel som Lær deg Pascal på
tre dager kan bety: På tre dager har du ikke tid
til å skrive flere store programmer, og lære av
din suksess eller feil med dem. Du har ikke tid til
å arbeide sammen med en som har lang erfaring med
programmering, og forstå hvordan det er å arbeide i
et slikt miljø. Kort sagt, du har ikke tid til å
lære stort. Det de snakker om kan bare være en
overfladisk kjennskap, ikke en dyp forståelse. Som
Alexander Pope sa, "litt lærdom kan være farlig."
Pascal: På tre dager kan du kanskje ha tid til å
lære deg syntakset til Pascal (forutsatt at du
allerede kjenner til et liknende språk), men du har
ikke tid til å lære deg hvordan bruke dette nye
syntakset. Kort sagt, hvis du for eksempel kjente
til Basic, kunne du lære deg å skrive Pascal
programmer i Basic-stil, men du kunne ikke lære deg
hva Pascal faktisk er godt (og dårlig) egnet for.
Så, hva er poenget? Alan Perlis sa en gang: "Et
språk som ikke påvirker hvordan du tenker på
programmering er det ikke verdt å kjenne til."
Et
mulig poeng kan være at du trenger å lære deg litt
Pascal (eller mest sannsynlig noe som Visual Basic
eller JavaScript) fordi du trenger å interface med
et eksisterende verktøy for å oppnå noe veldig
spesifikt. Men da lærer du deg ikke hvordan du skal
programmere; da lærer du hvordan du skal oppnå
akkurat dette spesifikke.
På tre dager: Dette er dessverre ikke nok, som det
neste avsnittet viser. Lær deg programmering på
ti år-forskere (Hayes, Bloom) har vist at det tar
omtrent ti år å utvikle ekspertise i ett av mange
forskjellige felt, blant annet sjakkspill, musikk
komposisjon, maling, pianospill, svømming, tennis,
og forskning innen nevropsykologi og topologi. Det
ser ikke ut til å finnes noen ordentlige snarveier.
Selv Mozart, som var et musikalsk vidunderbarn
allerede som fireåring brukte 13 år til før han
begynte å lage musikk i verdensklasse. Beatles, i
en annen sjanger, så ut til å komme ut av intet med
en rekke nummer 1 hit'er og en opptreden på the
Ed Sullivan show i 1964. Men de hadde spilt på en
rekke små klubber i Liverpool og Hamburg siden 1957,
og selv om de hadde bred appell fra starten av, ga
de ikke ut sin første kritikerroste suksess, Sgt.
Peppers, før i 1967. Samuel Johnson mente at det tar
lenger tid enn ti år: "Utmerkelse innen et felt kan man
bare oppnå gjennom et livs arbeid; det kan ikke
kjøpes billigere."
Og Chaucer klagde: "Livet er så
kort, og kunsten tar så lang tid å lære."
Her er min oppskrift for suksess innen
programmering: Bli interessert i programmering, og
gjør det fordi det er moro. Sørg for at det
fortsetter å være såpass moro at du er villig til å
vie 10 år til det.
"det maksimale ytelsesnivået for et invidivid innenfor et gitt felt oppnås ikke automatisk som en funksjon av utvidet erfaring, men ytelsesnivået kan økes selv av svært erfarne individer som et resultat av mål- rettede forsøk på å forbedre seg."(s. 366) og
"den mest effektive læringen krever en veldefinert oppgave med et passende vanskelighetsnivå for det individuelle menneske, informativ tilbakemelding, og muligheter for repetisjon og retting av feil."(s. 20-21). Boken "Cognition in Practice: Mind, Mathematics and Culture in Everyday Life" er en interessant kilde for dette synspunktet.
"Informatikk-utdannelse kan gjøre deg til en programmeringsekspert like mye som å studere pensler og pigment kan gjøre deg til en god maler"sier Eric Raymond, forfatter av "The New Hacker's Dictionary." En av de beste programmererne jeg noensinne har ansatt hadde bare vitnemål fra videregående skole; han har laget mange gode programmer, har sin egen nyhetsgruppe, og er, gjennom aksjer, uten tvil mye rikere enn jeg noen- sinne kommer til å bli.
etterandre som kan programmere. Forsøk å forstå programmer skrevet av andre. Se hva som skal til for å forstå og reparere programmer når de som først skrev dem ikke er tilgjengelige lenger. Tenk på hvordan du bør legge opp programmene dine, slik at det blir lettere for de som arbeider på det etter deg.
Fred Brooks identifiserte, i essayet "No Silver Bullets"
en trestegs-plan for å finne gode programmerere:
Dette er under antakelsen av at enkelte mennesker
allerede har kvalitetene som trengs for å gode
designere. Jobben er å hjelpe dem på veien så godt
som mulig. Alan Perlis sa det bedre: "Alle kan lære
seg å lage en skulptur: Michelangelo måtte man
lære hvordan ikke å lage en skulptur. Slik er det
også med gode programmerere."
Så bare kjøp den Java-boken; du får sikkert noe brukbart ut av det. Men du kommer ikke til å forandre livet ditt, eller din ekspertise, på 24 timer, dager, eller selv måneder.
Referanser: Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.
Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.
Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.
Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.
Omtrentlige svar
timing for forskjellige operasjoner på en typisk 1GHz PC, sommer 2001:
Etterord - språkvalg:
Mange har spurt meg om hvilket programmeringsspråk de burde lære seg først. Det finnes ikke noe enhetlig svar, men tenk på disse tre poengene:
Etterord nummer to - bøker og andre ressurser:
Flere har spurt meg hvilke bøker og websider de burde lære fra. Jeg gjentar at boklærdom ikke er nok, men kan anbefale følgende:
Originalartikkel av Peter Norvig Innholdet er copyrightet av nevnte forfatter.