Steve Yegge, som jag bara stött på vid några tillfällen tidigare, skrev strax före jul ett blogginlägg under rubriken Code’s Worst Enemy. Där försöker han, utifrån erfarenheten från ett spel han skrivit på egen hand i Java, argumentera för att det är Javas fel att hans kodbas nu är på 500 000 rader. Vilket han nu inte längre klarar av att underhålla.
Nu kan man ju undra hur en person över huvud taget kan skriva en halv miljon rader Java. Och premissen att det är Javas fel att det är så många rader kan ju också diskuteras. Men jag är nog böjd att acceptera att Java kanske inte är det tightaste språket på planeten. Men Steves beslut att skriva om allt i Rhino känns ju rätt bisarr.
Över huvud taget ska man, enligt min ödmjuka mening (IMHO) tänka sig för innan man börjar skriva ett stort system i ett dynamiskt språk. Dels får man betala detta med "continuous tax", samt att man inte kan få något riktigt solitt refactoring stöd. (Båda länkar går till blog-inlägg av husguden Cederic Beust).
Så min rekommendation, om man är rädd för att begrava sig själv i sin kodbas, är att välja Groovy, där man i alla fall kan slå på statisk typning om man vill, eller Scala som är statiskt typat. Och båda kommer med bra webbramverk i form av Grails och lift. Utan ett sådant är ett språk rätt kört.
Hur som helst så har Steves inlägg genererat en otrolig mängd med inlägg av många rätt kända personer. Har ni några timmar till övers så är det värt en titt.
Jag tänkte samma sak när jag läste det där. Hur tusan kan man skriva 500000 rader kod ensam, oavsett språk? Om det inte är ett väldigt avancerat spel så har han designat fel. Inom spel är det bäst att implementera så lite spelspecifik logik i kod som möjligt, och istället göra en ganska "tunn" spelmotor som drivs av data istället. Då krävs det inte programmerarkompetens för att göra stora delar av spelet, utan en speldesigner kan använda någon form av verktyg för att generera datafilerna (och det verktyget kan visserligen vara nog så avancerat). Ett mellanting mellan kod (som i spel oftast är C++) och data är scriptkod. I scripts implementerar man då logik på högre nivå, medan lågnivåkoden implementerar själva motorn (eller plattformen skulle det väl kallas på enterprise-språk). Jag tror att detta tänkande kan bli populärt även inom annan systemutveckling, alltså att man implementerar logik på hög nivå i ett språk på hög nivå, medan den mer komplexa plattformen implementeras i ett språk på lägre nivå. Numera räknar jag Java som ett val för den lägre nivån, medan den högre nivån kan vara t.ex. Python. (Lustigt att utvecklingen har gått så långt att man börjar se på Java som ett lågnivåspråk.)
Tror han mest ville tala om att han skrivit 500 KLOC. 🙂