2009年3月21日

          “又是一年畢業(yè)時(shí) ”,看到一批批學(xué)子離開人生的象牙塔,走上各自的工作崗位;想想自己也曾經(jīng)意氣風(fēng)發(fā)、躊躇滿志,不覺感嘆萬千……本文是自己工作6年的經(jīng)歷沉淀或者經(jīng)驗(yàn)提煉,希望對所有的軟件工程師們有所幫助,早日實(shí)現(xiàn)自己的人生目標(biāo)。本文主要是關(guān)于軟件開發(fā)人員如何提高自己的軟件專業(yè)技術(shù)方面的具體建議,前面幾點(diǎn)旨在確定大的方向,算是廢話吧。
          '\ i'E*o5?5g6]#g(y)n8L1、分享第一條經(jīng)驗(yàn):“學(xué)歷代表過去、能力代表現(xiàn)在、學(xué)習(xí)力代表未來。”其實(shí)這是一個(gè)來自國外教育領(lǐng)域的一個(gè)研究結(jié)果。相信工作過幾年、十幾年的朋友對這個(gè)道理有些體會吧。但我相信這一點(diǎn)也很重要:“重要的道理明白太晚將抱憾終生!”所以放在每一條,讓剛剛畢業(yè)的朋友們早點(diǎn)看到哈! TechWeb-技術(shù)社區(qū)7N9{'t%a+M
          2、一定要確定自己的發(fā)展方向,并為此目的制定可行的計(jì)劃。不要說什么,“我剛畢業(yè),還不知道將來可能做什么?”,“跟著感覺走,先做做看”。因?yàn)椋@樣的觀點(diǎn)會通過你的潛意識去暗示你的行為無所事事、碌碌無為。一直做技術(shù),將來成為專家級人物?向管理方向走,成為職業(yè)經(jīng)理人?先熟悉行業(yè)和領(lǐng)域,將來自立門戶?還是先在行業(yè)里面混混,過幾年轉(zhuǎn)行做點(diǎn)別的?這很重要,它將決定你近幾年、十年內(nèi)“做什么事情才是在做正確的事情!”。 8R(X1}1g R/D$Z*K$y5U
          3、軟件開發(fā)團(tuán)隊(duì)中,技術(shù)不是萬能的,但沒有技術(shù)是萬萬不能的!在技術(shù)型團(tuán)隊(duì)中,技術(shù)與人品同等重要,當(dāng)然長相也比較重要哈,尤其在MM比較多的團(tuán)隊(duì)中。在軟件項(xiàng)目團(tuán)隊(duì)中,技術(shù)水平是受人重視和尊重的重要砝碼。無論你是做管理、系統(tǒng)分析、設(shè)計(jì)、編碼,還是產(chǎn)品管理、測試、文檔、實(shí)施、維護(hù),多少你都要有技術(shù)基礎(chǔ)。算我孤陋寡聞,我還真沒有親眼看到過一個(gè)外行帶領(lǐng)一個(gè)軟件開發(fā)團(tuán)隊(duì)成功地完成過軟件開發(fā)項(xiàng)目,哪怕就一個(gè),也沒有看到。倒是曾經(jīng)看到過一個(gè)“高學(xué)歷的牛人”(非技術(shù)型)帶一堆人做完過一個(gè)項(xiàng)目,項(xiàng)目交付的第二天,項(xiàng)目組成員扔下一句“再也受不了啦!”四分五裂、各奔東西。那個(gè)項(xiàng)目的“成功度”大家可想而知了。 tech.techweb.com.cn&F,q9R;K/u.@
          4、詳細(xì)制定自己軟件開發(fā)專業(yè)知識學(xué)習(xí)計(jì)劃,并注意及時(shí)修正和調(diào)整(軟件開發(fā)技術(shù)變化實(shí)在太快)。請牢記:“如果一個(gè)軟件開發(fā)人員在1、2年內(nèi)都沒有更新過自己的知識,那么,其實(shí)他已經(jīng)不再屬于這個(gè)行業(yè)了。”不要告訴自己沒有時(shí)間。來自時(shí)間管理領(lǐng)域的著名的“三八原則”告誡我們:另外的那8小時(shí)如何使用將決定你的人生成敗!本人自畢業(yè)以來,平均每天實(shí)際學(xué)習(xí)時(shí)間超過2小時(shí)。 +j&G1B p7U/? g
          5、書籍是人類進(jìn)步的階梯,對軟件開發(fā)人員尤其如此。書籍是學(xué)習(xí)知識的最有效途徑,不要過多地指望在工作中能遇到“世外高人”,并不厭其煩地教你。對于花錢買書,我個(gè)人經(jīng)驗(yàn)是:千萬別買國內(nèi)那幫人出的書!我買的那些家伙出的書,100%全部后悔了,無一本例外。更氣憤的是,這些書在二手市場的地?cái)偵隙己茈y賣掉。“擁有書籍并不表示擁有知識;擁有知識并不表示擁有技能;擁有技能并不表示擁有文化;擁有文化并不表示擁有智慧。”只有將書本變成的自己智慧,才算是真正擁有了它。
          ,U5p1B&q9s4u程序開發(fā),操作系統(tǒng),服務(wù)器,源碼下載,Linux,Unix,BSD,PHP,Apach,asp,下載,源碼,黑客,安全,技術(shù)社區(qū),技術(shù)論壇6、不要僅局限于對某項(xiàng)技術(shù)的表面使用上,哪怕你只是偶爾用一、二次。“對任何事物不究就里”是任何行業(yè)的工程師所不應(yīng)該具備的素質(zhì)。開發(fā)Windows應(yīng)用程序,看看Windows程序的設(shè)計(jì)、加載、執(zhí)行原理,分析一下PE文件格式,試試用SDK開發(fā)從頭開發(fā)一個(gè)Windows應(yīng)用程序;用VC++、 Delphi、Java、.Net開發(fā)應(yīng)用程序,花時(shí)間去研究一下MFC、VCL、J2EE、.Net它們框架設(shè)計(jì)或者源碼;除了會用J2EE、 JBoss、Spring、Hibernate, http://www.bt285.cn 等等優(yōu)秀的開源產(chǎn)品或者框架,抽空看看大師們是如何抽象、分析、設(shè)計(jì)和實(shí)現(xiàn)那些類似問題的通用解決方案的。試著這樣做做,你以后的工作將會少遇到一些讓你不明就里、一頭霧水的問題,因?yàn)椋芏鄸|西你“知其然且知其所以然”!
          $Z.F7B.I2u1X7、在一種語言上編程,但別為其束縛了思想。“代碼大全”中說:“深入一門語言編程,不要浮于表面”。深入一門語言開發(fā)還遠(yuǎn)遠(yuǎn)不足,任何編程語言的存在都有其自身的理由,所以也沒有哪門語言是“包治百病”的“靈丹妙藥”。編程語言對開發(fā)人員解決具體問題的思路和方式的影響與束縛的例子俯拾皆是。我的經(jīng)驗(yàn)是:用面對對象工具開發(fā)某些關(guān)鍵模塊時(shí),為什么不可以借鑒C、C51、匯編的模塊化封裝方式?用傳統(tǒng)的桌面開發(fā)工具(目前主要有VC++、Delphi)進(jìn)行系統(tǒng)體統(tǒng)結(jié)構(gòu)設(shè)計(jì)時(shí),為什么不可以參考來自Java社區(qū)的IoC、AOP設(shè)計(jì)思想,甚至借鑒像Spring、Hibernate、JBoss等等優(yōu)秀的開源框架?在進(jìn)行類似于實(shí)時(shí)通信、數(shù)據(jù)采集等功能的設(shè)計(jì)、實(shí)現(xiàn)時(shí),為什么不可以引用來自實(shí)時(shí)系統(tǒng)、嵌入式系統(tǒng)的優(yōu)秀的體系框架與模式?為什么一切都必須以個(gè)人、團(tuán)隊(duì)在當(dāng)然開發(fā)語言上的傳統(tǒng)或者經(jīng)驗(yàn)來解決問題???“他山之石、可以攻玉”。 程序開發(fā),操作系統(tǒng),服務(wù)器,源碼下載,Linux,Unix,BSD,PHP,Apach,asp,下載,源碼,黑客,安全,技術(shù)社區(qū),技術(shù)論壇:q8~7X.v'p&B/S
          8、養(yǎng)成總結(jié)與反思的習(xí)慣,并有意識地提煉日常工作成果,形成自己的個(gè)人源碼庫、解決某類問題的通用系統(tǒng)體系結(jié)構(gòu)、甚至進(jìn)化為框架。眾所周知,對軟件開發(fā)人員而言,有、無經(jīng)驗(yàn)的一個(gè)顯著區(qū)別是:無經(jīng)驗(yàn)者完成任何任務(wù)時(shí)都從頭開始,而有經(jīng)驗(yàn)者往往通過重組自己的可復(fù)用模塊、類庫來解決問題(其實(shí)這個(gè)結(jié)論不應(yīng)該被局限在軟件開發(fā)領(lǐng)域、可以延伸到很多方面)。這并不是說,所有可復(fù)用的東西都必須自己實(shí)現(xiàn),別人成熟的通過測試的成果也可以收集、整理、集成到自己的知識庫中。但是,最好還是自己實(shí)現(xiàn),這樣沒有知識產(chǎn)權(quán)、版權(quán)等問題,關(guān)鍵是自己實(shí)現(xiàn)后能真正掌握這個(gè)知識點(diǎn),擁有這個(gè)技能。
          9M2s*m+V.W"?*[*W3v)l+O9、理論與實(shí)踐并重,內(nèi)外雙修。工程師的內(nèi)涵是:以工程師的眼光觀察、分析事物和世界。一個(gè)合格的軟件工程師,是真正理解了軟件產(chǎn)品的本質(zhì)及軟件產(chǎn)品研發(fā)的思想精髓的人(個(gè)人觀點(diǎn)、歡迎探討)。掌握軟件開發(fā)語言、應(yīng)用語言工具解決工作中的具體問題、完成目標(biāo)任務(wù)是軟件工程師的主要工作,但從軟件工程師這個(gè)角度來看,這只是外在的東西,并非重要的、本質(zhì)的工作。學(xué)習(xí)、掌握軟件產(chǎn)品開發(fā)理論知識、軟件開發(fā)方法論,并在實(shí)踐中理解、應(yīng)用軟件產(chǎn)品的分析、設(shè)計(jì)、實(shí)現(xiàn)思想來解決具體的軟件產(chǎn)品研發(fā)問題,才是真正的軟件工程師的工作。站在成熟理論與可靠方法論的高度思考、分析、解決問題,并在具體實(shí)踐中驗(yàn)證和修正這些思想與方式,最終形成自己的理論體系和實(shí)用方法論。
          6l)d+H,S7~(B+`10、心態(tài)有多開放,視野就有多開闊。不要抱著自己的技術(shù)和成果,等到它們都已經(jīng)過時(shí)變成垃圾了,才拿出來丟人現(xiàn)眼。請及時(shí)發(fā)布自己的研究成果:開發(fā)的產(chǎn)品、有創(chuàng)意的設(shè)計(jì)或代碼,公布出來讓大家交流或者使用,你的成果才有進(jìn)化和升華的機(jī)會。想想自己2000年間開發(fā)的那些Windows系統(tǒng)工具,5、6年之后的今天,還是那個(gè)樣子,今天流行的好多Windows系統(tǒng)工具都比自己的晚,但進(jìn)化得很好,且有那么多用戶在使用。并且,不要保守自己的技術(shù)和思想,盡可能地與人交流與分享,或者傳授給開發(fā)團(tuán)隊(duì)的成員。“與人交換蘋果之后,每個(gè)人還是只有一個(gè)蘋果;但交換思想之后,每個(gè)人都擁有兩種思想”,道理大家都懂,但有多少人真正能做到呢? :n4K*z,@0l#t$?&]"r
          11、盡量參加開源項(xiàng)目的開發(fā)、或者與朋友共同研制一些自己的產(chǎn)品,千萬不要因?yàn)闆]有錢賺而不做。網(wǎng)絡(luò)早已不再只是“虛擬世界”,網(wǎng)上有很多的開源項(xiàng)目、合作開發(fā)項(xiàng)目、外包項(xiàng)目,這都是涉獵工作以外的知識的絕好機(jī)會,并且能夠結(jié)識更廣的人緣。不要因?yàn)楣ぷ魇亲鯡RP,就不去學(xué)習(xí)和了解嵌入式、實(shí)時(shí)、通信、網(wǎng)絡(luò)等方面的技術(shù),反過來也是一樣。如果當(dāng)別人拿著合同找你合作,你卻這也不會,那也不熟時(shí),你將后悔莫及。
          &_8[,U&x'N4{12、書到用時(shí)方恨少,不要將自己的知識面僅僅局限于技術(shù)方面。諾貝爾經(jīng)濟(jì)學(xué)獎(jiǎng)得主西蒙教授的研究結(jié)果表明: “對于一個(gè)有一定基礎(chǔ)的人來說,他只要真正肯下功夫,在6個(gè)月內(nèi)就可以掌握任何一門學(xué)問。”教育心理學(xué)界為感謝西蒙教授的研究成果,故命名為西蒙學(xué)習(xí)法。可見,掌握一門陌生的學(xué)問遠(yuǎn)遠(yuǎn)沒有想象的那么高難、深?yuàn)W。多方吸取、廣泛涉獵。極力夯實(shí)自己的影響圈、盡量擴(kuò)大自己的關(guān)注圈。財(cái)務(wù)、經(jīng)濟(jì)、稅務(wù)、管理等等知識,有空花時(shí)間看看,韜光養(yǎng)晦、未雨綢繆。
          3z&W3]3c1s3h13、本文的總結(jié)與反思: 8w0b/e(y:E4y3n3Q3|"|+{-k
          A:不要去做技術(shù)上的高手,除非你的目標(biāo)如此。雖然本文是關(guān)于提高軟件開發(fā)知識的建議,做技術(shù)的高手是我一向都不贊同的。你可以提高自己的專業(yè)知識,但能勝任工作即止。
          4w#v8I5?(f,q-A程序開發(fā),操作系統(tǒng),服務(wù)器,源碼下載,Linux,Unix,BSD,PHP,Apach,asp,下載,源碼,黑客,安全,技術(shù)社區(qū),技術(shù)論壇B:提高軟件知識和技術(shù)只是問題的表面,本質(zhì)是要提高自己認(rèn)識問題、分析問題、解決問題的思想高度。軟件專業(yè)知識的很多方法和原理,可以很容易地延伸、應(yīng)用到生活的其它方面。 TechWeb-技術(shù)社區(qū):H:e7P"C/V,v-g
          C:在能勝任工作的基礎(chǔ)上,立即去涉獵其它領(lǐng)域的專業(yè)知識,豐富自己的知識體系、提高自己的綜合素質(zhì),尤其是那些目標(biāo)不在技術(shù)方面的朋友。
          posted @ 2009-04-05 15:53 wang9354| 編輯 收藏

          我們通常在開發(fā)web應(yīng)用過程中,展現(xiàn)層Action的單元測試經(jīng)常被我們忽視了,主要原因是:

          1、Action層的業(yè)務(wù)邏輯比較簡單。大家潛意識認(rèn)為這一部分的代碼不重要。

          2、Action層難以模擬http請求傳遞參數(shù),需要依賴web容器,因此給單元測試編寫帶來一定的難度。

          我寫了一個(gè)簡單的Action單元測試用例,供大家參考。基于struts的mock和webwork的ActionProxyFactory都可以進(jìn)行Action的單元測試。我個(gè)人比較傾向與ActionProxyFactory做單元測試。其實(shí)寫action單元測試非常簡單,大致分為三步就可以完成單元測試:

          一、設(shè)置ActionContext上下文參數(shù)

          將表單傳遞的請求參數(shù)添加到map中

          二、創(chuàng)建Action動態(tài)代理對象

          通過public abstract ActionProxy createActionProxy(String namespace, String actionName, Map extraContext) throws Exception 創(chuàng)建action代理對象。

          三、junit斷言執(zhí)行結(jié)果

          assertEquals(testAction.login(),”success”)

          詳細(xì)用例參考:

          public class TestActionTest extends BaseCaseTest{

          private ActionProxy proxy = null;

          private IVoucherService voucherService;

          @Before

          public void setUp() throws Exception {

          IMocksControl control = EasyMock.createControl();

          voucherService = control.createMock(IVoucherService.class);

          Map<String, Object> params = new HashMap<String, Object>();

          params.put(”loginId”,”test”);

          params.put(”password”,”111111″);

          params.put(”website”,” http://www.bt285.cn  ″);

          params.put(”name”,”小說″);

          params.put(”voucherService”, voucherService);

          Map extraContext = new HashMap();

          extraContext.put(ActionContext.PARAMETERS,params);

          try {

          proxy = ActionProxyFactory.getFactory().createActionProxy(”/ http://www.5a520.cn user”, “testAction”, extraContext);

          proxy.setExecuteResult(false);

          assertEquals(proxy.execute(),”success”);

          } catch (Exception e) {

          e.printStackTrace();

          }

          }

          @Test

          public void testLogin() {

           

          TestAction testAction = (TestAction) proxy.getAction();

          assertEquals(testAction.login(),”success”);

          }

          }

          注:創(chuàng)建代理action一定要執(zhí)行proxy.execute()方法,否則參數(shù)不能夠增加到actionContext上下文中。因?yàn)閜roxy.execute()中會執(zhí)行 invocation.invoke()核心方法,遍歷執(zhí)行action中所有的攔截器,包括其中的參數(shù)攔截器

          posted @ 2009-03-21 23:24 wang9354| 編輯 收藏

          導(dǎo)航

          <2009年3月>
          22232425262728
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆檔案

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 光山县| 榆中县| 吉隆县| 营山县| 龙岩市| 中山市| 清新县| 罗甸县| 西昌市| 上蔡县| 高淳县| 芜湖市| 绥芬河市| 右玉县| 开远市| 汶川县| 启东市| 澜沧| 紫金县| 西城区| 若尔盖县| 沂水县| 班戈县| 荥阳市| 怀来县| 和平县| 肇源县| 大理市| 洪江市| 海晏县| 松原市| 都昌县| 西平县| 驻马店市| 霞浦县| 介休市| 泸西县| 南召县| 莲花县| 陇西县| 鄯善县|