Technical Background¶
Linux Systems Programming¶
I grew up with the good (?) old commercial Unixen, having fun … err, specializing … at the bottom of user space. The fun continued when Linux took over and consequently improved on Unix concepts (see for example signalfd, eventfd, timerfd, and epoll).
Realtime
Network programming
Interprocess communication
Event loop programming (best done in Python using lovely
asyncio
)Multithreading
Memory management
Embedded Linux¶
No wonder I got torn into the Embedded space. /dev/i2c-*
,
/dev/spi.*
, what a fun it was to speak with devices from ordinary
programs. Of course, “Embedded” is more - low resources for example,
but that’s another story.
Linux Kernel¶
Naturally, out of curiosity and a couple of customer projects, I got into kernel programming. The kernel is a different beast, and implementing user space is rather interesting.
Programming Languages¶
Over the years, many programming languages happened. C++ is my mother tongue, and I still enjoy using it. Uncomfortable with its complexity and teachability, I haven’t unlearned it like Perl - C is much more to the point though. Python is my all-time favorite. Shell is fun too - it is teachable and weird enough to be much fun (and it reflects in a rather creative way the Unix concepts that I like so much).
Software Development At Large¶
In my non-freelance life, I’ve been in roles called “architect”. I have also been in roles like “team lead”, but that’s not what I really am [1] - I’m a programmer with a feel for the larger view.
Object oriented programming
Unit Testing and Test Driven Development (out of conviction)
Build tools and packaging
Footnotes