如何成為一個優秀的技術人員?
來源:程序員人生 發布時間:2014-01-09 14:17:08 閱讀次數:3836次
如何成為一個優秀的技術人員?看了不要迷失在技術的海洋中,深表同意。在后來的評論中大家也表達了自己的看法。讓我覺得很有意思的是,大家的觀點驚人地一致——幾乎沒有反對的聲音。
不過從經驗上來看,意見太統一也不一定是一件好事。我有時也會小人之心地想,表示贊同的朋友們是真與LoveCherry的想法一致,還是僅僅因為自己以前對待技術隨波逐流不堪所累,現在把這篇文章作為救命稻草看待,追求自身的心理平衡呢?LoveCherry寫這篇文章,是機遇他對于技術和思想的深度。如果我們沒有達到這樣的程度,是否會誤解他的意思,得到的僅僅是一種心理安慰,卻失去了更多東西呢?
我們到底該如何學習技術?或者說,如何成為一個優秀的技術人員?
扎實的基礎
如果要成為一個優秀的技術人員——我并沒有說是“開發人員”,比如也包括“測試人員”吧——一定需要扎實的基礎。什么叫做扎實的基礎呢?其實就是我們大學所學的課程——離散數學、算法與數據結構、操作系統、計算機體系結構、網絡、編譯原理等等。現在它們經常被視為“沒有用”,但是我認為這些都是一個優秀技術人員成長和前進的基礎。不知道大家有沒有過這樣的感覺:某天早上一醒來,發現對于最近接觸的事物有了新一層的認識,似乎什么都不會了,卻好像什么都理解了——就像張無忌練太極劍,不求劍招,只求劍意。我曾經有過兩次這樣的感覺,真可謂豁然開朗。其實我想,這就是所謂的“突破瓶頸”。而引起“量變到質變”的關鍵,可能就是您忽視的那些課程,那些一進大學就被“灌輸”的知識。
在面試時我經常聽到這樣的話:“我的理論和基礎不行,但是我讓我寫代碼是沒有問題的。”這樣看來,基礎真的沒有用嗎?我并不這樣認為,因為……
如果您不了算法和數據結構,又如何從.NET Framework(甚至包括Power Collections,在這里我強烈推薦這個組件)琳瑯滿目的數據結構中做出最適合目前需求的選擇呢?
如果您不了解操作系統,又如何能深入Windows系統,寫好.NET Framework程序,或者在postmortem環境中做調試呢?(什么叫做postmortem debugging呢?就是熊力大哥常做的事情。)
如果您不了解計算機體系結構,又如何能在Multi-CPU(Multi-Core)時代寫出真正高效的應用程序呢?
如果……
因為我們不光要寫代碼,而且要寫好的代碼,因此我們必須強調基礎。很多時候技術人員之間能力的高低,很可能就會取決于這寫基礎。有朋友告訴我,這些計算機科學的基礎的意義不僅僅在于知識本身,它們還能夠讓人的思維更符合計算機科學的發展和變革——這可能說的有點遠大,但是我基本上同意這個看法。如果說得簡單一些,它們讓您的思維方式更適合這個行業——試想,如果您知道了計算機/程序/框架/系統是怎么想的,他們還能夠為難你嗎?
舉一個例子,微軟有著大量高素質的技術人員,他們是微軟驚人生產力的源泉。因此微軟能夠在Vista和Office開發完成之后將大量牛人派去作Windows Live產品研發。在我們很多技術人員看來,Vista是操作系統,Windows Live是Web,兩者大相徑庭。但是微軟就是能夠有大量的技術人員作此類遷移。再舉一個例子,當年Google挖角Microsoft許多技術人員,難道他們跳槽去Google繼續作微軟產品的研發嗎?正是因為那些技術人員有著扎實的基礎能力,因此就能夠在各種類型的技術之間游刃有余,即使它們“表面”上看來差距有多大。
表面?這兩個字放在這里是什么意思?因為這就是我想說的就是……
技術之間的關系
其實《不》一文的中心思想,就是不要隨波逐流,不要迷失在技術的汪洋之中。我很同意,但是我也想補充一點我的看法。
在《不》文的評論中,我看到了一段話,其主要意思就是:“如果一個技術不會用到,就不要去學它。當要用的時候再去學”。首先表明我的觀點:我不同意。這里我想舉一個例子:
我是今年1月份加入目前的公司的,公司的技術團隊當時使用.NET Framework 1.1進行應用開發。是時由于業務的原因需要開發一個平臺以及其他一些應用,我在時在技術部門內部強烈建議將新系統使用.NET Framework 2.0 + 3.0的方式進行構建。我的理由是:“使用.NET Framework 2.0構建新平臺在基礎設施上不會增加任何成本,但是在功能和性能上都會有提高。而.NET Framework 3.0,尤其是WCF,是微軟提供的新組件,也即將成為微軟平臺上通信的標準。”領導同意了我的建議,并希望我帶領新的團隊進行新平臺的開發。過程中的細節就不一一道來了,現在回頭看來過程雖有波折,但是倒也收到了較好的效果。我們經常會發現有技術人員會抱怨技術發展地太快,但是就拿我之前的例子來說,在2007年還在使用2001年出現的東西,卻忽視2004年就已經成熟的技術,這究竟是技術發展的太快,還是我們沒有根本沒有去跟進技術呢?
我想答案很明顯是后者,這其實就是“如果一個技術不會用到,就不要去學它。當要用的時候再去學”。我們不會(或者很難)因為不斷鉆研老技術而領會新技術,掌握新技術是需要我們主動去追求的。如果一個人不追求,他就難以發展。如果人人不追求,那么整個技術團隊就難以發展。不過我認為,其實只要懷著“把項目做的更好”的想法,追求新的技術和實踐(例如重構、TDD)是自然而然的事情。
不論您是普通開發人員、技術經理抑或是架構師,我想您都不能止步不前。有人說,領導不愿意使用新技術,我們沒有辦法——那么設法說服他們。如果他們不能給出讓您滿意的理由,如果您覺得他們妨礙了您的發展,那么可以選擇離開。我想有追求的您一定不會在找工作的問題上遇到太多麻煩。:)
似乎話題有些偏了,我們回到正體。新技術那么多,我們到底該怎么學呢?我這里想說的就是,新技術并非洪水猛獸。在一定程度上,我們完全可以駕馭它們。
我們來想一下,新技術是怎么來的?新技術并不是某些公司的牛人們拍腦袋出來的,新技術也是發展過來的。發展需要時間,發展是一個過程。例如C# 3.0由2.0發展而來,CLR 2由CLR 1發展而來。根據我的經驗,如果一個技術人員能夠較好地掌握.NET Framework 1.1,他幾乎能夠輕而易舉地過渡到.NET Framework 2.0。他之需要了解一下新特性,找一些資料比較一下前后兩者的改變即可。我們并沒有創造技術,我們只是在跟進。為什么總有人能夠在技術出現不久就寫出大量文章或書籍來進行推廣呢?這就是值得我們思考的地方。
舉個例子,如果要從.NET 2.0升級到3.5(我不懂VB,用VB的朋友抱歉了),其實您只需要了解……
ListView控件:一個控件而已。
集成了ASP.NET AJAX:不是新東西了。
Linq To XML:一套新的語法用于解析和構建XML。
Linq To Object:枚舉,只是枚舉。
Linq To Sql:可以視作簡單的一套ORM,動態生成SQL語句。
Lambda Expression:即使沒有接觸過LISP(很幸運,我大學課程中有Functional Programming這門課:)),我想如果您了解編譯原理的話,對此也應該不陌生了。
……
真的不多。其實我覺得,跟進每個人各自領域的技術并非不可能的事情。我一再提到這么一句話:一個優秀的技術人員,他的知識架構應該成倒T字形,有著扎實的底盤,并且成為某個領域的專家。
我們究竟該如何學習基礎呢?
扎實。我認為,這是關鍵。
您有扎實的基礎嗎?這是成為優秀技術人員知識儲備。
您對于每項掌握的知識或技能都學的扎實嗎?這是您前進過程中的助手。
您有扎實的學習目標和計劃嗎?這是您在技術汪洋中的指南針。
我的文章寫完了。
我很理想,我也在努力。:)
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈