靜默編程有感

今天參加了TW主辦的無壓無臭靜默編程活動(dòng)谷浅,早早起床頂著大風(fēng)去了公司秘血,9:30活動(dò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. 編寫單元測試峦睡,以最少的實(shí)現(xiàn)快速的讓測試跑通
  2. 消除重復(fù)
  3. 你的代碼應(yīng)該明確的表達(dá)你的意圖
  4. 只寫需要的功能,不要過度設(shè)計(jì)

加入TW之后权埠,對(duì)上述幾點(diǎn)感觸真的很深榨了,尤其是2,3攘蔽,4龙屉,這些輸入主要來源于我的buddy。

消除重復(fù)

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

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

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

寫能夠揭示意圖的代碼

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

直到后來,我buddy和我一起拐邪,以另一種思路慰毅,重寫了那部分代碼,條理之清楚讓我明白了扎阶,寫讓人能迅速讀懂的代碼是多么的重要汹胃。

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

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

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

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

你可能會(huì)說,不是所有代碼都有測試捍歪,那當(dāng)我們不寫測試的時(shí)候户辱,怎樣避免過度設(shè)計(jì)呢鸵钝?答案就是:先使用,再準(zhǔn)備庐镐。我們往往準(zhǔn)備一大堆東西恩商,真正使用的時(shí)候并不是所有的都會(huì)用到。其實(shí)可以反著來必逆,我知道我要C怠堪,C的前提是B,這個(gè)時(shí)候再去創(chuàng)造B名眉,以此類推粟矿,直到實(shí)現(xiàn)功能。

活動(dòng)才剛剛開始

10點(diǎn)的時(shí)候损拢,大家通過報(bào)數(shù)隨機(jī)匹配了小伙伴之后陌粹,開始了第一個(gè)迭代的內(nèi)容:乒乓結(jié)對(duì),最少代碼實(shí)現(xiàn)測試福压。和我的小伙伴分析了需求之后掏秩,第一回合我寫測試他來實(shí)現(xiàn),我的小伙伴來自一個(gè)金融公司隧膏,對(duì)數(shù)字比較敏感哗讥,在實(shí)現(xiàn)第一個(gè)測試的時(shí)候,他說:我們應(yīng)該先對(duì)傳進(jìn)來的數(shù)字做校驗(yàn)胞枕,對(duì)數(shù)字不合法的情況做處理杆煞。我想了想說道:我們現(xiàn)在是測試驅(qū)動(dòng)實(shí)現(xiàn),如果要做數(shù)字校驗(yàn)腐泻,那我們應(yīng)該有一個(gè)單元測試决乎,測試的內(nèi)容是如果輸入不合法,會(huì)返回什么結(jié)果∨勺現(xiàn)在題目的需求里沒有數(shù)字校驗(yàn)這一條构诚,所以我們不能寫數(shù)字校驗(yàn)的測試,也就不能寫數(shù)字校驗(yàn)的實(shí)現(xiàn)铆惑,對(duì)吧范嘱。(這些都是從我buddy那學(xué)的,嘿嘿學(xué)以致用)他若有所思的點(diǎn)點(diǎn)頭员魏,我們愉快的開始了40分鐘的“乒乓”丑蛤。

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

午飯之后稍事休息也物,開始了第三個(gè)迭代:無條件判斷,這個(gè)過程就是用繼承列疗,多態(tài)來消除一些條件判斷滑蚯。很巧的是和張鐵錘分到一組,于是和他學(xué)習(xí)了Python抵栈,但是沒寫多少東西告材,時(shí)間都用來討論了,畢竟太熟了古劲,兩個(gè)人都不愿意退讓......

第四個(gè)迭代的主題是:無副作用方法斥赋,這個(gè)也是我buddy跟我提了很多次的,你改變了方法以外的東西产艾,別人不看這個(gè)方法疤剑,不會(huì)知道你做了什么改變。這個(gè)過程中結(jié)識(shí)了一個(gè)從天津趕來的姑娘闷堡,也是學(xué)前端的隘膘,看起來小小的,真的很佩服她杠览,不畏距離和寒風(fēng)弯菊,想想自己早上7點(diǎn)多起床都擰巴的不行,覺得自己弱爆了踱阿」芮活動(dòng)結(jié)束后我們有聊過天,她很感謝這次活動(dòng)软舌,覺得TW的同事們都熱衷于分享才漆,她對(duì)TW充滿期待的同時(shí),我也對(duì)我們成為同事充滿期待葫隙。嘿栽烂,姑娘躏仇,我們要一起努力哦恋脚。

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

張鐵錘在騷窩
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末米诉,一起剝皮案震驚了整個(gè)濱河市菱蔬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌史侣,老刑警劉巖拴泌,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惊橱,居然都是意外死亡蚪腐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門税朴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來回季,“玉大人,你說我怎么就攤上這事掉房〖氚希” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵卓囚,是天一觀的道長瘾杭。 經(jīng)常有香客問我,道長哪亿,這世上最難降的妖魔是什么粥烁? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蝇棉,結(jié)果婚禮上讨阻,老公的妹妹穿的比我還像新娘。我一直安慰自己篡殷,他們只是感情好钝吮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般奇瘦。 火紅的嫁衣襯著肌膚如雪棘催。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天耳标,我揣著相機(jī)與錄音醇坝,去河邊找鬼。 笑死次坡,一個(gè)胖子當(dāng)著我的面吹牛呼猪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播砸琅,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宋距,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了症脂?” 一聲冷哼從身側(cè)響起乡革,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摊腋,沒想到半個(gè)月后沸版,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兴蒸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年视粮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橙凳。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蕾殴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出岛啸,到底是詐尸還是另有隱情钓觉,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布坚踩,位于F島的核電站荡灾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏瞬铸。R本人自食惡果不足惜批幌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗓节。 院中可真熱鬧荧缘,春花似錦、人聲如沸拦宣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绸罗,卻和暖如春财破,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背从诲。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留靡羡,地道東北人系洛。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像略步,于是被迫代替她去往敵國和親描扯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

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