軟體開發的葵花寶典

來源:互聯網
上載者:User
葵花寶典

註:轉載,原文已經沒有出處了。

中國人大都喜歡用武俠小說來比較軟體開發,但是在實戰武功中,只有葵花寶典才是最厲害的,也只有掌握了葵花寶典,才能稱為"不敗"。 但什麼才是軟體開發的葵花寶典?

讓我們先從一些現象出發。我們的前提是,軟體開發是一項智力密集型勞動。對於智力密集型勞動,我們觀察到的現象是,個體的表現差異很大,團隊的表 現差異很大,組織的表現差異很大,國家的表現差異很大。這不象體力佔主要的勞動,象百米王跑百米的速度也僅比我快50%。但在棋類運動中,一個高手可以車 輪戰數位低手,而且毫無例外地將他們一一擊敗!

這些智力運動員表現出的特點是,計算精確而且速度快。其行為很象東方不敗。雖然關於葵花寶典的傳說很多,但最準確的描述只有一個字"快"。東方不敗已經快到了嚇人的地步。就象卡斯帕羅夫已快到了深藍的地步。

有一則關於物理學家玻爾的軼事,有一次玻爾在普林斯頓大學聽兩個年青教授演講他們的工作成果。期間玻爾突然發言說,如果照你們的研究算下去,會得到一個很有意思的推論。結果兩個年青教授回去計算了兩天,果然得出了同樣的結論。玻爾是如何做到這樣快的?

在軟體開發中,我們同樣注意到這樣一種高手,他們可以每天寫出一千行左右的高品質代碼。他們可以運用已有的一些軟體包,迅速完成一個新的產品。他們可以在很短的時間內,學會一項新的程式語言或是新技術。他們表現出一種神奇的速度。

在武俠小說中,所有的高手都有一些凡人不能企及的表現。象張無忌學太極,用龍爪手擊敗龍爪手名家;喬峰用太祖長拳擊敗天下英雄;姑蘇慕容以其人之道還治其人之身,令狐沖一劍剌瞎十幾雙眼睛等等。我認為,之所以他們能做到這樣,關鍵是在於他們快。

快並不意味著不準或品質差。快與品質並不矛盾。

高手的快,其實包含著很高的品質在其中。如果你因為高手的快,就質疑其品質,那就相當於在問:東方不敗出手那麼快,會不會刺不準?東方不敗並不滿足於刺死對手,他會在對手身上刺朵花。他把殺人變成了藝術。準確來說,他真正的興趣不在殺人,而在於藝術。

退一步說,就算東方不敗第一擊有點偏差,他稍作修正後,馬上跟上的第二第三擊,也會擊中他想擊中的地方。在武功差的對手劍還沒撥出來的時候,他已殺死對方並刺上了一朵花。

所以真正的軟體高手,他並不滿足於他的代碼能有效地工作了,他認為編程是藝術,並醉心於其中。在低手能寫出一個版本的時間裡,他已經寫出了第十 版。其品質當然不可同日而語。就象一個九段棋手,在給定的時間裡,他能計算十種可能,並將每種可能計算到100手之後,從中選擇一種最有利的下法。低手豈 有苟全的機會?

高手寫軟體總是不停地在重構(refactoring)。高手喜歡迭代式開發。高手說,增量就是打補丁,迭代就是推倒重來。對於軟體這種東西,寫一遍它可能OK(做到這一點也不容易),寫十遍就是一個偉大的產品,再多寫一遍它就更偉大些。

高手快的訣竅在於他很熟悉各種東西。高手看書很快,因為每一本新書裡,值得他好好看的新技術只有一兩章的內容。他能迅速看完,並準確領會這本書的中心思想和價值。而對於一個新手,每句話都是新的,他都需要去理解,每一段例子,他都需要去試。

很少看到一種100%全新的技術或理論。就象Java language specification裡說的,Java沒有使用任何新技術,用的都是業界久經考驗的技術。對於高手來說,那些技術都是他所熟悉的。自然,很快他就從 一個C++高手變成了Java高手。如果一個編程新手學Java,學兩年也不如一個高手學兩個月的。高手學新東西快。

高手寫代碼速度快。統計結果說,人均每人月的有效代碼速度大概是300至400行。但那是業界平均生產效率。對於高手來說,這個數字太低了。每天 寫300至400行是完全有可能的。因為在寫代碼時,所有知識都已具備,已經沒有任何需要他多花時間的事情了。他甚至很少需要Debug。

高手重用代碼的能力很強,熟悉新的API的速度很快。這也是因為,他曾經使用過很多的API,重用過很多的代碼。他知道哪些是可用的,哪些有缺 陷。他既過用Qt,也用過gtk+,也用過windows API & MFC,也用過AWT & SWING。新的API對他來說,也是老熟人。

高手喜歡用輕量級的工具,象vi,notepad,最多到UltraEdit這樣複雜的。高手用這種工具寫出很多的東西。這些工具就象東方不敗的針。那根針已具有神奇的魔力,有時候它可以當雷射槍來用。

對於一些重量級的工具,高手雖不常用,但一經使出也威力大於常人。如果讓東方不敗用劍,最厲害的劍術名家也會敗得很難看。高手其實用過很多的重量 級工具,而且深知其優缺點。所以使出來,就會把威力發揮到最大,而把缺陷減少到最小。而低手則不然,總是把缺陷加以大大的發揚而渾不知其精髓何在。就象很 多人學用UML、RUP、XP、Design pattern那樣。

高手所學博雜且融會貫通。高手做什麼都快,當低手還在一愁莫展的時候,高手已經圓滿解決問題,去幹別的事去了。

在成為高手的路上,要有熱情,要循序漸進,要持之以恒。

要逼自己,書要快快地看。要試圖迅速理解其主旨。其實你快快看所接受的資訊量,與慢慢看接受的差不多。能明白多少很大程度上取決於你的功底。以後 用到再回過頭來看。一本對你來說新東西太多的書,不要指望看一次就全理解吸收。就象很多功力不夠的人看design patterns那本書一樣。慢慢看還不如找到多種資訊來源,都快快看一遍。對於一個完全陌生的領域,只看一本書很遠遠不夠的。

要逼自已,事要快快做。有一個朋友,幾年前我介紹他去玩玩linux,他也表示想玩,但他現在還沒碰過。他失去了很多機會。

平時要有意識提高自己寫代碼的速度,其實你一天寫15行有效代碼,與你寫50行有效代碼,其品質是差不多的。你應該把那些業界平均水平拋諸腦後, 把超越自己做為唯一目標。等到你寫了很多各式各樣的代碼,你的水平就不一般了。一個老師曾向我介紹他的學英語的決竅,他說你去啃原版小說,啃到50本,就 和一般人有很大距離了。就是這個理。如果你寫得太慢,怎麼能寫得多?水平怎麼能提高?

要逼自己,學很多別人怕學的東西。低手總會說:這麼多東西怎麼學得過來啊。於是就少學或不學。這樣就成不了高手了。高手有非常廣的知識面,有很豐富的經驗。知道很多低手不知道的事。玩過很多低手聽都沒聽過的東西。

要逼自己,努力滿足客戶的各種需求。個人技能是在滿足客戶的各種需求的過程中提高的。比如你喜歡用Delphi,客戶說一定要用VB,那你就答應他,然後把自己培養成為VB的高手。使用者的需求看似變態,但對你是一個機會。

怎樣才能做到看書快,寫代碼快,學新東西快,一個顯而易見的途徑就是將工作並行化。你在一台機器上make時,同時可以在看別的文檔和聊天。對於 電腦是這樣,對人也是這樣。如果你只能串列地處理問題,你的速度將提高有限。你的大腦有很大潛力可挖,它應該是一個多任務分時系統。努力減少它idle 的時間。搞經濟的Samuelson被人稱為human brain main frame,可見他的大腦有多快。

讓你的思維快起來,你就會區別於那些反應遲鈍的人。如果你不能讓人生的道路變長,就讓它變寬。這世界變化快,需要你變得比它快才行。

這樣加快並不會讓你短命,相反,你有更多的時間來享受生活和鍛煉身體。你的生活將更有品質,更豐富,更有意義。面對變化,你將立於不敗之地。我們都是和自己賽跑的人,需要跑得比昨天的自己更快。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.