1. 对于一个软件开发者,会经历的四个阶段:程序员
学会不如会学,会学不如会用,会用不如被用。web
学会(知其所然)掌握一些具体的编程知识的初级程序员算法
会学(知因此然)能快速而深入的理解技术并触类旁通的程序员编程
会用(人为我用)能将所学灵活运用到实际编程设计之中的高级程序员设计模式
被用(我为人用)能设计出广为人用的应用程序、库、工具包、框架等的系统分析师和架构师安全
2. 知识之上是思想,思想之上是精神。服务器
3. 一个优秀的程序员,除了要快速掌握知识,善于领悟思想外,还必须具有务实与研究精神,独立与合做精神,批判与自省精神。网络
4. 好的语言就是适合编程者和解决对象的语言。架构
5. 计算机语言按其发展历程一般分为5代。并发
第1代语言:机器语言
第2代语言:汇编语言——IA-32 Assembly, SPARC Assembly etc
第3代语言:高级语言——Fortran, Pascal, C, C++, Java, VB etc
第4代语言:面向问题语言—— SQL, SAS, SPSS etc (第4代语言 更专一 业务逻辑 和 问题领域)
第5代语言:人工智能语言——Prolog, Mercury, OPS5 etc
6. 得形而忘意,无异于舍本逐末; 得意而忘形, 方能游刃有余。
7. 编程范式是抽象的,必须经过具体的编程语言来体现。它表明的世界观每每体如今语言的核心概念中,表明的方法论每每体如今语言的表达机制中。
8. 自觉得懂的未必真的懂,自觉得不懂的未必真的不懂。
9. 框架
框架是一组协同工做的类,它们为特定类型的软件构筑了一个可重用的设计。与库和工具包不一样之处在于前者侧重设计重用然后者侧重代码重用。
框架并不限于OOP, 能够是协同工做的类,也能够是协同工做的函数。一个足够复杂的应用软件开发,为确保快速有效,一般采用的方式是:在宏观管理上选取一些框架以控制总体的结构和流程;在微观实现上利用库和工具包来解决具体的细节问题。框架的意义在于使设计者在特定的领域的总体设计上没必要从新造轮子;库和工具包的意义在于使开发者摆脱底层编码,专一于问题和业务逻辑。
10. 库和工具包最大的差异在于截然相反的设计理念,库和工具包是为程序员带来自由的,框架是为程序员带来约束的。
11. 同框架与库和工具包不一样,设计模式和架构不是软件产品,而是软件思想。设计模式是软件的战术思想,架构是软件的战略决策。
1. 命令式/过程式 (Imperative/Procedural)
表明语言:Fortran/Pascal/C
核心概念:命令/过程(Command/Procedure)
运行机制:命令执行
关键突破:突破单一主程序和非结构化程序的限制
实现原理:引入逻辑控制和子程序
主要目的:模拟机器思惟,实现自顶向下的模块设计
经常使用应用:交互式、事件驱动型系统、数值计算等
2. 函数式/应用式 (Functional/Applicative)
表明语言:Scheme/Haskell
核心概念:函数(Function)
运行机制:表达式计算
关键突破:突破机器思惟的限制
实现原理:引入高阶函数,将函数做为数据处理
主要目的:模拟数学思惟,简化代码,减小反作用
经常使用应用:微积分计算、数学逻辑、博弈等
3. 逻辑式 (Logic)
表明语言:Prolog/Mercury
核心概念:断言(Predicate)
运行机制:逻辑推理
关键突破:突破逻辑与控制粘合的限制
实现原理:利用推理引擎在已知的事实和规则的基础上进行逻辑推断
主要目的:专一逻辑分析,减小控制代码
经常使用应用:机器证实、专家系统、天然语言处理、语义网(semantic web)、决策分析、业务规则管理等
4. 对象式 (Object-Oriented)
表明语言:Smalltalk/Java
核心概念:对象(Object)
运行机制:对象间信息交换
关键突破:突破数据和代码分离的限制
实现原理:引入封装、继承和多态机制
主要目的:迎合人类认知模式,提升软件的易用性和重用性
经常使用应用:大型复杂交互式系统等
5. 并发式/并行式 (Concurrent/Parallel)
表明语言:Erlang/Oz
核心概念:进程/线程 (Process/Thread)
运行机制:进程/线程间通讯与同步
关键突破:突破串行的限制
实现原理:引入并行的线程模块及模块间的通讯与同步机制
主要目的:充分利用资源、提升运行效率、提升软件的响应能力
经常使用应用:图形用户界面, I/O处理, 多任务系统如操做系统,网络服务器等,实施系统,嵌入式系统,计算密集型系统如科学计算机、人工智能等
6. 范型式 (Generic)
表明语言:Ada/Eiffel/C++
核心概念:算法(Algorithm)
运行机制:算法实例化(多发生于编译期)
关键突破:突破静态类型语言的限制
实现原理:利用模版推迟类型指定
主要目的:提升算法的普适性
经常使用应用:普适性算法如排序、搜索等,集合类容器等
7. 元编程 (Metaprogramming)
表明语言:Lisp/Ruby/JavaScript
核心概念:元程序(Metaprogram)
运行机制:动态生成代码或自动修改执行指令
关键突破:突破语言的常规语法限制
实现原理:利用代码生成或语言内建的反射(reflection)、动态等机制,将程序语言做为数据来处理
主要目的:减小手工编码,提高语言级别
经常使用应用:自动代码生成、定义结构化配置文件、IDE、编译器、解释器、人工智能、模型驱动架构(MDA)、领域特定语言(DSL)等
8. 切面式 (Aspect-Oriented)
表明语言:AspectJ/AspectC++
核心概念:切面(Aspect)
运行机制:在接入点处执行建议
关键突破:突破横切关注点没法模块化的限制
实现原理:经过编织(weaving)将附加行为嵌入主体程序
主要目的:实现横切关注点分离
经常使用应用:日志输出、代码跟踪、性能监控、异常处理、安全检查、事务管理等
9. 事件驱动 (Event-Driven)
表明语言:C#/VB.NET
核心概念:事件(Event)
运行机制:监听器收到事件通知后做出响应
关键突破:突破顺序、同步的流程控制
实现原理:引入控制反转和异步机制
主要目的:调用者与被调用者在代码和时间上双重解耦
经常使用应用:图形用户界面、网络应用、服务器、操做系统、IoC框架、异步输入、DOM等