一.    Perspective and Metaphor

Platform
Kernel
Framework
二.    Philosophy and discipline
Be aware of context
Extreme maintenance
Be pragmatic
Extreme abstract: Program to an interface (abstraction), not an implementation
  
Extreme separation of concerns
Extreme readability
Testability
No side effect
Do not repeat yourself
三.    Principle
DIP ,dependency inversion of control
OCP , open close
LSP , liskov substitute
ISP , interface segregation
SRP , single responsibility
LKP, Lease knowledge principle
四.    design pattern
Construction
Behavior
Structure

五.    anti-pattern、bad smell
Long method
Diverse change
    Repeated code
    Talk to stranger
    Pre optimize
六.    algorithms
 nLongN
 Divided and conqueror
 

七.    architecture
Hierarchal
Pipes and filter
Micro kernel
Broker
Black Board
    Interpreter
   
八.    Distributed & concurrent
What to concurrent

Scalability
    Stretch key dimensions to see what breaks
九.    languages
Ruby
Erlang
assemble
C
C++
Java
Python
Scala

Be ware of different program paradigms.
十.    Performance
 Minimize remote calls and other I/O
 Speed-up data conversion
 release resource as soon as possible 

十一.    architectures' future
軟件設計思想的發展邏輯,大致是提高抽象程度 ,separation of concern 程度。
    fn(design )=  fn1(abstraction )+ fn2(separation of concern).

由于大規模數據處理時代的來臨,下一代設計范式的重點:
1.    將是如何提高distributed(--concurrent) programing 的抽象程度 和 separation of concern 程度。
2.    dsl ,按照以上的公式,也確實是一個好的方向。
十二.    Reference
<art agile software development>
<prerefactor>
<design patterns>
<beautiful architecture>
<refactor>
<pattern oriented software architecture>
<extreme software development>
<beautiful code>
<patterns for parallel programming>
<java concurrent programming in practice>
<java performance tuning>
<the definite guide to hadoop>
<greenplum>
<DryadLINQ>
<software architecture in practice>
<97 things architecture should known>
http://en.wikipedia.org/wiki/Programming_paradigm





西津渡