一.    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





西津渡