Aardverschuiving in de TIOBE index

Wel eens gekeken hoe populair jouw eigen favoriete programmeertaal is?

Op TIOBE’s Programming Community Index kun je dit opzoeken. De headline van de index voor juni deed mij weer eens terugkeren naar deze index:

Dinosaur Smalltalk falls off top 50

De wijze waarop TIOBE deze index bepaald loopt via Google: het gaat om een populariteitsscore op basis van zoekopdrachten via Google naar deze programmeertalen. Na vele jaren in die top te hebben doorgebracht (en volgens een ander onderzoek in 1994 op nummer 1 te hebben gestaan) is Smalltalk langzaam steeds meer op zijn retour. Het afgelopen jaar heb ik een klein projectje gedaan met VisualWorks Smalltalk voor een klant die een Mac applicatie wilde. Daarnaast hebben wij bij Sogyo de VisualWorks IDE ook gebruikt voor het maken van domein modellen met Exploratory Modeling, en een interne workshop webontwikkeling met behulp van Seaside, een aan Ruby/Rails superieur framework.

Maar de aardverschuiving waarop ik duid in de titel van deze blog gaat niet over Smalltalk, maar over een andere programmeertaal die daar ontzettend veel gemeen mee heeft: Objective-C. Vanuit de 32ste positie staat Objective-C nu op de 9de, waarmee het talen als Ruby en Javascript heeft ingehaald. En aan die spectaculaire stijging lijkt nog geen einde te komen.

Toevallig ben ik het afgelopen jaar ook met Objective-C bezig geweest. Het kleine Smalltalk projectje waarnaar ik hierboven verwees heb ik voor mijn eigen genoegen ook geport naar Objective-C om er een native Mac OS X applicatie van te maken. Uitsluitend om te zien of mijn favoriete design patterns overeind bleven in die programmeertaal. En ik moet zeggen: ik wist niet wat mij overkwam. Daarnaast heb ik een iPhone applicatie ontwikkeld — daarvoor worden dezelfde programmeertaal en libraries (Cocoa genaamd) gebruikt.

Ik denk dat ik wel kan zeggen dat ik redelijk veeleisend ben in mijn gebruik van welke programmeertaal dan ook. Weliswaar zijn mijn meeste design restricties in vrijwel elke programmeertaal te realiseren (gebaseerd op de principes van losse koppeling en hoge cohesie), maar de ervaring heeft mij geleerd dat dynamische talen en met name Smalltalk mij daarin in hoge mate ondersteunen. Naarmate een taal restrictiever is (in typing en reflectie met name) moet ik meer oplossingen realiseren met behulp van frameworkjes (let op het verkleinwoord!). Dat ervaar ik als een omweg, hoewel het doel altijd te bereiken is.

Objective-C bleek echter bij mijn twee projectjes onverwacht behulpzaam te zijn, zelfs zo extreem dat ik moest concluderen dat Smalltalk misschien nog bovenaan staat op mijn eigen lijstje van favoriete programmeertalen, maar dat Objective-C een “close-second” is.

Waardoor heeft Objective-C mij zo kunnen charmeren?

Ten eerste de extreme vorm van reflectie: alles wat ik gewend was te doen in Smalltalk was mogelijk. En ik vermoed dat dingen die ik niet gewend ben te doen in Smalltalk ook mogelijk zijn. Reflectie, runtime introspectie, closures of lambda functies, class extensions, interfaces waren allemaal beschikbaar. En, moet ik zeggen, uitstekend gedocumenteerd door Apple op de developers site.

Ten tweede de extreme efficiëntie van de runtime. Een redelijke applicatie beneden de 900 kB? Ik wist niet wat ik zag toen ik mijn applicatie deployde! Objective-C compileert (met de op vele platformen beschikbare GCC compiler) gewoon naar C. Dat het mogelijk was met die extreem dunne schil om C zo’n dynamische taal te creëren is geniaal. Omdat Objective-C zo’n dunne schil om C is, is het ook mogelijk om binnen de broncode Objective-C en C (en C++) naar willekeur te mixen. C staat nog steeds in mijn top drie, en ik vond het heerlijk om daar zo makkelijk toegang toe te houden. In Smalltalk moet je toch via dll’s koppelen met C. Maar de omvang is niet het enige, de performance is ook niet mis. Ik kan je hier geen metrieken laten zien, daar heb ik nog niet de tijd voor genomen, maar ik stond versteld van de snelheid van complexe algoritmes.

Met nieuwe liefdes gaat het natuurlijk vaker zo: Objective-C trekt mij momenteel meer om in mijn vrije tijd mee te spelen dan Smalltalk. En dat is in 20 jaar niet voorgekomen!

Kijk er eens naar. De taal is zeker niet Mac OS gebonden. Via OpenStep ook te gebruiken onder Windows of Linux. En vaardigheid in het ontwikkelen voor iPhone of iPad lijkt in deze tijd geen luxe.