相關閱讀 |
>>> 文章華國詩禮傳家—精彩書評選 >>> | 簡體 傳統 |
軟件工程的關鍵問題就在于:“它使我們忘記了是人開發軟件”。
確定過程,驗證過程。
所有的軟件需求都來自于人,需求的獲取無法自動完成,開發者必須和用戶溝通才能了解用戶的真正需求。
彼此學習是軟件開發中非常重要的一個部分。
而對于如今的很多項目來說設計和實現都已經不再是難題,最主要的困難是在需求分析階段和需求分析與軟件設計之間的交流上。
同一件任務被切分而成的小步驟越多,人與人之間傳遞信息所耗費的時間總量就越多。
在項目之間存在的詫異性要比相似性重要的多。
如何提前交付,只需更早開始。
盡管編程環境已經演變為利于小型團隊的形式,但軟件管理方法并沒有作出相應的改變。
軟件開發是一個社會性的學習過程。
軟件開發是一種全新的東西,它融合了藝術,科學和工程三者,最終目的是要為用戶提供實用的系統。
在需求說明和設計說明之間存在一條巨大的鴻溝,當我們忘記這一點時我們就可能低估軟件開發的困難程度,到目前為止還沒有任何工具能幫我們跨越需求和設計之間的鴻溝。
擁有知識和擁有利用這些知識開發軟件的技巧和實踐能力是兩碼事。
計算機輔助軟件工程(CASE)。
技藝是靠實踐來鞏固的,一旦停止實踐,技藝就會生疏。
編程是一門手藝。
軟件工匠的聲望也要建立在他們過去成功交付的應用程序和系統之上,建立在他們讓用戶滿意的程度之上。
僅僅證明了他學會了如何通過這門考試。
同行的認可和推薦是獲得更好軟件辦法。
相關的每個人都會努力的提高自己的能力和信譽,力爭成為更好的開發者。
從業執照無法有效的提供軟件質量和可靠性方面的保障。
因為軟件太龐大太復雜,任何人都不肯能保證其中沒有任何錯誤,在軟件領域中由一名可靠的工程師來保證整個工程的正確性的做法是不可行的。
頒發從業執照的做法的關鍵在于他假設通過檢查可以提高產品的質量。
好萊塢模式。
導演和制片人只跟他們了解的人合作,他們可能和這些人有私交,也可能通過聲望而了解這些人。
他們就會請他們信任的人來推薦。
通過向開源系統和應用程序作出貢獻,許多軟件開發者建立了自己的赫赫聲明。
如果你能針對10%的用戶,并努力使他們獲得120%的滿意,那么你會獲得更大的成功。
與少數幾個用戶建立緊密的工作聯系,為他們創建最好的軟件應用,讓他們獲得最大限度的滿足,然后這個軟件才可以被大批量生產并推向廣闊的市場。
作品上的簽名是連接用戶和開發者之間的紐帶,它使用戶能夠看到是誰創造了這個軟件,知道如何聯系這個作者。
工匠應當對作品負責。
開發者是憑聲望贏得尊敬的,而這種聲望一方面來自于他們交付了牢固實用的軟件,另一方面也是因為他們積極的幫助用戶解決所以出現的問題。
測試無法證明錯誤不存在。
軟件工匠應該修正所有已知的錯誤,然后才能交付軟件。
程序里有九十九個錯,改正一個錯,現在程序里有一百個錯。
用戶感興趣的不是便宜的軟件,而是能用,能提升自身價值的軟件。
軟件工匠應該花一些時間來考察他們的客戶。
而成功項目的關鍵就是讓好的開發團隊和好的客戶一起工作。
軟件工藝的世界里,開發者為人所知的不是學歷,會籍或者認證證書,而是他們曾經做過的工作,只有這些才能真正構成開發者能力的證明。
伴隨著被認定是某個軟件的作者的權利而來的,是需要以私人身份對此軟件負責。
由優秀開發者組成的小型團隊能夠開發出優秀的軟件。
真正的問題是我們為技術性并不太強的勞動付出了太高的報酬。
增量式開發,漸進式發布。
鼓勵軟件的最終使用者與軟件的開發者交流,這樣工作能夠進展的更快。
希望客戶已經完成了該作的檢查工作。
自動化測試,自動化單元測試,功能測試和驗收測試提到了新的高度。
高質量的,堅固的應用程序比豐富的特性或固定的交付日期更有價值。
在軟件工藝中,只有當沒有任何已知缺陷存在時,產品才能發布。
維護者是一個榮耀的身份。
我們有常年使用精致工藝品的傳統,而軟件工藝正是這種傳統的回歸。
確保你理解了真正的問題,盡全力尋找簡單的解決方案,首先在小范圍內測試你的解決方案。
一個人是否能成為大師級的工匠,決定的因素就是,他是否能夠堅持實踐自己的技藝,而不隨波逐流。
掌握技藝的過程需要相當長的時間,因為開發者必須學會評價自己的決策在整個軟件生命周期中造成的影響。
沒有任何一項認證或考試能夠證明你掌握了軟件開發的技藝。
會編程并不等于會開發軟件。
編寫代碼是軟件開發中最容易的部分。
沒有反饋的實踐只會強化錯誤。
軟件開發的一個關鍵問題就是:如果沒有對背景知識的深刻理解,就不可能找出解決問題的真正方法。
軟件工程的目標是大型系統項目。
軟件工藝,系統工程,軟件工程。
唯一正確的軟件開發方法就是由過程和文檔驅動的軟件工程方法。
知識被盡可能的包含在機器之中,人只是接受一定的培訓來操作機器,這條思路的終極形式就是生產線。
軟件開發還是一項智力活動。
首要的問題是使用而不是復用。
如何與用戶協作,交流,創建一個良好的設計,并使其不斷演進發展,這才是軟件工業中真正的難題。
軟件是針對現行硬件的局限來編寫的。
在它出錯之前一直將其視為正確的。
軟件開發必須以這種粗粒度的方式進行。
軟件工程解決這個問題的方法不是在開發者之間進行交叉培信,讓他們了解全局,而是不斷強調文檔的神話。
軟件開發中最重要的問題是構思和設計。
比起技術方面的知識,融入團隊的能力要重要的多。
我們應該能夠在一開始就捕捉到所有的需求,然后在進行設計,然后編碼,然后測試。
有了富有表現力的高級語言,再加上良好的編碼習慣,優秀的開發者可以始終在頭腦中保持對應用程序的整體把握。
在項目進行中更換硬件或者編程語言將冒很大的風險,并付出高昂的代價。
變化的不可避免性則是另一條相關的經驗。
需求總是極不穩定。
工藝學強調個人。
工藝學項目會把新東西放在項目早期來開發,從而使不確定性得以提早顯現。
在小型團隊中,你必須先了解團隊中成員,然后才能進行估算。
他曾經多次按時交付堅固,高質量的應用程序,不值得僅僅為了獲得一個項目而削減估算值,并最終損害自己的聲望。
經驗——項目成功的指示燈。
工藝學注重個體。
由于使私人性質的推薦,他們實際上把自己的聲望也押在了推薦人的身上,相信后者能夠成功的交付這個項目。
不同規模的項目需要不同的過程。
挑選開發團隊中其余的人是工匠的責任。
一個真正優秀的開發者比五個平庸的開發者更有價值。
給高產的開發者額外的獎勵。
軟件開發是否能夠成功,對問題領域的理解與對技術的理解同樣重要。
健康的團隊總是更加高效。
任何一種技術,只要你的團隊不熟悉它,它就是極端技術。
但也帶來了非常高的技術性失敗的風險。
創業者開發了優秀的軟件,帶領企業起步騰飛,然后就走上了管理崗位,再雇一批菜鳥來糟蹋自己的軟件。
這種策略的終極目標是要創建這樣一個系統:它具有足夠的可配置性,絕大多數變化能夠再不斷修改代碼的前提下得到滿足。
第二中策略是創建一個簡單的系統。
盡量推遲為應用程序加入靈活性的時間。
需要封裝基礎設施的3個部分,用戶界面,數據庫,以及操作系統。
他們它們必須適用多種用戶界面。
軟件工匠有責任確保應用程序中沒有“錯誤”的按鈕——不管用戶如何操作,都不應該成為錯誤。
“為測試和維護設計”需要及其淵博的軟件開發知識,只有在多年的實踐和學習中才能達到這樣的水平。
開發者最重要的技能之一就是忘記細枝末節的東西,記住最根本的信息。
計算機硬件的速度在不斷提升,價格在不斷下降,很多以前的經驗已經不再適用。
軟件工程針對的是大規模的,工作量超過100人年的項目,而絕大多數應用程序開發項目與之相比可算是微不足道。
用學徒的方式來培養優秀的軟件開發者。
軟件工藝的分權模式是對軟件工程的集權模式的挑戰。
軟件開發是一門手藝,它將藝術,科學和工程學巧妙的融為一體。
軟件開發理應有樂趣,否則,開發過程就是錯的。
網載 2014-07-15 13:47:57
稱謂:
内容: