400-888-5228

课程时长

2天

 

课程思路

一个人不可能在地面上学会游泳!本课程采用完全现场实战的方式,帮助团队快速体验和学会高级面向对象技术,编写出高质量、易维护的代码。

  1. 学员分为若干小组(最好是实际工作组),每个小组都有2~3个核心参训人员人
  2. 核心参训人员提供总计3000回车行实际工作代码
  3. 对其中1000行代码,讲师会在课上现场讲解并改写(改写量一般在300~500行左右)
  4. 改写完成后达到极高的标准,包括:
    1. 零常数,零for(int i),零else/case(代码中没有任何else和case关键字)、每个函数均小于30回车行
    2. 编码有效率在13~15LOC/FP左右(世界纪录级别)
  5. 另外2000行作为课堂练习
  6. 注意:本课程不涉及性能优化、安全性、多线程等特殊技术。

课程受众

技术经理,开发骨干,资质高的新员工

 

大纲脉络

以下内容按时间顺序描述了训练营的整体脉络。除整体脉络外,各个阶段还会穿插相应知识的讲授。

以下描述仅针对其中一个团队,其他团队也各自选定自己的产品代码,并按顺序执行实践。

  1. 开篇:编码终极奥义
    1. 终极奥义第三层:编码即人类语言
    2. 终极奥义第二层:编码即信息
    3. 终极奥义第一层:编码是美的
  2. 初级篇
    1. 此阶段注重语句级别的编程技能,基本上不需要面向对象基础
    2. 讲师现场对某个团队的代表性产品进行代码审查重点包括:
      1. 变量命名
      2. 函数命名
      3. 全局变量处理
      4. 消除常数
      5. 冗余语句的处理
      6. FFT结构(false-false-true)
      7. foreach循环
      8. var/auto关键字
    3. 所有团队现场对剩余代码进行重构,讲师点评
  3. 中级篇
    1. 此阶段注重函数级别的编程技能,需要函数封装、模板(泛型)等知识
    2. 讲师现场对某个团队的代码进行走读,指出以下问题:
      1. 代码克隆
      2. 如何消除结构相同、类型不同的if-else或case
        1. 模板
        2. Map
        3. 三元表达式
      3. 所有团队现场对剩余代码进行重构,讲师点评
  4. 高级篇
    1. 此阶段注重封装、继承、多态等传统面向对象的知识
    2. 讲师现场对某个团队的代码进行走读,指出以下问题:
      1. 代码克隆
      2. 圈复杂度与圈复杂密度
      3. 如何消除结构大为不同的大段if-else或case
        1. 基类,虚函数
        2. 多态与虚函数
        3. 接口与多继承
        4. 基类vs接口:扩展与实现
      4. 所有团队现场对剩余代码进行重构,讲师点评
  5. 质量篇
    1. 此阶段注重防范开发中、维护中可能产生的编码质量问题
      1. 注:实际上此章节所述内容,均会在上述课程中遇到问题时随时提到,此处仅做总结
    2. 讲师现场对某个团队的代码进行走读,指出以下问题:
      1. 易读性问题
        1. 看似技术含量很高的“半截子科技”代码
      2. 可维护性问题
        1. 成对出现的编码
        2. 常数封装位置
        3. 多分支结构的处理
          1. If-else与case的8种消除方法比较
        4. 常见缺陷预防
          1. 空指针
          2. 数组越界
        5. 所有团队现场对剩余代码进行重构,讲师点评
  6. 编码心法篇
    1. 此阶段注重实际开发动态过程中,人们由于编码次序的差异而造成的思维差异,进而导致的编码质量差异
    2. 讲师现场对某个团队的一部分代码进行重写,并展示以下编程心法:
      1. 从外向内分解问题出
        1. 先编写调用者,后编写底层函数(准TDD开发)
      2. 每5~10分钟进行一次编译和测试
        1. 随时将问题控制在最近2~5行代码内
      3. 内建的质量
        1. 随时避免各种不良编程问题,而不是编写后再进行重构
      4. 一次性写成“上帝代码”
        1. “上帝代码”是在语言框架内,多一行则多,少一行则少,无意中删除或添加任何一个字符将会出现编译错误的代码
      5. 首次编写即不包括“陈旧语法”
        1. 在第一次编写代码时,按照特有的心法和顺序,从来不需要if-else if/switch case等语法,也不会想到它们
  7. 高级话题
    1. 超越语言的语法边界
      1. C,C++,C#,Java,Python语法进化对比
        1. 通过5种语言实现同一个功能的对比,观察人类语言向编码终极奥义的逼近过程
      2. 编码消耗率
        1. 实现特定数量的功能所需的最低代码量