课程亮点
一个人不可能在地面上学会游泳!本课程采用完全现场实战的方式,帮助团队快速体验和学会高级面向对象技术,编写出高质量、易维护的代码。
学员分为若干小组(最好是实际工作组),每个小组都有2~3个核心参训人员人
核心参训人员提供总计3000回车行实际工作代码
对其中1000行代码,讲师会在课上现场讲解并改写(改写量一般在300~500行左右)
改写完成后达到极高的标准,包括:
零常数,零for(int i),零else/case(代码中没有任何else和case关键字)、每个函数均小于30回车行
编码有效率在13~15LOC/FP左右(世界纪录级别)
另外2000行作为课堂练习
注意:本课程不涉及性能优化、安全性、多线程等特殊技术。
课程受众
技术经理,开发骨干,资质高的新员工
概览
面向对象,编码规范,设计模式
简洁性,可读性,可维护性
课程大纲
以下内容按时间顺序描述了训练营的整体脉络。除整体脉络外,各个阶段还会穿插相应知识的讲授。
以下描述仅针对其中一个团队,其他团队也各自选定自己的产品代码,并按顺序执行实践。
开篇:编码终极奥义
1. 终极奥义第三层:编码即人类语言
2. 终极奥义第二层:编码即信息
3. 终极奥义第一层:编码是美的
初级篇
1. 此阶段注重语句级别的编程技能,基本上不需要面向对象基础
2. 讲师现场对某个团队的代表性产品进行代码审查重点包括:
3. 变量命名
4. 函数命名
5. 全局变量处理
6. 消除常数
7. 冗余语句的处理
8. FFT结构(false-false-true)
9. foreach循环
10. var/auto关键字
11. 所有团队现场对剩余代码进行重构,讲师点评
中级篇
1. 此阶段注重函数级别的编程技能,需要函数封装、模板(泛型)等知识
2. 讲师现场对某个团队的代码进行走读,指出以下问题:
3. 代码克隆
4. 如何消除结构相同、类型不同的if-else或case
5. 模板
6. Map
7. 三元表达式
8. 所有团队现场对剩余代码进行重构,讲师点评
高级篇
1. 此阶段注重封装、继承、多态等传统面向对象的知识
2. 讲师现场对某个团队的代码进行走读,指出以下问题:
3. 代码克隆
4. 圈复杂度与圈复杂密度
5. 如何消除结构大为不同的大段if-else或case
6. 基类,虚函数
7. 多态与虚函数
8. 接口与多继承
9. 基类vs接口:扩展与实现
10. 所有团队现场对剩余代码进行重构,讲师点评
质量篇
1. 此阶段注重防范开发中、维护中可能产生的编码质量问题
2. 注:实际上此章节所述内容,均会在上述课程中遇到问题时随时提到,此处仅做总结
3. 讲师现场对某个团队的代码进行走读,指出以下问题:
4. 易读性问题
5. 看似技术含量很高的“半截子科技”代码
6. 可维护性问题
7. 成对出现的编码
8. 常数封装位置
9. 多分支结构的处理
10. If-else与case的8种消除方法比较
11. 常见缺陷预防
12. 空指针
13. 数组越界
14. 所有团队现场对剩余代码进行重构,讲师点评
编码心法篇
1. 此阶段注重实际开发动态过程中,人们由于编码次序的差异而造成的思维差异,进而导致的编码质量差异
2. 讲师现场对某个团队的一部分代码进行重写,并展示以下编程心法:
3. 从外向内分解问题出
4. 先编写调用者,后编写底层函数(准TDD开发)
5. 每5~10分钟进行一次编译和测试
6. 随时将问题控制在最近2~5行代码内
7. 内建的质量
8. 随时避免各种不良编程问题,而不是编写后再进行重构
9. 一次性写成“上帝代码”
10. “上帝代码”是在语言框架内,多一行则多,少一行则少,无意中删除或添加任何一个字符将会出现编译错误的代码
11. 首次编写即不包括“陈旧语法”
12. 在第一次编写代码时,按照特有的心法和顺序,从来不需要if-else if/switch case等语法,也不会想到它们
13. 高级话题
14. 超越语言的语法边界
15. C,C++,C#,Java,Python语法进化对比
16. 通过5种语言实现同一个功能的对比,观察人类语言向编码终极奥义的逼近过程
17. 编码消耗率
18. 实现特定数量的功能所需的最低代码量
课程时长
2天