# 开班导言

# 开班发言——程序员的四层境界

学会不如会学,会学不如会用,会用不如被用。

软件开发者的成长阶段

  • 学会(知其所然)
掌握一些具体编程知识的初级程序员
  • 会学 (知所以然)
能快速深刻地理解技术并举一反三的程序员
  • 会用 (人为我用)
能讲所学灵活应用到实际编程设计之中的程序员
  • 被用 (我为人用)
能设计出广为人用的应用程序、库、工具包、框架等的系统分析师 架构师
更高级的发明出主流的设计模式、算法、语言,乃至理论等

知识之上是思想,思想之上是精神。

# 首轮提问——什么语言最好?

Turing-complete

一个能计算出每个图灵可计算函数的计算系统被称为图灵完备的
一个语言是图灵完备的,意味着该语言的计算能力与一个通用图灵机相当
这也是现代计算机语言所能拥有的最高能力
编程语言的流行程度与其擅长的领域关系密切。
语言和范式的流行,与大公司支持和商业推动是有密切关系的。

# 语言选择——合适的就是最好的

好的语言就是适合编程者和解决对象的语言。

计算机语言发展历程

机器语言、汇编语言、高级语言、面向问题语言、人工智能语言

# 初始范式——程序王国中的世界观和方法论

编程心法

编程范式(paradigm)是计算机编程的基本风格或典范模式

# 开发技术——实用还是时髦?

框架

可以是协同工作的类,也可以是协同工作的函数
  • 意义
在于使设计者在特定领域的整体设计上不必重新发明轮子;
库和工具包的意义在于使开发者摆脱底层编码,专注于特定问题和业务逻辑。
一个足够复杂的应用软件开发,为确保快速有效,通常采取的方式是:
在宏观上选取一些框架以控制整体的结构和流程
在微观实现上利用库和工具包来解决具体的细节问题

库和工具包 与 框架

库和工具包是为程序员带来自由,框架是为程序员带来约束的。

具体地说,库和工具包提供武器装备,框架则利用控制反转(IoC)机制实现对各模块的统一调度,
从而剥夺了程序员对全局的掌控权,使他们成为手执编程武器、随时听候调遣的士兵。

设计模式和架构

不是软件产品,而且软件思想。设计模式是软件的战术思想,架构是软件的战略决策
  • 设计模式
计模式是针对某些经常出现的问题提出的行之有效的设计解决方案
而它侧重思想重用,因此比框架更更抽象、更普适,但多限于局部解决方案,没有框架的整体性

与之相似的还有惯用法(idiom),也是针对常发问题的解决方案
侧重实现而非设计,与实现语言密切相关,是一种更底层更具体的编程技巧。
  • 架构
一般指一个软件系统的最高层次的整体结构和规划
一个架构可能包含多个框架,而一个框架可能包含多个设计模式