Edit page IncludedPage
[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''' - Who doesn't?  I've taught object-oriented
11  programming and object-oriented analysis and design (OOA&D)
12  as part of my InstructorRole.
13  I've never been a believer in the pure-OOP religion.
14  I think OOP has a very broad application in many areas
15  of CS and that's all.
16
17  * '''Metaprogramming''' - I love template templates.
18  Oh, yes I do.  I must admit this little perversion of
19  mine.  In the past, you couldn't abuse genericity because
20  your buggy compiler would blow up.  Now that compilers
21  have been fixed, your brain blows up first.
22  
23  This is a little useless thing that only Boost would ever
24  want to carry:
25  
26   http://www.develer.com/devlib/devlib-current/cxxutil/viterator.h
27  
28  * '''Functional Programming''' - I'm sorry to admit I
29  never tried a fully functional approach in a real world
30  project, but I frequently use "pills" of functional
31  programming all the time where appropriate.  Expecially
32  in combination with the StandardTemplateLibrary and with
33  Perl.
34
35  * '''Design Patterns''' - Like many, I know, use and teach
36  the good old GangOfFour patterns and sometimes the more
37  esoteric ones.  Actually, I mentioned them only to say
38  that I dislike both code that reinvents them as much as
39  code that abuses them (the SingletonPattern and
40  AbstractFactoryPattern are expecially popular with novices).
41
42  * '''Multithreading''' - I tend to use it as a last resort
43  solution in my designs, because I consider truly concurrent
44  programming extremely hard to understand, debug and extend.
45  Most of my multithreading programming was on the AmigaComputer
46  (whose multitasking OS lacked memory protection and
47  was thus a hell of a multithreading environment) and on
48  Windows (where multithreading is popular because of the
49  limitations and inefficiencies of the IPC primitives and the
50  broken asynchronous I/O).
51
52  * '''Compiler design''' - I'm experienced in writing
53  grammars and hand-writing the lexical analyzers and
54  parsers as well as using the usuals automated tools.
55  I understand problems related to AST representation,
56  optimizers, and code generators.
57  See OpenSourceDeveloperRole for GCC contributions.
58
59  * '''Kernel development''' - I'm very interested in OS
60  design problems and I wrote lots of system-level code
61  and utilities.  I even wrote a minimalistic microkernel
62  for DevLib:
63  
64   http://www.develer.com/devlib/devlib-current/kern/
65
66 And of course...
67
68  * '''Spaghetti programming!'''