英文原文:The 4 Most Important Skills for a Software Developer,編譯:@高翌翔
現(xiàn)如今,可供選擇的技術(shù)、語言及平臺可謂五花八門,因此作為軟件開發(fā)者,要弄明白哪里是花時間培養(yǎng)個人技能的最佳投資點也就難上加難。
常常有人向我征求關(guān)于如何成為更強的程序員的建議。
人們問得最頻繁的問題可謂萬變不離其宗,即他們是否應(yīng)該把時間花在某種與眾不同的特定編程語言或技術(shù)上。
最近我花了很多心思琢磨此問題,并想出了一些我認為最要緊且能讓你受益終生的技能,一旦軟件開發(fā)者掌握了這些技能,不僅會給他們帶來最佳的工作機會,還會使他們變得卓有成效。
技能一:解決問題(Solving Problems)
以前我曾談到需要學(xué)會如何解決問題,甚至給出了如何學(xué)會解決問題的若干步驟,因為我認為這種技能對任何軟件開發(fā)者都是至關(guān)重要的。
軟件開發(fā)百分之百就是解決問題。
若毫無問題,就無需軟件。
所有軟件都被設(shè)計用于解決某些用戶問題,而通用解決方案就是由許多能搞定的小規(guī)模問題所組成的陣列。
要是你不能解決問題,就不會精通軟件開發(fā),而你所用的編程語言或技術(shù)也就無所謂了。
在解決問題時,大多數(shù)開發(fā)者的表現(xiàn)簡直糟糕透頂。
我常常會聽到一些關(guān)于求職面試太難的抱怨,因為面試官會要求開發(fā)者去解決有一定難度的問題。
我談過為何有難度的面試挺好,而其中的部分原因在于,面試官就是要測試開發(fā)者解決問題的能力。
我知道,許多開發(fā)者仍然不同意我對此問題的觀點,而且他們也不明白為何身處類似首席碼農(nóng)(TopCoder)位置上的開發(fā)者會盡力完善自身的開發(fā)技能,至少我從個人經(jīng)驗可知,那正是首席碼農(nóng)解決問題的實踐活動,而此類實踐活動正是我職業(yè)生涯的轉(zhuǎn)折點。
假想你是木匠。要想成為出色的木匠,也許你應(yīng)該擅長切削木材。也許你應(yīng)該親手做過各種各樣的部件,同時也用過許多不同的工具切削木材。
無論你的木工經(jīng)驗有多少年,抑或設(shè)計出的家具或櫥柜有多漂亮,每次你也要想方設(shè)法切削木材,努力做出各個部件。
切削木材是木工活的基礎(chǔ)技能,就像解決問題是軟件開發(fā)的基礎(chǔ)技能一樣。
技能二:自學(xué)(Teaching Yourself)
在生活中,可能沒有比學(xué)會學(xué)習(xí)更重要的技能了。
此種技能在軟件開發(fā)中尤其重要,因為據(jù)我所知,任何領(lǐng)域的變化速度都超不過軟件開發(fā)。
你不可能無所不知、無所不曉。甚至你都來不及投入時間去成為某一特定框架或技術(shù)的大師——因為事物發(fā)展得太快了!
反而,你需要這樣的能力,即為完成手頭任務(wù)而快速獲取所需知識的能力。
要是你真想具備某種能讓你在軟件開發(fā)職業(yè)生涯中始終與時俱進的技能,那就學(xué)習(xí)如何自學(xué)吧。
提高此種技能的唯一方法就是付諸實踐。走出去學(xué)習(xí)新的編程語言或技術(shù),即使你認為決不會用得上它(也不妨學(xué)一下)。將來你會驚訝地發(fā)現(xiàn),你竟然可以很快地把它撿起來,因為你早就對相關(guān)基礎(chǔ)知識一清二楚了。
要是你能迅速適應(yīng)日新月異的軟件開發(fā)市場、以及與之相關(guān)的各種技術(shù)和平臺,你就會擁有那些總是很搶手的技能。
盡管我對蒂姆·費里斯(Tim Ferris)的某些主張有點兒懷疑,不過他寫了本很棒的書,名為《4 小時變身廚師》(4-Hour Chef),其中介紹了若干如何快速學(xué)習(xí)事物的絕招。(我那時也正打算寫本與此主題有關(guān)的書。)
技能三:命名(Naming)
要是有人問起我成天在做什么,那我八成會說“研讀其他人命名的事物,以及給事物命名。”
誠然,若沒人真那么問,我也不會真這么答,不過我的確有可能這么答哦。
軟件開發(fā)就是在描述形而上學(xué)的[1]內(nèi)容。我們所構(gòu)建的大多數(shù)內(nèi)容都是看不見摸不著的。
授權(quán)經(jīng)理收到授權(quán)請求,然后發(fā)出授權(quán)響應(yīng),與此同時,用戶資源庫會調(diào)用用戶工廠去組建新用戶——我們必須根據(jù)以上描述在心中去構(gòu)建起完整的環(huán)境。
每次你編碼時,就是在給事物命名。當閱讀自己或他人所寫的代碼時,你會從代碼中的事物名稱獲得對代碼的大部分理解。
通過在開發(fā)者親手編寫的代碼中查看方法、變量及類的命名方式,大多數(shù)情況下,我能準確預(yù)測出開發(fā)者的技能水平。
要給代碼中的概念及數(shù)據(jù)起合適的名字,而缺乏此能力的開發(fā)者就像個啞巴翻譯。無論你能否明白某事,要是你不能妥善地解釋它,那么此事會轉(zhuǎn)瞬即逝。
提高此種技能的最佳方式就是不斷實踐。只要我在讀代碼時有所領(lǐng)悟,我往往會重命名代碼中的事物。由于我開始明白某個方法到底在做什么,因此我會給方法改名,以便與我的理解相一致。在讀代碼時我會做這么做,即便代碼沒有產(chǎn)生任何邏輯變化,也照樣會這么做。
你越關(guān)注給事物起合適的名字,你就會越擅長此道。
這也是你代碼中最顯而易見的一面。簡單看一眼你的代碼,很難分辨代碼正確與否或效率高低,但如果代碼能讓我一望而知,那么我會認為你知道自己在做什么。
技能四:待人接物(Dealing with People)
盡管我把此種技能排在最后,不過在許多情況下,你可能會說它是首要的或最要緊的技能。
所到之處皆有人。
除非你單獨工作,且只為你自己開發(fā)軟件,否則,作為軟件開發(fā)者,其他人就會影響到你的職業(yè)生涯。
我以前談過為何你可能不想批評某人,不過我們更多地是與他人打交道,而不是惹人煩。
我總是會重新捧起戴爾·卡耐基(Dale Carnegie)的那本名著《人性的弱點》(How to Win Friends and Influence People),因為這本書對于學(xué)習(xí)如何做一名成功人士是如此重要。
我以前說過,倘若你想提高人們的技能,那就閱讀此書吧!
基本問題是,人類不是合乎邏輯的生物,我們是情感生物。當然,我們喜歡為我們的推理能力而自豪,不過實際情況是,我們所做的大多數(shù)決策更多地受到情緒影響,而非理智。
作為軟件開發(fā)者,此種技能對你的意義在于,除非你能妥善地處理與其他開發(fā)者、經(jīng)理、甚至客戶的關(guān)系,否則,即便你有許多好點子或很有用的技能,你還是會四處碰壁。
一般說來,積極參與到軟件開發(fā)社區(qū)中去也會對你的職業(yè)生涯有很大幫助。不要僅限于人際交流,而要把你的名字傳播出去,并廣結(jié)善緣。
成功做到這一切直接取決于你待人接物的能力。(在學(xué)習(xí)如何待人接物時想走捷徑?那很簡單。請與人為善!)
怎樣看待實用技能?
請注意,在我的列表中并未包括任何特定技術(shù),甚至連 web 開發(fā)或移動開發(fā)這樣寬泛的技能也沒有,這是何原因?
在一些技術(shù)領(lǐng)域具有堅實的基礎(chǔ)的確很重要,不過這些領(lǐng)域都不及我上面提到的這 4 種技能重要。
要是你能夠解決問題、快速學(xué)習(xí)事物、恰當命名事物、以及待人接物,那么與你專門從事任何特定技術(shù)相比,從長遠來看,你將會取得更大的成功。
有這樣一種說法,要深入學(xué)習(xí)一到兩門編程語言,并從事某個通用的專業(yè)領(lǐng)域,這當然很重要,不過,只要你還沒帶著那些抉擇在這條老路上走得太遠,并把精力集中在提高這 4 種重要技能上,你自會萬事大吉!(你甚至可以學(xué)習(xí)C++ ;D)
作者簡介
約翰·森梅茲(John Sonmez)是 Pluralsight 網(wǎng)站的課程作者,他創(chuàng)作了超過 25 門課程,內(nèi)容涵蓋了從移動開發(fā)到控制反轉(zhuǎn)容器的廣泛主題。他還是諸如 DotNETRocks 和 Hanselminutes 等播客網(wǎng)站的常客。約翰已經(jīng)使用各種原生工具分別為 ios、Android、Windows Phone 7 創(chuàng)建了應(yīng)用程序,他還為 HTML5 及幾乎所有目前可用的跨平臺解決方案創(chuàng)建了應(yīng)用程序。他不僅熱衷于敏捷開發(fā),而且他正忙于一場個人改革運動,以便化繁為簡。約翰雖是 DZone 的最有價值博主,而他卻不是 DZone 的員工,他已在DZone上發(fā)了三篇博文。除了那三篇博文,你可以在它們的源站上讀到更多內(nèi)容。查看完整的用戶信息
譯注
[1] 形而上學(xué)的(metaphysical),形而上學(xué)是指通過理性的推理和邏輯去研究不能直接透過感知所得到答案的問題。
it知識庫:軟件開發(fā)者的四大“看家本事”,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。