此處悼念1986年1月28日挑戰者號航天飛機事故中喪生的七名優秀的宇航員程序員
接下來你們帶着如下問題去閱讀此書《程序員的職業素養之代碼整潔之道》 也能夠閱讀此文章 本人儘量將書中精華總結於此文章中編程
專業主義的精髓就在於將公司利益視同我的利益.也就是意味着擔當責任架構
你應該計劃每週工做60個小時, 前40個小時是給僱主的,後20個小時是給本身的, 在這剩餘的20個小時裏 ,你應該多看書, 練習, 學習, 或者作其餘能提高職業能力的事情函數
能就是能 不能就是不能 不要說"試試看" ----尤達性能
專業人士應該懂得說"不" 事實上 優秀的經理人對於勇於說"不"的人老是求賢弱渴 由於只有勇於說 "不" 的人 才能真正作成一些事情單元測試
你的經理要求你在明天以前完成登陸頁面 這就是他在追求和捍衛的一個目標 那是進他的職責.若是你明知次日以前不可能完成登陸頁面 嘴上卻說"好的 我會試試的" 那麼你就是失責了 這時候 盡職的文藝選擇是說"不 . 這不可能"學習
越是關鍵時刻 "不"字就越有價值 這一點應該不證自明 當公司存亡成敗皆繫於此時 你必須盡己所能 把最好的信息傳遞給你的經理 這每每意味着要說"不"測試
有團隊精神的人會頻繁與你們交流 會關心隊友 會竭力作到盡職盡責優化
作出承諾,要包含三個步驟編碼
若是你可以一直信守承諾 ,你們會覺得你是一名嚴謹負責的開發人員 在咱們這行中 也是最有價值的評價了
和學會說 不 一樣重要的是 要學會說 是
專業人員不須要對全部請求都回答"是" 不過 他們應該努力尋找創新的方法 儘量作到有求必應 當專業人士給出確定回答是 他們會使用正式的承諾 一確保各方能明白無誤的理解承諾的內容
編碼是一項 頗具挑戰也十分累人的智力活動 相比其餘類型的活動 編碼要求更加聚精會神 由於在編碼是你必須平衡互相牽制的多種因素 若是感到疲勞或者心煩意亂,千萬不要編碼 相反要找到一種方法來消除干擾 讓心緒平靜下來
這是程序員在編寫代碼時會進入的一種意識高度專一 但思惟視野卻會收攏到狹窄的狀態.在這種狀態下,他們會感到效率極高;在這種狀態中他們會感到"絕無錯誤" 所以他們一直苦苦追求進入這種狀態 並常常以能在那種狀態下 維持多久來衡量自我價值
有的時候.就是死活寫不出代碼.我本身就曾經遇到過,也看到其餘人身上遇到過這種狀況,幹坐在電腦前什麼也寫不出 這裏有個簡單的好的方法能夠解決這個問題, 這個辦法屢試不爽,既簡單易行,有可以幫助你寫出不少代碼,那就是:找個搭檔結對編程
軟件開發是一場馬拉松,而不是短跑衝刺.你沒法全程一直以最快的速度衝刺來贏得比賽,只有經過保存體力和維持穩定節奏來取勝.
管理延遲的訣竅就是早期檢測和保持透明 要根據目標按期衡量進度,使用三個考慮到多種因素的期限:樂觀預估,標稱預估,悲觀預估
4.5.1 指望 若是項目要在十天後發版 而你的常規預估是15天,你是絕對不可能完成任務的,因此不要對十天內所有完成特性開發抱有指望!這種指望會殺死整個項目,指望會毀掉項目進度表,玷污你的名聲,指望會把你拖進大麻煩中.
4.5.2 盲目衝刺 不要經受不住誘惑就盲目衝刺 其實衝刺是作不到的 你沒法更快的寫完代碼. 你沒法更快的解決問題, 若是視圖這麼作 最終只會讓本身變得更慢. 同時只能製造出一頓混亂 讓其餘人慢下來
4.5.3 加班加點 加班確實有用, 並且有時候頗有必要,有時候 經過一天工做十個小時在加上週末 你確實可以達成本來不可能的進度. 但這麼作的風險也很高. 在額外加班20%的工做時間內 你其實並沒有法完成20%的額外工做並且,若是連續兩三週都要加班工做 則加班的措施必敗無疑
4.5.4 交付失誤 在程序員所能表現的各類不專業中 最糟糕的是明知道尚未完成任務 確宣稱已經完成 這時候這只是一個撒過頭的謊話,. 這就已經很糟糕了
4.5.5 定義"完成" 能夠經過建立一個肯定定義 的''完成''標準來避免交付失誤 最好的方法就是讓業務分析師和測試人員建立一個自動化的驗收測試,只有徹底經過這些驗收測試,開發任務才能算已經完成
編程絕非易事 編程很難 事實上 僅憑一己之力沒法寫出優秀的代碼.即便你的技能格外高超,也確定能從另一名程序員的思考與想法中獲益
所以互相幫助是每一個程序員的職責所在,做爲專業人士,要以可以隨時幫助他人爲榮
若是有人向你伸出援手,要誠摯接受,心懷感激的接受幫助並誠意合做,不要死命的護住本身的地盤 拒絕別人的幫助
儘管 TDD 有諸多優勢,遵循這三個法則並不能擔保必定會帶來上述好處, 及時作到了測試先行, 仍有可能寫出糟糕的代碼.若是遵循某項法則會弊大於利,專業的開發人員就固然不會選用它
專業人士都須要經過專門訓練提高本身的技能 此節主要講的就是要不斷地練習 就像彈鋼琴同樣, 要想自如彈奏,樂手須要反覆的彈奏音節,各類練習曲,重複的節奏,直到爛熟於心.要相信10000小時定律
專業開發人員既要作好開發,也要作好溝通
PM 和 RD 之間最多見的溝通就是關於需求了的 PM 描述他們認爲本身須要的東西, RD 按照本身理解的業務放表達的需求來開發, 至少理論上是這樣的,可是在現實裏 關於需求的溝通是極其困難的,其中會出現各類問題
要解決開發方和業務方的問題,我所知道的惟一的解決辦法就是編寫出無可挑剔的需求文檔
每一個專業的開發團隊都須要一套好的測試策略
咱們努力的目標應該是讓 QA 應該找不到任何錯誤
擁有一套單元測試和驗收測試的 同事 還須要更高層次的測試,這樣 QA 才找不出任何錯誤 以下圖
八小時其實很是短暫, 只有480分鐘 28800秒,身爲專業開發人員,你確定但願能在這短暫的時間裏儘量高效的工做,取得儘量多的成果
關於會議 有兩條真理: (1) 會議是必需的 (2) 會議浪費了大量的時間
專業的開發人員一樣清楚會議的高昂成本, 他們一樣清楚本身的時間是寶貴的,他們一樣須要時間來寫代碼,來處理日程表上的事物,因此 若是會議沒有現實且顯著 的成效,他們會主動拒絕
9.1.1 拒絕 受到邀請的會議沒有必要所有參加, 參加的會議太多,其實只能證實你不夠專業.你應該理智的使用時間,因此 必需要謹慎選擇, 應當參加那些會議, 禮貌拒絕那些會議 好的領導必定會主動維護你拒絕出席的決定,由於她和你同樣關心你的時間
9.1.2 離席 重要的是,你應該明白, 繼續待在會議室裏是浪費時間; 繼續參加對你沒有意義的會議是不專業的行爲, 由於你有責任合理分配老闆給你的時間和金錢, 因此選擇一個合適的機會商量如何離席,並不是不專業的作法
9.1.3 肯定議程 和 目標 爲了合理使用與會者的時間,會議應當有清晰的議程, 肯定每一個議程所花的時間以及肯定的目標
9.1.4 立會 讓立會簡潔
9.1.5 迭代計劃會議 迭代計劃會議用來選擇在下一輪迭代中實現的開發任務, 在會議召開前必須完成兩項任務: 評估可選擇任務的開發時間, 肯定這些任務的業務價值, 若是組織的足夠好, 驗收和組件測試也應當在會議召開前完成,或者至少要有概略方案
9.1.6 迭代回顧和 Demo 演示 此類會議用來讓業務方能夠看到最新工做的成果的 DEmo 這類會議可能浪費不少時間, 因此不妨在最後一天下班前45分鐘召開, 花20分鐘來回顧, 花25分鐘來演示
9.1.7 爭論/反對 凡是不能再5分鐘內解決的 爭論, 都不能靠辯論來解決 由於爭論之因此話這麼長時間,就是由於各方都拿不出足夠有力的證據, 因此應當儘可能控制爭論的時間
編程是須要持續投入精力和注意力的智力活動.注意力是稀缺的資源,它相似魔力點數,若是你用光了本身的注意力點數, 必須花一個小時或更多的時間作不須要注意力的事情,來補充他
9.2.1 睡眠 睡眠的重要性怎麼強調都不爲過,專業的開發人員會安排好他們的睡眠, 保證清晨有飽滿的注意力點數去上班
9.2.2 咖啡因 毋庸置疑,對有些人來講,適量的咖啡因能夠幫他們更有效的使用注意力點數
9.2.3 恢復 在你不集中注意力的時候,注意力點數能夠慢慢恢復,漫長的一段長路,與朋友聊天, 看看窗外, 都有助於恢復注意力點數
9.2.4 肌肉注意力
肌肉注意力有助於改善心智注意力, 並且不只僅是簡單的恢復, 我發現按期培訓肌肉和注意力,能夠提高心智注意力的上限. 好比我本身 我就會常常的跑步鍛鍊身體
其基本思想很簡單, 把廚房用的計時器(一般他們很想番茄) 設定到25分鐘, 倒計時期間不要讓任何事情干擾你的工做
全部軟件開發者都要遇到死衚衕 好比你作了一個決定,選擇了走不通的技術道路.你對這個絕地個越是堅持,浪費的時間就越多, 專業人員不會固執有不讓放棄也沒法繞開的注意, 他們會保持開放的頭腦來聽取其餘意見
比死衚衕更糟的是泥潭,泥潭會減慢你的速度,專業開發人員對泥潭的恐懼遠遠大於死衚衕.他們會時刻留神顯露出來的泥潭, 而後運用各類努力,儘早儘快的脫身,
專業的開發人員會用心管理本身的時間和注意力, 他們知道優先級錯亂的誘惑, 他們也珍視本身的聲譽. 因此會抵制優先級錯亂, 他們永遠有多種選擇,永遠敞開心扉聽取其餘解決方案, 他們歷來不會固執於某個沒法放棄的解決方案, 他們也時刻警戒着正在顯露的泥潭,一旦看清楚 就會避開.
預估是軟件開發人員面對的最簡單也是最可怕的活動之一了,預估影響到的商業價值巨大關乎聲譽嗎預估是也業務人員和開發人員之間最重要的障礙, 橫亙在雙方之間的種種不信任幾乎都由他引起
問題在於 不一樣的人對預估不一樣的見解.業務方以爲預估就是承諾, 開發方認爲預估就是猜想, 二者相差迥異
10.1.1 承諾 承諾是必須作到的 若是你承諾在哎某天作成某件事, 就必須按時完成, 即使他意味着你必須天天工做12個小時, 放棄週末的休假, 也不得不如此, 既然承諾了,就必需要實現
10.1.2 預估 預估是一種猜想, 預估無關聲譽,不幸的是,大多數軟件開發人員都很不擅長預估
10.1.3 暗示性承諾 專業開發人員可以清楚地區分預估和承諾, 只有在確切知道能夠完成的前提下, 他們纔會給出承諾, 此外, 他們也會當心避免給出暗示性的承諾, 他們會盡量清楚的說明預估的機率分佈, 這樣主管就能夠做出合適的計劃了
簡單的 PERT 計算說明了一種避免樂觀預估的合理方法, 無論嘗試加快進度的壓力有多大, 專業開發人員都應當謹慎的設定合理的預估值
專業的開發人員懂得如何爲業務人員提供可信的預估結果,以便作出計劃,若是作不到或者不肯定能作到,專業開發人員不會給出承諾 一旦作出了承諾, 就會提供肯定的數字, 按時兌現, 可是在大多數狀況下, 他們都不會作這種承諾, 而是提供機率預估,來描述指望的完成時間及可能的變數
即便有巨大的壓力, 專業的開發人員也會冷靜果斷. 儘管壓力不斷增大, 他仍然會堅守所受的訓練和紀律, 他知道這些是他賴以打敗有最後期限和承諾所帶來的壓力感的最好方法
在壓力下保持冷靜的最好方式,即是規避會致使壓力的處境, 規避的方式也許沒法徹底檢出壓力, 可是能夠大大下降壓力並縮短高壓力期的時間
11.2.1 不要惶恐不安 正確對待壓力, 放鬆下來,對問題深思熟慮,努力尋找能夠帶來最好結果的路徑, 而後沿着那條路徑一合理穩定的節奏前進
11.2.2 溝通 多多溝通,讓你的團隊和主管知道你正深陷困境之中, 告訴他們你所制定的走出困境的最佳計劃, 請求他們支援,避免產生驚恐,沒有東西比驚恐更使人憤怒和市區理性,驚恐會讓你的壓力增大十倍
11.2.3 依靠你的紀律原則 當事情十分困難的時候,要堅信你的紀律原則,他們能夠指引你度太高壓期
應對的訣竅在於,能迴避壓力是儘量迴避,當沒法迴避是則勇敢直面壓力, 能夠經過慎重承諾, 遵循本身的紀律原則,保持整潔等來回避壓力.直面壓力時, 則要保持冷靜, 與別人多多溝通, 堅守本身的原則和紀律 並尋求他人的幫助.
大多數軟件都是由團隊開發出來的,當團隊成員可以十分專業的互相協做時, 整個團隊是最爲高效的, 單打獨鬥與遊離於團隊以外都是不專業的表現
咱們並不是是由於喜歡和其餘人一塊兒工做才選擇作程序員的, 咱們都認爲人人際關係難以應付並且毫無規律.編程用的機器則整潔,行爲也可預見,若是能夠一我的待在房間裏數個小數沉浸在一些真正有趣的問題上, 那將會是最開心的時光
12.1.1 程序員與僱主 專業的程序員的首要職責是知足僱主的需求.這意味着要和你的經理們,業務分析師門,測試工程師門,和其餘團隊成員很好的協做, 深入理解業務目標, 這並非說你必需要成爲業務方面的老學究,而是說你須要理解手上正在編寫的代碼的業務價值是什麼,瞭解僱你的企業將如何從你的工做中得到回報
12.1.2 程序員與程序員 程序員之間很難密切合做,這就會帶來不小的問題
也許咱們不是由於經過編程能夠和人互相協做才選擇從事這項工做的, 但真不走運,編程就意味着與人協做.咱們須要和業務人員一塊兒工做,咱們之間也須要互相合做. 若是咱們真想終生能以編程度日,那麼必定要學會交流 ,和你們交流
小項目該如何實施? 如何給程序員分派? 大項目有該如何實施?
讓一個程序員把一半的時間投入到項目 A 中,把其他時間投入到項目 B 中,這並不可行,尤爲是當這連個項目的項目經理不一樣,業務分析師不一樣,程序員不一樣,測試人員不一樣是,更不可行.這不是一個團隊,只是從榨汁機中榨出的混合物而已
造成團隊是須要時間的,團隊成員須要先創建關係,他們須要學習如何互相協助,須要瞭解彼此的癖好,強項,弱項,最終才能凝聚成團隊, 有凝聚力的團隊確實有些神奇之處, 他們可以一塊兒創造奇蹟,他們互爲知己,可以替對方着想, 互相支持, 激勵對方拿出本身最好的表現,他們攻無不克
團隊比項目更難構建 .所以 組建穩健的團隊,讓團隊在一個又一個項目中總體移動共同工做是較好的作法, 而且 團隊也能夠同時承接多個項目, 在組建團隊是, 要給予團隊充足的時間, 讓他們造成凝聚力, 一直共同工做,成爲不斷交付項目的強大引擎
一週的零碎時間將此書讀完並整理出每節重要內容,書中更多的是結合公司中實際例子來講明每個點的重要性,但願每一個開發都能成爲像 bob 大叔同樣厲害的人