程序員寫代碼時(shí)應(yīng)該反復(fù)問自己的10個(gè)問題
你想成為一名優(yōu)秀的程序員嗎?
那么,現(xiàn)在是時(shí)候放下《24小時(shí)學(xué)會(huì)xxx語言v8.3》超級(jí)騙子書,相反,你應(yīng)當(dāng)養(yǎng)成每天反問自己以下10個(gè)問題的習(xí)慣。
你的代碼中是否有一種模式存在?
找尋模式中的可行與不可行將發(fā)現(xiàn)其中看似無關(guān)的想法或基本原則。要對(duì)工作達(dá)到深入的理解,你必須養(yǎng)成反問自己“是否有一種模式存在?”的習(xí)慣。
它不僅僅適用于你的代碼。是否有適應(yīng)各類型商業(yè)變化的模式嗎?是否有一種適用于技術(shù)發(fā)展的模式?你有沒有看到同類型的錯(cuò)誤如雨后春筍般冒出來?
所謂理解就是要理解模式 — 以賽亞·伯林
怎么讓代碼變得更簡單?
開發(fā)者經(jīng)常想得到復(fù)雜的和可擴(kuò)展的解決方案。做一些極為復(fù)雜的東西,覺得自己就是自己宇宙的主宰。問題是將來你永遠(yuǎn)無法預(yù)知產(chǎn)品和業(yè)務(wù)會(huì)如何改變。
“架構(gòu)”和代碼更像是園藝而不是建筑。你必須要有能力去適應(yīng)不斷變化的環(huán)境。越復(fù)雜的解決方案越難做。
簡潔是***的復(fù)雜 — 列昂納多·達(dá)·芬奇
你知道程序?yàn)槭裁匆@樣運(yùn)行嗎?
知道東西像那樣運(yùn)作和知道為什么會(huì)像那樣運(yùn)作是兩個(gè)完全不同的事。如果你知道事情為什么會(huì)那樣,那么你就能夠做出更好的決策。
一個(gè)偉大的程序員和知道有某種編程語言的人來說,差別在于理解為什么的深度。
同樣的原理也適用于問題修正。“重啟一下服務(wù)。” “你試過重啟嗎?” 當(dāng)有問題發(fā)生時(shí),我們經(jīng)常會(huì)想到這些話。每次你這樣說時(shí),你就失去了一個(gè)學(xué)習(xí)的黃金機(jī)會(huì)。
理解為什么出現(xiàn)這樣的錯(cuò)誤,將修正根本原因,避免出現(xiàn)治標(biāo)不治本。最起碼,你以后不要再犯同樣的錯(cuò)誤。
之前有沒有人寫過這樣的代碼?
無論何時(shí),你發(fā)現(xiàn)自己發(fā)明了一個(gè)復(fù)雜的算法,你很可能走在了錯(cuò)誤的軌道上。除非你搜索到一份別人正好解決了這個(gè)問題博士論文。
需要編寫一個(gè)向用戶鼠標(biāo)旁的item添加標(biāo)簽的算法?看看Voronoi
Tesselations. 想要找到卡車送貨的最短路徑?看看Dijkstra. 想要找到用戶輸入內(nèi)容的最接近的標(biāo)記?應(yīng)該是找到它的Levenschtein distance.
這只是幾個(gè)簡單示例,相信我,它們無處不在。
我能夠看得更遠(yuǎn),那是因?yàn)槲艺驹诰奕说募缟?— 艾薩克·牛頓
你知道這種技術(shù)的出處嗎?
你認(rèn)為你知道REST嗎?
你有讀過Roy Fielding描述REST的論文原文嗎?你真的明白它的最初用意嗎?那種在IDE v7工具中比你多用REST API生成向?qū)?分鐘的家伙寫出來的博客可不算數(shù)的。
幫自己一個(gè)忙,試圖去讀概念或原理的原始文檔,然后通過各種手段去了解行業(yè)***的***發(fā)展動(dòng)態(tài)。如果你不知道他們是從哪些開始的,那就緊跟他們的步伐吧?(不知道他們從哪來,就跟著他們到哪去吧!)
我喜歡現(xiàn)在所做的嗎?
請(qǐng)面對(duì)編程其實(shí)是很難的。
除了很難以外,編程還是發(fā)展很快的。Art框架從2年前的“笨重恐龍”已經(jīng)發(fā)展到今天的標(biāo)準(zhǔn)。為了站到你“游戲”的頂端,你必須樹立一個(gè)終生學(xué)習(xí)和研究的信念。
如果你不喜歡你所做的,那么你就沒有跟上其他家伙(喜歡自己所做的)的可能。所以找到讓你激情燃燒的編程類型!不要因?yàn)槭袌鋈笨诨蛘呤杖氩环贫鴽Q定成為一名安全專家,不要因?yàn)橐黄恼抡fUX是最熱門的職業(yè)而決定成為一名UX專家。
再說一次,做你喜歡的。
做你喜歡的,所需的資源將隨之而來的 — 彼得·麥克威廉斯
這些代碼還可以用在其它地方嗎?
我看到程序員***的一個(gè)限制就是,自己失敗的想象力。
如果我們學(xué)習(xí)到一個(gè)適應(yīng)于特定環(huán)境的東西,或者看到解決某個(gè)特定問題的技術(shù)時(shí),我們認(rèn)為這就它唯一適用的地方。這是完全錯(cuò)誤的。每當(dāng)學(xué)到新東西時(shí),反問自己:“其他地方還可以使用嗎?”
當(dāng)發(fā)現(xiàn)了在圖表上定位節(jié)點(diǎn)的新的偉大的方法時(shí),是不是可以將它應(yīng)用于二維數(shù)據(jù)集中感興趣數(shù)據(jù)的定位呢?當(dāng)發(fā)現(xiàn)通過websockets從客戶端發(fā)送數(shù)據(jù)到服務(wù)器端的新方法時(shí),它怎么才能應(yīng)用到可擴(kuò)展的后臺(tái)服務(wù)上呢?有時(shí)是錯(cuò)誤的,但有時(shí)也是正確的。
這給我們帶來了下一個(gè)問題……
邏輯只能帶你從A到Z,想像力去可以帶你到任何地方 — 阿爾伯特·愛因斯坦
今天有什么做錯(cuò)的嗎?
增加創(chuàng)收的最簡單方法是降低錯(cuò)誤的損失。
游戲開發(fā)公司Valve和其他幾個(gè)公司很認(rèn)為這個(gè)觀點(diǎn)。這同樣適用你成為web開發(fā)者的進(jìn)步過程。如果你害怕失敗,你就不會(huì)有大的突破。
勇敢、嘗試、失敗、學(xué)習(xí)然后再來。
不要害怕錯(cuò)誤,它能讓你認(rèn)識(shí)失敗,然后重新來過。— 本杰明·富蘭克林
難道真的沒有辦法嗎?
我們生活在世界上很小的一個(gè)地方是不可能的(除了少數(shù)例外)。
假設(shè)不管你做的什么事情都是可行的,然后采用向后的方向回推回去。你可能會(huì)發(fā)現(xiàn),你想做的暫時(shí)是不切實(shí)際的,但它足以改變世界,可能變成現(xiàn)實(shí)的速度比你想像的還要快。
似乎一切看起來都是不可能,除非你完成它 — 納爾遜曼德拉
我可以向誰學(xué)習(xí)?
永遠(yuǎn)不要在一群你在其中是最聰明的人的地方工作。
挑選擁有可以啟發(fā)你、激勵(lì)你做得更多的同事的工作和公司。不要與編程扯上關(guān)系,在文本編輯器和命令行外面還有一個(gè)完整的世界存在。從其他領(lǐng)域?qū)W習(xí),設(shè)法應(yīng)用到你的工作中。
永遠(yuǎn)不要滿足于能勝任現(xiàn)有的工作!