Sikando
A real solution
for challenging software problems

Experience

I have more than 30 years of experience with the development of complex tools and prototype software. This allows me to quickly find a good software architecture that quickly leads to working code and also remains usable as a base for further development. For you, this means an important reduction in development time and cost.

The overview below of computer languages and tools I have experience with is probably incomplete. Please do not hesitate to contact me for a project involving other languages or tools; I may have experience with them, and I don't mind learning something new.

Programming languages

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

My main programming experience is with C++.

C++ is a commonly used programming languages, especially for technical applications, but does not have a good reputation with everyone. Computer scientists see it as a very complex language with many pitfalls, and complain about pointers and the lack of garbage collection. Developers of embedded software, traditionally users of C, are often afraid of a large overhead due to the use of objects.

These problems can be avoided given a thorough understanding of the language. It is possible to write very efficient C++ code that is at the same time well structured and easy to understand. I have been programming in C++ since the dawn of the language in the eighties and dare say I know the language inside out.

Next to C++, I have regularly used other programming languages, depending on the needs of the project at hand. I have of course used C, but also Java, Pascal, Fortran, Javascript and some more.

An interesting development in recent years is the introduction of more and more concepts from functional programming languages in classical imperative languages; for example C++'11 and Scala. I am impressed by the compactness with which an idea can typically be implemented in a functional language. Especially pure functional languages such as Haskell fascinate me.

Methodology

As long as I have been programming, I have been in favour of everything that makes software more modular. Long ago, this meant using structured programming, procedures and APIs, later object oriented and functional programming. These techniques have no secrets for me.

Object oriented programming is a very useful tool, but nowadays its use is sometimes overdone so much that the resulting code is harder to understand and maintain instead of easier. When using object oriented techniques, it is therefore very important to keep an eye on the ultimate goal, which is to build readable and maintainable software.

Development environment

In spite of the availability of integrated software development environments such as Eclipse or Visual Studio, my favorite development environment remains gcc-make-emacs on a Linux computer. If you know these tools well, they provide you with a high degree of control and a very efficient way of working.

Of course, depending on the needs of the project, it is sometimes necessary to use another development environment. I have experience with Eclipse (too complex to my taste) and Qt Creator (very usable).

For configuration management, I have experience mainly with Subversion, but of course Git or other tools are also OK.

Most of my user interface design experience is with Qt. An important advantage of Qt is that it works on Linux as well as on Windows and other (mobile) environments.

Operating System

In terms of operation systems, most of my experience is with Linux, but I also have some experience with Windows.

For Linux, I have worked with different distro's as well as with Xenomai (real time kernel for Linux). I also have a lot of experience with shell scripting.

Compiler front-ends and code transformations

I have extensive experience with the three main compiler front-ends to read code in C++ or other languages, analyze and/or transform it, and write it out again in a different form.

The three main front-ends for C++ are EDG, GCC and LLVM. EDG is commercial, not free, but gives very good support. GCC is the well-known open source compiler, but the internal C code is badly structured for re-use in a different environment. LLVM is newer, much better structured, implemented in C++ en also open source.

Multithreading, real time and networking

I have experience with Posix threads for multi-threading. I also once wrote my own implementation of non-preemptive multithreading, as well as a C++ library that can be used to simulate an RTOS.

For real time robotics software, I have worked with Orocos as well as the standard Linux system functions.

I also have extensive experience with communication over networks via TCP and UDP, for Windows as well as plain and real time Linux.

Web technology

I know HTML, Javascript, CGI, jQuery, Raphaël and can configure an Apache web server. I am not a graphical designer, but a simple web site for a prototype is not a problem, and I can certainly handle any special requirements on the server side.

Matlab and Simulink

I have done about everything in Matlab and Simulink that involves C- or C++-code: for example development of S-functions to call external code from Matlab, or integration of Matlab/Simulink generated code in external applications.

FPGA design and hardware

By education, I am an electronics engineer, and I have worked for many years on the development of EDA (Electronic Design Automation) tools. I know some VHDL and can handle hardware if necessary.

I also have experience with the use of Xilinx System Generator for FPGA design.