400-888-5228

課程時(shí)長(zhǎng)

2天

 

課程思路

一個(gè)人不可能在地面上學(xué)會(huì)游泳!本課程采用完全現(xiàn)場(chǎng)實(shí)戰(zhàn)的方式,幫助團(tuán)隊(duì)快速體驗(yàn)和學(xué)會(huì)高級(jí)面向?qū)ο蠹夹g(shù),編寫(xiě)出高質(zhì)量、易維護(hù)的代碼。

  1. 學(xué)員分為若干小組(最好是實(shí)際工作組),每個(gè)小組都有2~3個(gè)核心參訓(xùn)人員人
  2. 核心參訓(xùn)人員提供總計(jì)3000回車(chē)行實(shí)際工作代碼
  3. 對(duì)其中1000行代碼,講師會(huì)在課上現(xiàn)場(chǎng)講解并改寫(xiě)(改寫(xiě)量一般在300~500行左右)
  4. 改寫(xiě)完成后達(dá)到極高的標(biāo)準(zhǔn),包括:
    1. 零常數(shù),零for(int i),零else/case(代碼中沒(méi)有任何else和case關(guān)鍵字)、每個(gè)函數(shù)均小于30回車(chē)行
    2. 編碼有效率在13~15LOC/FP左右(世界紀(jì)錄級(jí)別)
  5. 另外2000行作為課堂練習(xí)
  6. 注意:本課程不涉及性能優(yōu)化、安全性、多線程等特殊技術(shù)。

課程受眾

技術(shù)經(jīng)理,開(kāi)發(fā)骨干,資質(zhì)高的新員工

 

大綱脈絡(luò)

以下內(nèi)容按時(shí)間順序描述了訓(xùn)練營(yíng)的整體脈絡(luò)。除整體脈絡(luò)外,各個(gè)階段還會(huì)穿插相應(yīng)知識(shí)的講授。

以下描述僅針對(duì)其中一個(gè)團(tuán)隊(duì),其他團(tuán)隊(duì)也各自選定自己的產(chǎn)品代碼,并按順序執(zhí)行實(shí)踐。

  1. 開(kāi)篇:編碼終極奧義
    1. 終極奧義第三層:編碼即人類(lèi)語(yǔ)言
    2. 終極奧義第二層:編碼即信息
    3. 終極奧義第一層:編碼是美的
  2. 初級(jí)篇
    1. 此階段注重語(yǔ)句級(jí)別的編程技能,基本上不需要面向?qū)ο蠡A(chǔ)
    2. 講師現(xiàn)場(chǎng)對(duì)某個(gè)團(tuán)隊(duì)的代表性產(chǎn)品進(jìn)行代碼審查重點(diǎn)包括:
      1. 變量命名
      2. 函數(shù)命名
      3. 全局變量處理
      4. 消除常數(shù)
      5. 冗余語(yǔ)句的處理
      6. FFT結(jié)構(gòu)(false-false-true)
      7. foreach循環(huán)
      8. var/auto關(guān)鍵字
    3. 所有團(tuán)隊(duì)現(xiàn)場(chǎng)對(duì)剩余代碼進(jìn)行重構(gòu),講師點(diǎn)評(píng)
  3. 中級(jí)篇
    1. 此階段注重函數(shù)級(jí)別的編程技能,需要函數(shù)封裝、模板(泛型)等知識(shí)
    2. 講師現(xiàn)場(chǎng)對(duì)某個(gè)團(tuán)隊(duì)的代碼進(jìn)行走讀,指出以下問(wèn)題:
      1. 代碼克隆
      2. 如何消除結(jié)構(gòu)相同、類(lèi)型不同的if-else或case
        1. 模板
        2. Map
        3. 三元表達(dá)式
      3. 所有團(tuán)隊(duì)現(xiàn)場(chǎng)對(duì)剩余代碼進(jìn)行重構(gòu),講師點(diǎn)評(píng)
  4. 高級(jí)篇
    1. 此階段注重封裝、繼承、多態(tài)等傳統(tǒng)面向?qū)ο蟮闹R(shí)
    2. 講師現(xiàn)場(chǎng)對(duì)某個(gè)團(tuán)隊(duì)的代碼進(jìn)行走讀,指出以下問(wèn)題:
      1. 代碼克隆
      2. 圈復(fù)雜度與圈復(fù)雜密度
      3. 如何消除結(jié)構(gòu)大為不同的大段if-else或case
        1. 基類(lèi),虛函數(shù)
        2. 多態(tài)與虛函數(shù)
        3. 接口與多繼承
        4. 基類(lèi)vs接口:擴(kuò)展與實(shí)現(xiàn)
      4. 所有團(tuán)隊(duì)現(xiàn)場(chǎng)對(duì)剩余代碼進(jìn)行重構(gòu),講師點(diǎn)評(píng)
  5. 質(zhì)量篇
    1. 此階段注重防范開(kāi)發(fā)中、維護(hù)中可能產(chǎn)生的編碼質(zhì)量問(wèn)題
      1. 注:實(shí)際上此章節(jié)所述內(nèi)容,均會(huì)在上述課程中遇到問(wèn)題時(shí)隨時(shí)提到,此處僅做總結(jié)
    2. 講師現(xiàn)場(chǎng)對(duì)某個(gè)團(tuán)隊(duì)的代碼進(jìn)行走讀,指出以下問(wèn)題:
      1. 易讀性問(wèn)題
        1. 看似技術(shù)含量很高的“半截子科技”代碼
      2. 可維護(hù)性問(wèn)題
        1. 成對(duì)出現(xiàn)的編碼
        2. 常數(shù)封裝位置
        3. 多分支結(jié)構(gòu)的處理
          1. If-else與case的8種消除方法比較
        4. 常見(jiàn)缺陷預(yù)防
          1. 空指針
          2. 數(shù)組越界
        5. 所有團(tuán)隊(duì)現(xiàn)場(chǎng)對(duì)剩余代碼進(jìn)行重構(gòu),講師點(diǎn)評(píng)
  6. 編碼心法篇
    1. 此階段注重實(shí)際開(kāi)發(fā)動(dòng)態(tài)過(guò)程中,人們由于編碼次序的差異而造成的思維差異,進(jìn)而導(dǎo)致的編碼質(zhì)量差異
    2. 講師現(xiàn)場(chǎng)對(duì)某個(gè)團(tuán)隊(duì)的一部分代碼進(jìn)行重寫(xiě),并展示以下編程心法:
      1. 從外向內(nèi)分解問(wèn)題出
        1. 先編寫(xiě)調(diào)用者,后編寫(xiě)底層函數(shù)(準(zhǔn)TDD開(kāi)發(fā))
      2. 每5~10分鐘進(jìn)行一次編譯和測(cè)試
        1. 隨時(shí)將問(wèn)題控制在最近2~5行代碼內(nèi)
      3. 內(nèi)建的質(zhì)量
        1. 隨時(shí)避免各種不良編程問(wèn)題,而不是編寫(xiě)后再進(jìn)行重構(gòu)
      4. 一次性寫(xiě)成“上帝代碼”
        1. “上帝代碼”是在語(yǔ)言框架內(nèi),多一行則多,少一行則少,無(wú)意中刪除或添加任何一個(gè)字符將會(huì)出現(xiàn)編譯錯(cuò)誤的代碼
      5. 首次編寫(xiě)即不包括“陳舊語(yǔ)法”
        1. 在第一次編寫(xiě)代碼時(shí),按照特有的心法和順序,從來(lái)不需要if-else if/switch case等語(yǔ)法,也不會(huì)想到它們
  7. 高級(jí)話題
    1. 超越語(yǔ)言的語(yǔ)法邊界
      1. C,C++,C#,Java,Python語(yǔ)法進(jìn)化對(duì)比
        1. 通過(guò)5種語(yǔ)言實(shí)現(xiàn)同一個(gè)功能的對(duì)比,觀察人類(lèi)語(yǔ)言向編碼終極奧義的逼近過(guò)程
      2. 編碼消耗率
        1. 實(shí)現(xiàn)特定數(shù)量的功能所需的最低代碼量