Som informatikkstudenter jobber vi mye med å løse problemer. Når vi jobber
med programmering blir vi ofte møtt med mange små hindringer som
distraherer oss fra problemet vi prøver å løse. Ved å velge gode verktøy
kan du unngå mange av disse hindringene og heller fokuser på å jobbe med
selve problemet.
Verktøyene vi bruker er gjerne programmer som [[http://termvakt.uio.no/Fjerninnlogging][SSH]], [[http://git-scm.com/][Git]], [[https://gcc.gnu.org/][GCC]], [[http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html][JDK]], [[https://eclipse.org/][Eclipse]],
[[http://www.latex-project.org/][LaTeX]] eller [[https://www.mozilla.org/en-US/firefox/developer/][Firefox]] og selvfølgelig et hav andre. De programmene vi velger
utgjør arbeidsflyten vår.
Noe av det vi gjør mest som programmerere er å jobbe med tekst. Det finnes
mange programmer som gjør denne jobben utmerket, f. eks. [[http://www.vim.org/][Vim]], [[http://www.sublimetext.com/3][Sublime]]
eller [[https://atom.io/][Atom]]. Vi skal lære om teksteditoren [[http://www.gnu.org/software/emacs/][Emacs]], som er designet slik at
du kan endre Emacs mens det kjører, som viser seg å være et utrolig
kraftig verktøy (spesielt for en programmerer).
Om du ser for deg at du kommer til å programmere i mange år fremover er
min anbefaling at du lærer deg en håndfull programmer /godt/, og at en av
disse programmene bør være en teksteditor. Dersom du ønsker et fleksibelt
verktøy som dekker de fleste aspektene av programmering bør du se hva
Emacs har å tilby.
** Emacs
Før vi begir oss ut på å besvare hva i all verden Emacs faktisk /er/, kan
vi se på hvordan vi kan besvare hva et program vi allerede kjenner til
er. Siden jeg antar at de fleste har god kjennskap til Firefox, prøver vi
å gi en kort forklaring på hva Firefox er.
Firefox er en nettleser. Dette er sant, men det sier ikke så mye om hva
Firefox faktisk /gjør/. Firefox er et program som gir brukeren et
interface for å sende HTTP-forespørsler. Når den mottar et svar
inneholder dette en tekst som beskriver strukturen til et dokument
(HTML), og tekstinnholdet som skal plasseres i strukturen. Den mottar
også en beskrivelse av hvordan dokumentet skal se ut (CSS). I tillegg har
den en språktolker, som kan tolke Javascript-kode, som vil si at vi har
et fullverdig programmeringsspråk i nettleseren! Firefox er med andre ord
et vanvittig svært og kraftig program ([[https://www.openhub.net/p/firefox][12,625,661 linjer med kode]]).
Emacs er en teksteditor, dette er også sant, men igjen forteller det ikke
så mye. Emacs er et program som gir brukeren et interface for å redigere
tekst. I bunn er det en språktolker som kan tolke Emacs Lisp kode, som er
et fullverdig programmeringsspråk, med et stort bibliotek av funksjoner
som lar deg operere på tekst. Hver gang Emacs mottar et tastetrykk fyres
det av en funksjon. Disse funksjonene er som regel skrevet i Emacs Lisp
(resten er skrevet i C), og du kan åpne kildekoden og utforske hva den
gjør.
Siden Emacs Lisp er et tolket språk kan vi evaluere kode mens Emacs
kjører, og se effekten umiddelbart. Vi kan definere nye funksjoner, eller
redefinere eksisterende, og endre Emacs til å gjøre oppgavene vi