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

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