![]() | |||
Joel on Software Joel over Software
| |||
|
Andere "Joel on Software" artikelen in het Nederlands Andere "Joel on Software" artikels in het Engels |
Door Joel Spolsky Vertaald door Bernard Vander Beken 27 january 2001 In 1982 ontving mijn familie de allereerste IBM-PC in Israël. We gingen werkelijk naar het warenhuis om te wachten terwijl onze PC uit de laadzone geleverd werd. Op de een of andere manier wist ik mijn vader te overtuigen de volledig uitgeruste versie aan te schaffen, met twee floppy disks, 128 K geheugen, en zowel een dot-matrix printer (voor snelle proefdrukken) als eenBrother typemachine-kwaliteit letterwiel printer, die net als een machinegeweer klinkt tijdens het gebruik, maar dan luider. Ik geloof dat we zowat alle beschikbare toebehoren genomen hadden: PC-DOS 1.0, de $75 technische handleiding met een listing van de volledige BIOS-broncode, Macro Assembler, en het wonderbaarlijke IBM monochroom scherm met maar liefst 80 kolommen en ... kleine letters! Het geheel koste zo'n $10,000 inclusief Israel's toen belachelijke invoerrechten. Extravagant!
Nu wist "iedereen" dat BASIC een speelgoedtaal was die het gebruik van spaghetticode vereist en je brein reduceert tot Camembert kaas. Dus betaalden we $600 voor IBM Pascal, die op drie floppy diskettes geleverd werd. De compiler's eerste pass stond op de eerste diskette, the tweede pass op de tweede diskette, en de linker op de derde diskette. Ik schreef een eenvoudig "hello, world" programma en compileerde het. Totaal verstreken tijd: 8 minuten. Hmm. Dat is lang. Ik schreef een batch file om het proces te automatiseren en and beperkte het naar zeveneneenhalve minuten. Beter zo. Maar wanneer ik lange programma's probeerde te schrijven, zoals mijn verbazende versie van Othello die altijd van me won, ging de meeste tijd naar het wachten op de compilatie. "Tja," vertelde een professionele programmeur me, "we hadden een sit-up hoek op kantoor en deden sit-ups tijdens de compilatie. Na enkele maanden programmeren had ik indrukwekkende buikbspieren." Op een dag verscheen Compas Pascal, een ingenieus programma uit Denemarken. Philippe Kahn kocht het en herdoopte het Borland Turbo Pascal. Turbo Pascal was baanbrekend, aangezien het alles deed wat IBM Pascal kon, maar slechts 33K geheugen gebruikte inclusief de text editor. Dit was ronduit verbazingwekkend. Nog verbazingwekkender was dat je een klein programma kon compileren in minder dan één seconde. Het is alsof een bedrijf waar je nog nooit van gehoord had een kopie van de Ferrari Testarossalanceerde die 1.000.000 km/h deed en de wereld rond kon rijden met zo weinig benzine dat een mier het op zou krijgen zonder ziek te worden. Plotseling werd ik heel wat productiever. Ik begreep toen het concept van de LET lus. LET staat voor "Lees, Evalueer, Toon", en het beschrijft wat een list interpreter doet: het "leest" je invoer, evalueert het en toont het resultaat. Een voorbeeld van de LET lus wordt hieronder getoond: Ik typ iets en de lisp interpreter leest het, evalueert het en toont het resultaat.
Op een iets hoger niveau ben je in een macro-versie van de LET lus wanneer je code schrijft. Het wordt dan de Bewerk-Compileer-Test lus genoemd. Je bewerkt je code, compileert het, test het en kijkt hoe goed het werkt. Een cruciaal punt is dat je de lus telkens weer moet doorlopen om een programma te schrijven. Het gevolg is dat hoe sneller de Bewerk-Compileer-Test lus verloopt, hoe productiever je wordt, tot aan een natuurlijke limiet van ogenblikkelijke compilaties. Dat is de formele, computer-wetenschappelijke reden dat programmeurs bijzonder snelle hardware wensen en compiler-ontwikkelaars alles doen wat ze kunnen om supersnelle Bewerk-Compileer-Test lussen te verkrijgen. Visual Basic doet het door elke ingetypte lijn gaandeweg te parsen en lex-en, zodat de uiteindelijke compilatie supersnel kan gebeuren. Visual C++ doet het door incrementele compilatie te voorzien, geprecompileerde headers en incrementeel linken. Maar zodra je in een groter team werkt met meerdere ontwikkelaars en testers, zie je opnieuw de zelfde lus, maar dan groter (het is fractal, kerel!). Een tester vindt een bug in de code en rapporteert de bug. De programmeur lost de bug op. Hoe lang duurt het vooraleer de tester de aangepaste code krijgt? In sommige software-organisaties kan deze Rapporteer-Los op-Controleer lus enkele weken duren, waardoor de hele organisatie onproductief is. Om het hele ontwikkelingsproces vlot te doen verlopen, moet je je aandacht besteden aan het inkorten van de Rapporteer-Los op-Controleer lus. Een goede aanpak zijn dagelijkse builds. Een dagelijkse build is een automatische, dagelijkse, volledige build van alle broncode. Automatisch - omdat je ervoor zorgt dat de code elke dag op een vastgelegd tijdstip gecompileerd wordt, met cron jobs (op UNIX) of de Scheduler Service (op Windows). Dagelijks - of zelfs vaker. Het is verleidelijk om continu builds te laten lopen, maar dat is waarschijnlijk niet mogelijk wegens versiebeheer problemen waar ik het straks zal over hebben. Volledig - het is mogelijk dat je code meerdere versies heeft. Meerdere talen, meerdere besturingssystemen, of een high-end/low-end versie. De dagelijkse build moet ze allemaal builden. En het moet elke file vanaf nul builden, zonder gebruik te maken van de mogelijkerwijs imperfecte incrementele build mogelijkheden van de compiler. Hier zijn enkele van de vele voordelen van dagelijkse builds:
Zo ga je te werk. Je hebt een dagelijkse build server nodig, wellicht de snelste computer die je te pakken kan krijgen. Schrijf een script dat eerst een volledige kopie van de actuele broncode uit je versiebeheersysteem ophaalt (je gebruikt toch versiebeheer, of niet soms?). Vervolgens doet het script vanaf nul een build van elke versie van je code die je levert. Indien je een installatie-programma hebt, voeg het toe aan de build. Alles wat je naar klanten stuurt zou door de dagelijkse build aangemaakt moeten worden. Plaats elke build in een aparte directory op basis van de datum. Voer je script elke dag op een vast tijdstip uit.
Voor meer informatie:
De originele versie van dit artikel verscheen in het Engels onder de naam Daily Builds Are Your Friend | ||
![]() Joel Spolsky is de oprichter van Fog Creek Software, een klein softwarebedrijf in New York. Hij studeerde af aan de Yale universiteit, en heeft als programmeur en manager gewerkt bij Microsoft, Viacom en Juno. | |||
De inhoud van deze pagina's vertegenwoordigt de mening van één persoon.
Alle inhoud Copyright ©1999-2005 door Joel Spolsky. Alle rechten voorbehouden.