Bøker

Jeg tror det er viktig å lese minst to til tre gode bøker om softwareutvikling hvert år, og her kan du lese om slike bøker som jeg har lest, og hva jeg har å fortelle om dem.

Klar for hardcore

Her kommer nok en Lisp-er-bedre-enn-andre-språk-blogpost!

Jeg har nylig mottatt noen nye bøker fra Amazon, deriblant Let Over Lambda (subtitle: 50 years of Lisp). Dette skal være en av de mest hardcore programmeringsbøkene som finnes. Det føles som om jeg har oppdaget dødehavsrullene, som om jeg har funnet en glemt skatt med potensialet til å totalt forandre mitt syn på verden. Jeg er klar for å ta steget opp til et helt nytt nivå.

Let Over Lambda er en bok om å kode og utnytte makroer i Lisp – fortrinnsvis Common Lisp. Med makroer lager man programmer som lager programmer. Det finnes flere språk som støtter metaprogrammering, men Common Lisp er det ypperste.

La meg sitere et av de første avsnittene i boken:

“Macros are the single greatest advantage that Lisp has as a programming language and the single greatest advantage of any programming language. With them you can do things that you simply cannot do in other languages. Because macros can be used to transform lisp into other programming languages and back, programmers who gain experience with them discover that all other languages are just skins on top of lisp. This is the big deal. Lisp is special because programming with it is actually programming at a higher level. Where most languages invent and enforce syntactic and semantic rules, lisp is general and malleable. With lisp, you make the rules.

Boken er en stor egotripp – bare de aller beste utviklerne leser Let Over Lambda sies det. De smarteste utviklerne ender alltid opp med Lisp. Lisp er ikke skrevet for å gjøre programmering enkelt, men for å gi deg som utvikler all makt og alle muligheter.

Om fremtiden ligger i makroer – som Let Over Lambda hevder – eller ikke, så er jeg uansett klar for å utvide mine egne ferdigheter og potensielle produktivitet, og gleder meg til å lære å lage optimale abstraksjoner.

Leseliste for 2012

Jeg har et problem! Listen over programmeringsrelaterte bøker jeg ønsker å lese bare vokser og vokser. Men for et par måneder siden ble jeg nødt til å begynne å kjøre til jobb, i stedet for å reise kollektivt, og det betyr desverre langt mindre tid til lesing.

Jeg har lest mange bra bøker de siste årene, men nå har det stoppet helt opp. Jeg har ikke klart å fullføre hverken SICP eller Peter Norvig’s Paradigms of Artificial Intelligence Programming som jeg begynte på i sommer. Og Continous Delivery, som jeg kjøpte inn på jobben i høst, har jeg ikke engang startet på.

ManWithBook

Men lesing er viktig, både for motivasjon, inspirasjon og for kunnskapen det gir meg. Jeg har litt tid hver kveld som jeg normalt ikke bruker til noe annet enn random browsing. Denne tiden er bedre utnyttet til å lese kloke ord fra en bok. Ett nyttårsforsett for neste år blir derfor å snu litt på vanene, slik at jeg får lest noen fantastiske bøker også i 2012.

Og bøkene jeg har på listen min er…

Det er mange gamle bøker her – bøker som ofte omtales som “required reading” for seriøse utviklere. Ved å liste dem om håper jeg å hjelpe andre å finne god utvikler-litteratur. Om du har lest noen av disse bøkene er jeg også interessert i å høre hva du synes om dem.

The Art of the Metaobject Protocol

Om hvordan man kan designe et ekstremt fleksibelt system, med bakgrunnsinformasjon fra Common Lisps fantastiske objektsystem (CLOS). Bør være nyttig for alle utviklere som er interessert i kode-design eller programmeringsspråk generelt. 345 sider.

Gödel, Escher, Bach: An Eternal Golden Braid

Douglas Hofstadter’s klassiker fra 1979 om hva mening, forståelse og tanker er laget av. 832 sider. Amazon- og Google-utvikler Steve Yegge har følgende å si:

“if you’re a programmer and you haven’t yet read Gödel, Escher, Bach: An Eternal Golden Braid (usually known as “GEB”), then I envy you: you’re in for a real treat. Get yourself a copy and settle in for one of the most interesting, maddening, awe-inspiring and just plain fun books ever written. The Pulitzer Prize it won doesn’t nearly do it justice. It’s one of the greatest and most unique works of imagination of all time.”

The Reasoned Schemer

Jeg nevnte denne boken om koblingen mellom funksjonell og logisk programmering i posten om Prolog. 176 sider.

Thinking Forth

Denne klassikeren om gode programmerings- og designteknikker nevnte jeg i posten om Forth. 316 sider.

Growing Object-Oriented Software, Guided by Tests

En praktisk bok for objektorienterte utviklere som vil bli moderne TDD-eksperter. 384 sider.

The annotated Turing

Tagline: a guided tour through Alan Turing’s historic paper on computability and the Turing machine. Dette er historien vår, og vår mest betydningsfulle modell for hva vi kan gjøre med datamaskiner. Skrevet av Charles Petzold, som jeg har sansen for (boken Code var helt fantastisk). 384 sider (Turings orginale tekst er på 36 sider).

A Discipline of Progamming

Dijkstra’s klassiker fra 1976, hvor han diskuterer hva en algoritme er for noe, hva vi egentlig gjør når vi programmerer, og til slutt viser en rekke, vakre algoritmer. 217 sider.

Programming Pearls

En rekke problemer, og løsningene på dem. Fokuserer på rask, effektiv og korrekt kode. 256 sider.

Pearls of Functional Algorithm Design

Denne boken er laget over samme mal som Programming Pearls, men inneholder funksjonelle algoritmer. Boken bruker Haskell. 290 sider.

Let over Lambda

En avansert bok om den mest avanserte byggestenen i det mest avanserte programmeringsspråket: altså handler det om makroer i Common Lisp! Denne boken flytter grensen for hva vi kan få til med kode. Jeg er litt redd for den, usikker på om jeg vil klare å henge med. 384 sider.

Program or be Programmed

Om den digitale revolusjonen, hvordan den påvirker oss, og hvordan vi bør forholde oss til den. Er ikke helt sikker på hva for en bok dette er egentlig, men interessen er vekket. 152 sider.

Computing: A Human Activity

En samling sentrale tekster om programmering fra 1951 til 1990. 630 sider.

Hacker’s Delight

Et grundig kompendium av programmerings-triks. Har 18 fem-stjerners anbefalinger på Amazon, og ingen lavere. 306 sider.

Hackers and Painters: Big Ideas from the Computer Age

En samling med esseys om å drive business, om teknologi og programmering, og om samfunnet vi lever i, skrevet av Lisp-guru og internett-pioner Paul Graham. 271 sider utgitt i 2004.

Noen bøker jeg er litt mere usikker på

The lambda calculus: its syntax and semantics

Den ultimate referansen til Lambda Calculus, såvidt jeg har forstått. Grisedyr å kjøpe, men tilgjengelig for nedlasting. Jeg har lyst å besitte denne kunnskapen, men vet foreløpig ikke om jeg er villig til å gjøre investeringen i tid og konsentrasjon. 621 sider.

Refactoring: Ruby Edition

Martin Fowler’s Refactoring: Improving the Design of Existing Code er en betydningsfull klassiker. Dette er Ruby-utgaven, og jeg tenker at den kan inneholde enda mer spennende teknikker. Den har derimot fått litt dårlig omtale grunnet endel feil i kode og diagrammer, så enten bør jeg vente på neste utgave, eller kanskje jeg bør lese orginalen (noe jeg skulle ha gjort for lenge siden uansett). 480 sider.

How to Design Programs

En introduksjonsbok til programmering som visstnok også skal kunne lære erfarne, hardbarka utviklere et og annet om hvordan man bygger software. Boken gir deg en universal “oppskrift” på hvordan man løser problemer og implementerer løsninger. 720 sider.

Event Processing in Action

En bok om event-dreven arkitektur fra 2010. Noen litt dårlige anmeldelser gjør meg usikker. 325 sider.

Learn You a Haskell for Greater Good

Jeg er ikke sikker på om jeg vil bruke mer tid på Haskell. Men om jeg skal det, så er nok dette en bok jeg skal lese. Også tilgjengelig online. 400 sider.

Expert F#

Dette virker som en av de bedre F#-bøkene, og Don Syme (designeren av språket) er en av forfatterne. Igjen er jeg usikker på om jeg skal bruke mer tid på dette språket, men det frister faktisk mer enn Haskell. 640 sider.

Types and Programming Languages

En praktisk bok om typesystemer. Jeg føler meg litt svak på området, og tror dette verket kunne gitt meg god balast. Men foreløpig mangler jeg litt påkrevd motivasjon. 645 sider.

Noen interessante bøker “under utvikling”

Metaprogramming in .NET

En bok om CodeDOM, Reflection.Emit, Expressions, IL rewriting, og potensiell bruk av DLR internt i .NET-applikasjoner. Skal være ferdig til våren 2012. Ca 400 sider.

Machine Learning in Action

Om å finne og trekke ut verdifull informasjon fra et hav av rådata. Estimert ferdig i mars 2012. Ca 375 sider.

Secrets of the JavaScript Ninja

Her “avslører” jQuery-designer og Mozilla-evangelist John Resig hvordan JavaScript-eksperter jobber. Estimert ferdig i mai 2012. Ca 300 sider.

Seven Databases in Seven Weeks

Denne guiden til moderne databaser og No-SQL bevegelsen fra Pragmatic Programmers er i beta, muligens ferdig i mars. Teknologiene som dekkes er Redis, Neo4J, CouchDB, MongoDB, HBase, Riak og Postgres (?). Ca 330 sider.

The Developer’s Code: What Real Programmers do

En bok med tips til hvordan moderne utviklere bør forholde seg til metaforer, motivasjon, produktivitet, kompleksitet, undervisning, kunder m.m. I beta hos Pragmatic Programmers, ferdig i mars. Estimert til å ende på 250 sider.

Den Pragmatiske Utvikleren

pragprogcoverAndy Hunt er en av de 17 utviklerne som var med og laget The Agile Manifesto. Dave Thomas er Ruby-utvikleren som er kjent for å ha kommet opp med konseptet Code Kata. I 1999 gikk disse to sammen og skrev boken The Pragmatic Programmer: From Journeyman to Master.

I dag er dette den boken som oftest anbefales til nye softwareutviklere, og i mange firmaer er det til og med fast praksis å dele den ut til nye ansatte. Den inneholder et hav av praksiser og andre tips til praktisk og pragmatisk utvikling – både for team og individuelle utviklere. Boken står for smidighet og kritisk tenking, oppfordrer til nysgjerrighet, og legger vekt på nødvendigheten av å stadig utvide og foredle ens kunnskaper og ferdigheter.

Mange av mine lesere har nok lest den allerede, og nå har også jeg endelig gjort det!

The Pragmatic Programmer er en god introduksjon for relativt ferske utviklere, eller mer erfarne utviklere som ikke har vært eksponert for praksisene og prinsippene tidligere. For meg personlig var det ikke så mye å hente da jeg leste den nå – etter å ha vært en aktiv smidig utvikler i noen år. Den inneholdt noen gullkorn som også jeg kunne ha nytte av, men stort sett var det kun oppfriskning av velkjent stoff.

Likevel er boken fortsatt, selv om den ble skrevet for 12 år siden, ganske frisk og aktuell, og passer for dem som vil kalle seg software craftsmen. Den går ikke veldig i dybden på temaene den tar opp, og satset i stedet på å dekke mange fasetter av det å programmere.

Det meste jeg leste var jeg veldig enig i, men det var også enkelte tips og prinsipper jeg ikke støtter. For å være ærlig synes jeg tittelen burde ha vært The Pragmatic Programmer: From Apprentice to Journeyman. Den er nemlig skrevet for dem med kun litt erfaring, og vil ta deg et stykke på veien – men ikke tale om at du vil bli noen “mester” av å lese boken.

Etter å ha skrevet The Pragmatic Programmer sammen ble Andy Hunt og Dave Thomas forretningspartnere, og publiserer nå bøker for og av programmerere under navnet The Pragmatic Bookshelf. Her finner du noen av mine favorittbøker, blant andre Seven Languages in Seven Weeks og Pragmatic Thinking & Learning. Andre, relativt kjente bøker i serier inkluderer Learn to Program, The Passionate Programmer, The RSpec Book, Ship It! og Release It!

En lignende bok jeg har blogget om tidligere er Code Complete.

De seks beste utviklerbøkene siste år

PrintDr.Dobb’s har hvert år siden 1990 delt ut det de kaller Jolt Product Excellence Awards (sponset av Jolt Cola) for å fremheve de produktene som har gjort mest for å forenkle jobben med å utvikle software. De gir også prisen til bøker, og har nylig annonsert hvilke seks utviklerbøker som er de aller beste av de som har blitt publisert de siste 12 månedene.

Jolt-finalistene (6. til 4. plass)

domain-specific-languages-pdf-ebook~1572483Domain-Specific Languages av Martin Fowler og Rebecca Parsons. Jeg kjøpte denne boken i januar, og den har vært et glimrende oppslagsverk i forhold til utvikling av DSL‘er. Lexeren og parseren til PingLang (som jeg har presentert i to blogposter tidligere) er basert på denne boken. Boken er strukturert som et sett med patterns, og jeg anbefaler alle som er interessert i DSL-relatert utvikling, kodegenerering eller teknikker som method chaining, nested functions, expression builder og object scoping å ha denne mursteinen i hylla.

knuthvol4aThe Art of Computer Programming, Volume 4A: Combinatorial Algorithms, Part 1 av legenden Donald E. Knuth (se julekalenderen 2010, luke 17). 30 år etter at første bind kom ut holder Knuth fortsatt koken. Jeg tviler på om dette er en bok jeg kommer til å orke å lese, men den er sikkert veldig komplett og grundig og god for dem som virkelig vil lære kombinatoriske algoritmer i dybden. Mike Riley sier:

“.. a must-have book for any serious student of computer science. Regardless of the number of years of programming experience you have, you will acquire lifelong, career-boosting algorithmic insights by digesting this volume slowly.”

joyofclojureThe Joy of Clojure: Thinking the Clojure Way av Michael Fogus og Chris Houser. Denne boken har jeg også lest i vår, men jeg har fått skrevet noen anmeldelse enda. Jeg hadde kommet såpass godt igang med Clojure at jeg syntes noe av boken ble litt kjedelig, og er ikke sikker på om jeg synes boken gav meg så mye igjen for tiden jeg brukte som det jeg hadde håpet på. Men om du er nokså fersk i Clojure og har lyst til å lære, så kan den anbefales.

Jolt Productivity Award (3. og 2. plass)

7langSeven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages av Bruce A. Tate. Nok en bok jeg har lest i år! Og anbefales til absolutt alle (som ikke allerede behersker minst 6 av de 7 språkene). Blogpostene mine om språket Io (her og her) er inspirert av denne boken, som gir deg en god oversikt over ulike paradigmer, og som også blant annet kan fungere som en inngangsport til funksjonell programmering.

mining-the-social-webMining the Sosial Web: Analysing Data from Facebook, Twitter LinkedIn, and Other Social Media Sites av Matthew A. Russel. Denne boken vet jeg desverre ikke mye om. Den virker bra for dem som er opptatt av slike ting som tittelen indikerer. Merk at all kode er i Python, så du må enten beherske det allerede eller være villig til å lære.

Jolt Excellence Award (førsteplass)

continuousDeliveryContinous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation av Jez Humble og David Farley. Denne boken har fristet, men sålangt ikke nådd opp på må-kjøpe-listen min. Men etter denne annonseringen bør jeg nok få den med. For det denne boken snakker om er viktig for mange av oss, og vil øke kvaliteten på hvordan vi leverer spesielt online løsninger. Fra anmelderen:

“I have literally never read a better book on process. I believe that going forward, Continuous Delivery book will redefine agile process and CI; and it will have as much influence as — I have to go back to 1999, here — Fowler’s book on Refactoring did on code.”

Så løp og kjøp!!

Sommerlektyre

Mange liker å bruke litt av sommeren på å lese noen gode bøker. Noen liker krim, andre foretrekker science fiction, selvbiografier eller politiske bestselgere. Selv foretrekker jeg programmeringsbøker, og jeg har nå valgt meg ut et par gode og velkjente klassikere jeg skal kose meg med i sommerferien.

220px-Kr_c_prog_langDen første er The C Programming Language, skrevet av Brian Kernighan og språkets opphavsmann Dennis Richie. Da den ble publisert i 1978 var den den første boken om C på markedet, og en hel generasjon utviklere lærte seg språket gjennom denne. Den andre utgaven, som jeg har bestilt, ble lansert i 1988, og er oppdatert til å bruke ANSI C.

The C Programming Language, ofte bare referert til som K&R, var blant annet boken som gjorde “hello, world”-programmet populært. Boken er ofte sitert, har fått mye skryt, og anses av mange som selve modellen for hvordan tekniske bøker skal skrives.

SICP_coverDen andre boken jeg har bestilt er Structure and Interpretation of Computer Programs (også kjent som SICP, the Wizard Book, og the Purple Book), forfattet av Harold Abelson, Gerald Jay Sussmann og Julie Sussmann. Første utgave ble puplisert i 1984, mens andre utgave (som jeg skal lese) kom i 1996.

SICP er en generell bok om programmering, og har blitt brukt som pensum i introduksjonskurs både ved MIT og andre steder. Programmeringsspråket som brukes for å illustrere konseptene er Scheme (en Lisp-dialekt utviklet av G.J. Sussmann og Guy Steele).

Igjen er dette en bok mange skryter av – Uncle Bob nevner den f.eks. rett som det er. Jeg mener jeg har hørt ham si at SICP er den aller beste boken skrevet om kunsten å programmere.

Hvilke bøker kunne du tenke deg å lese i sommer? Har du lest noen av disse, og har en mening om hva jeg har i vente? Skriv en kommentar da vel!

flere pragmatiske bøker bestilt

Jeg har lest mye bra programmeringsbøker de siste månedene. Land of Lisp har gitt meg en dypere innsikt i bruk av symboler i Lisp, og gitt meg en bedre forståelse for hva funksjonell programmering betyr i praksis. Seven Languages in Seven Weeks var en spennende reise jeg vil anbefale alle. Spesielt gav den meg et bra innblikk i hva Prolog har å tilby, den viste meg hvor elegant språket Io er, og den gav meg på nytt lyst til å lære Haskell.

Jeg har også pløyd meg gjennom et par DSL-bøker i år. Den første var Language Implementation Patterns, som var en god, praktisk introduksjon til hvordan man implementerer språk. Den andre var Domain Specific Languages av Martin Fowler or Rebecca Parsons, som viste seg å være en meget god lærebok.

Og så har jeg lest ferdig Code, som jeg fortalte om i 3 leste, 3 jeg leser, 3 jeg vil lese. Den har vist meg digitallogikkens og microprosessorens unnfangelse, og gitt meg mye bedre forståelse for hvordan datamaskinen faktisk fungerer. Jeg vet ikke om den har gjort meg til en bedre programmerer, men den har gitt meg økt respekt for hva folk har fått til. Jeg står stolt på giganters skuldre!

Og nå har jeg bestilt et par bøker til…

Begge er fra The Pragmatci Bookshelf. Jeg har nemlig fått veldig sansen for bøkene jeg har lest fra det forlaget.

ahptl_largecoverppmetr_largecover

Den første heter Metaprogramming Ruby: Program Like the Ruby Pros. Den fokuserer på det som gjør Ruby unikt, de mest avanserte egenskapene, og jeg gleder meg til å sette fingrene i en bok som virker å være svært praktisk.

Den andre heter noe så kult som Pragmatic Thinking and Learning: Refactor Your Wetware, og er skrevet av legendariske Andy Hunt. Den handler om hvordan hjernen fungerer, hvordan vi lærer, og hvordan vi fokuserer. Jeg gir den en sjangse, og håper den vil inspirere og gi meg noen nye triks.

Noen andre som vil dele hva de leser på for tiden..?

3 leste, 3 jeg leser, 3 jeg vil lese

Å lese fagbøker er en naturlig del av det å være en software craftsman. I et håp om å inspirere, snakker jeg i denne posten om 3 ganger 3 bøker – tre jeg har lest i løpet av det siste året, tre jeg holder på å lese nå, og tre bøker jeg ønsker å lese.

3 leste

3_leste

The Ruby Way er ifølge forfatteren ikke skrevet for å lære folk Ruby fra bunn av, men det hindret ikke meg fra å bruke den til akkurat det. Boken er SVÆR, og inneholder mye om det meste – fra grunnleggende datatyper og syntaks, via filbehandling, databaser, OOP, grafiske biblotek og nettverksprogrammering, til mere avanserte tema som metaprogrammering. Jeg syntes boken var ekstremt lærerik, og passet min måte å studere på. The Ruby Way anbefales dem som er ganske ferske i Ruby (eller ikke kan noen ting), og som har lyst til å lære språket orntlig.

Om ambisjonene dine derimot er å bli en typisk Ruby on Rails-utvikler er The Way sansynligvis feil bok for deg. Den har relativt lite fokus på webutvikling, og det den sier om webrammeverkene er i stor grad utdatert (andreutgaven, som jeg leste, er fra 2006).

Real World Functional Programming (tagline: With examples in F# and C#) var en bok jeg hadde store forhåpninger til. Målet var å lære seg F# og samtidig få en ny forståelse for hva funksjonell programmering er for noe. Som dere kanskje har hørt (eller lest) meg uttrykke andre steder allerede – jeg ble svært skuffet over denne boken!

Hovedproblemet er stilen den er skrevet i; den bruker alt for lang tid til å komme til poengene, og repeterer seg selv hele tiden. Dessuten egner den seg dårlig som en lærebok i F# – den viser deg det grunnleggende, men det går så mange sider mellom hver gang man lærer noe nytt at man i mellomtiden har glemt alt man har sett tidligere.

Når det kommer til det funksjonelle paradigmet oppdaget jeg desverre at jeg hadde lært det meste fra før – bl.a. gjennom å lese Programming Erlang. Real World Functionl Programming gav meg mer bakgrunnsmateriale, og sementerte dermed kunnskapen bedre, men jeg er ikke sikker på at det var verdt det. Det føltes som en ganske stor prestasjon å fullføre boken, men i etterpåklokskapens lys ser jeg at jeg valgte feil bok.

JavaScript: The Good Parts, skrevet av Douglas Crockford, var en annen bok jeg hadde store forhåpninger til. Den er ganske tynn, og var fornøyelig å lese. Problemet var derimot at jeg har ganske lite JavaScript-erfaring. Jeg håpte boken skulle gi meg en god start, gi meg det jeg trengte for å komme igang med “riktig” JavaScript-koding. Det føler jeg derimot ikke at den kunne klare. Hvis jeg hadde vært en bruker av språket tror jeg nok boken kunne gitt meg god støtte i forhold til å følge Crockfords regler og stil, men for meg ble dette (i allefall i denne omgang) bare interessant lesning, ikke noe mer.

3 jeg leser

3_jeg_leser

The Pragmatic Programmer: From Journeyman to Master, publisert i 1999, er en bok de fleste utviklere har hørt om. Den dekker de fleste tema innen smidig utvikling og software craftsmanship, og er ment å inspirere utviklere til å ta et større ansvar for det de produserer – og måten de utøver faget sitt på. På en måte minner den om en annen, velkjent bok, nemlig Code Complete, bare at den har mye sterkere meninger om hvordan man bør lage software.

The Pragmatic Programmer er en bok alle bør lese, og det burde ligge et eksemplar eller tre i alle utviklingsavdelinger. Personlig føler jeg ikke jeg får så veldig mye ut av den nå – jeg har allerede blitt overbevist om det meste som står der via andre kilder – men innimellom finner også jeg noen gullkorn som inspirerer.

On LISP: Advanced Techniques for Common LISP, Paul Grahams bok fra 1993, regnes som en av de beste kildene til avanserte LISP-teknikker for erfarne utviklere. Den fokuserer på det som gjør LISP unikt – på ting man ikke kan gjøre i andre programmeringsspråk. Den lover mye, og sålangt har den ikke skuffet.

Merk at jeg leser On LISP for å bli bedre i Clojure, ikke Common LISP – og det gjør faktisk boken enda mere spennende, fordi jeg oppdager hvordan disse språkene skiller seg fra hverandre.., bl.a. hvordan Clojure har et sterkere fokus på funskjonell programmering og immutable state.

Code (tagline: The Hidden Language of Computer Hardware and Software) fra Microsoft Press er den siste boken jeg har begynt å lese. Den begynner med ting som morsekode, blindeskrift og elektrisitet, arbeider seg videre inn på tallsystemer og logikk, og skal gi leseren en dyp forståelse av selve essensen innenfor datateknologi. Den er trolig ikke skrevet med tanke på lesere med ti års erfaring som utviklere, men jeg tror likevel det blir en underholdende bok, og at det kan være nyttig å friske litt opp i det helt elementære.

Dessuten er det den fineste boken i bokhylla mi – en helt hvit hardcover med kun fire bokstaver og ikke noe annet på fremsiden: C O D E

3 jeg vil lese

3_jeg_vil_lese

Land of Lisp (tagline: Learn to Program in Lisp, One Game at a Time) er en helt nye bok som lærer deg å programmere Common Lisp gjennom å lage og spille spill. Den har til og med sin egen musikkvideo, og boken virker å være svært underholdende for hardbarka geeks. Ta en titt på landoflisp.com – forfatteren har helt klart meget god humor, og denne boken er noe jeg har lyst til å hylle og spre til flest mulig.

Igjen er jeg ikke så interessert i Common Lisp, men håper å tror at det jeg lærer er overførbart til Clojure.

Masterminds of Programming (tagline: Conversations with the Creators of Major Programming Languages) inneholder intervjuer med storheter som Bjarne Stroustrup (C++), James Gosling (Java), Anders Hejlsberg (Delphi, C#), Bertrand Meyer (Eiffel) og Larry Wall (Perl). Jeg likte veldig godt å lese Coders at Work tidligere i år, og denne virker å være i samme stil, men ha enda flere, spennende intervjuobjekter.

Anmeldelsene på Amazon sier at Masterminds of Programming er “packed with thoughtful, geeky quotes and insights” og at den er “an educational AND entertaininig read”. Dette må da være en gullgruve for en som er interessert i softwarebransjens røtter og programmeringsspråkenes ulikheter. Jeg klarer nesten ikke vente.

Seven Languages in Seven Weeks (tagline: A Pragmatic Guide to Learning Programming Languages) er også en bok som virker meget spennende. Den lover å gi meg et grundig innblikk i syv veldig forskjellige språk – i hva som er unikt med hvert av dem. Og språkene vi snakker om er Ruby, Io, Prolog, Scala, Erlang, Clojure og Haskell. Gjennom disse vil man få forståelse for konsepter som dynamisk typing, prototype-systemer, mønstergjenkjenning, (ren) funksjonell programmering, actor model, software transactional memory m.m.

Boken er foreløpig i beta, men forventet release er femte november.

So there you have it.., 3 x 3 bøker som jeg har lest, leser eller forhåpentlig vis kommer til å lese. Har du kanskje lest noen andre bøker du synes jeg burde ta en titt på? Eller du har noen titler i kikkerten som du har veldig lyst til å lese en vakker dag? Skriv en kommentar da vel!

Tidligere høydepunkt fra bok-kategorien: Å jobbe effektivt med drittkode | Min nye bibel innen smidig design | Å tenke objekter

Erlang-bøker

Når jeg skal lære meg et nytt programmeringsspråk så synes jeg det er greit å begynne med en bok. For når jeg vet lite om et tema fra før, er det bra å få en sammenhengende introduksjon som begynner med det som er helt basic, og bygger lag på lag med mer avansert stoff. Da går man sjelden glipp av noe viktig, og får en god og generell oversikt over alle muligheter man har. Jeg legger derfor en god del arbeid i å finne den beste boken om temaet jeg ønsker å lære meg.

Da jeg skulle ha meg en bok om Erlang hadde jeg derimot ikke så mange valg. Det fantes egentlig bare to. Men siden jeg allerede var utrolig inspirert av Joe Armstrong (både gjennom å lese Coders at Work, og da jeg så ham på QCon London), så var det ikke vanskelig å velge nettopp hans bok.

programming_erlang Programming Erlang: Software for a Concurrent World (2007) er en inspirerende bok skrevet av den som kan Erlang aller best. Joe er tydelig glad i språket han var med å utvikle for Ericsson. Det er en munter og lettlest bok, selv om temaet i utgangspunktet var ganske gresk for en OO-fokusert utvikler som meg.

Joe introduserer alle grunn-konseptene i språket – som det ikke er så mange av – og bruker resten av boken på å fortelle om hvordan Erlang egner seg til samtidighetsorientert programmering. Boken er ikke komplett, men han touch’er borti en god del ulike tema, og den fungerer derfor som en god inngangsport til videre læring.

Joe Armstrongs Programming Erlang, fra The Pragmatic Programmers-serien, anbefales på det varmeste!

erlang_programming Den andre boken jeg kunne ha valgt er O’REILLYs ERLANG Programming, skrevet av Francesco Cesarini og Simon Thompson. Den er nyere enn Joe’s bok (2009), og koster nesten dobbelt så mye på Amazon. Den går også (tilsynelatende – jeg har ikke lest boken) mye dypere inn på hvert tema, og dekker også områder som Joe utelot helt i sin bok.

Siden jeg bare var interessert i språket, ville lære mer om hva det var for noe – og skape noen nye hjernekoblinger – så var Programming Erlang perfekt for meg. Har du tenkt å faktisk bruke språket i et seriøst prosjekt vil jeg derimot tro at ERLANG Programming kan være veien å gå.

Flere bøker slippes i disse dager

mastering_erlang Erlang er et HOT språk akkurat nå. Og der det er ny interesse dukker det alltid opp nye bøker. Første mars i år kom Mastering Erlang: Writing Real World Applications, en bok i The Expert’s Voice-serien. Dette er en bok for deg som allerede har lært deg litt Erlang, og som vil bli bedre, og lære å utnytte Erlang i profesjonell utvikling. Beskrivelsen på Amazon skryter voldsomt, men boken har ingen leseranmeldelser enda.., kanskje vi får vente litt og se.

Jeg må forresten nevne at jeg la merke til at forfatteren, Geoff Cant, blant annet har implementert en SMS Gateway i Erlang. Interessant for en PSWinCom‘er!

erlang_and_otp_in_action På Manning Publications kan man også finne en Erlang-bok. Den er riktignok ikke ferdig enda, men det er nok bare finpuss igjen, og gjennom Manning Early Access Program (MEAP) kan man få digital tilgang til den allerede. Boken heter Erlang and OTP in Action, og inneholder blant annet stoff om integrasjon mot C/C++, Java og .NET-applikasjoner. Den skryter også av å ha et større fokus på SOA og web-teknologier enn de andre bøkene. Boken skal ha mye eksempelkode, og være en bra hands-on guide.

erlang_web_applications Den siste Erlang-boken jeg har hørt om, Erlang Web Applications, skal komme i august i år. Erlang har noen veldig spesielle og interessante rammeverk og komponenter for webutvikling, som det kan være vel verdt å lære mer om. OTP inneholder modulen inets som har http-server mulighet, men mere kjent er webserveren Yaws. Mochiweb er et annet biblotek for å lage servere, mens Erlang Web, ErlyWeb og Nitrogen er rammeverk for å lage webapps.

Jeg anbefaler spesielt å ta en titt på demoene til Nitrogen – dette er en frisk, ny vri på pragmatisk webutvikling, ispedd en god del AJAX out of the box.

For å fullføre listen med webteknologier (de jeg har fått med meg i det minste) må jeg nevne erlydtl, som er en implementasjon av den populære Django template engine (normalt brukt fra Python) for Erlang, og sist men ikke minst herml, er Erlang-implementasjon av haml (en annen, spenstig template engine, oftest brukt fra Ruby).

Så der har du det altså – en komplett liste over alle bøkene som du kan vurdere om du har blitt inspirert av mine blogposter om Erlang, og har tenkt å sette deg inn i dette språket i år!

Coders at Work

CropperCapture[59]Coders at Work var den første boken jeg leste på Kindle’n min, og den er helt fenomenal! Overbevist allerede? Så løp og kjøp. Hvis du trenger mer overbevisning, les denne artikkelen, og så løp og kjøp! 

Coders at Work inneholder intervjuer med 15 programmerings-storheter. Peter Seibel spør utviklere som har vært i bransjen siden så tidlig som 60-tallet, og som alle har konkrete resultater å vise til, hvordan man lærer å programmere, hvordan de utøver sitt yrke, hva de tenker om fremtiden innenfor faget, og mye, mye mer.

Å “høre” disse menneskene fortelle om sine svært varierte karriærer har åpnet øynene mine. Boken gir et unikt, historisk perspektiv for oss som ikke har holdt på med dette like lenge som disse legendene.

Det var spesielt tre intervjuer som skilte seg ut, og som jeg vil fortelle litt mer om. Deretter vil jeg trekke frem tre lærdommer fra intervjuobjektenes samlede visdom.

Høydepunkt #1: Dan Ingalls

CropperCapture[61] Alan Key hadde ideen til Smalltalk, men det er Dan Ingalls som implementerte. Dan er “egentlig” fysiker, men da han begynte å jobbe på Xerox PARC var det ingen vei tilbake. Han har også stått bak noen svært sentrale algoritmer innen datagrafikk, og muligjorde UI-elementer vi nå tar for gitt – som pop-up menyer og lignende.

Dan er en fasinerende fyr som viser en ekte glede for programmering. Han ser på software som noe levende, noe man må leke med, og design er noe som skal vokses frem etterhvert som man koder. Jeg var så heldig å få se ham in real lifeQCon London, hvor han fremstod som svært ydmyk og beskjeden – til tross for at han har vært med å forme hvordan vi i dag ser på både objektorientering og interaksjon med datamaskiner generelt.

Dan Ingalls legger stor vekt på betydningen av å ha et dynamisk og interaktivt grensesnitt til programmering, slik som Smalltalk/Squeak eller Lively Kernel (som han har jobbet med i det siste), slik at man får rask tilbakemelding på hva man gjør. Jeg tror dette er sterkt undervurdert i utdanningen av dagens utviklere, og skulle ønske vi hadde flere slike utviklingsmiljøer. Men språk som har interaktive kommandolinjer (som Ruby, Python, Boo, Erlang, Haskell, etc.) gir også en del av disse fordelene.

Intervjuet med Dan var kanskje det aller største høydepunktet i boken. Han har et pragmatisk forhold til programmering som inspirerer meg.

Høydepunkt #2: Ken Thompson

CropperCapture[60] Ken Thompson er aller mest for å ha utviklet UNIX (sammen med Dennis Ritchie). Han står også bak programmeringsspråket B, forgjengeren til C (det er helt sant!). Han har også gjort revolusjonerende ting innen sjakk-programmering, og kom opp med den i dag velbrukte UTF-8 Unicode encodingen.

En av de tingene Thompson minner oss på i Coders at Work er at design av software skal være dynamisk. Når noe ikke er optimalt for en ny situasjon så er det bedre å refakturere enn å følge det orginale designet og bare lappe på koden. Alt for ofte ser vi på kode som vi har skrevet som noe som har så stor verdi i seg selv at vi ikke vil ødelegge det. Selv om vi vet at det går raskere og løsningen vil bli bedre neste gang vi løser et problem, så beholder vi koden i stor grad slik vi først implementerte den. Thompson refaktureringer og omskriver rått og brutalt:

Thompson: I’ve never been a lover of existing code. Code by itself amost rots and it’s gotta be rewritten. Even when nothing has changed, for some reason it rots.

Seibel: How do you decide when code needs to be thrown away?

Thompson: When it’s hard to work on. I do it much quicker than most people do. I’ll throw away code as soon I want to add something to it and I get the feeling that what I have to do to add it is too hard. I’ll throw it away and start over and come up with a different partitioning that makes it easy to do whatever I wanted to do. I’m really quick on the trigger for throwing stuff out.

Thompson drev smidig design lenge før noen begynte å snakke om Agile.

Høydepunkt #3: Joe Armstrong

CropperCapture[62] Joe Armstrong er kjent får å ha utviklet programmeringsspråket Erlang, og Open Telecom Platform (OTP), da han jobbet for Ericsson Computer Science Lab. Som Ingalls har også Joe bakgrunn som fysiker.

Intervjuet inneholder mange tankevekkende (og provoserende) uttalelser – Joe er ingen A4-utvikler, men mye av det han står for er ting man finner igjen innenfor eXtreme programming og software craftsmanship bevegelsen. Han sier f.eks. at det tar 30 år med trening før man kan si at man kan programmering. Han sier også at han kun programmerer når han føler seg i toppform – når han ikke føler at koden strømmer ut fra fingrene av seg selv går han i stedet rundt og forstyrrer sine medarbeidere (lol).

Joe forteller også at han ikke hopper rett inn og begynner å kode. Om han får et prosjekt som skal ta 12 måneder så bruker han de første 9 til å gå rundt og tenke og gruble på hvordan det best lar seg gjøre. Når han kommer til kodingen har designet blitt en del av underbevisstheten, og implementeringen er deretter fort gjort.

Svarte bokser er noe Joe ikke setter pris på. Det koster ham ikke en halv kalori å åpne opp bibliotek han benytter og gjøre endringer som passer ham. Man bør løse ting der hvor de er enklest å løse, generalisering og gjenbruk kan være negativt.

Da jeg så Joe på QCon London fikk jeg et helt annet inntrykk av ham enn jeg hadde fått gjennom intervjuet. Han var en litt liten og rolig, eldre mann, og minnet litt om charley chaplin. Men det han hadde å fortelle satt i gang en storm av nye tanker, og jeg gikk som jeg har fortalt tidligere straks ut og kjøpte boken hans om samtidighetsprogrammering i Erlang.

Visdomsord #1: Multithreading er fordømt vanskelig

Seibel spurte alle intervjuobjektene om de kunne fortelle om den vankeligste bug’en de hadde måttet fikse. Nesten alle svarte med å begynne å snakke om multithreading og samtidighet (bortsett fra Joe Armstrong, som synes samtidighet er mye enklere enn mainstream programmering). Selv de mest geniale utviklerne sier at mutithreading er vanskelig, og at den beste løsningen er å unngå det!

Da er det morsomt å faktisk jobbe på et system som er så gjennomsyret av samtidighet som vår SMS Gateway :)

Visdomsord #2: C var et feilskjær

Flere av de intervjuede kom inn på programmeringsspråket C, og hvordan det – på grunn av at det ble så populært – har bremset og til dels ødelagt utviklingen av avanserte programmeringsspråk og kompilatorer. Fran Allen sier for eksempel:

“By 1960, we had a long list of amazing languages: Lisp, APL, Fortran, COBOL, Algol 60. These are higher-level than C. We have seriously regressed, since C developed. C has destroyed our ability to advance the state of the art in automatic optimization, automatic parallelization, automatic mapping of high-level language to the machine.”

Dette var en tankevekker, og noe jeg ikke hadde hørt om tidligere. Jeg lurer på hva vi hadde fått til med maskinene våre i dag om C aldri hadde blitt utviklet, og Fortran og Lisp hadde beholdt sitt fotfeste i bransjen. Bernie Cosell hadde følgende å si om fremtiden:

“I don’t know what tomorrow’s language is. I don’t think C or it’s derivatives such as C++ are going to really be the right vehicle for heavy-duty program application – even system development – going forward.”

Visdomsord #3: De gamle er eldst

Det siste jeg vil trekke frem fra boken er hva de “gamle utviklerne” hadde å si om hva som har skjedd innenfor softwareutvikling den siste tiden. Flere, blant andre Ken Thompson, hevdet at det ikke hadde skjedd særlig mye nytt å skrive hjem om innenfor programmering de siste 20-30 årene. Vi hadde orntlig innovasjon på 60- og 70-tallet, men deretter har vi bare hatt mindre justeringer og forbedringer.

Det kan selvsagt hende noe av dette skyldes folks tendens til å tenke at “alt var bedre før”, og at de gamle knarkene ikke har klart å henge med de siste årene. Men flere av intervjuobjektene sier også at veldig mange av de oppdagelsene de ser i dag er gjennoppdagelser av ting som er gjort før. Software-bransjen har utrolig dårlig hukommelse, og det er den viktigste grunnen til at jeg mener utviklere bør lese denne og lignende bøker. Ikke finn opp hjulet på nytt, ikke gjør de samme feilene som allerede har blitt gjort og dokumentert!

“Coders at Work should inspire readers to learn about the wider context of their craft and stop the reinvention of the proverbial wheel” —Vladimir Sedach from review at Slashdot 

Heldigvis virker det nå som om folk begynner å få øynene opp for dette, og begynner å gå tilbake til røttene. Jeg vet i alle fall at jeg er på vei dit!

Øvrige personer som intervjues i Coders at Work:

Guy Steele: En ekte polyglot – var med å utvikle både Common Lisp og Scheme, og har også en finger med i standardiseringen av Fortran, C og ECMAScript, samt at han skrev den offisielle spesifikasjonen for Java. Steele spilte også en viktig rolle i Emacs’ fødsel.

L Peter Deutsch: Begynte å programmere på 50-tallet (som 11-åring). Jobbet med Interlisp og Smalltalk VM’en hos Xerox PARC, hvor han var med og oppfant just-in-time kompilering. Står også bak Ghostscript.

Peter Norvig: Director of Research hos Google, tidligere Director of Search Quality, og før det forsket han for NASA.

Brendan Eich: Mannen bak JavaScript, og nå CTO i Mozilla Corporation.

Douglas Crockford: Senior JavaScript-arkitekt hos Yahoo!, oppfinner av JSON, og forfatter av boken JavaScript: The Good Parts, et must for dem som vil bruke JavaScript som et orntlig programmeringsspråk.

Jamie Zawincki: Lisp hacker som bl.a. utviklet Lucid Emacs (a.k.a. XEmacs) og jobbet på Unix-versjonen av Netscape.

Brad Fitzpatrick: Begynte å programmere som femåring, og står bak bl.a. LiveJournal, memcached og Perlbal.

Joshua Bloch: Chief Java Architect i Google, jobbet tidligere for Sun hvor han stod bak deler av Java (bl.a. Java Collections Framework).

Simon Peyton Jones: Sentral person i Microsoft Research, står bak standardiseringen av programmerinsspråket Haskell, og er arkitekt og sjefsutvikler på Glasgow Haskell Compiler (GHC).

Fran Allen: Eneste kvinne i boken. Fortran-guru og kompilator-pioner som jobbet for IBM Research i 45 år.

Bernie Cosell: Lisp-programmerer og master debugger. Hadde bl.a. en rolle i utviklingen av ARPANET – nettverket som ble Internett.

Donald Knuth: Kjent for The Art of Computer Programming, bibelen innen algoritmer og datastrukturer, som han har jobbet på de siste fire tiårene. Populariserte Big-O notasjon for algoritme-analyse, utvikler TeX og en metodikk han kaller litterær programmering.

Mer effektiv C#

CropperCapture[49] Da jeg i fjor hadde lyst å fordype meg i C#’s mer intrikate deler bestemte jeg meg for å kjøpe Bill Wagner’s More Effective C#: 50 Specific Ways to Improve your C#. Boken forsøker å vise hvordan man best kan utnytte det som var nyheter i C# 3.0 og .Net Framework 3.5: LINQ, Lambda-uttrykk, extension methods.., og hvordan dette kombineres best mulig med ting som generics, nullable types, m.m. Den inneholder også en del generelle design-tips, samt endel om multithreading.

Boken har mye bra innhold, men du bør ha jobbet litt med C# 3.0 før du leser den – er du helt fersk på Lambda vil stoffet trolig bli litt for vanskelig. Jeg måtte selv legge fra meg boken en tid, og eksperimentere i kode, før jeg kunne gå tilbake til den et par måneder senere.

Jeg lærte en håndfull svært interessante ting av More Effective C# – spesielt påpeker Wagner noen typiske feller man bør unngå – men boken inneholdt også enkelte råd jeg ikke var enig i. Det var ikke bortkastet tid å lese den, og den vil fungere som et greit oppslagsverk, men når alt kommer til alt tror jeg at jeg valgte feil bok.., Jon Skeets C# in Depth har fått veldig gode tilbakemeldinger, tilhører samme sjanger, og hadde jeg kunne valgt om igjen hadde jeg valgt den.

Om du likevel er interessert så har jeg funnet boken tilgjengelig online her: http://www.diranieh.com/NETCSharp/EffectiveCSMore.htm. Forord, copyrights og alle referanser til Bill Wagner er fjernet, men inneholdet er omtrent identisk med boken, så jeg antar dette er en ikke-lovlig publisering som utgir seg for å være orginal. Tar du en titt på innholdsfortegnelsen vil du få et ganske bra innblikk i hva boken vil gi deg. Virker det spennende foreslår jeg at du kjøper den lovlig :)


Torbjørn: La oss anta to ulike definisjoner av Template Method pattern - de to ytterpunkte...

Lars-Petter: Hei igjen. Siden du inviterer til å ta diskusjonen i bloggen, og har tatt deg t...

Torbjørn: Lars-Petter: Det er én måte å se det på. Det er absolutt fortsatt Template M...

Lars-Petter: Hei. Har du ikke i prinsippet her gått over fra Template Method (arv) til Strat...

Christian Abildsø: I alle fall i C#, så føles dette som kode som blir mer fleksibel men vanskelig...

Torbjørn: Hei Henrik, og takk for tilbudet. Ble oppmerksom på Rasberry Pi for under en uk...

Henrik Sandaker Palm: Ang. større hobby prosjekt. Du er som er en slik rakker på programmering har j...

Øivind Nilsen: Slutt å bruke mobilnummeret mitt som eksempel !...

Bjørn Einar Bjartnes: Jeg har også latt meg fascinere av Clojure, uten at jeg har kommet så veldig l...

Bjørn Einar Bjartnes: Sweet :) Jeg tror egentlig jeg liker det som det er, med musikk. Litt av utford...

 Hold deg oppdatert

Søk i bloggen

Ferske innlegg

  • Template Method del 4: Multippel arv
  • Template Method Intermesso
  • Template Method del 3: Bare funksjoner
  • Template Method del 2: På vei mot funksjonell programmering
  • Kategorier

  • .net ninja (37)
  • Bøker (17)
  • Diverse prosjekter (35)
  • DSL (10)
  • Erlang (10)
  • F# (5)
  • Hardware (1)
  • Jobb (77)
  • Julekalender (51)
  • kjempekjekt.com (23)
  • LISP/Clojure (33)
  • NNUG / community (60)
  • O/RM & databaser (10)
  • Off topic (116)
  • OO-design/clean code (30)
  • Podcasts (14)
  • Polyglot (77)
  • Ruby (27)
  • Silverlight / RIA (3)
  • Software/verktøy (20)
  • Softwareutvikling (20)
  • Testing / TDD (30)
  • the contiki strip (13)
  • User experience (3)
  • WCF (3)
  • Webutvikling (32)
  • WPF (9)
  • WTF (12)
  • Last ned Wallpaper

    Programmeringsbloggens tøffe skrivebordsbakgrunn med snippets fra ulike språk laster du ned her!

    Abonner via epost

    Om du vil kan du få alle nye blogposter tilsendt til din epost. Abonner nå, det er kjempeenkelt!

    Meta