第一周的新鮮感過去后,第二周我就能夠以平常心來面對周圍的新環境了。除了語言和飲食不同,終究還是軟件開發的工作,一定是要遵循軟件開發的規律的。在這短短的兩周時間內,我談不上有什么收獲,能夠讓我的能力再上一個臺階。但一些體會還是有的,雖然有些散亂,仿佛思想的片段,如野馬,如浮云,若能及時捕捉并加以記錄,這些體會就能夠潛移默化地改變自己,或許也能改變閱讀這篇博客的你。
這一周,我打算談一談我對能力的體會。作為一名Dev,能力是自己的立身之本,也是養家糊口的必須技能。我常常覺得,作為一名還算不錯的技術人員,要掙大錢還是不容易的,但心里至少不會有失業的恐慌,總覺得自己身有一技之長,到哪里不能混口飯吃呢。所以只要不是被刺激,心態總還是比較淡定的。然而,這其中暗藏的風險就是,我的生活、我的家庭乃至我的未來就完全綁在這一根繩子上了。如果能力跟不上時代的發展,我們就會成為死在沙灘上的前浪,連一個印子都留不下來。這么一想,能力的打磨就至關重要了。那么,要成為一名優秀的Dev,需要具備哪些技能呢?在這一周通過和美國的同事Pair,我的一些觀點得到了實踐的印證。
1、專和博的能力
毫無疑問,專是必須的。沒有專,只有博,就好比建在沙灘上的城堡,經不得風吹雨打,很容易坍塌。若要具備專的能力,就需根據自己的性格、興趣以及工作特征來選擇需要攻堅的方向,例如算法、網絡、數據庫、業務分析、架構設計等。這個無需多言。那么博呢?或許對于某些軟件開發工作而言,“博”并非必備,但就一般的項目開發來說,確實需要具備更為廣博的知識。這年頭,只知道編碼的程序員很難獲得更好的機會。編碼能力是基本,但如果不了解許多與編碼有關的知識,例如設計、測試、數據庫、構建腳本、工具,就很難參與到項目開發中。這些能力并不需要程序員一定要掌握、精通,但必須有所了解,并根據項目情況,決定是否需要深入學習。例如,在前一個項目中,我第一次接觸到Cucumber,學會如何編寫Regression Test的Feature。到了這個項目中,我要編寫Twist的Test就要容易許多了。至少我不會茫然。當然,對于Regression Test而言,我還有很多困惑與體會要說,希望能有時間就這個問題專門寫一篇博客。又例如對于編程語言。也許作為主流語言而言,了解Java或C#其中一門就已經很不錯了。如果你一直從事.NET開發,似乎也沒有學習Java的必要。可是為什么不去嘗試一下呢。即使無需使用Java開發項目,了解Java的實現機制,對于開拓自己的眼界總是有好處的。何況對于項目開發而言,不定哪一天就需要你開發Java項目了。同理,我們不能只局限于一類語言。例如了解動態語言,函數語言等,了解它們的新奇之處,一定會對自己的編碼能力有很大的幫助。現代的軟件項目開發,越來越向著多語言開發的方向前進了,掌握多個語言,多個開發平臺已經成為了程序員的必備要求。
2、學習能力
正是因為需要博,學習能力才顯得如此的重要。坦白說來,現在有多少開發人員運用的知識都是自己的教師傳授的呢?具備超強自學能力的程序員,即使起點很低,將來一定會走在其他程序員的前面。這是一場馬拉松賽跑,比的是耐力、韌勁,當然還要有好的方法。在LA的第二周,我和Thoughtworks美國的一位老員工Sheroy一起Pair。我們需要對項目進行性能測試。我們選擇了JMeter作為性能測試工具。這個工具我們事先都沒有用過。不過,另外一個團隊的成員曾經使用JMeter寫過一個Test Plan。我們就參照著這個Test Plan以及JMeter提供的文檔,開始學著使用JMeter來編寫性能測試的計劃。經過一天的實踐,我們很好地了解JMeter的基礎知識,并能夠比較好的完成任務。這樣的例子在我們公司俯首即是。人人皆善于學習,樂于學習。我們有很好的學習氛圍,我們每天有Lunch Session,我們愿意在項目開發中嘗試一些新工具或者新框架,我們愿意為新的技術去做Spike。正是因為這種學習的勁頭,我們可以快速地進入項目,快速地掌握新的知識。坦言之,我在進入公司之后,曾經以為自己還算不錯的學習能力,在公司同事面前就顯得相形見拙了。我覺得自己的學習能力不夠用了。這個壓力是個好事,因為它可以促進我不斷前進。
3、解決問題的能力
事實上,這個能力與學習能力一脈相承。然而,它們又不完全相同。若要具備相當強的解決問題的能力,必然具備好的學習能力。因為很多問題是我們不曾遇見過的,也可能是我們在使用新工具、新語言、新框架中面臨的問題。如果沒有好的學習能力,就很難找到解決問題的鑰匙。然而,僅有學習能力是不夠的,解決問題需要方法。例如通過調試,通過查看日志,或者有效地搜索Google。解決問題還需要經驗,具有豐富經驗的開發人員即使面臨新問題,也能夠根據過去的經驗找到快速解決問題的途徑。仍然是這一周的開發工作。我和Sheroy在用JMeter寫性能測試時,發現同時啟動多個線程模擬并發用戶登錄時,有的登錄行為出現了錯誤。我們對于登錄的設置是正確的。如果單獨執行JMeter的測試計劃,也沒有任何問題;但在Jenkins上執行時,就會出現這樣的錯誤。我沒有想到任何解決辦法。但Sheroy通過分析執行日志,敏銳地發現登錄行為的錯誤總是發生在上一個持續集成任務執行完畢之后。這個任務是用于完成性能測試環境的部署。這個部署任務與性能測試任務是串行執行的,性能測試在部署之后執行。Sheroy認為,可能是部署剛剛完成,性能測試任務就立刻執行,導致登錄的請求未能得到服務端的正確響應。他嘗試在JMeter測試計劃中增加了一個等待時間,問題就迎刃而解了。
整體來看,解決問題需要耐心、細致,善于從普遍性中找到特殊性,可能這個特殊性隱藏得非常深,那么就需要去比較正常和異常情況下,它們的環境、前置條件究竟有何不同?在什么情況下,這個問題會反復出現?只要找到了這種特殊性,往往就能發現端倪,進而想到解決問題的方案。就這一點而言,我還存在許多不足。
4、部署環境的能力
毫無疑問,這是我的短板。我最討厭的就是配置、安裝與部署。我甚至沒有耐心去看安裝指南、配置向導。尤其是對于一些開源框架或工具,在文檔極度缺乏的情況下,我總是難以快速地完成框架或工具的搭建。相對而言,我更喜歡一鍵式安裝的傻瓜做法。可是在現在的軟件項目開發中,我們常常不限于只使用一個工具,而且使用的工具也不只限于圖形化界面。也許有人會說,開發人員只需要關注自己的編碼能力就可以了。可是我們開發出來的軟件總是需要部署才能正常工作的,如果對軟件的部署不了解,怎么交付給客戶使用呢。也許有人又會說,這可以交給專門的部署人員來做啊!那么,作為實現功能的你而言,你怎么給你的部署人員說明整個部署流程?而且,若要順利地進行軟件開發,沒有一個完整的開發環境,開發人員又該怎樣開展工作呢?因此,開發人員應該具備一定的部署環境的能力。尤其隨著DevOps變得越來越重要,這項能力也會扮演著越來越關鍵的角色。
5、交流能力
不可避免,還是要提到交流能力。可以說,對于這一能力,無論如何強調都不過分。我在LA工作的這兩周,因為語言問題已經強烈地感受到了這一點。就在本周四,我需要完成Story 271,但我對Story的業務邏輯了解得不夠,所以就找到我們的BA Jacky。他是一位臺灣人,不過幾乎已經不怎么會說國語了。由于我對這一部分業務缺乏足夠的了解,所以我們之間的交流從我事先想象的10分鐘,延長到了半個小時,并在Jacky連說帶畫的努力闡釋下,我才弄明白了這個Story要求我們做的到底是什么。這就是交流的必要性。我曾經接觸過一些剛剛踏入這個行業的程序員,他們都愿意努力的學習,但在交流能力上普遍欠缺。一個問題難以表達清楚,也很難獲得正確的理解。
整體而言,無論是哪方面的能力,提升都是無止境的。能力是我們的立身之本,提升能力就能提升我們的價值,同時,也能夠改善我們的生活,進而改善我們這個行業。這就是我的一點體會。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
