你想成為出色的代碼編寫者嗎?奉上八大方式
譯文掌握了本文章所陳述的八種方式,大家的編碼技能應該能夠得到顯著提升。
1.提醒自己還有多少內(nèi)容需要學習
學習的***步在于了解自己還有哪些不足之處。雖然這樣的結論聽起來非常直觀,但經(jīng)驗豐富的程序員能夠更為精確地判斷填補不足需要投入的具體時間。很多計算科學畢業(yè)生會傲慢地認為“我什么都懂”,并希望把自己已經(jīng)掌握的一切展示給新同事們。但事實上,“我知道自己在做什么”才是最重要的,這樣的態(tài)度能夠幫助大家更好地學習新知識。
2.不要執(zhí)著于證明自己是對的
為了真正成為一名卓越——而不只是合格——的程序員,大家需要從實踐中積累經(jīng)驗。不過需要注意的是,經(jīng)驗也有可能讓我們一次又一次重復糟糕的行為并養(yǎng)成負面習慣。我們都遇到過擁有八年經(jīng)驗的老程序員……但有些人只不過是在每年重復自己的習慣,而且一重復就是八次。為了避免此類問題,大家應該審視自身并自問“我要如何做得更好?”
新手軟件開發(fā)人員(以及老鳥們)都應該抱著欣賞的態(tài)度看待自己的代碼。他們需要編寫測試以證明自己的代碼能夠切實生效,而不僅僅是避免其出錯。真正杰出的程序員實際上樂于接受自己的錯誤——因為他們知道,即使自己沒有發(fā)現(xiàn),用戶們最終也會將其指出。
3. “代碼能跑”并不是***目標,而只是起點
是的,我們開發(fā)工作的***步總是編寫出符合質(zhì)量規(guī)范要求的軟件。普通程序員都能做好這項工作,但他們之所以普通,是因為達成這項目標后他們就開始轉(zhuǎn)向其它任務。
需要強調(diào)的是,這種小成即安的心態(tài)就像是想讓一張隨拍成為一件藝術品。出色的程序員都很清楚,***個迭代版本僅僅只是起步:它能夠確切起效,那么恭喜各位!但這并不是終點,接下來我們要讓它變得更好。
這***程中的重要組成部分在于定義“更好”的確切含義。是否需要進一步提高其運行速度?易于編寫說明文檔?更具復用性?改進可靠性?具體答案取決于應用程序自身,不過這個流程應當被始終保持下去。
4. 三次編寫成就卓越作品
合格的程序員編寫出“能跑”的軟件。卓越的程序員則編寫出真正優(yōu)秀的軟件成果。而優(yōu)秀的成果幾乎不可能在***編寫時出現(xiàn)。這種杰作通常需要進行三次編寫:
- ***次,我們編寫軟件以證明解決方案可行性。其他人可能沒有意識到這只能算是概念驗證型方案,但我們自己應該清楚地了解這一點。
- 第二次,保證其確切起效。
- 第三次,保證一切完全符合預期。
不過著眼于***秀的開發(fā)人員,這些步驟似乎表現(xiàn)得并不明顯。他們做的每一項工作似乎都才華滿載,但事實上,這類搖滾明***別的開發(fā)者根本不會在***與第二版本階段展示自己的軟件開發(fā)成果。淘汰代碼并重新開始能夠讓我們的個人工作流程真正變得“更好”。
如果不出意外,那么“編寫三次”的方式能夠幫助大家了解如何找到最理想的解決途徑。另外,這也能夠防止我們陷入思維慣性。
5.閱讀代碼——閱讀大量代碼
大家可能希望我會在這里提點具體的建議,很明顯最常見但也最有價值的建議就是提升編程技能。不過很多朋友也許還沒有發(fā)現(xiàn),閱讀他人的代碼其實非常重要。
在閱讀他人的代碼時,我們會了解到其他開發(fā)者是如何處理編程難題的。不過請別單純從字面上理解這項提議,大家應當更多地將其視為一種教訓以及挑戰(zhàn)。為了更好地發(fā)揮其作用,我們需要回答以下幾個問題:
- 我會如何編寫編寫這部分代碼? 我們該如何以不同方式實現(xiàn)同樣的效果,又是否準確理解了其他人的解決思路?
- 我學到了什么?我該如何將這項技術應用到我過去已經(jīng)編寫的代碼當中?(‘我從沒想到要在這里使用遞歸下降……’)
- 我該如何改進代碼?如果存在合適的開源項目,而大家又想到了改善其質(zhì)量的辦法,請立刻著手進行!
- 基于相關作者的風格進行代碼編寫。這種作法能夠幫助大家準確把握其他編寫者的設計思路,并借此提升自己的移情能力。
這些步驟需要以認真的態(tài)度逐步推進。編寫自己的答案,具體形式可以是撰寫個人日志、博文、代碼審查報告或者在社區(qū)論壇上發(fā)布帖子。向朋友解釋某個現(xiàn)實問題能夠幫助我們整理出解決方案,將其寫下并分享分析結論,這能讓我們更好地理解自己如何以既定方式重現(xiàn)他人代碼。這正是我之前提到的自省心態(tài)的一部分,使得各位能夠冷靜地判斷自己的長處與短處。
警告:即使閱讀了大量代碼,大家仍然未必能夠成為出色的程序員,就像是那樣閱讀過大量杰出文學作品但卻自身水平依舊低下的作家。很多珍惜生命 員會將開源項目或者其它軟件視為“答案來源”,甚至傾向于直接復制/粘貼其中的代碼以解決類似的問題。這么干只會讓各位成為更為拙劣的程序員,因為我們這只是在盲目接受其他人的智慧,卻未對其加以檢驗。(另外,這種免費午餐式的作法會導致我們意識不到新bug的引入。)
6.編寫代碼,而不僅僅滿足于現(xiàn)有工作
著手推進個人編程項目有著諸多優(yōu)勢。首先,這能幫助大家學習現(xiàn)有工作所接觸不到的工具與技術,并使大家在未來的職業(yè)發(fā)展中更具競爭力。無論大家是在為開源項目做貢獻還是參加當?shù)厣鐓^(qū)組織的無償工作,編寫更多代碼都能夠幫助我們積累起技術水平與自信心。(另外,大家的個人項目也能夠向潛在雇主切實證明,各位一直保持學習狀態(tài)且永不自滿。)
出于興趣編寫代碼的另一大優(yōu)勢在于迫使各位自己尋求答案。我們無法將最困難的部分留給其他人,那樣我們往往會在尚未進行充分思考前就向技術高手求助。
額外提示: 大家***不要選擇那些自己已經(jīng)非常熟悉的項目。經(jīng)歷失敗非常重要!不過在實際工作中失敗卻非常要命,特別是在限定了嚴格的時間進度的前提下——這也是參與個人項目的重要理由所在。
7.盡可能以一對一方式同其他開發(fā)人員協(xié)作
這有助于讓我們靜下心來傾聽他人意見。這可能意味著進行組隊編程,或者參與編程馬拉松,抑或是加入某個編程用戶群組(例如Vermont Coders Connection)。當為開源項目做貢獻時,大家應當高度關注來自用戶以及其他開發(fā)者的反饋意見,也許這些批評觀點中包含著極有價值的共同點。
大家可能會找到一位值得信任、能夠切實指導我們工作,甚至足以點撥我們完善職業(yè)規(guī)劃的好伙伴。千萬不要因為懶惰而錯失這寶貴的機遇。
8.學習技術而非工具
編程語言、工具與方法總是在不斷變化。有鑒于此,盡可能多地涉獵不同語言與框架就變得非常重要。大家應該將著眼于放在編程基礎身上,因為基礎知識永遠不會改變; 換言之,更多重視結構而非編程。如果大家認為只有一種正確方式完成某項任務,那么不妨親自進行實踐。教條主義會損害我們學習新鮮事物的能力,并導致各位在適應變化時顯得比較遲鈍。
原文標題:8 Ways to Become a Better Coder
【51CTO.com獨家譯稿,合作站點轉(zhuǎn)載請注明來源】