7 februari, 2011
Recentelijke vroeg oud-stagiair bij Tam Tam Jeff Simons of ik wat quick wins voor hem had voor het schrijven van ‘schone code’(*). Nu gruwel ik van de talloze top 10′s en nu-echt-definitieve-en-complete bijbels op internet, omdat er heus geen universele manier van werken is die voor iedereen het gewenste effect heeft, en ik heb zeker niet de illusie dat mijn manier van werken dat wel is. Wat ik wel kan doen is een aantal methodieken delen waarmee ík mijn werk doe, en wie weet is dit voor jou – de aandachtige lezer – relevant.

Contentbeheerders zijn doorgaans de meest onderschatte doelgroep van front-end developers. De mensen achter de schermen, die dag in, dag uit bezig zijn met het aanvullen, verdiepen en optimaliseren van jouw telg maken of kraken het succes ervan. Als deze mensen niet goed worden gefaciliteerd, en als hun acties niet netjes worden opgevangen middels een solide front-end, kunnen al je andere doelgroepen wel fluiten naar de informatie die ze zoeken.
Als front-end developer kan ik tevens bevestigen dat contentbeheerders op wonderlijke wijze vaak precies dátgene proberen te doen waar je het allemaal niet voor hebt gemaakt. Noem het een collectieve gave. Dat betekent echter wel dat je als front-end developer een waterdichte manier van werken moet hebben, en dat is zo ongeveer de enige echte complexiteit in ons vak. Gratis tip: Praat met ze. Het zijn doorgaans hele normale mensen. Spendeer een uur of 2 aan hun bureau en kijk ze op de vingers. Ervaar hun werk, zie wat ze doen en wat er gebeurt als zij content kloppen. Het zal je verbazen hoeveel profijt je hebt van zo’n, tsja…noem het een gebruikerstest. Zo ontdekte ik dat bij de Kamer van Koophandel regelmatig de behoefte bestond om een <ul> te laten volgen op een inleidende <p>. Als je echter alle <p>’s een standaard marge van 20px aan de onderzijde hebt gegeven, dan lijkt de <ul> niet langer bij de <p> te horen. Dat zijn dus visuele fouten waar zelden op wordt geanticipeerd in een ontwerp, en met al te generieke code niet kunnen worden opgevangen. In dit soort gevallen kun je de editor aan de serverkant voorzien van een aantal regular expressions waarmee je deze situaties kunt afvangen.
Dat een artikel in het ontwerp exact even hoog is als het blokje ernaast is hartstikke leuk, maar zo’n ontwerper kun je het beste middels een fikse oplawaai op het achterhoofd uit zijn of haar droom helpen. In de praktijk is dat namelijk een unicum, en ook al spreek je met de klant nog zo goed af dat het echt maar 5 items van maximaal 30 karakters mogen zijn; er komt een dag dat het misgaat. Jouw verantwoordelijkheid, jouw schuld. Scenario 1: In de psd vind je 3 mooi vormgegeven lijstjes op de homepage. Ieder lijstje heeft 5 items, en ieder item is slechts een paar woorden. Lijntje aan de onderkant, icoontje aan de linkerzijde, lekkere witruimte met een line-height van 22 pixels. Alsof het er voor gemaakt is! Vervolgens vult een contentbeheerder de boel in naar behoren, maar wacht; er is een extra item dat iets langer is dan wat we hebben afgesproken. Resultaat:

Ergo, vang dit soort zaken af. Het is bedroevend hoe vaak je dit kunt tegenkomen in sites die al maandenlang live staan. Het is een kleine moeite voor de ontwikkelaar, lijkt me. Regels zijn er om te overtreden; zo ook de afspraken die een beheerder maakt met jou over jouw bloed, zweet en tranen. Het is een kleine moeite om lijsten, koptitels en links klaar te maken voor content welke over twee regels zal lopen, of langer is dan afgesproken.
Probeer bij het schrijven van je stylesheet na te denken over het type gebruik dat je kunt verwachten. Praat met je interactie-ontwerper over de te verwachten gebruikersscenario’s. Als de verwachting is dat gebruikers veelal de site zullen benaderen via mobiele telefoons is het goed om hier in je interactie rekening mee te houden. Toevallig kwam ik dit voorbeeld enkele weken geleden helaas tegen in het werk van een collega: absoluut een gemiste kans.

Op zich is er doorgaans weinig mis met het bovenste, rode linkje. Gebruikers bewegen met de cursor naar het element, en zodra het pijltje verandert in een handje wordt er geklikt. Bij het gebruik van een touch-apparaat is dergelijke feedback echter niet aan de orde, en is de verwachting bovendien dat het gehele blauwe vlak klikbaar is, omdat je vinger nu eenmaal hoe dan ook te groot is om louter tekst te raken. Het is een kleine moeite om je code direct uit te breiden met het gewenste display: block; en op die manier altijd je links het maximale formaat te geven zoals in de groene link in het voorbeeld.
Wat betreft de verschillende resoluties: webheld Luke Wroblewski stelt dat het goed is om een website te beredeneren alsof je het voor een mobiele telefoon ontwikkelt. Hier geeft hiervoor een aantal redenen:
Ik test al mijn sites door op mijn iPad en een smartphone. Niet omdat ze specifiek voor deze platformen zijn ontwikkelt, maar omdat het een goede controle is voor de kwaliteit van wat ik oplever.
Rustig, rustig, ik weet ook heus wel dat ruim 99% Javascript gewoon heeft aanstaan. Je hoeft zo’n variant ook niet apart te ontwerpen, maar door het wel te berederen dwing je jezelf om goed na te denken over de gelaagdheid van je product, en voorkom je dat de klant van jouw klant een vreemde kennismaking heeft met het product en je klant omzet misloopt door jouw laksheid.
Maar eigenlijk is dat allemaal bijzaak ten opzichte van de essentie; zorg dat alle informatie altijd voor iedereen vindbaar is en je wint automatisch terrein op zaken als toegankelijkheid, vindbaarheid en onderhoudbaarheid van je code. Dát vormt de kwaliteit van wat je oplevert, en dát maakt het verschil tussen ‘veel geld’ en ‘duur’
* Tijdens mijn studie betichtte mijn twee goede vrienden, optimalisatie-guru Roel van der Ven en datavisualisatie-orakel Jasper Schelling mij van code-purisme en komma-gechicaneer. Zo kwam mijn code-fetisjisme aan het licht, en schreven wij in ons laatste studiejaar gedrieënlijk de enorm ondergewaardeerde, helaas nimmer uitgebrachte instant nummer 1-hit ‘schone code’. Op jammerlijke wijze is de tekst ervan nooit bewaard gebleven – of is nooit af geschreven, dat blijkt niet langer uit de annalen – maar mijn passie en liefde voor kwaliteit en efficiëntie van code is altijd gebleven.
Categorieën: Best Practice, Inspiratie, Schone code
Heerlijke tips, waarvoor dank!
Ik kan als ‘jonge’ front-ender ook nog wel wat tips meegeven die ik in m’n day-to-day code klop sessies mij het idee geven dat ik betere / puurdere code schrijf.
01. Semantiek is je vriend.
Het schrijven van valid HTML en CSS dat een werkend product oplevert is niet moeilijk. De uitdaging komt pas wanneer je dieper gaat nadenken over de dingen die je doet.
Voor mij was die eerste stap het nadenken over de semantische betekenis van elementen en hoe je ervoor kan zorgen dat de juiste elementen de juiste ‘waarde’ met zich meebrengen. Zodra je je hier meer in verdiept en je de semantische waarde van elementen eigen maakt schrijf je mijn inziens ook betere code.
02. Hou je CSS flexibel.
Als er één ding is waar ik een schurft hekel aan heb is het idee dat ik dezelfde dingen 524923x in m’n CSS probeer op te lossen. Mijn streven is om m’n CSS zo flexibel mogelijk te schrijven met stukjes die ik kan hergebruiken in m’n HTML. Object-oriented CSS anyone?
03. Niet elk element heeft een class of een ID nodig.
Met Descendant / Child selectors bereik je veel meer en blijf je bij de essentie van je code. Weg met de P tag’s die classes hebben als ‘text’ (and god forbid ‘header’ ipv een element..).
Redelijk open deuren denk ik zo, maar wel dingen die mij het idee geven dat ik op de goede weg zit om een professioneel front-ender te worden.
Thanks voor het artikel Jeroen!
Wederom een erg herkenbaar artikel! Statische ontwerpen aangeleverd krijgen met content in kolommen die over meerdere kolommen met elkaar uitgelijnd is, foto-albums met allemaal foto’s van hetzelfde formaat (geen onderscheid in portrait/landscape formaat e.d.), menu-items die tot op de pixel ingetekend zijn – maar daardoor in een browser niet meer gaan passen i.v.m. andere font-rendering in Photoshop/Fireworks t.o.v. de werkelijkheid…
Gecombineerd met het steeds groter wordende aantal resoluties/devices waar we voor moeten bouwen/ontwerpen denk ik dat we de browser steeds meer (moeten) gaan gebruiken als ontwerptool (zoals Andy Clarke e.d. ook al roepen). Een tool als Photoshop is ideaal om een stijl neer te zetten en creatief bezig te zijn, maar de tijd van 40 verschillende statische screenshots aanleveren voor iedere pagina in een website is al lang voorbij.
Hoe dit proces precies in de praktijk zou moeten verlopen ben ik nog niet helemaal uit, maar ik denk dat ik een klant veel dichter betrokken zou moeten worden bij het ontwerpproces – iets wat relatief gemakkelijk gaat als je als ontwerper een beetje gevoel voor CSS hebt (of vice versa) en goede HTML/CSS als bouwstenen kunt gebruiken. Je kunt snel schakelen en diverse varianten van een pagina tonen aan een klant, terwijl daar in het verleden veel meer tijd in ging zitten. Hierdoor komen problemen met ECHTE content i.p.v. sprookjescontent ws. ook al veel eerder aan bod.
De titel en de inleiding van deze blogpost doen mij vermoeden dat een aantal code voorbeelden behandeld zullen worden. Echter kom ik nergens code voorbeelden tegen die als ‘schoon’ kunnen worden betiteld. Laat staan dat ik überhaupt code voorbeelden tegen kom. Mis ik iets?
Het gebruik van ‘display: block;’ op link elementen heeft naar mijn mening niets te maken met het schrijven van schone code maar meer met het feit of een front-end developer verder kijkt zijn neus lang is en in welke maat hij/zij op de hoogte is van toegankelijkheid voor websites.
@jeffsimons Bedankt voor je toevoegingen. Ik denk dat de dingen die je noemt inderdaad cruciaal zijn, maar ook wel behoren tot de basis van een goede front-end developer. Desalniettemin relevant, dus bedankt!
@pimderks Amen; echte content is key voor dit soort situaties. Ik denk overigens dat de suggestie om de browser te gebruiken als tool ook in de kaart wordt gespeeld met scrum-achtige methodieken, waarbij flexibiliteit het belangrijkste is voor het slagen van het project. Bedankt voor je feedback wederom :)
@st3phan Je mist niets; ik denk dat kwaliteit ‘m meer zin in het logisch nadenken, het zoals jij het niet verder-kijken-dan-je-neus-lang is. Wat mij betreft is code datgene wat daaruit voortvloeit. Ik vind het jammer als je iets anders had verwacht, en neem je opmerking mee voor volgende artikelen, cheers!