Åtvaring: dette innlegget har høg nerdefaktor.
Denne bloggen målbærer kanskje ein del nerdepreg allereie, og med dette innlegget trur eg det går mot nye høgder. Det er nemleg ein del ting ein bør ha kunnskap om som skikkeleg datanerd – andre typar nerdar kan sleppe unna utan kunnskapar på dette nivået. Litt i seg sjølv fordi det er nerdete, men mest fordi det, etter ein ofte lang læringsperiode, får stort utbytte av det.
Lista, som eg ser ho i dag, ser sånn ut:
- vim
- git, Mercurial eller eit anna distribuert versjonskontrollsystem
- LaTeX
- C++
- Test-drivi utvikling
Mykje gresk her? Ingen fare, eg skal gå gjennom dei ein for ein og forklare kva det er og korfor det er verdt å bruke tid på.
vim
vim er eit tekstredigeringsprogram, med samme bruksområde som gedit, kate eller ein avansert versjon av Windows-programmet Notisblokk. Veldig godt eigna til enkel tekstredigering og programmering som ikkje krev eit spesialtilpassa program. vim har ei veldig bratt læringskurve, og eg brukte lang tid på å byrja å bruke det frivillig. vim er kommandobasert, det vil seie at du skriv inn kva programmet skal gjera (for eksempel avslutt, flytt linje, slett ord osv). vim har to tilstandar: skrivemodus og metamodus. I skrivemodus skriv ein vanleg (som i einkvar annan teksthandsamar), i metamodus viser vim seg frå si beste – og samtidig verste – side. Trykker du her dd, slettar du linja du er på, mens :q avsluttar programmet. :m+2 flyttar linja to linjer ned, mens diw fjernar ordet der peikaren er no. Slike kommandoar er det massevis av, og jo fleire av dei ein kan, jo meir effektivt verktøy er det.
Versjonskontrollsystem
Eit versjonskontrollsystem er eigentleg ein avansert måte å ta tryggleikskopiar på. Det gjer at ein kan sikre seg at den fungerande koden ein har før ein skal prøve seg på ei total omskriving ikkje vil forsvinne sjølv om ein øydelegg alt i ein ny kodeversjon. På ein mykje enklare, finare, meir oversiktleg og generelt betre måte enn å manuelt ta kopi av alle filer for kvar vesentlege endring. I staden lagres all kode og metainformasjon fint og flott i eit “kodedepot”.
Versjonskontrollsystem kjem verkeleg til sin rett når ein jobbar fleire saman på eit prosjekt. Det gjer det enkelt å dele kode, jobbe på samme filer samtidig og slå dei saman etterpå.
Distribuert versjonskontroll
Det fins fleire typar versjonskontrollsystem, det viktigaste skiljet går mellom sentraliserte og distribuerte system. I eit distribuert system ligg alt på ein sentral tenar, og viss han går ned, eller kodedepotet på han feilar, er det krise – da har ein tabba seg ut. Skikkeleg backup er derfor viktig om ein bruker eit slikt system. Sentraliserte system har lengje vori det dominerande på marknaden, men dei siste åra har distribuerte system voksi fram stadig meir. Med eit distribuert system har kvar utviklar ein fullstendig versjon av kodedepotet på maskina si, og ein treng ikkje nødvendigvis å ha ein sentral tenar – sjølv om dette fort er ønskeleg for større prosjekt (eller høg nok nerdefaktor…)
Dermed er det slik at risikoen for at alle kodedepota feilar samtidig er minimal. I tillegg har dei fleste distribuerte systema – i motsetning til sentraliserte – støtte for forgreining, altså at ein har fleire forskjellige versjonar som alle er “gjeldande”. Dette kan for eksempel vera ei grein for den “vanlege” versjonen av koden og ei for eksperimentering.
LaTeX
LaTeX er eit typesettingssystem. Det er veldig populært i matte-, fysikk- og liknande kretsar, og i tekniske rapportar generelt. For eksempel er alle matte- og fysikkøvingar ved NTNU skrivi i LaTeX, og alle rapportar for kundestyrt prosjekt dei siste n åra er – utan unntak – skrivi i LaTeX. Ein kan generelt sjå på LaTeX som ei erstatting for vanlege dokumenthandsamingsprogram som OpenOffice.org Writer eller Microsoft Word. Forskjellen er at alt med dokumentutsjånaden i LaTeX gjerast ved hjelp av kommandoar – litt som i tidlegare omtalte vim, berre at LaTeX er mykje mindre kryptisk 😉 Derimot har du gjerne knappar til å opne og lagre filer og så vidare. For å lage utheva skrift i LaTeX, har du ingen knapp som i Writer eller tastatursnarveg som Ctrl-b, men derimot skriv du \textbf{det som skal utheves}. Sånn er det for overskrifter, underoverskrifter, punktlister og så vidare òg.
For uinnvidde kan TeX verke meir som programmering enn dokumentskriving. Det er imidlertid berre mens du skriv det. TeX skiljer nemleg skarpt mellom skrivingsfasen og “lesefasen”, i den sistnemnte blir kommandoar som \textbf gjort om til det dei eigentleg tydar, og dokumentet ser plutseleg fint og flott ut – viss du har gjort alt rett 😉
C++
C++ er eit programmeringsspråk, og har rykte på seg for å køyre kjapt, vera komplisert, funksjonsrikt og vanskeleg å feilsøke. Vel, alt stemmer. Derfor bør ein lære seg det skikkeleg.
Test-drivi utvikling
Test-drivi utvikling er ein programmeringsstil der ein skriv testen først og koden etterpå – ein kode som akkurat klarer testen. Så flikkar ein, forbetrar og fiksar på koden til han er fin og bra. Køyrer testen og flikkar vidare, fram til ein er fornøgd. Så skriv ein neste test. Slik sikrar ein seg at ein lager kode som gjer det ein vil at han skal. Litt forenkla sagt, sjølvsagt, men grovt sett rett. Dette er den einaste av punkta på lista i toppen av dette innlegget eg ikkje har erfaring med sjølv enno, og derfor vil eg heller henvise vidare til den relativt gode innføringa i det ein finn på engelsk Wikipedia.