1. Simplicity
2. Clarity
3. Generality
-- Brian W. Kernighan, Rob Pike
I frequently use the following paradigms and techniques:
Functional Programming — I'm ashamed to admit I
never tried a purely functional approach in a real-world
project, but I do frequently use "pills" of functional
programming, expecially in combination with the
StandardTemplateLibrary and with Perl.
Design Patterns — Like many, I know, use and teach
the good old GangOfFour patterns and sometimes the more
esoteric ones. Actually, I mentioned them only to say
that I dislike both code that reinvents them as much as
code that abuses them (the SingletonPattern and
AbstractFactoryPattern are expecially popular with novices).
Multithreading — I tend to use it as a last resort
solution in my designs, because I consider truly concurrent
programming extremely hard to understand, debug and extend.
Most of my multithreading programming was on the AmigaComputer
(whose multitasking OS lacked memory protection and
was thus a hell of a multithreading environment) and on
Windows (where multithreading is popular because of the
limitations and inefficiencies of the IPC primitives and the
broken asynchronous I/O).
Compiler design — I'm experienced in writing
grammars and hand-writing the lexical analyzers and
parsers as well as using the usuals automated tools.
I understand problems related to AST representation,
optimizers, and code generators.
See OpenSourceDeveloperRole for GCC contributions.
Kernel development — I'm particularily interested in OS design.
I wrote lots of system-level code and utilities, including a
microkernel called BeRTOS.
And, of course...