靜默編程有感

今天參加了TW主辦的無(wú)壓無(wú)臭靜默編程活動(dòng),早早起床頂著大風(fēng)去了公司,9:30活動(dòng)正式開(kāi)始,大家自我介紹后,聽(tīng)道長(zhǎng)和主辦人王巖介紹本次活動(dòng)的主要內(nèi)容。

活動(dòng)分為5個(gè)迭代,每個(gè)迭代40分鐘,每個(gè)迭代圍繞不同的主題進(jìn)行結(jié)對(duì)編程,迭代結(jié)束后大家刪代碼,進(jìn)行一個(gè)五到十分鐘的retro,最后有一個(gè)全天的總結(jié)。

靜默編程

four rules for simple design

緊接著志愿者介紹了four rules for simple design,大致意思是:

  1. 編寫(xiě)單元測(cè)試,以最少的實(shí)現(xiàn)快速的讓測(cè)試跑通
  2. 消除重復(fù)
  3. 你的代碼應(yīng)該明確的表達(dá)你的意圖
  4. 只寫(xiě)需要的功能,不要過(guò)度設(shè)計(jì)

加入TW之后,對(duì)上述幾點(diǎn)感觸真的很深,尤其是2,3,4,這些輸入主要來(lái)源于我的buddy。

消除重復(fù)

我目前主要從事前端開(kāi)發(fā),剛進(jìn)項(xiàng)目組的時(shí)候,編寫(xiě)一些和歷史組件雷同的組件,本應(yīng)在歷史組件上擴(kuò)展,我卻總想復(fù)制粘貼一份,總覺(jué)得直接改原來(lái)的,萬(wàn)一改掛了可咋辦!

我buddy說(shuō):這是重復(fù)啊,那你想想,這兩個(gè)組件基本一樣,其中一個(gè)的業(yè)務(wù)場(chǎng)景變了,另一個(gè)是不是要變?那修改這段代碼的人就是雙倍的工作量,如果每個(gè)人都這樣做,讓你一個(gè)地方改10遍,給你你愿意嗎?

嗯,有道理,所以重復(fù)是一定要被干掉的,不能老給別人挖坑呀。

寫(xiě)能夠揭示意圖的代碼

前段時(shí)間寫(xiě)代碼的時(shí)候,用了奇奇怪怪的方法做了數(shù)據(jù)轉(zhuǎn)換,大致就是寫(xiě)這段代碼的時(shí)候,只有我和上帝懂,寫(xiě)完了之后,就只有上帝懂.......當(dāng)時(shí)code review的時(shí)候還理直氣壯的覺(jué)得自己寫(xiě)的沒(méi)錯(cuò),就應(yīng)該這么寫(xiě)。

直到后來(lái),我buddy和我一起,以另一種思路,重寫(xiě)了那部分代碼,條理之清楚讓我明白了,寫(xiě)讓人能迅速讀懂的代碼是多么的重要。

此外,“揭示意圖”也體現(xiàn)在方法和變量的命名,判斷條件的編寫(xiě),好的命名可以讓閱讀代碼的人更容易理解代碼的意圖,這樣做的直接好處就是為后續(xù)維護(hù)提供便利。判斷條件盡量使用正向邏輯。雖然雙重否定表肯定,“我愛(ài)你”和“我怎么可能不愛(ài)”表達(dá)的意思相同,但是顯然前者更直觀,所以推薦使用肯定句。

拒絕過(guò)度設(shè)計(jì)

這點(diǎn)上我buddy給了我很大的啟發(fā),大家都知道過(guò)度設(shè)計(jì)是不對(duì)的,如何有效避免過(guò)度設(shè)計(jì)才是關(guān)鍵。

使用TDD就是避免過(guò)度設(shè)計(jì)的有效方式,每一條需求都是一個(gè)單元測(cè)試,用測(cè)試來(lái)體現(xiàn)需求,然后以最少的代碼讓測(cè)試跑通,也就是只做測(cè)試需要的內(nèi)容,由結(jié)果推實(shí)現(xiàn),當(dāng)然就不會(huì)過(guò)度設(shè)計(jì)了。

你可能會(huì)說(shuō),不是所有代碼都有測(cè)試,那當(dāng)我們不寫(xiě)測(cè)試的時(shí)候,怎樣避免過(guò)度設(shè)計(jì)呢?答案就是:先使用,再準(zhǔn)備。我們往往準(zhǔn)備一大堆東西,真正使用的時(shí)候并不是所有的都會(huì)用到。其實(shí)可以反著來(lái),我知道我要C,C的前提是B,這個(gè)時(shí)候再去創(chuàng)造B,以此類(lèi)推,直到實(shí)現(xiàn)功能。

活動(dòng)才剛剛開(kāi)始

10點(diǎn)的時(shí)候,大家通過(guò)報(bào)數(shù)隨機(jī)匹配了小伙伴之后,開(kāi)始了第一個(gè)迭代的內(nèi)容:乒乓結(jié)對(duì),最少代碼實(shí)現(xiàn)測(cè)試。和我的小伙伴分析了需求之后,第一回合我寫(xiě)測(cè)試他來(lái)實(shí)現(xiàn),我的小伙伴來(lái)自一個(gè)金融公司,對(duì)數(shù)字比較敏感,在實(shí)現(xiàn)第一個(gè)測(cè)試的時(shí)候,他說(shuō):我們應(yīng)該先對(duì)傳進(jìn)來(lái)的數(shù)字做校驗(yàn),對(duì)數(shù)字不合法的情況做處理。我想了想說(shuō)道:我們現(xiàn)在是測(cè)試驅(qū)動(dòng)實(shí)現(xiàn),如果要做數(shù)字校驗(yàn),那我們應(yīng)該有一個(gè)單元測(cè)試,測(cè)試的內(nèi)容是如果輸入不合法,會(huì)返回什么結(jié)果。現(xiàn)在題目的需求里沒(méi)有數(shù)字校驗(yàn)這一條,所以我們不能寫(xiě)數(shù)字校驗(yàn)的測(cè)試,也就不能寫(xiě)數(shù)字校驗(yàn)的實(shí)現(xiàn),對(duì)吧。(這些都是從我buddy那學(xué)的,嘿嘿學(xué)以致用)他若有所思的點(diǎn)點(diǎn)頭,我們愉快的開(kāi)始了40分鐘的“乒乓”。

第二個(gè)迭代的主題是:無(wú)基本數(shù)據(jù)類(lèi)型。這個(gè)階段我的角色是觀察員(每個(gè)迭代會(huì)有兩個(gè)與會(huì)者和志愿者一起當(dāng)觀察員,觀察并記錄看到的一些好的或不好的現(xiàn)象,在迭代結(jié)束的時(shí)候和大家分享)。這個(gè)過(guò)程中我看到了很多東西,語(yǔ)言和語(yǔ)言的碰撞,java, js, python, 還有全世界最好的語(yǔ)言PHP,大家互相指導(dǎo),互相學(xué)習(xí)。想法和想法的碰撞,切磋,討論,互相說(shuō)服,直到達(dá)成一致,開(kāi)始擼碼。

午飯之后稍事休息,開(kāi)始了第三個(gè)迭代:無(wú)條件判斷,這個(gè)過(guò)程就是用繼承,多態(tài)來(lái)消除一些條件判斷。很巧的是和張鐵錘分到一組,于是和他學(xué)習(xí)了Python,但是沒(méi)寫(xiě)多少東西,時(shí)間都用來(lái)討論了,畢竟太熟了,兩個(gè)人都不愿意退讓......

第四個(gè)迭代的主題是:無(wú)副作用方法,這個(gè)也是我buddy跟我提了很多次的,你改變了方法以外的東西,別人不看這個(gè)方法,不會(huì)知道你做了什么改變。這個(gè)過(guò)程中結(jié)識(shí)了一個(gè)從天津趕來(lái)的姑娘,也是學(xué)前端的,看起來(lái)小小的,真的很佩服她,不畏距離和寒風(fēng),想想自己早上7點(diǎn)多起床都擰巴的不行,覺(jué)得自己弱爆了?;顒?dòng)結(jié)束后我們有聊過(guò)天,她很感謝這次活動(dòng),覺(jué)得TW的同事們都熱衷于分享,她對(duì)TW充滿(mǎn)期待的同時(shí),我也對(duì)我們成為同事充滿(mǎn)期待。嘿,姑娘,我們要一起努力哦。

第五個(gè)迭代的主題是:不超過(guò)5行的方法,由于時(shí)間關(guān)系,這個(gè)迭代被砍掉了,大家一起做了討論和總結(jié),由于活動(dòng)的內(nèi)容之前我基本都感受過(guò),所以參加此次活動(dòng)的感受就是把一些思想強(qiáng)化了,不像鐵錘哥那樣充滿(mǎn)新鮮感,他對(duì)TDD贊不絕口,對(duì)和他一起結(jié)對(duì)的那位thoughtworker更是崇拜有加,回家后,好像變得更努力了呢。

張鐵錘在騷窩
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,045評(píng)論 25 709
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程,因...
    小菜c閱讀 7,334評(píng)論 0 17
  • 1.測(cè)試與軟件模型 軟件開(kāi)發(fā)生命周期模型指的是軟件開(kāi)發(fā)全過(guò)程、活動(dòng)和任務(wù)的結(jié)構(gòu)性框架。軟件項(xiàng)目的開(kāi)發(fā)包括:需求、設(shè)...
    Mr希靈閱讀 22,405評(píng)論 7 278
  • 《裕語(yǔ)言》速成開(kāi)發(fā)手冊(cè)3.0 官方用戶(hù)交流:iApp開(kāi)發(fā)交流(1) 239547050iApp開(kāi)發(fā)交流(2) 10...
    葉染柒丶閱讀 28,753評(píng)論 5 20
  • 先問(wèn)一個(gè)問(wèn)題: 如果你是女生,你會(huì)和一個(gè)工資比你低很多的男生交往嗎?例如你一個(gè)月一萬(wàn)五,他一個(gè)月三千。 如果你是男...
    喵姬閱讀 610評(píng)論 9 1

友情鏈接更多精彩內(nèi)容