(轉(zhuǎn))The Key To Accelerating Your Coding Skills 中文翻譯

轉(zhuǎn)載某一女裝財務(wù)開發(fā)大佬的最新翻譯文章
原地址:http://m.itdecent.cn/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á)到不需要任何手把手指導(dǎo)的程度。在拐點之前的學(xué)習(xí)過程可能令人沮喪,然而一旦你越過拐點,會發(fā)現(xiàn)難以置信的變化。

15532832-d01ec23582bf8797.jpeg

藍(lá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ù),這些代碼片段如何進(jìn)一步在更大的范疇內(nèi)組合,對你來說就會變得更加明晰。隨著時間推移,你會認(rèn)識到設(shè)計模式的重要性,那些一開始陌生和令人困惑的東西,最終也變得易懂易用。

對于剛開始的學(xué)生,最重要的技能是注重細(xì)節(jié)。

在閱讀文檔和教程的時候,注重細(xì)節(jié)是非常重要的。即使是微不足道的輸入和拼寫錯誤都會引發(fā)程序出錯。一開始,查看錯誤信息是令人沮喪的,但卻是學(xué)習(xí)編程必不可少的步驟。在初學(xué)階段,對于錯誤信息和問題的處理會教給你在穩(wěn)定環(huán)境下編程最重要的技能:注重細(xì)節(jié)。

根據(jù)錯誤信息進(jìn)行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é)的進(jìn)度并不那么容易,錯誤信息此起彼伏。隨著時間推移,你鍛煉出了debug的能力,并且逐漸注重細(xì)節(jié),這個時候你跟上進(jìn)度就變得更加容易。當(dāng)你完成了整個接受指導(dǎo)的階段,編寫代碼的速度會大幅上升。

在這個時候,一些人覺得非常自信——好像他們已經(jīng)不再需要接受系統(tǒng)性的指導(dǎo)并試著造一些東西——最后開心的掉入深淵而不自知。另外一些人會讀更多的教程,試圖獲取更多的特定領(lǐng)域知識,以達(dá)到“完全理解”的程度。不幸的是,教學(xué)指導(dǎo)只能帶你走到這里,僅靠教程和指導(dǎo)無法獲得真正的自信。真正的自信來自于面對一個你無法解決的問題,經(jīng)過一番掙扎之后最終獨立解決問題的過程。

關(guān)于編程一個不可告人的小秘密是....

你永遠(yuǎn)不會知道解決問題所需要知道的一切。你也許認(rèn)為繼續(xù)編程之旅,總有一天你會學(xué)到一切需要學(xué)習(xí)的東西,然后覺得編程索然無味。這一天永遠(yuǎn)不會到來。

編程是一種終身學(xué)習(xí)體驗。經(jīng)驗豐富的軟件工程師對于他們尚未解決的問題孜孜不倦地尋求解決方案,是因為這能讓他們有機會學(xué)到更多的東西。如果你期望某一天你會了解編程的一切,記住,那一天永遠(yuǎn)不會到來。這不是一件壞事。

15532832-2ffd38fd03e1a216.png

大師失敗的次數(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)鍵的,因為你永遠(yuǎn)不可能了解所有東西,所以你必須教會自己如何解決手頭的問題。

大部分人沒有意識到,學(xué)習(xí)編程需要同時學(xué)習(xí)特定領(lǐng)域知識與過程性知識。

在人生的每一天里探索自我邊界以外的東西

很多軟件工程師一但找到自己的立足點,就停留在自己的舒適區(qū)內(nèi)。這種程序員被叫做維護(hù)程序員——顯然不是你應(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ù)庫進(jìn)行存取數(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工作時,我的團(tuán)隊招進(jìn)來一個高級Ruby Rails開發(fā)工程師,但是之前他沒有任何Rails經(jīng)驗,只有Python,LISP和Perl經(jīng)驗。僅僅在幾天之內(nèi),他已經(jīng)給我們帶來很大震撼。幾星期之后是巨大的震撼。他迅速被提升為技術(shù)團(tuán)隊的領(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)階段就開始進(jìn)行準(zhǔn)備,并在整個過程中保持正確的心態(tài)。

在接受指導(dǎo)階段,除了學(xué)習(xí)結(jié)構(gòu)性的指導(dǎo)材料,還要全程給自己一些挑戰(zhàn)。

對于每一課,嘗試做超過教學(xué)范圍的事情。如果書上有“挑戰(zhàn)”或者“自己努力完成”的問題,把它們?nèi)孔龅?。解決沒有指導(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)階段的“超人”一般敲代碼速度和這個階段的蝸牛速度進(jìn)行比較。要記得你一直在學(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://m.itdecent.cn/p/8806de7a7597
來源:簡書
簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容