翻譯—The Key To Accelerating Your Coding Skills(提升你編碼水平的要點(diǎn))

當(dāng)你學(xué)會(huì)寫程序時(shí),會(huì)有一個(gè)時(shí)刻認(rèn)為一切都開始改變。在Firehose網(wǎng)站,我們把它叫做編程之路的拐點(diǎn)。這一段時(shí)間后,作為一名開發(fā)者你的所有操作都會(huì)有很多不同。建立拐點(diǎn)是寫程序中變得自立的過(guò)程,到達(dá)這個(gè)拐點(diǎn)的你不再需要任何幫助。它也可能是一個(gè)痛苦的經(jīng)歷,但是一旦你堅(jiān)持到這個(gè)拐點(diǎn),你將會(huì)變得難以置信的強(qiáng)大。

在Firehose網(wǎng)站,我們的目標(biāo)不僅僅是教會(huì)你Ruby語(yǔ)言,還要講給你如何構(gòu)建web應(yīng)用,怎樣寫測(cè)試。盡管我們會(huì)講述很多技術(shù),但我們主要但目標(biāo)是使得求學(xué)的人盡快到達(dá)拐點(diǎn),學(xué)會(huì)自行解決所遇到問(wèn)題的能力。我們認(rèn)為可以自行解決問(wèn)題的能力是非常厲害的,這里的教學(xué)將帶著你進(jìn)步一學(xué)會(huì)怎么樣快速去構(gòu)建app。


輔導(dǎo)階段(3到8周)

當(dāng)你一開始學(xué)習(xí)編碼時(shí),有太多到你還不了解的Domain層。例如:在ruby中怎么寫循環(huán)語(yǔ)句,怎么樣用ruby從庫(kù)中提取數(shù)據(jù)。Domain層包含唯一的確定編程環(huán)境的協(xié)議。

自我獨(dú)立的第一步是學(xué)會(huì)怎么樣制定計(jì)劃。因?yàn)橥瓿闪艘恍┯?jì)劃,一個(gè)一個(gè)計(jì)劃拼湊在一起將會(huì)是很明顯的提升。


對(duì)于初學(xué)者來(lái)說(shuō),最重要的技巧就是學(xué)會(huì)注重細(xì)節(jié)。

密切關(guān)注細(xì)節(jié)是很重要的載你閱讀資料如文檔或者教學(xué)的時(shí)候。甚至是一個(gè)很小的拼寫失誤都會(huì)造成的錯(cuò)誤或者故障。一開始看到錯(cuò)誤信息真的很煩人,但是它也是學(xué)習(xí)編程過(guò)程中最重要的一步。處理錯(cuò)誤和問(wèn)題這一時(shí)期講教會(huì)你在安全環(huán)境中重要的編程本領(lǐng)之一:面向細(xì)節(jié)。

調(diào)試錯(cuò)誤信息真的非常重要。事實(shí)上,調(diào)試錯(cuò)誤只是編程的一部分:它們是無(wú)經(jīng)驗(yàn)的或者老練的程序員都會(huì)遇到的。唯一的區(qū)別是:你處理錯(cuò)誤的經(jīng)驗(yàn)越多,花費(fèi)的時(shí)間越少。一下是原因:

隨著時(shí)間的推移,你將學(xué)會(huì)怎么樣閱讀錯(cuò)誤信息并迅速提取出問(wèn)題的相關(guān)細(xì)節(jié)。第一次看到錯(cuò)誤信息時(shí),會(huì)花費(fèi)大量的時(shí)間去解碼它到底意味著什么。但是在你解決過(guò)幾百個(gè)粗錯(cuò)誤信息后,你就可以精確定義到是哪里出的問(wèn)題和相關(guān)的細(xì)節(jié)以便去解決它。

你應(yīng)該從你解決的每一個(gè)錯(cuò)誤信息中去學(xué)習(xí)。而不是去修復(fù)錯(cuò)誤并完成它;要理解你修復(fù)的錯(cuò)誤有什么問(wèn)題。從你的每一個(gè)錯(cuò)誤中學(xué)習(xí),下次在遇到相同錯(cuò)誤的時(shí)候,你可以快速的修復(fù)它。

起初,你可能看到每一個(gè)錯(cuò)誤信息都去尋求幫助。隨著時(shí)間推移,你會(huì)很少需要幫助通過(guò)頻繁的檢查你的代碼和去谷歌只能檢索問(wèn)題。

在教學(xué)階段,你要遵循指令。首先,你會(huì)發(fā)現(xiàn)遵循指令很有挑戰(zhàn)性,錯(cuò)誤信息會(huì)頻繁發(fā)生。隨著時(shí)間推移,你處理故障錯(cuò)誤的技能將會(huì)提升,并且會(huì)更加注重在那個(gè)細(xì)小的細(xì)節(jié),當(dāng)然你也會(huì)更快的取得進(jìn)步。當(dāng)你結(jié)束教學(xué)階段的時(shí)候,你會(huì)發(fā)現(xiàn)你可以更快的速度編寫代碼。

在這個(gè)拐點(diǎn),一些人是很自信的。他們要準(zhǔn)備放棄教學(xué),開始不用結(jié)構(gòu)化的指導(dǎo)去構(gòu)建項(xiàng)目,并且愉快的鉆入程序的深區(qū)。其他的求學(xué)者會(huì)尋找更多的“完全理解”的教程,試圖去獲得更多領(lǐng)域特定的知識(shí)。不幸的是,教程只能帶你到這里,并且在教程或者指導(dǎo)中是找不到真正的自信的。真正的自信來(lái)自于你對(duì)不知道如何解決的問(wèn)題的挑戰(zhàn),是你自己發(fā)現(xiàn)解決問(wèn)題的辦法。


編程不好的小秘密是……

你完全不知道你在解決問(wèn)題中需要了解什么。在這個(gè)深坑中,你可能最終會(huì)設(shè)想你學(xué)會(huì)了你需要學(xué)習(xí)的所有知識(shí),然后平方增長(zhǎng)。這個(gè)是絕不會(huì)發(fā)生的。

寫程序是終生學(xué)習(xí)的經(jīng)歷。有經(jīng)驗(yàn)的程序員也會(huì)尋求他們還沒(méi)有解決的問(wèn)題的辦法,因?yàn)檫@一會(huì)給他們學(xué)習(xí)更多的機(jī)會(huì)。如果你發(fā)現(xiàn)你自己想要等一個(gè)時(shí)刻(你感覺(jué)你了解了所有代碼的知識(shí)的時(shí)刻),要知道:你所等待的這一天永遠(yuǎn)不會(huì)到來(lái)。真是一件美妙的事情。

你要準(zhǔn)備好進(jìn)入下一個(gè)階段:

在你遇到過(guò)足夠多的錯(cuò)誤信息后,它們不再對(duì)你吃驚。相反的,你知道怎么樣破譯它們,以及問(wèn)題出在哪個(gè)地方。

你現(xiàn)在是使用谷歌搜索的專家了。當(dāng)你正在新加一個(gè)功能或者看到疑惑的錯(cuò)誤信息,你已經(jīng)知道你需要搜索什么來(lái)獲取所需要的信息。

你可以參考你所寫的其他部分的代碼并遵循他們的模式,而不用總是尋找一步一步的說(shuō)明。


一個(gè)拐點(diǎn)(2-4周中,要有正確的心態(tài))

這個(gè)階段是學(xué)習(xí)編碼最令人沮喪的階段之一,但在很多方面,它也是唯一最重要的階段。這是你不使用教程開始解決問(wèn)題的時(shí)段因?yàn)闆](méi)人幫你解決問(wèn)題了。

在某些時(shí)候,你將感到你還沒(méi)有準(zhǔn)備好去度過(guò)這個(gè)時(shí)間就像你想要回到有什么事情都要教你的時(shí)候。不要成為這個(gè)沮喪感的犧牲品,原因是:

在這個(gè)時(shí)間端,你會(huì)重復(fù)編碼10到20次比上個(gè)階段更慢。

你可能會(huì)開始質(zhì)疑自己并且想知道你是否可以成為一名真正到程序員。這個(gè)時(shí)候,不安全感和懷疑是普遍存在的。

盡管你感覺(jué)到學(xué)習(xí)和完成一些事情有更慢了,事實(shí)上,你正在實(shí)現(xiàn)最重要的事情。當(dāng)你的特定領(lǐng)域的知識(shí)到達(dá)拔尖的程度時(shí),你所學(xué)的一切知識(shí)都是程序知識(shí)。

程序性的知識(shí)可以教會(huì)你一路上你不知道的。當(dāng)你需要實(shí)現(xiàn)一個(gè)新功能時(shí),你應(yīng)該做什么樣的谷歌搜索?這個(gè)時(shí)間段,當(dāng)你想到許多想要完成的事時(shí)會(huì)讓你感覺(jué)在黑暗中。學(xué)到怎么樣找到適合自己的點(diǎn)是至關(guān)重要的,因?yàn)槟憬^不可能任何事情都了解,所以你需要教會(huì)自己如何解決手頭上的問(wèn)題。

大多數(shù)的人沒(méi)有意識(shí)到你需要學(xué)會(huì)特定領(lǐng)域的知識(shí)和程序性的知識(shí)為了能夠編碼。


在你的余生中,每一天都要超越你的極限

一些程序員找到自己的步子后會(huì)安于現(xiàn)狀。這類程序員被稱為維護(hù)程序員。這個(gè)并不是你應(yīng)該努力做的事情。相反,你應(yīng)該盡量每天都超越你的極限。程序員最普遍的辭職原因是“自從我解決了所有的有趣的問(wèn)題后,它不再具有挑戰(zhàn)性了?!?/p>

不要試圖把編碼項(xiàng)目拉到你的舒適區(qū),而應(yīng)該去尋找超越你當(dāng)前技術(shù)范圍之外的問(wèn)題。這是擴(kuò)展你的技能的唯一的途徑。

用一位Firehose學(xué)生的一句話來(lái)表達(dá)他的拐點(diǎn):

? ?“我還是感覺(jué)我進(jìn)到了困境!我只是變得更舒服了,這是我必須到達(dá)的地方!”


在web開發(fā)領(lǐng)域,其實(shí)會(huì)同時(shí)到達(dá)兩個(gè)拐點(diǎn)。

web開發(fā)領(lǐng)域的拐點(diǎn)是:當(dāng)你有能力構(gòu)建你想要做的任何數(shù)據(jù)驅(qū)動(dòng)的應(yīng)用的時(shí)候。這意味著你可以做一個(gè)包含許多頁(yè)面、可以存儲(chǔ)和從簡(jiǎn)單的數(shù)據(jù)庫(kù)中提取信息的web應(yīng)用。web開發(fā)者把它叫做:CRUD。在這個(gè)階段,你應(yīng)該學(xué)會(huì)去集成通過(guò)從github或者一個(gè)blog下載的第三方類庫(kù)。

算法和數(shù)據(jù)結(jié)構(gòu)的拐點(diǎn)是不太明顯的,但它的確是很重要的。已經(jīng)到達(dá)這個(gè)拐點(diǎn)的人精通他們所掌握的編程語(yǔ)言底層,除了編程基礎(chǔ)和擁有解決復(fù)雜編碼更深的知識(shí)。

精通算法和數(shù)據(jù)結(jié)構(gòu)的人可以做到以下:

寫排序算法;反轉(zhuǎn)列表;理解并寫出程序堆棧、隊(duì)列、和樹;使用遞歸寫電腦程序

簡(jiǎn)單來(lái)說(shuō),一旦你通過(guò)這個(gè)拐點(diǎn),你已經(jīng)精通了數(shù)據(jù)操作并理解了代碼決定性能的含義。傳統(tǒng)的計(jì)算機(jī)學(xué)位僅僅關(guān)注的是過(guò)去的算法和數(shù)據(jù)結(jié)構(gòu)的拐點(diǎn)。許多大學(xué)生教他們編程語(yǔ)言通常不再行業(yè)中使用,例如方案,規(guī)劃,LISP。

在很多技術(shù)面試中,面試官會(huì)認(rèn)為你已經(jīng)通過(guò)web開發(fā)的拐點(diǎn),因?yàn)檫@很容易做到,并且他們的關(guān)注點(diǎn)放在你對(duì)算法和數(shù)據(jù)結(jié)構(gòu)上的了解上。這些問(wèn)題通常集中在我們上面提到的主題:排序算法,反向鏈表,是喲哦那個(gè)棧、隊(duì)列和樹。


一旦一個(gè)開發(fā)者通過(guò)了web領(lǐng)域拐點(diǎn)和算法與數(shù)據(jù)結(jié)構(gòu)的拐點(diǎn),他會(huì)成為一名閃耀點(diǎn)。

這些程序員有能力解決兩個(gè)相交的挑戰(zhàn):需要在高級(jí)web應(yīng)用程序上下文中構(gòu)建的復(fù)雜算法。這是專業(yè)web開發(fā)人員每天在做的核心。


達(dá)到這些拐點(diǎn)的結(jié)果

最大的成果就是在你第一次聽到有些反直覺(jué)。深呼吸:

當(dāng)學(xué)習(xí)編碼時(shí),領(lǐng)域特定知識(shí)在食物的宏圖中并不重要。

我沒(méi)有開玩笑,這根本沒(méi)什么。一旦你通過(guò)拐點(diǎn),這些概念將流暢的翻譯一個(gè)星期或者兩個(gè)教程,甚至是幾天。

最終重要的是:

你對(duì)web開發(fā)框架有很強(qiáng)的理解力。

你可以寫出復(fù)雜的算法無(wú)論使用什么語(yǔ)言。


招聘經(jīng)理希望開發(fā)人員具備堅(jiān)實(shí)的Web開發(fā)和算法能力。

當(dāng)我在PayPal工作時(shí),我的團(tuán)隊(duì)雇傭了一個(gè)資深的Rails開發(fā)人員,他們?cè)赗ails沒(méi)有經(jīng)驗(yàn),他在Python、Lisp和Perl中進(jìn)行了大量的編碼。幾天之內(nèi),他已經(jīng)產(chǎn)生了巨大的影響。幾周內(nèi):巨大的影響。他很快就成為了技術(shù)團(tuán)隊(duì)的領(lǐng)頭羊,是我參與過(guò)的最好的招聘決定之一。

不要操之過(guò)急。很多人會(huì)說(shuō),“AngularJS這幾天很熱”,“JavaScript正在上升,”或者“最新的時(shí)尚是……”,我對(duì)此的反應(yīng)是:“那么?”當(dāng)你學(xué)習(xí)如何編程時(shí),你唯一的目標(biāo)應(yīng)該是找到拐點(diǎn)并消滅它。一旦你這樣做,學(xué)習(xí)新的,性感的時(shí)尚不會(huì)是一項(xiàng)艱巨的任務(wù)。

變得自力更生。在沒(méi)有結(jié)構(gòu)化指導(dǎo)的情況下,有能力學(xué)習(xí)新的編碼技能意味著你不再需要等待任何人來(lái)幫助你。這意味著,對(duì)于大多數(shù)你需要學(xué)習(xí)的東西,你可以簡(jiǎn)單地在互聯(lián)網(wǎng)上搜索,閱讀你需要知道的各種材料。

這并不意味著你立刻“知道”了一切,而只是現(xiàn)在一切都“確定”,所以本質(zhì)上,你是不可阻擋的。


在拐點(diǎn)的時(shí)候你將要發(fā)展的技能

作為軟件開發(fā)人員,最好的參考資料是你已經(jīng)寫過(guò)的類似代碼。當(dāng)您完全理解編寫的代碼時(shí),不需要將所有的細(xì)節(jié)提交到內(nèi)存中。這意味著在構(gòu)建一個(gè)新的特性時(shí),你應(yīng)該問(wèn)自己的第一個(gè)問(wèn)題是:“我以前做過(guò)類似的事情嗎?”“如果答案是肯定的,請(qǐng)重新訪問(wèn)代碼并在代碼中逐行遍歷代碼。重新解釋一下自己在做什么,問(wèn)問(wèn)自己:“我現(xiàn)在能用同樣的方法嗎?”

視頻很難解釋特定領(lǐng)域的細(xì)節(jié),因?yàn)樗麄冃枰L(zhǎng)時(shí)間觀看。假設(shè)你想與谷歌地圖API集成。一旦您經(jīng)歷過(guò)一次這樣的操作,在github中打開代碼需要花費(fèi)不到一分鐘的時(shí)間,復(fù)制代碼并將其粘貼到新項(xiàng)目中。另一方面,視頻通常需要10-30分鐘才能看完。


盡快高效的到達(dá)拐點(diǎn)的策略

因?yàn)檫_(dá)到拐點(diǎn)是最重要的部分,所以你應(yīng)該讓自己盡可能順利地進(jìn)行。這意味著你應(yīng)該開始準(zhǔn)備你在教程階段,并保持正確的心態(tài)在這段時(shí)間內(nèi)。在輔導(dǎo)階段,從結(jié)構(gòu)材料上突破,給自己一路挑戰(zhàn)性的問(wèn)題。

對(duì)于每一課,試著去做一些超出你指導(dǎo)范圍的事情。如果你正在做的教程提供“挑戰(zhàn)”或“自我導(dǎo)向”的部分,那么就去做。解決非指導(dǎo)性的挑戰(zhàn)會(huì)給你重要的經(jīng)驗(yàn),做事情沒(méi)有結(jié)構(gòu)化指導(dǎo)。

盡量少使用教程。在Firehose上,我們經(jīng)常讓學(xué)生通過(guò)使用所提供的文檔來(lái)整合做一些事情。許多學(xué)生將遵循文檔,并使用教程作為備份,而不是簡(jiǎn)單地遵循教程中解釋的指導(dǎo),這些指導(dǎo)面向剛剛開始的人。注意文檔會(huì)把你當(dāng)成一個(gè)已經(jīng)過(guò)了拐點(diǎn)的開發(fā)者。在github上獲得舒適的閱讀和跟蹤文檔將使你在自己獨(dú)立的過(guò)程中獲得成功。

關(guān)注要點(diǎn),重復(fù)使用。學(xué)習(xí)如何做普通的事情,比如從頭開始梳理應(yīng)用程序,把一個(gè)新的應(yīng)用程序推到github上,并在早期建立數(shù)據(jù)庫(kù)遷移。

推動(dòng)拐點(diǎn)可能是具有挑戰(zhàn)性的。這里有一些指針讓你通過(guò)它:

要明白這是一個(gè)艱難的過(guò)程,讓自己輕松一些。同時(shí),設(shè)定現(xiàn)實(shí)的期望。你無(wú)法比較你的“超人”水平的速度,通過(guò)教程到你的“蝸牛”-速度學(xué)習(xí)的東西。記住,你正在學(xué)習(xí)很多東西,但是在這個(gè)階段,你正在學(xué)習(xí)一種全新的技巧,一個(gè)人獨(dú)立思考新事物。

如果你在自信中掙扎,就知道你的感覺(jué)是完全正常的。繼續(xù)工作。如果你繼續(xù)掙扎,試著和最近通過(guò)拐點(diǎn)的人交談。他們將能夠與你所處的位置相關(guān)聯(lián),并向你保證你所經(jīng)歷的只是暫時(shí)的。工作要始終如一,但不要過(guò)度勞累。在這個(gè)階段,你知道最多只能每天工作6小時(shí)左右。在疲憊狀態(tài)下工作只會(huì)延長(zhǎng)你花在拐點(diǎn)上的時(shí)間。

在這個(gè)階段獲得自信最好的方法是通過(guò)你的任何懷疑。你的情緒可能會(huì)感覺(jué)像過(guò)山車一樣。有時(shí)候,你會(huì)覺(jué)得自己著火了,但是在經(jīng)歷了15個(gè)小時(shí)的掙扎之后,感覺(jué)到效果相反是很普遍的。

如果你不知道某件事會(huì)花費(fèi)你5分鐘或5個(gè)小時(shí),你會(huì)感到沮喪,但是每次你通過(guò)并成功地實(shí)現(xiàn)一個(gè)新的特征時(shí),信心的激增將是你所需要的一切。在解決了一些棘手的問(wèn)題而沒(méi)有任何幫助的情況下,你會(huì)沉溺于在舒適區(qū)之外構(gòu)建東西的感覺(jué)。


如何知道你什么時(shí)候通過(guò)拐點(diǎn)

拐點(diǎn)過(guò)程的最后階段是接受。接受軟件開發(fā)是一個(gè)不斷學(xué)習(xí)的過(guò)程。接受你已經(jīng)成功地學(xué)到了一切的感覺(jué)意味著你應(yīng)該開始考慮解決更復(fù)雜的問(wèn)題。


原文鏈接:http://blog.thefirehoseproject.com/posts/learn-to-code-and-be-self-reliant/

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

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

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