Hur smart får man vara?

Jag har funderat lite på om korthet i uttryck när man programmerar kan vara dåligt. Så här har jag resonerat:

All programmering (idag) sker i ett programspråk. Ett sådant språk är höggradigt styrt och tillåter bara specifika former (syntaxen). Inget kontroversiellt ännu.

Är man nybörjare i ett språk känns allting trögt och omständligt. Allt det som tidigare gick att uttrycka så enkelt i det språk du är van med känns plötsligt som hinder. Att loopa över en kollektion blir till en jätteuppgift. Jag håller själv på och fipplar med Ruby just nu efter åratal med Java. Och det är jobbigt, minst sagt, att bara klara av enkla uppgifter.

Är man dessutom tillvand med ett tidigare språk uttrycker man ofta logik i det nya språket på samma form som man hade använt i det tidigare språket. Detta leder ofta till ganska klumpiga konstruktioner när det kanske finns smartare lösningar. Språk tenderar ju att utvecklas och bli bättre och bättre på att uttrycka intentionen hos programmeraren. C-programmerare har ofta det problemet när de ska gå över till C++ eller Java. Det blir lätt mycket procedurell kod och lite objektorientering.

Men i takt med att du vänjer dig vid ditt nya språk flyter det på allt bättre. Du lär dig fler idiom och enklare sätt att uttrycka samma logik. Du börjar känna dig hemma i språket. Till sist behöver du inte fundera så länge på hur du använder språket. Du vet bara vad du vill uttrycka och skriver ned det. Du har lärt dig språkets byggstenar som du med lätthet komponerar till allt mer komplexa uttryck. Du har då helt assimilerat språket.

Problemet är att det finns en gräns någonstans – en gräns där koden blir för smart. Den blir inte enklare och elegantare längre, utan bara kortare. En gräns där programmet plötsligt blir svårare att förstå än tidigare.

Om något är svårt att förstå så är det också svårare att underhålla. Efter några års framgång löper plötsligt ditt program risken att kastas på bitkyrkogården därför att ingen känner till koden och den verkar så knölig att sätta sig in i. Dina “smarta” lösningar kanske inte var så smarta.

Jag skulle gärna vilja få kommentarer angående detta och kanske t.o.m. exempel från det dagliga livet på när det hela gått för långt. Stämmer mitt resonemang?

5 thoughts on “Hur smart får man vara?

  1. Jo, jag håller med dig om att det går att gå för långt. I c++ till exempel kan man göra mycket snygga saker med iteratorer och en hel del med i/o-operatorer. Dessutom kan man koppla ihop dessa med varandra, så att man kan använda en foreach- eller mapkonstruktion över i/o-operatorer för att göra något med alla objekt ur en indatafil.

    När jag först såg det blev jag mest imponerad och tyckte att “det var ballt”, men efter att ha visat det balla exemplet för några vänner och förklarat hur det fungerar insåg jag att förklaringen var ganska mycket mer komplex än den borde vara. Sedan dess har jag låtit bli den konstruktionen (men anser fortfarande att både i/o-operatorer och iteratorkonstruktioner är väldigt snygga och bra var för sig).

  2. Pingback: Den professionella gränsen för programkorthet « Den bloggande terriern

  3. Det beror väl helt på hur intelligenta medarbetare man har.

    Är man fast med medel-duktiga programmerare så får man vänja sig vid standard och tråkig programmering utan anonymous methods, AOP, IO-operatorer, closures, currying, juxtaposition eller flytande gränssnitt (fluent interface) där man returnerar this från metoder så att man kan kedja samman metodsanrop för konfigurering av objekt, etc. Allt som är roligt alltså :p. C# till exempel, där kan man använda — ny byter jag till engelska — a using construct to automatically create logic on the events called on the IDisposable interface, like Rhino Mocks in .Net does or JMock does in Java.

Comments are closed.