出版時間:2012-9 出版社:人民郵電出版社 作者:Robert C.Martin 頁數(shù):178 譯者:章顯洲,余晟
Tag標簽:無
前言
1986年1月28日,美國東部時間上午11:39,“挑戰(zhàn)者”號航天飛機在發(fā)射僅73.124秒后,因右側固體火箭推進器的故障,在4.8萬英尺的高空化成碎片。七名航天勇士魂斷蒼穹,其中包括高中教師克麗斯塔·麥考利芙。麥考利芙的母親親眼目睹女兒在九英里高空中不幸罹難,彼時彼刻她臉上的表情,至今印刻在我的心頭無法拂去。挑戰(zhàn)者號之所以解體,是由于高熱氣體從出現(xiàn)故障的固體火箭推進器的外殼接縫處泄露出來,噴到外部燃料艙體上。主液氫燃料艙底部發(fā)生爆炸,液氫被點燃,并將液氫燃料推入上方的液氧燃料艙中。與此同時,固體火箭推進器從下支架脫落,開始繞上支架滾動。推進器的機頭捅破了液氧艙。整個飛行器因異常受力,逆向氣流旋轉(zhuǎn),但同時仍然以1.5馬赫的速度飛行。在巨大的過載下,挑戰(zhàn)者號迅速被撕成碎片。在火箭推進器的圓形接縫處,有兩個由合成橡膠制成的同心密封圈。當殼體通過螺栓連接在一起時,密封圈被壓縮,起到密封作用,確保氣體不會從接縫處逸出。但在發(fā)射前夜,發(fā)射臺氣溫降到了17華氏度 ,比密封圈的最低承限溫度低了23度,比以往發(fā)射氣溫低了33度。這個氣溫下的密封圈已經(jīng)硬得失去了彈性,無法很好地密封高熱氣體。推進器點火后,高熱氣體迅速累積,對殼腔形成了瞬間壓力脈沖。助推器殼體向外膨脹開來,密封圈受到的壓力變小。硬化的密封圈無法保持密封,一些高熱氣體就泄漏出來,并且將密封圈中70多度的弧形范圍都氣化了。設計了推進器的莫頓·賽奧科公司的工程師事前已經(jīng)知道密封圈有問題,并早在7年前就已經(jīng)將這些問題報告給莫頓·賽奧科公司和美國宇航局的管理人員。事實上,在以前的發(fā)射中,密封圈就曾發(fā)生過類似的損壞,只是沒有引發(fā)災難而已。發(fā)射氣溫越低,后果就越嚴重。工程師們已經(jīng)針對該問題設計了一個修復方案,但修復方案卻遲遲未得以實施。工程師們知道密封圈在低溫的時候會硬化。也知道挑戰(zhàn)者號發(fā)射時的氣溫比以往任何一次發(fā)射時的都要低,遠低于紅色警戒線。簡而言之,這次發(fā)射的風險太高了,他們不能對危險視而不見。于是他們寫了備忘錄,發(fā)出高危預警信號。他們強烈要求賽奧科公司和美國宇航局的管理人員們?nèi)∠舜伟l(fā)射任務。在臨發(fā)射數(shù)小時前所開的緊急會議上,這些工程師展示了最有說服力的數(shù)據(jù)。他們擺事實,講道理,軟硬兼施,拒不執(zhí)行這次發(fā)射任務。但最后,管理人員們對此還是無動于衷。發(fā)射時,一些工程師不忍觀看現(xiàn)場直播,因為他們擔心發(fā)射臺上會發(fā)生爆炸慘劇。但是,隨著挑戰(zhàn)者號優(yōu)雅升空,他們開始有點放松下來了。就在挑戰(zhàn)者號解體前的瞬間,看著飛行器已經(jīng)邁過1馬赫的關口時,一位工程師還說他們已經(jīng)“躲過一劫”。管理人員們聽不進去工程師們的抗議,也不看備忘錄,更沒有命懸一線的危急感。他們認為自己更了解情況,認為工程師們小題大做了,他們不相信工程師們的數(shù)據(jù)和結論。他們之所以進行這次發(fā)射任務,是因為面臨著很大的財務和政治壓力。他們對此心存僥幸,希望一切都能平安無事。這些管理人員不只是愚蠢至極,他們是在草菅人命。他們以為自己才是專家,他們的恐懼、希望和直覺才是準的。恰恰是因為他們的自以為是,七名優(yōu)秀宇航員的生命以及一代人對太空旅行的夢想,都在那個寒冷的早晨一起灰飛煙滅了。他們篡奪了真正了解情況的工程師們的權力。而那些工程師呢?當然,工程師做了他們應該做的事情。他們通知了管理人員,并且極力捍衛(wèi)自身立場。他們經(jīng)由適當?shù)那?,調(diào)用了所有合適的溝通協(xié)議。他們做了在體系內(nèi)力所能及的事情,只是最后不得不聽從領導的決定。因此,看起來工程師可以毫無愧意地置身事外了。但是,我不知道那些工程師之中,是否有人會躺在床上夜不能寐,眼前浮現(xiàn)克麗斯塔·麥考利芙母親臉上的慘痛表情,為之前沒有給丹·拉瑟 打電話而悔恨不已。關于本書這本書主要闡述軟件開發(fā)者的專業(yè)精神。書中包含了許多實務性的意見,試圖回答諸如以下的問題:· 什么是軟件專業(yè)人士?· 軟件專業(yè)人士如何行事?· 軟件專業(yè)人士如何處理沖突,應對很緊的工期,如何和不切實際的管理人員打交道?· 軟件專業(yè)人士何時應該說“不”?怎么說?· 軟件專業(yè)人士如何應對壓力?你還會發(fā)現(xiàn),在本書的實務性意見背后,隱隱體現(xiàn)出一種奮力突破的積極態(tài)度。這種態(tài)度提倡要誠信,要富有榮譽感、自尊心和自豪感,要勇于承擔作為一名手藝人和工程師所肩負的重大責任。這種責任包括要努力工作,出色完成任務;要擅于溝通,能夠就事論事;要管理好時間,能夠坦然面對艱難的“風險回報”決策。除此之外,這種責任之中還包括神圣的使命感。身為一名工程師,你比任何管理者可能都了解得更透徹。了解這些也意味著你肩負著要敢于行動的重大責任。參考文獻[McConnell87]:Malcolm McConnell, Challenger “A Major Malfunction”, New York, NY: Simon & Schuster, 1987[Wiki-Challenger]:“Space Shuttle Challenger disaster,”http://en.wikipedia.org/ wiki/Space_Shuttle_Challenger_disaster
內(nèi)容概要
《程序員的職業(yè)素養(yǎng)》是編程大師Bob大叔40余年編程生涯的心得體會, 講解成為真正專業(yè)的程序員需要什么樣的態(tài)度、原則,需要采取什么樣的行動。作者以自己以及身邊的同事走過的彎路、犯過的錯誤為例,意在為后來人引路,助其職業(yè)生涯邁上更高臺階?! 冻绦騿T的職業(yè)素養(yǎng)》適合所有程序員,也可供所有想成為具備職業(yè)素養(yǎng)的職場人士參考。
作者簡介
Robert C. Martin是軟件工程領域的大師級人物,設計模式和敏捷開發(fā)運動的主要倡導者之一,曾經(jīng)擔任C++ Report雜志主編多年。Robert C. Martin的Agile Software Development: Principles, Patterns, and Practices一書曾榮獲Jolt大獎。
書籍目錄
第1章 專業(yè)主義 1.1 清楚你要什么 1.2 擔當責任 1.3 首先,不行損害之事 1.3.1 不要破壞軟件功能 1.3.2 不要破壞結構 1.4 職業(yè)道德 1.4.1 了解你的領域 1.4.2 堅持學習 1.4.3 練習 1.4.4 合作 1.4.5 輔導 1.4.6 了解業(yè)務領域 1.4.7 與雇主/客戶保持一致 1.4.8 謙遜 1.5 參考文獻 第2章 說“不” 2.1對抗角色 2.2高風險時刻 2.3要有團隊精神 2.3.1試試看 2.3.2消極對抗 2.4說“是”的成本 2.5如何寫出好代碼 第3章說“是” 3.1承諾用語 3.1.1識別“缺乏承諾”的征兆 3.1.2真正的承諾聽起來是怎樣的 3.1.3 總結 3.2學習如何說“是” 3.2.1 “試試”的另一面 3.2.2 堅守原則 3.3結論 第4章編碼 4.1做好準備 4.1.1 凌晨3點寫出的代碼 4.1.2焦慮時寫下的代碼 4.2流態(tài)區(qū) 4.2.1 音樂 4.2.2 中斷 4.3 阻塞 4.4調(diào)試 4.5保持節(jié)奏 4.5.1知道何時應該離開一會 4.5.2開車回家路上 4.5.3 洗澡 4.6進度延遲 4.6.1期望 4.6.2盲目沖刺 4.6.3加班加點 4.6.4交付失誤 4.6.5定義“完成” 4.7幫助 4.7.1幫助他人 4.7.2接受他人的幫助 4.7.3 輔導 4.8參考文獻 第5章測試驅(qū)動開發(fā) 5.1此事已有定論 5.2 TDD的三項法則 5.3 TDD的優(yōu)勢 5.3.1 確定性 5.3.2缺陷注入率 5.3.3 勇氣 5.3.4 文檔 5.3.5設計 5.3.6、專業(yè)人士的選擇 5.4 TDD的局限 5.5參考文獻 第6章練習 6.1 引子 6.1.1 10的22次方 6.1.2轉(zhuǎn)變 6.2編程柔道場 6.2.1 卡塔 6.2.2瓦薩 6.2.3 自由練習 6.3 自身經(jīng)驗的拓展 6.3.1 開源 6.3.2 關于練習的職業(yè)道德 6.4結論 6.5參考文獻 第7章驗收測試 7.1需求的溝通 7.1.1過早精細化 7.1.2遲來的模糊性 7.2驗收測試 7.2.1 “完成”的定義 7.2.2 溝通 7.2.3 自動化 7.2.4額外工作 7.2.5驗收測試什么時候?qū)懀烧l來寫 7.2.6開發(fā)人員的角色 7.2.7測試的協(xié)商與被動推進 7.2.8驗收測試和單元測試 7.2.9 圖形界面及其他復雜因素 7.2.10持續(xù)集成 7.3結論 第8章測試策略 8.1 QA應該找不到任何錯誤 8.1.1 QA也是團隊的一部分 8.1.2需求規(guī)約定義者 8.1.3特性描述者 8.2自動化測試金字塔 8.2.1 單元測試 8.2.2組件測試 8.2.3集成測試 8.2.4 系統(tǒng)溺4試 8.2.5人工探索式測試 8.3結論 8.4參考文獻 第9章時間管理 9.1 會議 9.1.1拒絕 9.1.2 離席 9.1.3確定議程與目標 9.1.4立會 9.1.5迭代計劃會議 9.1.6迭代回顧和DEM0展示 9.1.7爭論/反對 9.2注意力點數(shù) 9.2.1 睡眠 9.2.2咖啡因 9.2.3恢復 9.2.4肌肉注意力 …… 第10章 預估 第11章 壓力 第12章 協(xié)作 第13章 團隊與項目 第14章 輔導、學徒期與技藝 附錄 工具
章節(jié)摘錄
版權頁: 插圖: 這些終端由中斷驅(qū)動。發(fā)送給終端的字符先保存在循環(huán)緩沖中。串Vl每發(fā)送完畢一個字符,便會釋放一個中斷信號,然后循環(huán)緩沖中的下一個字符便做好發(fā)送準備。 最后我們發(fā)現(xiàn),終端僵死是由于管理循環(huán)緩沖的三個變量出現(xiàn)同步異常。不知道為什么會發(fā)生這種現(xiàn)象,但這至少是一個線索。在5千多行的監(jiān)管代碼中肯定有個bug,誤操作了這些指針中的一個。 這個新發(fā)現(xiàn)也使得我們能夠手工解除終端的僵死情況!我們可以使用檢查器,將這三個變量重置為默認值,這時本來僵死的終端便會奇跡般地復活。最后我們寫了一個小工具來檢查所有的計數(shù)器是否一致,當發(fā)現(xiàn)不一致時便進行修復。一開始,當卡車司機工會的人打電話向我們報告說發(fā)生僵死情況時,我們會通過在前面板上敲擊一個特定的“用戶中斷開關”來調(diào)用這個工具。后來,我們把這個工具改為每一秒自動跑一次。 差不多一個月后,僵死的問題不再出現(xiàn),卡車司機工會的人終于可以專心工作了。偶爾某個終端會停滯半秒鐘,但是系統(tǒng)的基礎速度只有每秒30個字符,似乎沒人注意到這個情況。 但是,為什么會出現(xiàn)計數(shù)器不一致的情況呢?那時剛好19歲的我決心要一探究竟。 監(jiān)管代碼此前是由Richard編寫的,他當時已經(jīng)離開公司去學校讀書了。我們其他人沒人熟悉那部分代碼,因為之前Richard把那部分代碼捂得死死的。那代碼屬于他,別人不能碰。但是現(xiàn)在Richard已經(jīng)離職了,我便能扒開厚厚一摞代碼清單,逐頁細看。 系統(tǒng)中的循環(huán)隊列使用的就是一個先進先出的數(shù)據(jù)結構,是的,也就是隊列。應用程序會在隊列的一端推入字符,直到隊列滿。當打印機已經(jīng)準備好時,中斷頭會將隊列另一端的字符彈出。當隊列空的時候,打印機會停止工作。存在的bug會導致應用程序以為隊列已滿,但中斷頭卻以為隊列是空的。 中斷頭是在和其他代碼不同的“線程”中運行的。因此,必須對中斷頭和其他代碼都可以進行操作的計數(shù)器與變量做好保護,以防止發(fā)生同步更新操作。在這個案例中則意味著,任何其他代碼在操作這三個變量前,必須先關閉中斷。坐下來翻查代碼時,我知道我要搜索的是那些在代碼中觸及了這些變量但卻沒有事先關閉中斷的地方。 換做現(xiàn)在,搜尋的時候我們當然會使用各種強大的工具,找出代碼中涉及這些變量的全部地方。幾秒鐘內(nèi)便可以知道觸及它們的每行代碼。在幾分鐘內(nèi),我們便可以知道哪些代碼沒有事先關閉中斷。但是那是1972年,那時我手上沒有任何類似的工具可供使用,只能靠一雙眼睛。
媒體關注與評論
“毫無疑問,Bob大叔的這本新作又一次抬高了專業(yè)程序員的門檻。在書中,他從交互管理、時間管理、壓力管理、合作方法以及工具選擇等諸多方面,闡述了他對一名專業(yè)程序員的期望。Bob并不囿于對TDD和ATDD的傳授,他不僅解釋了每一名自視為專業(yè)人士的程序員所需要知道的東西,而且指出了他們需要在歷練尚淺的軟件開發(fā)職業(yè)生涯中需要不斷精進的內(nèi)容。”—— Markus G·rtner,it-agile公司資深軟件開發(fā)者“有一些技術書頗具啟發(fā)和教益,有一些則讀來輕松喜悅且富有趣味,但很少有技術書籍能夠同時兼具所有這四個特色。我感覺Martin所有的書都可歸入此列。本書也不例外。 閱讀、學習和守持書中的教誨,你將可以信心滿滿地把自己訓練為軟件專業(yè)人士。”——George Bullock,微軟公司資深程序經(jīng)理“如果計算機科學學位要求有‘畢業(yè)后必讀書單’,本書當在其列。在現(xiàn)實的職業(yè)生涯中,糟糕的代碼不會因?qū)W期結束就此消失,程序員也不會因加班加點開夜車編碼便可獲得A級評分,而雪上加霜的是,你還必須抽出精力與人打交道。就算你是個編程高手,也并不一定就可以稱為專業(yè)人士。本書描述了邁向?qū)I(yè)程序員的修煉旅程……而且閱讀起來確實異常有趣。”——Jeff Overvey,伊利諾伊大學厄本那-香檳分校“本書遠不只是給出了一套規(guī)則或指導方針,它還包含了無數(shù)來之不易的智慧和知識,這些寶貴財富通常只有經(jīng)歷過多年的試錯,歷經(jīng)由初級學徒修煉成為大師級工匠的整個過程才能獲得。如果你期望自己能成為軟件專業(yè)人士,那么本書不容錯過。”——R.L. Bogetti·,Baxter Healthcare公司系統(tǒng)主設計師
編輯推薦
《程序員的職業(yè)素養(yǎng)》是編程大師 Robert C. Martin40余年編程生涯的心得體會, 講解成為真正專業(yè)的程序員需要什么樣的態(tài)度、原則,需要采取什么樣的行動。Robert C. Martin以自己以及身邊的同事走過的彎路、犯過的錯誤為例,意在為后來人引路,助其職業(yè)生涯邁上更高臺階。
名人推薦
Bob大叔的這本新作又一次抬高了專業(yè)程序員的門檻,指出了他們需要在歷練尚淺的軟件開發(fā)職業(yè)生涯中需要不斷精進的內(nèi)容。——Markus Gartner,it-agile公司資深軟件開發(fā)者有一些技術書頗具啟發(fā)與教益,有一些則讀來輕松喜悅且富有趣味,但很少有技術書籍能夠同時兼具所有這四個特色。我感覺Martin所有的書都可歸入此列?!狦eorge Bullock,微軟公司資深程序經(jīng)理如果計算機科學學位要求有“畢業(yè)后必讀書單”,本書當在其列。本書描述了邁向?qū)I(yè)程序員的修煉旅程……而且閱讀起來確實異常有趣?!狫eff Overvey,伊利諾伊大學厄本那-香檳分校如果你期望自己能成為軟件專業(yè)人士,那么本書不容錯過?!猂.L.Bogetti,Baxter Healthcare公司系統(tǒng)主設計師
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載