Most recent comments
Liveblogg nyttårsaften 2017
Tor, 11 months, 2 weeks
Jogging og blogging
Are, 1 year, 11 months
Liveblogg nyttårsaften 2016
Are, 1 year, 11 months
Reading in dark times
Are, 2 years, 1 month
Moldejazz 2016
Camilla, 2 years, 4 months
Dørskilt
Karoline, 2 years, 5 months
Halifax
Tor, 2 years, 5 months
Sony Smartwatch 3 review
Tor, 2 years, 6 months
Numerikk, takk
Tor, 2 years, 6 months
Topp tur
Camilla, 2 years, 8 months
50 book challenge
Camilla, 11 months, 2 weeks
Controls
Register

Unix-filosofi

En del av menneskene som har utviklet unix og linux har nok vært noen pussige typer. Vi har tidligere vært inne på historien til ulike pagere, som jeg gjengir kjapt for å sette kontekst eller noe slik:

En pager er et program som lar deg lese, men ikke endre, en tekstfil fra kommandolinjen. Et av de første het more, og hadde muligeten til å scrolle fremover i filen. Her snakker vi altså features på høyt plan. Så var det noen skarpinger som kom opp med less, lansert med slagordet «less is more». less hadde muligheten til å scrolle bakover også, og er i dag standard på linux. Enda litt senere var det noen som lagde most, med slagordet «why settle for less?», men det ble nok ingen hit. Det følger ikke med i OS X i alle fall.

Poenget med å ta med dette er å vise at ganske mange skarpe mennesker har tenkt ikke bare på hva programmene gjør, men også på miljøet rundt, og et av de kuleste resultatene av dette er unix-filosofien, som har blitt oppsummert slik:
This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.

Det er naturligvis mye annet som har blitt sagt om unix-filosofien, for eksempel har Donald Knuth (han som fant opp TeX) sagt
Premature optimization is the root of all evil.

og Ken Thompson (lagde utf-8, sammen med Rob Pike) har sagt
When in doubt, use brute force.

Videre har vi (jeg sakser villt fra wikipedia nå, så jeg foreslår å lese mer der hvis man er interessert):
1. Small is beautiful.
2. Make each program do one thing well.
3. Build a prototype as soon as possible.
4. Choose portability over efficiency.
5. Store data in flat text files.
6. Use software leverage to your advantage.
7. Use shell scripts to increase leverage and portability.
8. Avoid captive user interfaces.
9. Make every program a filter.

Det finnes mye mer man kunne sagt om dette, men jeg vil trekke frem min favoritt-del av denne filisofien, nemlig alt det som handler om å skrive programmer som for det første gjør én ting bra, og som for det andre kan jobbe sammen med andre programmer. Takket være denne filosofien er det ganske imponerende hva man kan utrette med én eneste kommando i terminalen, og det er egentlig helt villt hvor mye man kan utrette med en helt vanlig linux-installasjon. Jeg sakser litt mer, denne gangen fra teddziuba.com:
If Linux can do it, you shouldn't. Don't use Hadoop MapReduce until you have a solid reason why xargs won't solve your problem. Don't implement your own lockservice when Linux's advisory file locking works just fine. Don't do image processing work with PIL unless you have proven that command-line ImageMagick won't do the job. Modern Linux distributions are capable of a lot, and most hard problems are already solved for you. You just need to know where to look.
Programming Things I Wish I Knew Earlier

Og alt dette skyldes at man har skrevet programmer som gjør én ting bra, og som snakker med andre programmer. Det er fantastisk, rett og slett.

-Tor Nordam

Comments

Camilla,  17.02.11 00:12

Er det slik vi skal hindre dem i å ta over verden? Eller er det slik de kommer til å ta over verden?

Are,  27.02.11 17:32

Yay for unix-filosofien. Det er et fint generelt programmeringsprinsipp også, å lage små, selvstendige enheter med logikk, som man så kombinerer for å gjøre det man vil. Det er mye enklere å vedlikeholde, teste og lage (feilfrie) programmer når de er små, og enklere å utvide et system når man kan gjøre det ved å legge til nye små enheter.
Category
Technology
Tags
unix
Unix-filosofi
Views
2180