程序員應(yīng)該捫心自問(wèn)的10個(gè)問(wèn)題
想成為一名web開(kāi)發(fā)人員?那么,扔掉《24小時(shí)突擊掌握xx語(yǔ)言》這類(lèi)騙子書(shū)籍。你應(yīng)該養(yǎng)成一個(gè)習(xí)慣,每天問(wèn)問(wèn)自己下面這10個(gè)問(wèn)題。
1.此處有沒(méi)有模式?
研究在哪些情況下行得通,哪些情況下行不通的設(shè)計(jì)模式,能夠讓我們發(fā)現(xiàn)潛在的規(guī)則,了解看似不相關(guān)的概念和行為。為了更深層次地了解工作,你需要時(shí)不時(shí)地問(wèn)問(wèn)自己,“此處有沒(méi)有設(shè)計(jì)模式?”。
這句話適用的不只是你的代碼。在根據(jù)業(yè)務(wù)要求而變的類(lèi)型變化中有沒(méi)有模式?技術(shù)發(fā)展有沒(méi)有模式?你是否經(jīng)??吹酵瑯宇?lèi)型的bug連連彈出?
理解其實(shí)就是一種感知模式。——以賽亞·伯林
2.如何讓它變得簡(jiǎn)單起來(lái)?
通常作為web開(kāi)發(fā)人員,我們會(huì)想著拿出復(fù)雜又可擴(kuò)展的解決方案。搞點(diǎn)復(fù)雜的會(huì)讓你覺(jué)得自己非常的高大上。問(wèn)題是,你永遠(yuǎn)無(wú)法預(yù)知你的產(chǎn)品和業(yè)務(wù)在未來(lái)將會(huì)發(fā)生怎樣的改變。
架構(gòu)和編碼與其說(shuō)像建造,還不如說(shuō)更像園藝藝術(shù)。你必須得能夠適應(yīng)不斷變化的環(huán)境。解決方案越復(fù)雜,它的適應(yīng)力就越弱。
簡(jiǎn)單才是***的復(fù)雜。——達(dá)芬奇
3.它為什么這么工作?
知道事物能工作,與知道它為什么這么工作是兩個(gè)完全不同的事情。知道一些事物的行為原因,有助于你做出顯然更好的決策。
偉大的程序員,和那些只是知道一門(mén)編程語(yǔ)言的人之間的區(qū)別是,兩者處于的知識(shí)層深度不同,前者深刻地理解其工作原理。
這也適用于修復(fù)問(wèn)題的時(shí)候。“只要重新啟動(dòng)服務(wù)即可。”“你重啟了嗎?”當(dāng)彈出問(wèn)題的時(shí)候,我們往往會(huì)說(shuō)類(lèi)似于這樣的話。然而,如果你這樣說(shuō)了,那你就失去了一次學(xué)習(xí)的黃金機(jī)會(huì)。
知道為什么會(huì)出現(xiàn)問(wèn)題,才能從根本上修復(fù)問(wèn)題,才能避免再出現(xiàn)這樣的問(wèn)題。
4.之前有人做過(guò)嗎?
當(dāng)你自我感覺(jué)發(fā)明了一種復(fù)雜算法的時(shí)候,可能就意味著你正在錯(cuò)誤的道路上了。***的方法是搜索其他人是否已經(jīng)解決了這個(gè)問(wèn)題。
需要寫(xiě)算法,以便于添加標(biāo)簽到最接近用戶(hù)鼠標(biāo)的菜單項(xiàng)中?別急,已經(jīng)有解救方法了。想為送貨車(chē)找一條最短路徑?也已經(jīng)有解決方法了。想找類(lèi)似于用戶(hù)剛剛enter的標(biāo)簽,那么也不用自己絞盡腦汁寫(xiě)了。
上面這些只是幾個(gè)例子,但是相信我,你碰到的問(wèn)題,別人早就碰到過(guò)了。
我能看得更遠(yuǎn),那是因?yàn)檎驹诰奕说募绨蛏稀?mdash;—牛頓
5.誰(shuí)***個(gè)提出來(lái)的?
你覺(jué)得自己知道REST?
那么,你讀過(guò)Roy Fielding說(shuō)明REST的原始文件嗎,你了解它的期望目的嗎?暫且不說(shuō)那個(gè)在IDE V7中使用REST API生成向?qū)П饶愀薪?jīng)驗(yàn)的博主了。
所以,告訴自己試著去閱讀概念和理論的原始來(lái)源。然后通過(guò)各種方法去了解行業(yè)思想***給出的***開(kāi)發(fā)成果。如果你不知道是從哪里開(kāi)始的,那么你怎么理解目前的發(fā)展進(jìn)程呢?
6.我真的熱愛(ài)我目前的工作嗎?
首先讓我們面對(duì)一個(gè)事實(shí):編程很難。
即使很難,編程也在不斷發(fā)展。如果用現(xiàn)在的標(biāo)準(zhǔn)來(lái)看,2年前的框架簡(jiǎn)直笨拙地就像一頭恐龍。要想留在這一行,那么你需要終生致力于學(xué)習(xí)和研究。
如果你確實(shí)不喜歡編程,那么要想跟上那些熱愛(ài)的人的步伐,希望并不大。找找你為什么對(duì)她沒(méi)有興致的原因。不要因?yàn)榕c市場(chǎng)存在差距或因?yàn)榇鲞€不錯(cuò),就決定成為一名安全專(zhuān)家,不要只是因?yàn)樽罱奈恼律厦嬖u(píng)論說(shuō),UX是高科技領(lǐng)域中最熱門(mén)的職位,就立志成為一個(gè)UX專(zhuān)家。
重要的事情說(shuō)三遍:做自己熱愛(ài)的事情。做自己熱愛(ài)的事情。做自己熱愛(ài)的事情。
做自己熱愛(ài)的事情,你所需要的資源也會(huì)隨之而來(lái)。——彼得·麥克威廉斯
7.還可以用在哪里?
我發(fā)現(xiàn)web開(kāi)發(fā)人員***的局限之一就是失敗的想象力。
我們?cè)谔囟ǖ那闆r下學(xué)習(xí)的東西,或看到某種用于解決特定問(wèn)題的技術(shù),我們往往會(huì)認(rèn)為這就是它們的唯一用途。但是,這個(gè)想法基本上都是錯(cuò)的。每次你學(xué)到新的東西的時(shí)候,都應(yīng)該問(wèn)自己:“還可以用在哪里?”。
學(xué)到了一種超棒的新的定位方法來(lái)定位圖形節(jié)點(diǎn),那么它是不是也可以運(yùn)用到在有2個(gè)維度的數(shù)據(jù)集中查找某一個(gè)數(shù)據(jù)點(diǎn)?發(fā)現(xiàn)一個(gè)越過(guò) WebSockets從客戶(hù)端發(fā)送數(shù)據(jù)到服務(wù)器的很棒方法?那么它該如何應(yīng)用于制定一個(gè)可擴(kuò)展系列的后端服務(wù)?有時(shí)候此路不通,有時(shí)候卻是可行的。
邏輯能力能讓你從A到Z,但是想象力卻能讓你去往任何地方。—— 愛(ài)因斯坦
8.我敗在哪里?
最簡(jiǎn)單的革新方法就是降低失敗的成本。
游戲開(kāi)發(fā)公司Valve和它的一些同行就將此當(dāng)作金科玉律。這同樣適用于web開(kāi)發(fā)人員,如果你害怕失敗,那么你將永遠(yuǎn)不會(huì)有大的突破。
勇敢地去嘗試,從失敗中學(xué)習(xí),然后再試一次。
不要害怕犯錯(cuò)。認(rèn)識(shí)失敗。然后從頭來(lái)過(guò)。——本杰明·富蘭克林
9.如何實(shí)現(xiàn)這個(gè)目標(biāo)?
我們生活的世界中只有很少一部分事情是真的完全不可能的。
要抱著自己想做的任何事情都是可能的這樣一種想法去做事??赡苣銜?huì)發(fā)現(xiàn)你想做的事不符合當(dāng)前實(shí)際,但隨著世界的不斷進(jìn)步,它也許比你想象地更快成為了現(xiàn)實(shí)。
事情未成功之前,它永遠(yuǎn)是看似不可能的。——曼德拉(前南非總統(tǒng))
10.我可以向誰(shuí)學(xué)習(xí)?
不要在你是最聰明的地方工作。
選擇那些擁有能夠激勵(lì)你,挑戰(zhàn)你,讓你做得更好的同事的工作和企業(yè)。不必與代碼相關(guān),在文本編輯器和命令行之外還有一個(gè)世界。學(xué)習(xí)其他領(lǐng)域的事情,然后應(yīng)用于你的工作中。
不管如何,僅僅勝任工作是不夠的。
譯文鏈接:http://www.codeceo.com/article/10-problems-programmer-ask.html
英文原文:10 Questions Developers Should be Asking Themselves