轉(zhuǎn)載某一女裝財務(wù)開發(fā)大佬的最新翻譯文章
原地址:http://www.reibang.com/p/8806de7a7597
以下為轉(zhuǎn)載內(nèi)容:
看到一篇非常好的文章,字字句句都說到心坎上周崭。搜了一下中文翻譯谋币,發(fā)現(xiàn)這篇文章已經(jīng)有人翻了热凹,但是翻譯質(zhì)量個人不敢恭維桨醋,很多地方應(yīng)該是Google機翻重荠,我昨天翻譯了一版發(fā)在公眾號里氯葬,由于急著發(fā)布,有一些錯別字和翻譯不通順的地方捅暴,還收到了不少朋友的意見恬砂,今天整理過再次發(fā)布在公眾號里和我的博客里,這里也來一篇蓬痒。
作者是國外一個培訓(xùn)機構(gòu)Firehose的創(chuàng)始人兼技術(shù)總監(jiān)泻骤,這個機構(gòu)教授Ruby語言,雖然這篇文章是以Firehose的教學(xué)和Ruby語言為例寫的,但其中體現(xiàn)的思想值得每一個編程學(xué)習(xí)者細(xì)細(xì)思考狱掂。當(dāng)然演痒,始終需要帶著自己的思想來閱讀別人的文章,原文作者由于身份趋惨,在文中畢竟還是要宣傳一下自己的機構(gòu)鸟顺,尤其里邊提到的各個階段的時間,加起來也不過3個月器虾。請各位讀者注意讯嫂,這只是非常理想化的時間。真正所需的時間因人而異兆沙,可以讀一下傳世之文《Teach Yourself Programming in Ten Years》(這篇文章有成熟的中文翻譯)欧芽。
提高編程技能的關(guān)鍵
原作者:KEN MAZAIKA
原文地址:The Key To Accelerating Your Coding Skills
學(xué)習(xí)編程的時候,有那么一個瞬間會感覺一切都發(fā)生了變化葛圃。在Firehose里千扔,我們稱這個瞬間叫做學(xué)習(xí)編程的拐點。越過了這個拐點以后库正,作為一個開發(fā)者曲楚,你的開發(fā)水平和方式會發(fā)生顯著的變化。從零開始到拐點的過程诀诊,是一個逐步在編程方面成為自力更生的開發(fā)者的過程洞渤,并且最終達到不需要任何手把手指導(dǎo)的程度。在拐點之前的學(xué)習(xí)過程可能令人沮喪属瓣,然而一旦你越過拐點载迄,會發(fā)現(xiàn)難以置信的變化。
藍色線條——學(xué)習(xí)具體知識
紅色線條——學(xué)習(xí)獨立解決問題
兩個線條相交的地方就是拐點抡蛙。
在Firehose护昧,雖然我們會教你使用Ruby創(chuàng)建Web應(yīng)用,編寫測試等等粗截,但我們的目的決不僅僅如此惋耙。我們最重要的目標(biāo)是讓我們的學(xué)生越過學(xué)習(xí)編程的拐點,以使他們具有獨立解決自己遇到的問題的能力熊昌。我們的教學(xué)方法重在培養(yǎng)獨立解決問題的能力绽榛,相比創(chuàng)建一系列應(yīng)用,這種能力才是無價之寶婿屹。
接受指導(dǎo)階段(3-8個星期正式學(xué)習(xí)編程)
剛開始學(xué)習(xí)編程的時候灭美,有很多知識需要了解。這些知識是特定領(lǐng)域的知識昂利,例如如何用Ruby寫一個循環(huán)或者使用Ruby on Rails 從數(shù)據(jù)庫中導(dǎo)出一些數(shù)據(jù)届腐。特定領(lǐng)域相關(guān)的知識就是一個特定的編程環(huán)境下所需要了解的內(nèi)容铁坎。
成為自力更生的開發(fā)者的第一步,是學(xué)會如何完成具體的某一項任務(wù)犁苏。一旦你能夠編寫代碼完成一些具體任務(wù)硬萍,這些代碼片段如何進一步在更大的范疇內(nèi)組合,對你來說就會變得更加明晰围详。隨著時間推移朴乖,你會認(rèn)識到設(shè)計模式的重要性,那些一開始陌生和令人困惑的東西短曾,最終也變得易懂易用寒砖。
對于剛開始的學(xué)生赐劣,最重要的技能是注重細(xì)節(jié)嫉拐。
在閱讀文檔和教程的時候,注重細(xì)節(jié)是非常重要的魁兼。即使是微不足道的輸入和拼寫錯誤都會引發(fā)程序出錯婉徘。一開始,查看錯誤信息是令人沮喪的咐汞,但卻是學(xué)習(xí)編程必不可少的步驟盖呼。在初學(xué)階段,對于錯誤信息和問題的處理會教給你在穩(wěn)定環(huán)境下編程最重要的技能:注重細(xì)節(jié)化撕。
根據(jù)錯誤信息進行Debug非常重要几晤,因為處理錯誤信息就是編程的一部分,編程新手和老手同樣都要面對錯誤信息植阴。唯一的區(qū)別是蟹瘾,處理錯誤信息的經(jīng)驗越豐富,花在修復(fù)問題上的時間就越少掠手,這是因為:
隨著經(jīng)驗不斷豐富憾朴,你會學(xué)習(xí)到如何通過閱讀錯誤信息快速定位到問題的細(xì)節(jié)。第一次你看到某個錯誤信息喷鸽,可能要花好久才能發(fā)現(xiàn)錯誤所在众雷。但當(dāng)你看過成百上千條錯誤信息之后(你必定會看到成百上千條),你能夠立刻定位問題并了解修復(fù)錯誤的細(xì)節(jié)做祝。
你應(yīng)該從你解決的每條錯誤信息中汲取經(jīng)驗砾省。可別僅僅只是修復(fù)錯誤,更重要的是理解為什么會出錯混槐。通過從每個錯誤中汲取經(jīng)驗编兄,下一次面對類似的問題時,你可以更加高效的處理問題纵隔。
一開始遇到錯誤信息翻诉,你可能需要求助于外界炮姨。隨著時間推移,你會先再次檢查你的代碼碰煌,或者有效的使用Google搜索引擎來解決問題舒岸,這樣你搬救兵的頻率會大大下降。
在接受指導(dǎo)階段芦圾,你會接受一系列的具體教學(xué)指引蛾派。一開始,你可能會發(fā)現(xiàn)跟上教學(xué)的進度并不那么容易个少,錯誤信息此起彼伏洪乍。隨著時間推移,你鍛煉出了debug的能力夜焦,并且逐漸注重細(xì)節(jié)壳澳,這個時候你跟上進度就變得更加容易。當(dāng)你完成了整個接受指導(dǎo)的階段茫经,編寫代碼的速度會大幅上升巷波。
在這個時候,一些人覺得非常自信——好像他們已經(jīng)不再需要接受系統(tǒng)性的指導(dǎo)并試著造一些東西——最后開心的掉入深淵而不自知卸伞。另外一些人會讀更多的教程抹镊,試圖獲取更多的特定領(lǐng)域知識,以達到“完全理解”的程度荤傲。不幸的是垮耳,教學(xué)指導(dǎo)只能帶你走到這里,僅靠教程和指導(dǎo)無法獲得真正的自信遂黍。真正的自信來自于面對一個你無法解決的問題终佛,經(jīng)過一番掙扎之后最終獨立解決問題的過程。
關(guān)于編程一個不可告人的小秘密是....
你永遠不會知道解決問題所需要知道的一切妓湘。你也許認(rèn)為繼續(xù)編程之旅查蓉,總有一天你會學(xué)到一切需要學(xué)習(xí)的東西,然后覺得編程索然無味榜贴。這一天永遠不會到來豌研。
編程是一種終身學(xué)習(xí)體驗。經(jīng)驗豐富的軟件工程師對于他們尚未解決的問題孜孜不倦地尋求解決方案唬党,是因為這能讓他們有機會學(xué)到更多的東西鹃共。如果你期望某一天你會了解編程的一切,記住驶拱,那一天永遠不會到來霜浴。這不是一件壞事。
大師失敗的次數(shù)比新手嘗試過的次數(shù)都多蓝纲。
當(dāng)你做好如下的準(zhǔn)備時阴孟,就可以開始下一階段了:
你對錯誤信息已經(jīng)習(xí)以為常晌纫,因為你看過太多的錯誤信息了,你可以迅速解碼出錯誤信息的意義永丝,并且找到代碼中出問題的地方
你已經(jīng)是通過Google搜索解決問題的高手锹漱。當(dāng)你要增加一個新功能或者遇到了一個令人困擾的錯誤信息,你知道如何去搜索所需信息慕嚷。
你能夠參考你在應(yīng)用的其他部分編寫的代碼并遵循設(shè)計模式去解決問題哥牍,而不總是尋求一步一步的說明。
拐點階段(良好心態(tài)下所需大概2-4個星期)
拐點階段是學(xué)習(xí)編程中最消磨人意志的階段喝检,從各種角度來說嗅辣,也是唯一重要的階段。當(dāng)你不再依靠教程挠说,開始解決沒人提供解決方案的問題時澡谭,這就是拐點階段。
有時你會覺得你還沒有準(zhǔn)備好面對這個階段纺涤,可能轉(zhuǎn)而回去根據(jù)詳盡的說明去編寫程序译暂。不要成為這種心態(tài)的犧牲品。你覺得最受打擊的原因是:
在拐點階段撩炊,你編程的速度可能只有接受指導(dǎo)階段的十分之一到二十分之一
這時你會產(chǎn)生疑問:我是否能成為一個程序員。在拐點階段產(chǎn)生不安和疑惑是正常的崎脉。
盡管你發(fā)現(xiàn)學(xué)習(xí)新東西和敲代碼的速度大幅下降拧咳,但實際上,你正在完成最重要的事情囚灼。當(dāng)你在特定領(lǐng)域的知識足夠豐富的時候骆膝,你所學(xué)的東西實際上是過程性知識(https://en.wikipedia.org/wiki/Procedural_knowledge)。
過程性知識指的是教會自己原本不知道的東西的能力灶体。當(dāng)你需要實現(xiàn)一個新功能的時候阅签,你要到Google上搜索什么關(guān)鍵字?當(dāng)你想要做很多事情的時候蝎抽,你會感覺自己身處一片漆黑之中政钟。學(xué)會依靠自己在黑暗中尋找光明是非常關(guān)鍵的,因為你永遠不可能了解所有東西樟结,所以你必須教會自己如何解決手頭的問題养交。
大部分人沒有意識到,學(xué)習(xí)編程需要同時學(xué)習(xí)特定領(lǐng)域知識與過程性知識瓢宦。
在人生的每一天里探索自我邊界以外的東西
很多軟件工程師一但找到自己的立足點碎连,就停留在自己的舒適區(qū)內(nèi)。這種程序員被叫做維護程序員——顯然不是你應(yīng)該成為的類型驮履。相反鱼辙,每一天你都應(yīng)該試著做超越自我的事情廉嚼。大部分程序員辭職的原因是:我已經(jīng)解決了所有有趣的問題,再也沒什么挑戰(zhàn)了倒戏。
相比將代碼和項目拉入到你的舒適區(qū)前鹅,更應(yīng)該去解決那些超出你的技能范圍之外的問題,這也是習(xí)得和拓展新技能的唯一方法峭梳。
下邊是一個越過了拐點的學(xué)員的感想:
我依然感覺到身處深淵舰绘,但我感覺棒極了,因為這就是我要呆的地方葱椭。
在Web開發(fā)中捂寿,實際上有兩個拐點一同出現(xiàn)
第一個拐點:Web開發(fā)拐點,出現(xiàn)在你能夠創(chuàng)建任何基于數(shù)據(jù)庫驅(qū)動的應(yīng)用時孵运。這意味著你有能力創(chuàng)建一個擁有許多頁面秦陋,從一個簡單的數(shù)據(jù)庫進行存取數(shù)據(jù)的Web應(yīng)用。Web開發(fā)者管這個叫做:“精通增刪改查”治笨。在這個階段驳概,你還可以通過閱讀文檔,Github或者技術(shù)博客旷赖,將一個第三方庫(比如 Ruby Gem)集成到自己的Web應(yīng)用中顺又。
第二個拐點:算法與數(shù)據(jù)結(jié)構(gòu)拐點,是一個不那么明顯的拐點等孵,但實際上更加重要稚照。已經(jīng)征服了這個拐點的人,會精通他們所用的編程語言俯萌,了解編程的基礎(chǔ)體系果录,擁有面對復(fù)雜問題的深厚知識儲備。
越過算法與數(shù)據(jù)結(jié)構(gòu)拐點的人通掣牢酰可以:
寫排序算法
實現(xiàn)并反轉(zhuǎn)鏈表
理解和編寫使用棧弱恒、隊列、樹的程序
使用遞歸和迭代思想編寫程序
簡要的說棋恼,一旦你越過了這個拐點返弹,你就掌握了如何操作數(shù)據(jù),并且了解代碼的性能影響蘸泻。大學(xué)里傳統(tǒng)的計算機科學(xué)教育特別注重讓學(xué)生越過算法與數(shù)據(jù)結(jié)構(gòu)拐點琉苇。但很多大學(xué)都使用在業(yè)界已經(jīng)不流行的語言來教授這一點,比如Scheme悦施,Racket 和 LISP并扇。
在大部分技術(shù)面試中,面試官都假設(shè)面試者已經(jīng)越過了Web開發(fā)拐點抡诞,因為這個拐點相對容易穷蛹,所以會將問題集中在評估面試者的算法和數(shù)據(jù)結(jié)構(gòu)能力上土陪。通常面試問題會集中在上邊提到的幾個方面:排序算法,反轉(zhuǎn)鏈表肴熏,使用棧鬼雀、隊列和樹。
一旦開發(fā)者同時越過了Web開發(fā)拐點和算法與數(shù)據(jù)結(jié)構(gòu)拐點蛙吏,他就掌握了整個世界源哩。
這些開發(fā)者能夠解決兩者兼?zhèn)涞奶魬?zhàn):在復(fù)雜的高級Web應(yīng)用內(nèi)構(gòu)建復(fù)雜的算法。這是專業(yè)的Web開發(fā)者每天都要做的事情鸦做。
征服拐點之后
征服拐點之后励烦,你將明白的東西聽上去有點違反直覺。深呼吸泼诱,然后:
對于學(xué)習(xí)編程坛掠,特定領(lǐng)域的知識在宏觀角度并不重要。
我并沒有開玩笑治筒,特定領(lǐng)域的知識確實沒有那么重要屉栓。一旦你通過拐點,你會在一到兩個星期耸袜,甚至幾天內(nèi)理解這句話友多。
真正重要的東西是:
對于一個Web框架牢固的掌握
在任何編程語言中編寫復(fù)雜算法的代碼
招聘經(jīng)理希望開發(fā)者****同時具備****Web開發(fā)技能和算法技能
我在Paypal工作時,我的團隊招進來一個高級Ruby Rails開發(fā)工程師句灌,但是之前他沒有任何Rails經(jīng)驗夷陋,只有Python,LISP和Perl經(jīng)驗胰锌。僅僅在幾天之內(nèi),他已經(jīng)給我們帶來很大震撼藐窄。幾星期之后是巨大的震撼资昧。他迅速被提升為技術(shù)團隊的領(lǐng)導(dǎo),也是我當(dāng)時最成功的招聘決定之一。
不要盲目追求熱點,許多人說:“最近Angular JS好熱門”肛宋,“JavaScript上升勢頭猛烈”稳其,“最近流行用...”。我對此的回復(fù)是:“那么又如何呢励两?”。當(dāng)你開始學(xué)習(xí)編程時,你唯一的目標(biāo)是找到拐點然后越過拐點棺亭,當(dāng)你成功之后,學(xué)習(xí)那些新的蟋软,好玩的東西毫不困難镶摘。
自力更生嗽桩。擁有無需結(jié)構(gòu)化的指導(dǎo),就可以學(xué)習(xí)新編程技能的能力凄敢,意味著你無需等待別人幫助你碌冶。對于你所需要學(xué)習(xí)的大部分知識,你可以搜索互聯(lián)網(wǎng)或者閱讀各種材料涝缝。
這并不意味著你可以迅速“了解”所有東西扑庞,而是意味著現(xiàn)在所有的東西都是“可以去了解”的,實際上拒逮,你將所向披靡罐氨。
在拐點時你將練就的技能
作為一個軟件開發(fā)者,最好的參考資料消恍,就是你編寫過的類似代碼岂昭。你完全理解了你所編寫的代碼之后,不必將所有的細(xì)節(jié)都記住狠怨。當(dāng)你開發(fā)一個新功能的時候约啊,首先問自己:“我之前做過類似的東西嗎?”如果答案是Yes佣赖,看一下以前寫過的類似代碼恰矩,在腦子里一行行的重放代碼,重新解釋給自己看憎蛤,然后問自己:“我現(xiàn)在可以使用相同的方式解決問題嗎外傅?”
視頻并不是學(xué)習(xí)特定領(lǐng)域知識的好材料,因為視頻通常耗費大量觀看時間俩檬。比如你想集成Google Maps API萎胰,你親自動手,在Github上找到相關(guān)代碼棚辽,復(fù)制到一個新建的項目技竟,可能花費不到一分鐘。而通過視頻指導(dǎo)屈藐,看一遍可能需要10-30分鐘榔组。
高效率征服拐點的一些策略
由于征服拐點是學(xué)習(xí)編程中最重要的事情,所以你必須讓自己盡可能順利的越過這個階段联逻。這意味著你必須在接受指導(dǎo)階段就開始進行準(zhǔn)備搓扯,并在整個過程中保持正確的心態(tài)。
在接受指導(dǎo)階段包归,除了學(xué)習(xí)結(jié)構(gòu)性的指導(dǎo)材料锨推,還要全程給自己一些挑戰(zhàn)。
對于每一課,嘗試做超過教學(xué)范圍的事情爱态。如果書上有“挑戰(zhàn)”或者“自己努力完成”的問題谭贪,把它們?nèi)孔龅簟=鉀Q沒有指導(dǎo)的問題會帶來無需結(jié)構(gòu)化指導(dǎo)便能解決問題的重要經(jīng)驗锦担。
嘗試盡可能少的依賴教學(xué)材料俭识。在Firehose,我們通常讓學(xué)生通過文檔了解如何集成一些gems或者實現(xiàn)一些代碼洞渔。對學(xué)生來說套媚,他們主要根據(jù)程序文檔操作,教學(xué)材料僅作為備查磁椒,而不是單純的依賴教學(xué)材料按部就班的學(xué)習(xí)堤瘤。注意,文檔會將閱讀者視為已經(jīng)跨越了拐點的開發(fā)者浆熔。習(xí)慣了在Github上閱讀文檔本辐,對你自力更生是莫大的幫助。
關(guān)注要點與可復(fù)用性医增。從頭開始編寫應(yīng)用程序慎皱,提交一個新應(yīng)用到Github或者Heroku,盡早構(gòu)建數(shù)據(jù)庫遷移叶骨。
越過拐點可能具有挑戰(zhàn)性茫多,這里有一些建議值得嘗試:
了解越過拐點是一個困難的過程,別給自己太大壓力忽刽,并且設(shè)定現(xiàn)實的目標(biāo)天揖。你不能將你在接受指導(dǎo)階段的“超人”一般敲代碼速度和這個階段的蝸牛速度進行比較。要記得你一直在學(xué)習(xí)很多東西跪帝,在這個階段今膊,你正在學(xué)習(xí)的是可以自己搞定全新事物的能力。
如果你自信心略有不足伞剑,要知道你的感受是完全正常的万细。繼續(xù)努力,如果你依然很掙扎纸泄,試著和已經(jīng)越過拐點的人交流一下,也許他們會了解你現(xiàn)在所處的位置腰素,并且告訴你這種感受只是暫時的聘裁。持續(xù)努力,但不要過度勞累弓千。在學(xué)習(xí)編程的這個階段衡便,你每天最多只能有效率的工作6個小時。在疲勞的狀態(tài)下學(xué)習(xí)只會延長你跨越拐點的時間。
這個階段獲取信心的最佳方式是解決自己遇到的疑難問題镣陕。你的情緒可能會像過山車一樣谴餐。有時候你覺得你自己好像被放在火上烤,但經(jīng)過在一個問題上15小時的努力之后呆抑,你可能有完全相反的感受岂嗓。
如果你在某件事情上花費了5分鐘到5個小時,依然沒有頭緒鹊碍,確實很令人沮喪厌殉,但每次你成功搞定一個問題,實現(xiàn)一個功能侈咕,那種自信源源不斷涌現(xiàn)的感覺是你最需要的公罕。在不依靠幫助解決了很多困難的問題之后,你會沉醉于在你的舒適區(qū)之外不斷解決問題的感覺耀销。
如何知道你已經(jīng)跨越了拐點
拐點過程的最后階段是接受楼眷。接受軟件開發(fā)是一個持續(xù)學(xué)習(xí)的過程。如果你感覺已經(jīng)學(xué)習(xí)了所有東西熊尉,只意味著你應(yīng)該想一想如何解決更復(fù)雜的問題罐柳。(完)
作者:明豬柚爸
鏈接:http://www.reibang.com/p/8806de7a7597
來源:簡書
簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處帽揪。