cuiyi's blog(崔毅 crazycy)

          記錄點(diǎn)滴 鑒往事之得失 以資于發(fā)展
          數(shù)據(jù)加載中……

          軟件職業(yè)之路的借鑒(5):怎樣成長(zhǎng)(轉(zhuǎn))

          怎樣成為優(yōu)秀的軟件模型設(shè)計(jì)者?
          作者:Scott Ambler著,樂(lè)林峰 譯 ???
          本文選自:www.umlchina.com?

          我們期待自己成為一個(gè)優(yōu)秀的軟件模型設(shè)計(jì)者,但是,要怎樣做,又從哪里開(kāi)始呢?

          將下列原則應(yīng)用到你的軟件工程中,你會(huì)獲得立桿見(jiàn)影的成果。

          1. 人遠(yuǎn)比技術(shù)重要

          你開(kāi)發(fā)軟件是為了供別人使用,沒(méi)有人使用的軟件只是沒(méi)有意義的數(shù)據(jù)的集合而已。許多在軟件方面很有成就的行家在他們事業(yè)的初期卻表現(xiàn)平平,因?yàn)樗麄兡菚r(shí)侯將主要精力都集中在技術(shù)上。顯然,構(gòu)件(components),EJB(Enterprise Java Beans)和代理(agent)是很有趣的東西。但是對(duì)于用戶來(lái)說(shuō),如果你設(shè)計(jì)的軟件很難使用或者不能滿足他們的需求,后臺(tái)用再好的技術(shù)也于事無(wú)補(bǔ)。多花點(diǎn)時(shí)間到軟件需求和設(shè)計(jì)一個(gè)使用戶能很容易理解的界面上。

          2. 理解你要實(shí)現(xiàn)的東西

          好的軟件設(shè)計(jì)人員把大多數(shù)時(shí)間花費(fèi)在建立系統(tǒng)模型上,偶爾寫(xiě)一些源代碼,但那只不過(guò)是為了驗(yàn)證設(shè)計(jì)過(guò)程中所遇到的問(wèn)題。這將使他們的設(shè)計(jì)方案更加可行。

          3. 謙虛是必須的品格

          你不可能知道一切,你甚至要很努力才能獲得足夠用的知識(shí)。軟件開(kāi)發(fā)是一項(xiàng)復(fù)雜而艱巨的工作,因?yàn)檐浖_(kāi)發(fā)所用到的工具和技術(shù)是在不斷更新的。而且,一個(gè)人也不可能了解軟件開(kāi)發(fā)的所有過(guò)程。在日常生活中你每天接觸到的新鮮事物可能不會(huì)太多。但是對(duì)于從事軟件開(kāi)發(fā)的人來(lái)說(shuō),每天可以學(xué)習(xí)很多新東西(如果愿意的話)。

          4. 需求就是需求

          如果你沒(méi)有任何需求,你就不要?jiǎng)邮珠_(kāi)發(fā)任何軟件。成功的軟件取決于時(shí)間(在用戶要求的時(shí)間內(nèi)完成)、預(yù)算和是否滿足用戶的需求。如果你不能確切知道用戶需要的是什么,或者軟件的需求定義,那么你的工程注定會(huì)失敗。

          5. 需求其實(shí)很少改變,改變的是你對(duì)需求的理解

          Object ToolSmiths公司(www.objecttoolsmiths.com)的Doug Smith常喜歡說(shuō):“分析是一門科學(xué),設(shè)計(jì)是一門藝術(shù)”。他的意思是說(shuō)在眾多的“正確”分析模型中只存在一個(gè)最“正確”分析模型可以完全滿足解決某個(gè)具體問(wèn)題的需要(我理解的意思是需求分析需要一絲不茍、精確的完成,而設(shè)計(jì)的時(shí)候反而可以發(fā)揮創(chuàng)造力和想象力 - 譯者注)。

          如果需求經(jīng)常改動(dòng),很可能是你沒(méi)有作好需求分析,并不是需求真的改變了。

          你可以抱怨用戶不能告訴你他們想得到什么,但是不要忘記,收集需求信息是你工作。

          你可以說(shuō)是新來(lái)的開(kāi)發(fā)人員把事情搞得一團(tuán)糟,但是,你應(yīng)該確定在工程的第一天就告訴他們應(yīng)該做什么和怎樣去做。

          如果你覺(jué)得公司不讓你與用戶充分接觸,那只能說(shuō)明公司的管理層并不是真正支持你的項(xiàng)目。

          你可以抱怨公司有關(guān)軟件工程的管理制度不合理,但你必須了解大多同行公司是怎么做的。

          你可以借口說(shuō)你們的競(jìng)爭(zhēng)對(duì)手的成功是因?yàn)樗麄冇辛艘粋€(gè)新的理念,但是為什么你沒(méi)先想到呢?

          需求真正改變的情況很少,但是沒(méi)有做好需求分析工作的理由卻很多。

          6. 經(jīng)常閱讀

          在這個(gè)每日都在發(fā)生變化的產(chǎn)業(yè)中,你不可能在已取得的成就上陶醉太久。

          每個(gè)月至少讀2、3本專業(yè)雜志或者1本專業(yè)書(shū)籍。保持不落伍需要付出很多的時(shí)間和金錢,但會(huì)使你成為一個(gè)很有實(shí)力的競(jìng)爭(zhēng)者。

          7. 降低軟件模塊間的耦合度

          高耦合度的系統(tǒng)是很難維護(hù)的。一處的修改引起另一處甚至更多處的變動(dòng)。

          你可以通過(guò)以下方法降低程序的耦合度:隱藏實(shí)現(xiàn)細(xì)節(jié),強(qiáng)制構(gòu)件接口定義,不使用公用數(shù)據(jù)結(jié)構(gòu),不讓?xiě)?yīng)用程序直接操作數(shù)據(jù)庫(kù)(我的經(jīng)驗(yàn)法則是:當(dāng)應(yīng)用程序員在寫(xiě)SQL代碼的時(shí)候,你的程序的耦合度就已經(jīng)很高了)。

          耦合度低的軟件可以很容易被重用、維護(hù)和擴(kuò)充。

          8. 提高軟件的內(nèi)聚性

          如果一個(gè)軟件的模塊只實(shí)現(xiàn)一個(gè)功能,那么該模塊具有高內(nèi)聚性。高內(nèi)聚性的軟件更容易維護(hù)和改進(jìn)。

          判斷一個(gè)模塊是否有高的內(nèi)聚性,看一看你是否能夠用一個(gè)簡(jiǎn)單的句子描述它的功能就行了。如果你用了一段話或者你需要使用類似“和”、“或”等連詞,則說(shuō)明你需要將該模塊細(xì)化。

          只有高內(nèi)聚性的模塊才可能被重用。

          9. 考慮軟件的移植性

          移植是軟件開(kāi)發(fā)中一項(xiàng)具體而又實(shí)際的工作,不要相信某些軟件工具的廣告宣傳(比如java 的宣傳口號(hào)write once run many ? 譯者注)。

          即使僅僅對(duì)軟件進(jìn)行常規(guī)升級(jí),也要把這看得和向另一個(gè)操作系統(tǒng)或數(shù)據(jù)庫(kù)移植一樣重要。

          記得從16位Windows移植到32位windows的“樂(lè)趣”嗎 ?當(dāng)你使用了某個(gè)操作系統(tǒng)的特性,如它的進(jìn)程間通信(IPC)策略,或用某數(shù)據(jù)庫(kù)專有語(yǔ)言寫(xiě)了存儲(chǔ)過(guò)程。你的軟件和那個(gè)特定的產(chǎn)品結(jié)合度就已經(jīng)很高了。

          好的軟件設(shè)計(jì)者把那些特有的實(shí)現(xiàn)細(xì)節(jié)打包隱藏起來(lái),所以,當(dāng)那些特性該變的時(shí)候,你的僅僅需要更新那個(gè)包就可以了。

          10. 接受變化

          這是一句老話了:唯一不變的只有變化。

          你應(yīng)該將所有系統(tǒng)將可能發(fā)生的變化以及潛在需求記錄下來(lái),以便將來(lái)能夠?qū)崿F(xiàn)(參見(jiàn)“Architecting for Change”,Thinking Objectively, May 1999)

          通過(guò)在建模期間考慮這些假設(shè)的情況,你就有可能開(kāi)發(fā)出足夠強(qiáng)壯且容易維護(hù)的軟件。設(shè)計(jì)強(qiáng)壯的軟件是你最基本的目標(biāo)。

          11. 不要低估對(duì)軟件規(guī)模的需求

          Internet 帶給我們的最大的教訓(xùn)是你必須在軟件開(kāi)發(fā)的最初階段就考慮軟件規(guī)模的可擴(kuò)充性。

          今天只有100人的部門使用的應(yīng)用程序,明天可能會(huì)被有好幾萬(wàn)人的組織使用,下月,通過(guò)因特網(wǎng)可能會(huì)有幾百萬(wàn)人使用它。

          在軟件設(shè)計(jì)的初期,根據(jù)在用例模型中定義的必須支持的基本事務(wù)處理,確定軟件的基本功能。然后,在建造系統(tǒng)的時(shí)候再逐步加入比較常用的功能。

          在設(shè)計(jì)的開(kāi)始考慮軟件的規(guī)模需求,避免在用戶群突然增大的情況下,重寫(xiě)軟件。

          12. 性能僅僅是很多設(shè)計(jì)因素之一

          關(guān)注軟件設(shè)計(jì)中的一個(gè)重要因素--性能,這好象也是用戶最關(guān)心的事情。一個(gè)性能不佳的軟件將不可避免被重寫(xiě)。

          但是你的設(shè)計(jì)還必須具有可靠性,可用性,便攜性和可擴(kuò)展性。你應(yīng)該在工程開(kāi)始就應(yīng)該定義并區(qū)分好這些因素,以便在工作中恰當(dāng)使用。性能可以是,也可以不是優(yōu)先級(jí)最高的因素,我的觀點(diǎn)是,給每個(gè)設(shè)計(jì)因素應(yīng)有的考慮。

          13. 管理接口

          “UML User Guide”(Grady Booch,Ivar Jacobson和Jim Rumbaugh ,Addison Wesley, 1999)中指出,你應(yīng)該在開(kāi)發(fā)階段的早期就定義軟件模塊之間的接口。

          這有助于你的開(kāi)發(fā)人員全面理解軟件的設(shè)計(jì)結(jié)構(gòu)并取得一致意見(jiàn),讓各模塊開(kāi)發(fā)小組相對(duì)獨(dú)立的工作。一旦模塊的接口確定之后,模塊怎樣實(shí)現(xiàn)就不是很重要了。

          從根本上說(shuō),如果你不能夠定義你的模塊“從外部看上去會(huì)是什么樣子”,你肯定也不清楚模塊內(nèi)要實(shí)現(xiàn)什么。

          14. 走近路需要更長(zhǎng)的時(shí)間

          在軟件開(kāi)發(fā)中沒(méi)有捷徑可以走。

          縮短你的在需求分析上花的時(shí)間,結(jié)果只能是開(kāi)發(fā)出來(lái)的軟件不能滿足用戶的需求,必須被重寫(xiě)。

          在軟件建模上每節(jié)省一周,在將來(lái)的編碼階段可能會(huì)多花幾周時(shí)間,因?yàn)槟阍谌嫠伎贾熬蛣?dòng)手寫(xiě)程序。

          你為了節(jié)省一天的測(cè)試時(shí)間而漏掉了一個(gè)bug,在將來(lái)的維護(hù)階段,可能需要花幾周甚至幾個(gè)月的時(shí)間去修復(fù)。與其如此,還不如重新安排一下項(xiàng)目計(jì)劃。

          避免走捷徑,只做一次但要做對(duì)(do it once by doing it right)。

          15. 別信賴任何人

          產(chǎn)品和服務(wù)銷售公司不是你的朋友,你的大部分員工和高層管理人員也不是。

          大部分產(chǎn)品供應(yīng)商希望把你牢牢綁在他們的產(chǎn)品上,可能是操作系統(tǒng),數(shù)據(jù)庫(kù)或者某個(gè)開(kāi)發(fā)工具。

          大部分的顧問(wèn)和承包商只關(guān)心你的錢并不是你的工程(停止向他們付款,看一看他們會(huì)在周圍呆多長(zhǎng)時(shí)間)。

          大部分程序員認(rèn)為他們自己比其他人更優(yōu)秀,他們可能拋棄你設(shè)計(jì)的模型而用自己認(rèn)為更好的。

          只有良好的溝通才能解決這些問(wèn)題。

          要明確的是,不要只依靠一家產(chǎn)品或服務(wù)提供商,即使你的公司(或組織)已經(jīng)在建模、文檔和過(guò)程等方面向那個(gè)公司投入了很多錢。

          16. 證明你的設(shè)計(jì)在實(shí)踐中可行

          在設(shè)計(jì)的時(shí)候應(yīng)當(dāng)先建立一個(gè)技術(shù)原型, 或者稱為“端到端”原型。以證明你的設(shè)計(jì)是能夠工作的。

          你應(yīng)該在開(kāi)發(fā)工作的早期做這些事情,因?yàn)椋绻浖脑O(shè)計(jì)方案是不可行的,在編碼實(shí)現(xiàn)階段無(wú)論采取什么措施都于事無(wú)補(bǔ)。技術(shù)原型將證明你的設(shè)計(jì)的可行性,從而,你的設(shè)計(jì)將更容易獲得支持。

          17. 應(yīng)用已知的模式

          目前,我們有大量現(xiàn)成的分析和設(shè)計(jì)模式以及問(wèn)題的解決方案可以使用。

          一般來(lái)說(shuō),好的模型設(shè)計(jì)和開(kāi)發(fā)人員,都會(huì)避免重新設(shè)計(jì)已經(jīng)成熟的并被廣泛應(yīng)用的東西。http://www.ambysoft.com/processPatternsPage.html收藏了許多開(kāi)發(fā)模式的信息。

          18. 研究每個(gè)模型的長(zhǎng)處和弱點(diǎn)

          目前有很多種類的模型可以使用,如下圖所示。用例捕獲的是系統(tǒng)行為需求,數(shù)據(jù)模型則描述支持一個(gè)系統(tǒng)運(yùn)行所需要的數(shù)據(jù)構(gòu)成。你可能會(huì)試圖在用例中加入實(shí)際數(shù)據(jù)描述,但是,這對(duì)開(kāi)發(fā)者不是非常有用。同樣,數(shù)據(jù)模型對(duì)描述軟件需求來(lái)說(shuō)是無(wú)用的。每個(gè)模型在你建模過(guò)程中有其相應(yīng)的位置,但是,你需要明白在什么地方,什么時(shí)候使用它們。



          19. 在現(xiàn)有任務(wù)中應(yīng)用多個(gè)模型

          當(dāng)你收集需求的時(shí)候,考慮使用用例模型,用戶界面模型和領(lǐng)域級(jí)的類模型。

          當(dāng)你設(shè)計(jì)軟件的時(shí)候,應(yīng)該考慮制作類模型,順序圖、狀態(tài)圖、協(xié)作圖和最終的軟件實(shí)際物理模型。

          程序設(shè)計(jì)人員應(yīng)該慢慢意識(shí)到,僅僅使用一個(gè)模型而實(shí)現(xiàn)的軟件要么不能夠很好地滿足用戶的需求,要么很難擴(kuò)展。

          20. 教育你的聽(tīng)眾

          你花了很大力氣建立一個(gè)很成熟的系統(tǒng)模型,而你的聽(tīng)眾卻不能理解它們,甚至更糟-連為什么要先建立模型都不知道。那么你的工作是毫無(wú)意義的。

          教給你開(kāi)發(fā)人員基本的建模知識(shí);否則,他們會(huì)只看看你畫(huà)的漂亮圖表,然后繼續(xù)編寫(xiě)不規(guī)范的程序。

          另外, 你還需要告訴你的用戶一些需求建模的基礎(chǔ)知識(shí)。給他們解釋你的用例(uses case)和用戶界面模型,以使他們能夠明白你要表達(dá)地東西。當(dāng)每個(gè)人都能使用一個(gè)通用的設(shè)計(jì)語(yǔ)言的時(shí)候(比如UML-譯者注),你的團(tuán)隊(duì)才能實(shí)現(xiàn)真正的合作。

          21. 帶工具的傻瓜還是傻瓜

          你給我CAD/CAM工具,請(qǐng)我設(shè)計(jì)一座橋。但是,如果那座橋建成的話,我肯定不想當(dāng)?shù)谝粋€(gè)從橋上過(guò)的人,因?yàn)槲覍?duì)建筑一竅不通。

          使用一個(gè)很優(yōu)秀的CASE工具并不能使你成為一個(gè)建模專家,只能使你成為一個(gè)優(yōu)秀CASE工具的使用者。成為一個(gè)優(yōu)秀的建模專家需要多年的積累,不會(huì)是一周針對(duì)某個(gè)價(jià)值幾千美元工具的培訓(xùn)。一個(gè)優(yōu)秀的CASE工具是很重要,但你必須學(xué)習(xí)使用它,并能夠使用它設(shè)計(jì)它支持的模型。

          22. 理解完整的過(guò)程

          好的設(shè)計(jì)人員應(yīng)該理解整個(gè)軟件過(guò)程,盡管他們可能不是精通全部實(shí)現(xiàn)細(xì)節(jié)。

          軟件開(kāi)發(fā)是一個(gè)很復(fù)雜的過(guò)程,還記得《object-oriented software process》第36頁(yè)的內(nèi)容嗎?除了編程、建模、測(cè)試等你擅長(zhǎng)工作外,還有很多工作要做。

          好的設(shè)計(jì)者需要考慮全局。必須從長(zhǎng)遠(yuǎn)考慮如何使軟件滿足用戶需要,如何提供維護(hù)和技術(shù)支持等。

          23. 常做測(cè)試,早做測(cè)試

          如果測(cè)試對(duì)你的軟件來(lái)說(shuō)是無(wú)所謂的,那么你的軟件多半也沒(méi)什么必要被開(kāi)發(fā)出來(lái)。

          建立一個(gè)技術(shù)原型供技術(shù)評(píng)審使用,以檢驗(yàn)?zāi)愕能浖P汀?br />
          在軟件生命周期中,越晚發(fā)現(xiàn)的錯(cuò)誤越難修改,修改成本越昂貴。盡可能早的做測(cè)試是很值得的。

          24. 把你的工作歸檔

          不值得歸檔的工作往往也不值得做。歸檔你的設(shè)想,以及根據(jù)設(shè)想做出的決定;歸檔軟件模型中很重要但不很明顯的部分。 給每個(gè)模型一些概要描述以使別人很快明白模型所表達(dá)的內(nèi)容。

          25. 技術(shù)會(huì)變,基本原理不會(huì)

          如果有人說(shuō)“使用某種開(kāi)發(fā)語(yǔ)言、某個(gè)工具或某某技術(shù),我們就不需要再做需求分析,建模,編碼或測(cè)試”。不要相信,這只說(shuō)明他還缺乏經(jīng)驗(yàn)。拋開(kāi)技術(shù)和人的因素,實(shí)際上軟件開(kāi)發(fā)的基本原理自20世紀(jì)70年代以來(lái)就沒(méi)有改變過(guò)。你必須還定義需求,建模,編碼,測(cè)試,配置,面對(duì)風(fēng)險(xiǎn),發(fā)布產(chǎn)品,管理工作人員等等。

          軟件建模技術(shù)是需要多年的實(shí)際工作才能完全掌握的。好在你可以從我的建議開(kāi)始,完善你們自己的軟件開(kāi)發(fā)經(jīng)驗(yàn)。

          以雞湯開(kāi)始,加入自己的蔬菜。然后,開(kāi)始享受你自己的豐盛晚餐吧。







          程序員的10種級(jí)別
          來(lái)源:http://www.javaresearch.org/faq/thread.jsp?column=723&thread=46872
          發(fā)表時(shí)間: 2006-02-20 16:22
          ?作者:jshao
          頭銜: JR元老專家
          程序員的10種級(jí)別?
          ??
          第一級(jí):神人,天資過(guò)人而又是技術(shù)狂熱者同時(shí)還擁有過(guò)人的商業(yè)頭腦,高瞻遠(yuǎn)矚,技術(shù)過(guò)人,大器也。如丁磊,求伯君。?

          第二級(jí):高人,有天賦,技術(shù)過(guò)人但沒(méi)有過(guò)人的商業(yè)頭腦,通常此類人不是頂尖黑客就是技術(shù)總監(jiān)之流。?

          第三級(jí):牛人,技術(shù)精湛,熟悉行業(yè)知識(shí),敢于創(chuàng)新,有自己的公司和軟件產(chǎn)品。?

          第四級(jí):工頭,技術(shù)精湛,有領(lǐng)導(dǎo)團(tuán)隊(duì)的能力,此類人大公司項(xiàng)目經(jīng)理居多。?

          第五級(jí):技術(shù)工人,技術(shù)精湛,熟悉行業(yè)知識(shí)但領(lǐng)導(dǎo)能力欠加,此類人大多為系分人員或資深程序員,基本上桀驁不遜,自視清高,不愿于一般技術(shù)人員為伍,在論壇上基本以高手面目出現(xiàn)。?

          第六級(jí):熟練工人,技術(shù)有廣度無(wú)深度,喜歡鉆研但淺嘗輒止。此類人大多為老程序員,其中一部分喜歡利用工具去查找網(wǎng)上有漏洞的服務(wù)器,干點(diǎn)壞事以獲取成績(jī)感。如果心情好,在論壇上他們會(huì)回答菜鳥(niǎo)的大部分問(wèn)題。此級(jí)別為軟件業(yè)苦力的重要組成部分。?

          第七級(jí):工人,某些技術(shù)較熟練但缺乏深度和廣度,此類人大多為程序員級(jí)別,經(jīng)常在論壇上提問(wèn)偶爾也回答菜鳥(niǎo)的問(wèn)題。為軟件產(chǎn)業(yè)苦力的主要組成部分。?

          第八級(jí):菜鳥(niǎo),入門時(shí)間不長(zhǎng),在論壇上會(huì)反復(fù)提問(wèn)很初級(jí)的問(wèn)題,有一種唐僧的精神。雖然招人煩但基本很可愛(ài)。只要認(rèn)真鉆研,一兩年后就能升級(jí)到上一層。?

          第九級(jí):大忽悠,利用中國(guó)教育的弊病,頂著一頂高學(xué)歷的帽子,在小公司里混個(gè)軟件部經(jīng)理,設(shè)計(jì)不行,代碼不行,只會(huì)胡亂支配下屬,拍領(lǐng)導(dǎo)馬屁,在領(lǐng)導(dǎo)面前胡吹海侃,把自己打扮成技術(shù)高手的模樣。把勾心斗角的辦公室文化引入技術(shù)部門,實(shí)在齷齪!?

          第十級(jí):驢或傻X,會(huì)寫(xiě)SELECT語(yǔ)句就說(shuō)自己精通ORALCE,連寄存器有幾種都不知道就說(shuō)自己懂匯編,建議全部送到日本當(dāng)IT產(chǎn)業(yè)工人,掙了日本人的錢還嚴(yán)重打擊日本的軟件業(yè)!?

          其中又以前兩級(jí)和后兩級(jí)最為難得,其余級(jí)別只要努力,皆有可能達(dá)到。
          ?

          JAVA高手的基礎(chǔ)素養(yǎng)
          來(lái)源:http://www.javaresearch.org/faq/thread.jsp?column=723&thread=38473
          發(fā)表時(shí)間: 2005-10-07 22:25
          作者: xuyy_cn
          頭銜: JR元老專家
          回復(fù)
          世界上并沒(méi)有成為高手的捷徑,但一些基本原則是可以遵循的。??

          1、扎實(shí)的基礎(chǔ)??
            數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)、編譯原理,這些是所有計(jì)算機(jī)科學(xué)的基礎(chǔ),如果不掌握它們,很難寫(xiě)出高水平的程序。程序人人都會(huì)寫(xiě),但當(dāng)你發(fā)現(xiàn)寫(xiě)到一定程度很難再提高的時(shí)候,就應(yīng)該想想是不是要回過(guò)頭來(lái)學(xué)學(xué)這些最基本的理論。不要一開(kāi)始就去學(xué)OOP,即使你再精通OOP,遇到一些基本算法的時(shí)候可能也會(huì)束手無(wú)策。因此多讀一些計(jì)算機(jī)基礎(chǔ)理論方面的書(shū)籍是非常有必要的。??

          2、豐富的想像力??
            不要拘泥于固定的思維方式,遇到問(wèn)題的時(shí)候要多想幾種解決問(wèn)題的方案,試試別人從沒(méi)想過(guò)的方法。豐富的想像力是建立在豐富的知識(shí)的基礎(chǔ)上,除計(jì)算機(jī)以外,多涉獵其他的學(xué)科,比如天文、物理、數(shù)學(xué)等等。開(kāi)闊的思維對(duì)程序員來(lái)說(shuō)很重要。??

          3、最簡(jiǎn)單的是最好的??
          ????? 這也許是所有科學(xué)都遵循的一條準(zhǔn)則,復(fù)雜的質(zhì)能轉(zhuǎn)換原理在愛(ài)因斯坦眼里不過(guò)是一個(gè)簡(jiǎn)單得不能再簡(jiǎn)單的公式:E=mc2。簡(jiǎn)單的方法更容易被人理解,更容易實(shí)現(xiàn),也更容易維護(hù)。遇到問(wèn)題時(shí)要優(yōu)先考慮最簡(jiǎn)單的方案,只有簡(jiǎn)單方案不能滿足要求時(shí)再考慮復(fù)雜的方案。??

          4、不鉆牛角尖??
            當(dāng)你遇到障礙的時(shí)候,不妨?xí)簳r(shí)遠(yuǎn)離電腦,看看窗外的風(fēng)景,聽(tīng)聽(tīng)輕音樂(lè),和朋友聊聊天。當(dāng)我遇到難題的時(shí)候會(huì)去玩游戲,當(dāng)負(fù)責(zé)游戲的那部分大腦細(xì)胞極度亢奮的時(shí)候,負(fù)責(zé)編程的那部分大腦細(xì)胞就得到了充分的休息。當(dāng)重新開(kāi)始工作的時(shí)候,我會(huì)發(fā)現(xiàn)那些難題現(xiàn)在竟然可以迎刃而解。??

          5、對(duì)答案的渴求??
            人類自然科學(xué)的發(fā)展史就是一個(gè)渴求得到答案的過(guò)程,即使只能知道答案的一小部分也值得我們?nèi)ジ冻觥V灰銏?jiān)定信念,一定要找到問(wèn)題的答案,你才會(huì)付出精力去探索,即使最后沒(méi)有得到答案,在過(guò)程中你也會(huì)學(xué)到很多東西。??

          6、多與別人交流??
            三人行必有我?guī)煟苍S在一次和別人不經(jīng)意的談話中,就可以迸出靈感的火花。多上上網(wǎng),看看別人對(duì)同一問(wèn)題的看法,會(huì)給你很大的啟發(fā)。??

          7、良好的編程風(fēng)格??
            注意養(yǎng)成良好的習(xí)慣,代碼的縮進(jìn)編排,變量的命名規(guī)則要始終保持一致。大家都知道如何排除代碼中錯(cuò)誤,卻往往忽視了對(duì)注釋的排錯(cuò)。注釋是程序的一個(gè)重要組成部分,它可以使你的代碼更容易理解,而如果代碼已經(jīng)清楚地表達(dá)了你的思想,就不必再加注釋了,如果注釋和代碼不一致,那就更加糟糕。??

          8、韌性和毅力??
            這也許是“高手”和一般程序員最大的區(qū)別。高手們并不是天才,他們是在無(wú)數(shù)個(gè)日日夜夜中磨煉出來(lái)的。成功能給我們帶來(lái)無(wú)比的喜悅,但過(guò)程卻是無(wú)比的枯燥乏味。你不妨做個(gè)測(cè)試,找個(gè)10000以內(nèi)的素?cái)?shù)表,把它們?nèi)汲聛?lái),然后再檢查三遍,如果能夠不間斷地完成這一工作,你就可以滿足這一條




          軟件高手是這樣練成的
          來(lái)源:http://www.javaresearch.org/faq/thread.jsp?column=723&thread=39051
          發(fā)表時(shí)間: 2005-10-15 00:53
          作者:xuyy_cn
          頭銜: JR元老專家
          ???? 中國(guó)人大都喜歡用武俠小說(shuō)來(lái)比較軟件開(kāi)發(fā),但是在實(shí)戰(zhàn)武功中,只有葵花寶典才是最厲害的,也只有掌握了葵花寶典,才能稱為“不敗”。?

          ???? 但什么才是軟件開(kāi)發(fā)的葵花寶典??

            讓我們先從一些現(xiàn)象出發(fā)。我們的前提是,軟件開(kāi)發(fā)是一項(xiàng)智力密集型勞動(dòng)。對(duì)于智力密集型勞動(dòng),我們觀察到的現(xiàn)象是,個(gè)體的表現(xiàn)差異很大,團(tuán)隊(duì)的表現(xiàn)差異很大,組織的表現(xiàn)差異很大,國(guó)家的表現(xiàn)差異很大。這不象體力占主要的勞動(dòng),象百米王跑百米的速度也僅比我快50%。但在棋類運(yùn)動(dòng)中,一個(gè)高手可以車輪戰(zhàn)數(shù)位低手,而且毫無(wú)例外地將他們一一擊敗!?

            這些智力運(yùn)動(dòng)員表現(xiàn)出的特點(diǎn)是,計(jì)算精確而且速度快。其行為很象東方不敗。雖然關(guān)于葵花寶典的傳說(shuō)很多,但最準(zhǔn)確的描述只有一個(gè)字“快”。東方不敗已經(jīng)快到了嚇人的地步。就象卡斯帕羅夫已快到了深藍(lán)的地步。?

            有一則關(guān)于物理學(xué)家玻爾的軼事,有一次玻爾在普林斯頓大學(xué)聽(tīng)兩個(gè)年青教授演講他們的工作成果。期間玻爾突然發(fā)言說(shuō),如果照你們的研究算下去,會(huì)得到一個(gè)很有意思的推論。結(jié)果兩個(gè)年青教授回去計(jì)算了兩天,果然得出了同樣的結(jié)論。玻爾是如何做到這樣快的??

            在軟件開(kāi)發(fā)中,我們同樣注意到這樣一種高手,他們可以每天寫(xiě)出一千行左右的高品質(zhì)代碼。他們可以運(yùn)用已有的一些軟件包,迅速完成一個(gè)新的產(chǎn)品。他們可以在很短的時(shí)間內(nèi),學(xué)會(huì)一項(xiàng)新的程序語(yǔ)言或是新技術(shù)。他們表現(xiàn)出一種神奇的速度。?

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

            快并不意味著不準(zhǔn)或品質(zhì)差。快與品質(zhì)并不矛盾。?

            高手的快,其實(shí)包含著很高的品質(zhì)在其中。如果你因?yàn)楦呤值目欤唾|(zhì)疑其品質(zhì),那就相當(dāng)于在問(wèn):東方不敗出手那么快,會(huì)不會(huì)刺不準(zhǔn)?東方不敗并不滿足于刺死對(duì)手,他會(huì)在對(duì)手身上刺朵花。他把殺人變成了藝術(shù)。準(zhǔn)確來(lái)說(shuō),他真正的興趣不在殺人,而在于藝術(shù)。?

            退一步說(shuō),就算東方不敗第一擊有點(diǎn)偏差,他稍作修正后,馬上跟上的第二第三擊,也會(huì)擊中他想擊中的地方。在武功差的對(duì)手劍還沒(méi)撥出來(lái)的時(shí)候,他已殺死對(duì)方并刺上了一朵花。?

            所以真正的軟件高手,他并不滿足于他的代碼能有效地工作了,他認(rèn)為編程是藝術(shù),并醉心于其中。在低手能寫(xiě)出一個(gè)版本的時(shí)間里,他已經(jīng)寫(xiě)出了第十版。其品質(zhì)當(dāng)然不可同日而語(yǔ)。就象一個(gè)九段棋手,在給定的時(shí)間里,他能計(jì)算十種可能,并將每種可能計(jì)算到100手之后,從中選擇一種最有利的下法。低手豈有茍全的機(jī)會(huì)??

            高手寫(xiě)軟件總是不停地在重構(gòu)(refactoring)。高手喜歡迭代式開(kāi)發(fā)。高手說(shuō),增量就是打補(bǔ)丁,迭代就是推倒重來(lái)。對(duì)于軟件這種東西,寫(xiě)一遍它可能ok(做到這一點(diǎn)也不容易),寫(xiě)十遍就是一個(gè)偉大的產(chǎn)品,再多寫(xiě)一遍它就更偉大些。?

            高手快的訣竅在于他很熟悉各種東西。高手看書(shū)很快,因?yàn)槊恳槐拘聲?shū)里,值得他好好看的新技術(shù)只有一兩章的內(nèi)容。他能迅速看完,并準(zhǔn)確領(lǐng)會(huì)這本書(shū)的中心思想和價(jià)值。而對(duì)于一個(gè)新手,每句話都是新的,他都需要去理解,每一段例子,他都需要去試。?

            很少看到一種100%全新的技術(shù)或理論。就象java?language?specification里說(shuō)的,java沒(méi)有使用任何新技術(shù),用的都是業(yè)界久經(jīng)考驗(yàn)的技術(shù)。對(duì)于高手來(lái)說(shuō),那些技術(shù)都是他所熟悉的。自然,很快他就從一個(gè)c++高手變成了java高手。如果一個(gè)編程新手學(xué)java,學(xué)兩年也不如一個(gè)高手學(xué)兩個(gè)月的。高手學(xué)新東西快。?

            高手寫(xiě)代碼速度快。統(tǒng)計(jì)結(jié)果說(shuō),人均每人月的有效代碼速度大概是300至400行。但那是業(yè)界平均生產(chǎn)效率。對(duì)于高手來(lái)說(shuō),這個(gè)數(shù)字太低了。每天寫(xiě)300至400行是完全有可能的。因?yàn)樵趯?xiě)代碼時(shí),所有知識(shí)都已具備,已經(jīng)沒(méi)有任何需要他多花時(shí)間的事情了。他甚至很少需要debug。?

            高手重用代碼的能力很強(qiáng),熟悉新的api的速度很快。這也是因?yàn)椋?jīng)使用過(guò)很多的api,重用過(guò)很多的代碼。他知道哪些是可用的,哪些有缺陷。他既過(guò)用qt,也用過(guò)gtk+,也用過(guò)windows?api?&?mfc,也用過(guò)awt?&?swing。新的api對(duì)他來(lái)說(shuō),也是老熟人。?

          ????? 高手喜歡用輕量級(jí)的工具,象vi,notepad,最多到ultraedit這樣復(fù)雜的。高手用這種工具寫(xiě)出很多的東西。這些工具就象東方不敗的針。那根針已具有神奇的魔力,有時(shí)候它可以當(dāng)激光槍來(lái)用。?

            對(duì)于一些重量級(jí)的工具,高手雖不常用,但一經(jīng)使出也威力大于常人。如果讓東方不敗用劍,最厲害的劍術(shù)名家也會(huì)敗得很難看。高手其實(shí)用過(guò)很多的重量級(jí)工具,而且深知其優(yōu)缺點(diǎn)。所以使出來(lái),就會(huì)把威力發(fā)揮到最大,而把缺陷減少到最小。而低手則不然,總是把缺陷加以大大的發(fā)揚(yáng)而渾不知其精髓何在。就象很多人學(xué)用uml、rup、xp、design?pattern那樣。?

            高手所學(xué)博雜且融會(huì)貫通。高手做什么都快,當(dāng)?shù)褪诌€在一愁莫展的時(shí)候,高手已經(jīng)圓滿解決問(wèn)題,去干別的事去了。?

            相信你有一點(diǎn)點(diǎn)想成為高手了。但是有一個(gè)問(wèn)題亟等解決,那就是“欲練神功,必先自宮”的問(wèn)題。這一點(diǎn)其實(shí)是有比喻意義的。就是說(shuō),你必需拋棄一些世俗的人們很看重的東西。有詩(shī)為證:?

            世人都曉高手好,只是寂寞受不了?
            世人都曉高手好,?只有名利忘不了?
            世人都曉高手好,?只有金錢一定要?
            世人都曉高手好,?天下美女都要抱?
          ??????? 世人都曉高手好,?不寫(xiě)代碼最最好?

            高手的武功不是一朝一夕練成的。還記得玻爾那件軼事嗎,玻爾回答說(shuō),他年青時(shí)也計(jì)算過(guò)很多的問(wèn)題。在很多計(jì)算的基礎(chǔ)上,高手能培養(yǎng)起一種感覺(jué)。高手不寫(xiě)代碼就能做設(shè)計(jì)是因?yàn)樗郧皩?xiě)了很多的代碼。而且他們會(huì)保持寫(xiě)代碼,以保證自已的水平不下降。想一想九段高手是如何練成的。最難做到的是能忍受十年磨一劍的寂寞。別人在父母那里撒嬌時(shí),他們?cè)谝慌杂霉ΑJ昴ヒ粍Γ瑒统闪藮|方不敗的針。?

            在你下定決心要做高手之后,也就是下定決心拋棄那些世俗的追求之后,也就是你下決心忍受那些來(lái)自于庸俗的人的白眼、攻擊和謾罵之后,你就具備了練成神功的必要條件。?

            事實(shí)上其實(shí)你不必一開(kāi)始就練神功,一開(kāi)始大家可能是為了錢,房子,汽車,美女才編程序的,然而后來(lái)藝術(shù)就從中產(chǎn)生了。那時(shí)高手就不再關(guān)注那些東西了。卓別林曾說(shuō)過(guò),他開(kāi)始進(jìn)入那個(gè)圈子也是為了錢,后來(lái)藝術(shù)就從中產(chǎn)生了。當(dāng)然,也有人一開(kāi)始是為了藝術(shù),后來(lái)變成為了錢。?

            所謂三十而立,就是說(shuō)到了三十,你找到了你的真愛(ài),值得用一生去追求的那種。比如說(shuō)有的人到了三十認(rèn)為這一輩子應(yīng)該賺盡可能多的錢,這也沒(méi)什么不好,也可以把賺錢本身變成一種藝術(shù),所謂資本運(yùn)作是也。所以在三十以前,有些私心雜念沒(méi)什么。三十以后還這樣是可恥的。而我,想做一個(gè)程序員。?

            每個(gè)人做自己最喜歡的事。這個(gè)世界需要程序員,也需要資本運(yùn)作。所有真正的程序員,他最喜歡的事是編程和他自已。如果他后來(lái)去做ceo去了,不再編程,只說(shuō)明他本來(lái)不是一個(gè)真正的程序員。?

            在成為高手的路上,要有熱情,要循序漸進(jìn),要持之以恒。?

            要靠自己,書(shū)要快快地看。要試圖迅速理解其主旨。其實(shí)你快快看所接受的信息量,與慢慢看接受的差不多。能明白多少很大程度上取決于你的功底。以后用到再回過(guò)頭來(lái)看。一本對(duì)你來(lái)說(shuō)新東西太多的書(shū),不要指望看一次就全理解吸收。就象很多功力不夠的人看design?patterns那本書(shū)一樣。慢慢看還不如找到多種?信息來(lái)源,都快快看一遍。對(duì)于一個(gè)完全陌生的領(lǐng)域,只看一本書(shū)很遠(yuǎn)遠(yuǎn)不夠的。?

          ????? 要靠自已,事要快快做。有一個(gè)朋友,幾年前我介紹他去玩玩linux,他也表示想玩,但他現(xiàn)在還沒(méi)碰過(guò)。他失去了很多機(jī)會(huì)。

          ???? 平時(shí)要有意識(shí)提高自己寫(xiě)代碼的速度,其實(shí)你一天寫(xiě)15行有效代碼,與你寫(xiě)50行有效代碼,其品質(zhì)是差不多的。你應(yīng)該把那些業(yè)界平均水平拋諸腦后,把超越自己做為唯一目標(biāo)。等到你寫(xiě)了很多各式各樣的代碼,你的水平就不一般了。一個(gè)老師曾向我介紹他的學(xué)英語(yǔ)的決竅,他說(shuō)你去啃原版小說(shuō),啃到50本,就和一般人有很大距離了。就是這個(gè)理。如果你寫(xiě)得太慢,怎么能寫(xiě)得多?水平怎么能提高??

            要靠自己,學(xué)很多別人怕學(xué)的東西。低手總會(huì)說(shuō):這么多東西怎么學(xué)得過(guò)來(lái)啊。于是就少學(xué)或不學(xué)。這樣就成不了高手了。高手有非常廣的知識(shí)面,有很豐富的經(jīng)驗(yàn)。知道很多低手不知道的事。玩過(guò)很多低手聽(tīng)都沒(méi)聽(tīng)過(guò)的東西。?

            要靠自己,努力滿足客戶的各種需求。個(gè)人技能是在滿足客戶的各種需求的過(guò)程中提高的。比如你喜歡用delphi,客戶說(shuō)一定要用vb,那你就答應(yīng)他,然后把自己培養(yǎng)成為vb的高手。用戶的需求看似**,但對(duì)你是一個(gè)機(jī)會(huì)。?

            怎樣才能做到看書(shū)快,寫(xiě)代碼快,學(xué)新東西快,一個(gè)顯而易見(jiàn)的途徑就是將工作并行化。你在一臺(tái)機(jī)器上make時(shí),同時(shí)可以在看別的文檔和聊天。對(duì)于計(jì)算機(jī)是這樣,對(duì)人也是這樣。如果你只能串行地處理問(wèn)題,你的速度將提高有限。你的大腦有很大潛力可挖,它應(yīng)該是一個(gè)多任務(wù)分時(shí)系統(tǒng)。努力減少它idle的時(shí)間。搞經(jīng)濟(jì)的samuelson被人稱為human?brain?main?frame,可見(jiàn)他的大腦有多快。?

            讓你的思維快起來(lái),你就會(huì)區(qū)別于那些反應(yīng)遲鈍的人。如果你不能讓人生的道路變長(zhǎng),就讓它變寬。這世界變化快,需要你變得比它快才行。?

            這樣加快并不會(huì)讓你短命,相反,你有更多的時(shí)間來(lái)享受生活和鍛煉身體。你的生活將更有品質(zhì),更豐富,更有意義。面對(duì)變化,你將立于不敗之地。我們都是和自己賽跑的人,需要跑得比昨天的自己更快。?

          posted on 2007-03-03 17:51 crazycy 閱讀(863) 評(píng)論(0)  編輯  收藏 所屬分類: 其它

          主站蜘蛛池模板: 阜城县| 南投市| 安吉县| 墨竹工卡县| 贵溪市| 涪陵区| 平谷区| 武汉市| 合江县| 洞头县| 沂源县| 新密市| 蒲城县| 普兰县| 临高县| 铜梁县| 于都县| 东丰县| 崇文区| 兴文县| 蚌埠市| 家居| 林周县| 福安市| 且末县| 上饶县| 连山| 大安市| 南丹县| 双柏县| 怀来县| 芦溪县| 上思县| 阿克| 奉新县| 普兰店市| 柳江县| 义马市| 黄梅县| 蚌埠市| 车致|