Sikando
Een echte oplossing
voor uitdagende software-problemen

Ervaring

Ik heb meer dan 30 jaar ervaring met het maken van complexe tools en prototype-software. Daardoor kan ik snel een goede software-architectuur vinden, die niet alleen snel tot werkende code leidt, maar ook bruikbaar blijft als basis voor verdere ontwikkeling. Voor u betekent dat een grote besparing van tijd en kosten.

Het overzicht hieronder van computertalen en tools waarmee ik al ervaring heb is waarschijnlijk onvolledig. Spreek me gerust aan voor een project waar ook andere talen of tools bij komen kijken; misschien ken ik ze, en iets bijleren is geen probleem.

Programmeertalen

C++, C, Java, Pascal, Fortran, Javascript, ...

Met C++ heb ik het meeste ervaring.

C++ is een veel gebruikte programmeertaal, vooral voor technische toepassingen, maar heeft niet bij iedereen een goede reputatie. Computerwetenschappers zien het als een zeer complexe met veel valkuilen, en klagen over pointers en het gebrek aan garbage collection. Ontwikkelaars van embedded software, die traditioneel C gebruiken, hebben dan weer schrik voor een grote overhead door het gebruik van objecten.

Mits een grondige kennis van de taal kunnen deze problemen echter vermeden worden. Het is mogelijk om zeer efficiente C++ code te schrijven, die toch overzichtelijk en helder geschreven is. Ik programmeer al in C++ sinds het ontstaan van de taal in de jaren '80 en durf gerust zeggen dat ik de taal van binnen en van buiten ken.

Daarnaast heb ik vaak in andere programmeertalen gewerkt, afhankelijk van de noodzaak van het project van dat moment. Natuurlijk C, maar ook Java, Pascal, Fortran, Javascript en nog een aantal.

Een interessante ontwikkeling van de laatste jaren is de introductie van meer en meer concepten uit functionele programmeertalen in klassieke imperatieve talen; ik denk bijvoorbeeld aan C++'11 en Scala. Ik ben onder de indruk van de compactheid waarmee in een functionele taal complexe idee\euml;n geimplementeerd kunnen worden. Vooral puur functionele talen zoals Haskell boeien me.

Methodologie

Zolang ik programmeer ben ik voorstander van alles wat software meer modulair maakt. Lang geleden ging het dan over gestructureerd programmeren, het gebruik van procedures en API's, later over object-georienteerd en functioneel programmeren. Deze technieken kennen dan ook geen geheimen voor mij.

Object-georienteerd programmeren is een zeer nuttig hulpmiddel, maar wordt tegenwoordig soms zo overdreven gebruikt, dat het zijn doel voorbijschiet. Bij het gebruik van deze techniek is het in mijn ervaring erg belangrijk het doel, namelijk leesbare en onderhoudbare software, goed in het oog te houden.

Ontwikkelomgeving

Ondanks de opkomst van geintegreerde ontwikkelomgevingen zoals Eclipse of Visual Studio blijft mijn favoriete ontwikkelomgeving is gcc-make-emacs op een Linux computer. Voor wie die tools goed kent geeft dit een grote mate van controle en een zeer efficiente manier van werken.

Naargelang de noden van het project is het natuurlijk nodig om een andere ontwikkelomgeving te gebruiken. Zo heb ik bijvoorbeeld ook ervaring opgedaan met Eclipse (te complex naar mijn smaak) en Qt Creator (goed bruikbaar).

Voor configuratiebeheer heb ik vooral ervaring met Subversion, maar Git of andere systemen zijn natuurlijk ook OK.

Voor het ontwerp van gebruikersinterfaces heb ik vooral ervaring met Qt. Een belangrijk voordeel van Qt is dat het zowel op Linux als op Windows en in andere (mobiele) omgevingen werkt.

Besturingssysteem

Qua besturingssysteem heb ik vooral ervaring met Linux en daarnaast ook met Windows.

Voor Linux heb ik al met heel wat verschillende distro's gewerkt, alsook met Xenomai (real-time kernel voor Linux). Ik heb ook heel wat ervaring met shell scripting.

Compiler front-ends en code transformaties

Ik heb uitgebreide ervaring met de drie voornaamste compiler front-ends om code in C++ of andere talen in te lezen en na analyse en/of transformatie in een andere vorm weer uit te schrijven.

De drie voornaamste front-ends voor C++ zijn EDG, GCC en LLVM. EDG is commercieel, dus betalend, maar geeft zeer goede ondersteuning. GCC is de bekende openbron-compiler, maar de interne C code is slecht gestructureerd voor hergebruik in een andere omgeving. LLVM is nieuwer, veel beter gestructureerd, geimplementeerd in C++ en ook openbron.

Multithreading, real-time en netwerk

Ik heb ervaring met Posix threads voor multi-threading. Daarnaast heb ik ook ooit een eigen implementatie van niet-preëmptieve multi-threading gemaakt, alsook een C++-bibliotheek waarmee je een RTOS kan simuleren.

Voor real-time robotica-software heb ik al gewerkt met Orocos, naast natuurlijk de standaard Linux systeemfuncties.

Daarnaast heb ik ruime ervaring met communicatie over netwerken via TCP en UDP, zowel voor Windows als voor gewone en real-time Linux.

Webtechnologie

Ik ken HTML, Javascript, CGI, jQuery, Raphaël en kan een Apache webserver configureren. Ik ben geen grafisch ontwerper, maar een simpele website voor een prototype is geen probleem, en met speciale vereisten aan de server-kant kan ik zeker overweg.

Matlab en Simulink

Zowat alles in Matlab en Simulink waar C- of C++-code mee gemoeid is, heb ik al ooit gedaan: bijvoorbeeld ontwikkeling van S-functies om externe code op te roepen vanuit Matlab, of integratie van gegenereerde code in externe toepassingen

FPGA-ontwerp en hardware

Van opleiding ben ik ingenieur electronica, en ik heb jarenlang gewerkt aan de ontwikkeling van EDA (Electronic Design Automation) tools. Ik ken wat VHDL en zo nodig kan ik ook met hardware overweg.

Daarnaast heb ik ervaring met het gebruik van Xilinx System Generator voor FPGA-ontwerp.