|
這是一位軟件工程師關于該行業(yè)由程序員上長升到軟件工程師的步驟經(jīng)歷,給諸多IT行業(yè)的迷茫者指點迷津,。
8 c6 |% i+ O- C9 q1 ]: o/ E) C
# g* `6 X0 F2 s6 ^8 ~2 T% O6 X6 l& t1,、分享第一條經(jīng)驗:“學歷代表過去,、能力代表現(xiàn)在,、學習力代表未來,�,!逼鋵嵾@是一個來自國外教育領域的一個研究結果,。相信工作過幾年、十幾年的朋友對這 個道理有些體會吧,。但我相信這一點也很重要:“重要的道理明白太晚將抱憾終生,!”所以放在每一條,讓剛剛畢業(yè)的朋友們早點看到哈,!4 H: }# ~! ~ j# ?' C9 ^
2,、一定要確定自己的發(fā)展方向,,并為此目的制定可行的計劃。不要說什么,,“我剛畢業(yè),,還不知道將來可能做什么?”,,“跟著感覺走,,先做做看”。因為,,這樣的觀點會通過 你的潛意識去暗示你的行為無所事事,、碌碌無為。一直做技術,,將來成為專家級人物,?向管理方向走,成為職業(yè)經(jīng)理人,?先熟悉行業(yè)和領域,,將來自立門戶?還是先 在行業(yè)里面混混,,過幾年轉行做點別的,?這很重要,它將決定你近幾年,、十年內“做什么事情才是在做正確的事情!”,。9 j0 T6 m1 y' \* j
3,、軟件開發(fā)團隊中,技術不是萬能的,,但沒有技術是萬萬不能的,!在技術型團隊中,技術與人品同等重要,,當然長相也比較重要哈,,尤其在MM比較多的團隊中。在軟件項目團隊 中,,技術水平是受人重視和尊重的重要砝碼,。無論你是做管理、系統(tǒng)分析,、設計,、編碼,還是產品管理,、測試,、文檔,、實施、維護,,多少你都要有技術基礎,。算我孤 陋寡聞,我還真沒有親眼看到過一個外行帶領一個軟件開發(fā)團隊成功地完成過軟件開發(fā)項目,,哪怕就一個,,也沒有看到。倒是曾經(jīng)看到過一個“高學歷的牛人”(非 技術型)帶一堆人做完過一個項目,,項目交付的第二天,,項目組成員扔下一句“再也受不了啦!”四分五裂,、各奔東西,。那個項目的“成功度”大家可想而知了。# A5 u1 t; v! E2 l4 P
4,、詳細制定自己軟件開發(fā)專業(yè)知識學習計劃,,并注意及時修正和調整(軟件開發(fā)技術變化實在太快)。請牢記:“如果一個軟件開發(fā)人員在1,、2年內都沒有更 新過自己的知識,,那么,其實他已經(jīng)不再屬于這個行業(yè)了,�,!辈灰嬖V自己沒有時間。來自時間管理領域的著名的“三八原則”告誡我們:另外的那8小時如何使用 將決定你的人生成�,�,!本人自畢業(yè)以來,平均每天實際學習時間超過2小時,。
6 |) O( ^5 k6 u+ H. x8 u6 k$ J5 [5,、書籍是人類進步的階梯,對軟件開發(fā)人員尤其如此,。書籍是學 習知識的最有效途徑,,不要過多地指望在工作中能遇到“世外高人”,并不厭其煩地教你,。對于花錢買書,,我個人經(jīng)驗是:千萬別買國內那幫人出的書!我買的那些 家伙出的書,,100%全部后悔了,,無一本例外。更氣憤的是,,這些書在二手市場的地攤上都很難賣掉,�,!皳碛袝⒉槐硎緭碛兄R;擁有知識并不表示擁有技 能,;擁有技能并不表示擁有文化,;擁有文化并不表示擁有智慧�,!敝挥袑咀兂傻淖约褐腔�,,才算是真正擁有了它。; b5 H! @6 |' c$ Z1 x- m! Y
6,、不要僅局限于對某項 技術的表面使用上,,哪怕你只是偶爾用一、二次,�,!皩θ魏问挛锊痪烤屠铩笔侨魏涡袠I(yè)的工程師所不應該具備的素質。開發(fā)Windows應用程序,,看看 Windows程序的設計,、加載、執(zhí)行原理,,分析一下PE文件格式,,試試用SDK開發(fā)從頭開發(fā)一個Windows應用程序;用VC++,、 O1 g; l. b7 x# Q/ M( k9 P
Delphi,、Java、.Net開發(fā)應用程序,,花時間去研究一下MFC,、VCL、J2EE,、.Net它們框架設計或者源碼;除了會用J2EE,、 JBoss,、Spring、Hibernate等等優(yōu)秀的開源產品或者框架,,抽空看看大師們是如何抽象,、分析、設計和實現(xiàn)那些類似問題的通用解決方案的,。 試著這樣做做,,你以后的工作將會少遇到一些讓你不明就里、一頭霧水的問題,,因為,,很多東西你“知其然且知其所以然”,! [) a6 r* A4 b8 {, V d
7、在一種語言上編程,,但別為其束縛了思想,。“代碼大全”中說:“深入一門語言編程,,不要浮于表面”,。深入一門語言開發(fā)還遠遠不足,任何編程語言的存在都有其自身的理由,, 所以也沒有哪門語言是“包治百病”的“靈丹妙藥”,。編程語言對開發(fā)人員解決具體問題的思路和方式的影響與束縛的例子俯拾皆是。: j) O R) G: t* H; q* b2 ^
我的經(jīng)驗 是:用面對對象工具開發(fā)某些關鍵模塊時,,為什么不可以借鑒C,、C51、匯編的模塊化封裝方式,?用傳統(tǒng)的桌面開發(fā)工具(目前主要有VC++,、Delphi) 進行系統(tǒng)體統(tǒng)結構設計時,為什么不可以參考來自Java社區(qū)的IoC,、AOP設計思想,,甚至借鑒像Spring、Hibernate,、JBoss等等優(yōu)秀 的開源框架,?在進行類似于實時通信、數(shù)據(jù)采集等功能的設計,、實現(xiàn)時,,為什么不可以引用來自實時系統(tǒng)、嵌入式系統(tǒng)的優(yōu)秀的體系框架與模式,?為什么一切都必須 以個人,、團隊在當然開發(fā)語言上的傳統(tǒng)或者經(jīng)驗來解決問題?,?,?“他山之石、可以攻玉”,。
& C: K$ A5 F- E7 j- k8,、養(yǎng)成總結與反思的習慣,并有意識地提煉日常 工作成果,,形成自己的個人源碼庫,、解決某類問題的通用系統(tǒng)體系結構、甚至進化為框架,。眾所周知,,對軟件開發(fā)人員而言,,有、無經(jīng)驗的一個顯著區(qū)別是:無經(jīng)驗 者完成任何任務時都從頭開始,,而有經(jīng)驗者往往通過重組自己的可復用模塊,、類庫來解決問題(其實這個結論不應該被局限在軟件開發(fā)領域、可以延伸到很多方 面),。這并不是說,,所有可復用的東西都必須自己實現(xiàn),別人成熟的通過測試的成果也可以收集,、整理,、集成到自己的知識庫中。但是,,最好還是自己實現(xiàn),,這樣沒 有知識產權、版權等問題,,關鍵是自己實現(xiàn)后能真正掌握這個知識點,,擁有這個技能。- l+ V r% z- \% S% V/ c
9,、理論與實踐并重,,內外雙修。工程師的內涵是:以工 程師的眼光觀察,、分析事物和世界,。一個合格的軟件工程師,是真正理解了軟件產品的本質及軟件產品研發(fā)的思想精髓的人(個人觀點,、歡迎探討),。掌握軟件開發(fā) 語言、應用語言工具解決工作中的具體問題,、完成目標任務是軟件工程師的主要工作,,但從軟件工程師這個角度來看,這只是外在的東西,,并非重要的,、本質的工 作。學習,、掌握軟件產品開發(fā)理論知識、軟件開發(fā)方法論,,并在實踐中理解,、應用軟件產品的分析、設計,、實現(xiàn)思想來解決具體的軟件產品研發(fā)問題,,才是真正的軟 件工程師的工作,。站在成熟理論與可靠方法論的高度思考、分析,、解決問題,,并在具體實踐中驗證和修正這些思想與方式,最終形成自己的理論體系和實用方法論,。
1 S3 b, L1 g+ h1 {2 i. N10,、心態(tài)有多開放,視野就有多開闊,。不要抱著自己的技術和成果,,等到它們都已經(jīng)過時變成垃圾了,才拿出來丟人現(xiàn)眼,。請及時發(fā)布自己的研究成果:開發(fā)的 產品,、有創(chuàng)意的設計或代碼,公布出來讓大家交流或者使用,,你的成果才有進化和升華的機會,。想想自己2000年間開發(fā)的那些Windows系統(tǒng)工具,5,、6 年之后的今天,,還是那個樣子,今天流行的好多Windows系統(tǒng)工具都比自己的晚,,但進化得很好,,且有那么多用戶在使用。并且,,不要保守自己的技術和思 想,,盡可能地與人交流與分享,或者傳授給開發(fā)團隊的成員,�,!芭c人交換蘋果之后,每個人還是只有一個蘋果,;但交換思想之后,,每個人都擁有兩種思想”,道理大 家都懂,,但有多少人真正能做到呢,?) I/ I: C( K* b* f: b: P% H( x
11、盡量參加開源項目的開發(fā),、或者與朋友共同研制一些自己的產品,,千萬不要因為沒有錢賺而不做。網(wǎng) 絡早已不再只是“虛擬世界”,網(wǎng)上有很多的開源項目,、合作開發(fā)項目,、外包項目,這都是涉獵工作以外的知識的絕好機會,,并且能夠結識更廣的人緣,。不要因為工 作是做ERP,就不去學習和了解嵌入式,、實時,、通信、網(wǎng)絡等方面的技術,,反過來也是一樣,。如果當別人拿著合同找你合作,你卻這也不會,,那也不熟時,,你將后 悔莫及。
7 d2 y1 @9 _( [ L5 U12,、書到用時方恨少,,不要將自己的知識面僅僅局限于技術方面。諾貝爾經(jīng)濟學獎得主西蒙教授的研究結果表明:“對于一個有一定基礎的人來說,,他只要真正肯下功夫,,在6個月內就可以掌握任何一門學問�,!苯逃睦韺W界為感謝西蒙教授的研究成果,,故命名為西蒙學習法。, I* M! p& W+ M* z# r) ]
可見,,掌握一門陌生的學問遠遠沒有想象的那么高難,、深奧。多方吸取,、廣泛涉獵,。極力夯實自己的影響圈、盡量擴大自己的關注圈,。財務,、經(jīng)濟、稅務,、管理等等知識,,有空花時間看看,韜光養(yǎng)晦,、未雨綢繆,。
- F+ ?; |( S8 ^13、本文的總結與反思:1 n2 D: D; ]1 b9 S- y
A:不要去做技術上的高手,除非你的目標如此,。雖然本文是關于提高軟件開發(fā)知識的建議,做技術的高手是我一向都不贊同的,。你可以提高自己的專業(yè)知識,,但能勝任工作即止。
9 }1 _( T( @8 d" P1 y3 [B:提高軟件知識和技術只是問題的表面,,本質是要提高自己認識問題,、分析問題、解決問題的思想高度,。軟件專業(yè)知識的很多方法和原理,,可以很容易地延伸、應用到生活的其它方面,。
$ ~0 E6 N& r) v b0 n, WC:在能勝任工作的基礎上,,立即去涉獵其它領域的專業(yè)知識,豐富自己的知識體系,、提高自己的綜合素質,,尤其是那些目標不在技術方面的朋友。雖然是針對IT行業(yè)的,,但感覺變通一下也是適用于機械行業(yè)的,。+ s. q3 Z: [" _( |( N, Q' ^4 y* V
0 M* u1 B' w4 C" C! G6 v" @2 D; E9 f2 ?' l
|
|