• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

              C++博客 :: 首頁 :: 聯系 ::  :: 管理
              163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(48)

            我參與的團隊

            搜索

            •  

            積分與排名

            • 積分 - 398977
            • 排名 - 59

            最新評論

            閱讀排行榜

            評論排行榜

            岸上的船兒如同海上的燈塔,無法移動。

            —— 荷蘭諺語

            Een schip op het strand is een baken in zee.

            [A ship on the beach is a lighthouse to the sea.]

            DUTCH PROVERB

            史前史中,沒有別的場景比巨獸們在焦油坑中垂死掙扎的場面更令人震撼。上帝見證著恐龍、猛犸象、劍齒虎在焦油中掙扎。它們掙扎得越猛烈,焦油糾纏得就越緊,沒有任何猛獸足夠強壯或具有足夠的技巧,能夠掙脫束縛,它們最后都沉到了坑底。

            過去幾十年的大型系統開發就猶如這樣一個焦油坑,很多大型和強壯的動物在其中劇烈地掙扎。他們中大多數開發出 了可運行的系統—— 不過只有極少數的項目滿足了目標、進度和預算的要求。各種團隊,大型的或小型的,龐雜的或精干的,一個接一個淹沒在了焦油坑中。表面上看起來好像沒有任何 一個單獨的問題會導致困難,每個問題都能獲得解決,但是當它們相互糾纏和累積在一起的時候,團隊的行動就會變得越來越慢。對問題的麻煩程度,每個人似乎都 會感到驚訝,并且很難看清問題的本質。不過,如果我們想解決問題,就必須試圖先去了解問題。

            因此,首先讓我們來認識一下系統開發這個職業,以及充滿在這個職業中的樂趣和苦惱吧!

            編程系統產品

            報紙上經常會出現這樣的新聞,講述兩個程序員如何在經過改造的簡陋車庫中,編出了超過大型團隊工作量的重要程序。接著,每個編程人員準備相信這樣的神話,因為他知道自己能以超過產業化團隊的1 000代碼行/年的生產率來開發任何程序。

            為什么不是所有的產業化隊伍都會被這種專注的二人組合所替代?我們必須看一下產出的是什么。

            在圖1-1的左上部分是程序(Program)。它本身是完整的,可以由作者在所開發的系統平臺上運行。它通常是車庫中產出的產品,以及作為單個程序員生產率的評估標準。

            圖1-1  編程系統產品的演進

            有兩種途徑可以使程序轉變成更有用的,但是成本更高的產物,這兩種途徑表現為圖中的邊界。

            水平邊界以下,程序轉變成編程產品(Programming Product)。這是可以被任何人運行、測試、修復和擴展的程序。它可以在多種操作系統平臺上運行,供多套數據使用。要成為通用的編程產品,程序必須按 照普遍認可的風格來編寫,特別是輸入的范圍和形式必須廣泛地適用于所有可以合理使用的基本算法。接著,對程序進行徹底測試,確保它的穩定性和可靠性,使其 值得信賴。這就意味著必須準備、運行和記錄詳盡的測試用例庫,用來檢查輸入的邊界和范圍。此外,要將程序提升為程序產品,還需要有完備的文檔,每個人都可 以加以使用、修復和擴展。經驗數據表明,相同功能的編程產品的成本,至少是經過測試程序的3倍。

            回到圖中,垂直邊界的右邊,程序轉變成編程系統(Programming System)中的一個構件單元。它是在功能上能相互協作、具有規范的格式、可以進行交互的程序集合,并可以用來組裝和搭建整個系統。要成為編程系統構 件,程序必須按照一定的要求編制,使輸入和輸出在語法和語義上與精確定義的接口一致。同時程序還要符合預先定義的資源限制—— 內存空間、輸入輸出設備、計算機時間。最后,程序必須同其他系統構件單元一道,以任何能想像到的組合進行測試。由于測試用例會隨著組合不斷增加,所以測試 的范圍必須廣泛。因為一些意想不到的交互會產生許多不易察覺的bug,測試工作將會非常耗時,因此相同功能的編程系統構件的成本至少是獨立程序的3倍。如 果系統有大量的組成單元,成本還會更高。

            圖1-1的右下部分代表編程系統產品(Programming Systems Product)。與以上的所有的簡單的程序都不同的是,它的成本高達9倍。然而,只有它才是真正有用的產品,是大多數系統開發的目標。

            職業的樂趣

            編程為什么有趣?作為回報,它的從業者期望得到什么樣的快樂?

            首先,這種快樂是一種創建事物的純粹快樂。如同小孩在玩泥巴時感到快樂一樣,成年人喜歡創建事物,特別是自己進行設計。我想這種快樂是上帝創造世界的折射,一種呈現在每片獨特、嶄新的樹葉和雪花上的喜悅。

            其次,這種快樂來自于開發對他人有用的東西。內心深處,我們期望我們的勞動成果能夠被他人使用,并能對他們有所幫助。從這一角度而言,這同小孩用粘土為“爸爸的辦公室”捏制鉛筆盒沒有任何本質的區別。

            第三,快樂來自于整個過程體現出的一股強大的魅力—— 將相互嚙合的零部件組裝在一起,看到它們以精妙的方式運行著,并收到了預先所希望的效果。比起彈球游戲機或自動電唱機所具有的迷人魅力,程序化的計算機毫不遜色。

            第四,這種快樂是持續學習的快樂,它來自于這項工作的非重復特性。人們所面臨的問題總有這樣那樣的不同,因而解決問題的人可以從中學習新的事物:有時是實踐上的,有時是理論上的,或者兼而有之。

            最后,這種快樂還來自于在易于駕馭的介質上工作。程序員,就像詩人一樣,幾乎是僅僅工作在單純的思考中。程序 員憑空地運用自己的想像,來建造自己的“城堡”。很少有創造介質如此靈活,如此易于精煉和重建,如此容易實現概念上的設想(不過我們將會看到,容易駕馭的 特性也有它自己的問題)。

            然而程序畢竟同詩歌不同:它是實實在在的東西;它可以移動和運行,能獨立產生可見的輸出;它能打印結果,繪制圖形,發出聲音,移動支架。神話和傳說中的魔術在我們的時代已變成了現實。在鍵盤上鍵入正確的咒語,屏幕會活動、變幻,顯示出前所未有的也不可能存在的事物。

            編程的快樂在于它不僅滿足了我們內心深處進行創造的渴望,而且還喚醒了每個人內心的情感。

            職業的苦惱

            然而這個過程并不全都是快樂。我們只有事先了解一些編程固有的苦惱,這樣,當它們真的出現時,才能更加坦然地面對。

            首先,苦惱來自追求完美。因為計算機是以這樣的方式來變戲法的:如果咒語中的一個字符、一個停頓,沒有與正確 的形式一致,魔術就不會出現(現實中,很少的人類活動要求完美,所以人類對它本來就不習慣)。實際上,我認為,學習編程最困難的部分,是將做事的方式向追 求完美的方向調整[1]

            其次,苦惱來自由他人來設定目標、供給資源和提供信息。編程人員很少能控制工作環境和工作目標。用管理的術語 來說,個人的權威和他所承擔的責任是不相配的。不過,似乎在所有的領域中,對要完成的工作,很少能提供與責任相一致的正式權威。而現實情況中,實際(相對 于形式)的權威來自于每次任務的完成。

            對于系統編程人員而言,對其他人的依賴是一件非常痛苦的事情。他依靠其他人的程序,而往往這些程序設計得并不 合理、實現拙劣、發布不完整(沒有源代碼或測試用例)、或者文檔記錄得很糟。所以,系統編程人員不得不花費時間去研究和修改,而它們在理想情況下本應該是 可靠完整的。

            下一個苦惱—— 概念性設計是有趣的,但尋找瑣碎的bug卻只是一項重復性的活動。伴隨著創造性活動的,往往是枯燥沉悶的時間和艱苦的勞動。程序編制工作也不例外。

            另外,人們發現調試和查錯往往是線性收斂的,或者更糟糕的是,具有二次方的復雜度。結果,測試一拖再拖,尋找最后一個錯誤比第一個錯誤將花費更多的時間。

            最后一個苦惱,有時也是一種無奈—— 當投入了大量辛苦的勞動,產品在即將完成或者終于完成的時候,卻已顯得陳舊過時。可能是同事和競爭對手已在追逐新的、更好的構思;也許替代方案不僅僅是在構思,而且已經在安排了。

            現實情況比上面所說的通常要好一些。當產品開發完成時,更優秀的新產品通常還不能投入使用,而僅僅是為大家談論而已。另外,它同樣需要數月的開發時間。事實上,只有實際需要時,才會用到最新的設想,因為所實現的系統已經能滿足要求,并體現了回報。

            誠然,產品開發所基于的技術在不斷地進步。一旦設計被凍結,在概念上就已經開始陳舊了。不過,實際產品需要一 步一步按階段實現。實現落后與否的判斷應根據其他已有的系統,而不是未實現的概念。因此,我們所面臨的挑戰和任務是在實際的進度和有效的資源范圍內,尋找 解決實際問題的切實可行方案。

            這,就是編程,一個許多人痛苦掙扎的焦油坑以及一種樂趣和苦惱共存的創造性活動。對于許多人而言,其中的快樂遠遠大于苦惱。本書的以下章節將試圖搭建一些橋梁,為通過這樣的焦油坑提供一些指導。


            posted on 2007-12-14 16:25 sdfasdf 閱讀(391) 評論(0)  編輯 收藏 引用 所屬分類: 軟件工程
            久久亚洲国产精品成人AV秋霞| 久久91综合国产91久久精品| 久久线看观看精品香蕉国产| 国产产无码乱码精品久久鸭| 久久精品免费观看| 精品一久久香蕉国产线看播放| 久久激情五月丁香伊人| 国产99久久久国产精品小说 | 国产精品久久久久久久久久影院| 久久婷婷五月综合国产尤物app| 中文字幕无码免费久久| 久久97精品久久久久久久不卡| 日韩欧美亚洲综合久久影院Ds| 亚洲va国产va天堂va久久| 伊人久久大香线蕉精品| 99精品国产免费久久久久久下载| 久久99毛片免费观看不卡| 无码人妻少妇久久中文字幕| 国产精品久久国产精麻豆99网站| 青青热久久国产久精品| 久久er热视频在这里精品| 久久国内免费视频| 9191精品国产免费久久| 中文字幕无码免费久久| 一极黄色视频久久网站| 久久国产精品一区| 婷婷综合久久狠狠色99h| 久久精品免费一区二区| 伊人久久亚洲综合影院| 久久99精品久久久久久9蜜桃| 精品久久久无码人妻中文字幕豆芽 | 久久久久综合网久久| 久久国产热精品波多野结衣AV| 亚洲国产成人久久一区久久| 狠狠色综合网站久久久久久久 | 亚洲国产成人久久综合野外| 91精品国产色综久久| 97久久超碰成人精品网站| 亚洲色欲久久久综合网| 久久综合色老色| 精品久久久中文字幕人妻|