提炼出一门语言或技术的 Good Parts, 使用该子集去构造健壮稳固的应用。
我们总是倾向于去学习和使用所有的语言特性,好像凡是新的,凡是提供了的, 就有必要去使用; 这本书告诉我们, 要有选择性地学习和使用。
不是所有的语言特性都需要学习和使用。 学习和使用那些设计不良的特性,不仅耗费大量时间和精力,而且有损项目的可维护性,得不偿失;反之,学习那些优良的部分,不仅可以节省时间,腾出更多时间和精力去做更重要的事情,而且有助于将事情做好,提高收益/学习比。
富有技巧性的HACKER可以欣赏其精巧的构思和利用漏洞的能力,但不适宜用在实际开发中。
Javascript 的优良子集:
1. 简单松散的类型系统,主要是 布尔、字符串和数值 三种类型,undefined, null 两个特殊值;
2. 函数是Javascript 的枢纽对象, 函数型编程范式; 值得重点学习和探讨;
3. 基于原型继承的动态对象机制,值得重点学习和探讨;
4. 容易创建和操作对象和数组, JSON 数据交换格式, 便于使用;
引申一下, 同样可以定义自己的开发子集, 依靠这些元素实现高效可靠的开发活动。
1. 编程语言: 至少熟悉六种编程语言,掌握两种编程语言。 “熟悉”是指大量学习和使用过,“掌握”是指能够使用该语言 构建大型可靠的软件系统。
一种过程式,一种对象式,一种函数式, 一种声明式, 一种客户端语言,一种脚本语言。 例如, C / Java / Clisp / SQL / JavaScript / Python
2. 编程工具: 至少一种编辑器,一种IDE, 一种项目构建工具, 一种版本控制工具, 一种控制台。 例如 Vim / Eclipse / Maven / Svn / Shell (cygwin)
3. 编程方法: 自顶向下,意图导引,自底向上; First Right, then Good ; 预先设计, 及早动手; 迭代式开发、发布、反馈和改进 ; 预估时间;
4. 编程风格: K&R C , Java 编程规范, 排版整洁,代码简洁无冗余, 一致, 使用地道表达范式
5. 编程模型: 串行, 并发, 多进程, 多线程, MapReduce , B/S , 异步, 回调,阻塞, 非阻塞
6 编程思想: 过程式, 对象式, 函数式,声明式, 原语, 集合, 组合, 抽象, 分治,
7. 常用算法: 分治, 递归,动态规划, 时空权衡; 优先级算法;问题转化;
8. 排序: 插入排序, 快速排序, 堆排序, 归并排序;
9. 搜索: 顺序搜索, 二分搜索, 哈希搜索, 分段并行搜索;
10. 数据结构: 【一维或二维】数组, 链表,栈,队列, 树, 字符串, 哈希表; mysql
11. 文本处理: find , grep, awk, sed, 正则表达式;
12. 设计模式: 工厂方法, 单例,原型, 模板方法,策略, 观察者, 责任链, 组合, 命令, 代理,外观,适配器,装饰器,迭代器
13. 进程与网络: ps, top, 任务管理器 ; netstat, ssh, scp, socket , http,
14. 开发框架: Servlet, Spring, Struts, ibatis , Jquery , Extjs, 等
15. 常用组件: 日志(common-logging) , 实用工具库 (字符串、日期函数或工具类) ,
16. 运行容器: apacheHttp , tomcat, jetty, nginx , 浏览器,
17. 软件架构: MVC ; view-controller- service - dao (api) - db ;工厂、管道与过滤器 ; 事件驱动;
18. 单元测试: 参数组合自动生成, 等价划分类, 边界测试, 空测试, 交叉检验, 逆向检验,
19. 代码组织: 头文件, 类文件,包机制,名字空间,
20. 软件工程: 模块化, 对象, 封装,实现隐藏, 约定界面,
21. 测量技术: 性能测量,time
22. 学习网站: Csdn , iteye, infoq, stackoverflow , 开源项目网站,个人博客, google , baidu,
23. 经典书籍: 计算机程序设计艺术, 编程珠玑, SICP , 深入理解计算机系统, 程序设计实践 , Linux/Unix设计思想, 设计模式等