Edit page geekigeeki
[wiki.git] / ProgrammingParadigms
1 {{{
2 1. Simplicity
3 2. Clarity
4 3. Generality
5 -- Brian W. Kernighan, Rob Pike
6 }}}
7
8 I frequently use the following paradigms and techniques:
9
10  * **OOP** - Well, who doesn't?  I've been teaching object-oriented
11  programming and object-oriented analysis and design (OOA&D)
12  as part of my InstructorRole, although I've never been a true believer
13  in the pure-OOP dogma. OOP has very broad applicability in many areas
14  of CS, and that's all.
15
16  * **Metaprogramming** -- I've been in love with templates of templates for a while.
17  Oh, yes... I must admit this little perversion of mine. In the past, you couldn't
18  abuse genericity because your buggy compiler would blow up.  Now that compilers
19  have been fixed, your mind melts first.
20  
21  This is a little useless thing that not even Boost would ever want to
22  carry around:
23  
24   http://www.develer.com/devlib/devlib-current/cxxutil/viterator.h
25  
26  * **Functional Programming** -- I'm ashamed to admit I
27  never tried a purely functional approach in a real-world
28  project, but I do frequently use "pills" of functional
29  programming, expecially in combination with the
30  StandardTemplateLibrary and with Perl.
31
32  * **Design Patterns** -- Like many, I know, use and teach
33  the good old GangOfFour patterns and sometimes the more
34  esoteric ones.  Actually, I mentioned them only to say
35  that I dislike both code that reinvents them as much as
36  code that abuses them (the SingletonPattern and
37  AbstractFactoryPattern are expecially popular with novices).
38
39  * **Multithreading** -- I tend to use it as a last resort
40  solution in my designs, because I consider truly concurrent
41  programming extremely hard to understand, debug and extend.
42  Most of my multithreading programming was on the AmigaComputer
43  (whose multitasking OS lacked memory protection and
44  was thus a hell of a multithreading environment) and on
45  Windows (where multithreading is popular because of the
46  limitations and inefficiencies of the IPC primitives and the
47  broken asynchronous I/O).
48
49  * **Compiler design** -- I'm experienced in writing
50  grammars and hand-writing the lexical analyzers and
51  parsers as well as using the usuals automated tools.
52  I understand problems related to AST representation,
53  optimizers, and code generators.
54  See OpenSourceDeveloperRole for GCC contributions.
55
56  * **Kernel development** -- I'm particularily interested in OS design.
57  I wrote lots of system-level code and utilities, including a
58  minimalistic microkernel which is now being called [[BeRTOS]].
59
60 And, of course...
61
62  * **Spaghetti programming!**