快速提升編程能力的關鍵

快速提升編程能力的關鍵

本文是我看陳皓專欄《左耳聽風》推薦的文章翻譯(並非完全按照原文翻譯,乾貨部分原文翻譯),原文鏈接The Key To Accelerating Your Coding Skills

當你開始學習編程的時候,你身邊的一切都開始發生變化。在Firehose,我們稱其爲編程的拐點時刻。在這個階段之後,你作爲開發人員這一身份的行爲將發生巨大的改變。你達到這一拐點的過程就是你在編程學習中發現問題解決問題的過程,當你達到這一階段,你將不再需要任何的幫助。這可能不是一個輕鬆的經歷,期間你可能會感到很沮喪,但是一旦跨過這一階段,你將獲得無窮的力量。
在這裏插入圖片描述
在Firehose,我們的目標不僅僅是教你Ruby,如何構建Web應用程序或如何編寫測試程序。 儘管我們確實教授這些技能,但我們的主要目標是使學生更快的超越拐點,從而使他們能夠解決遇到的任何問題。 我們相信,能夠自己解決問題是一項珍貴的技能,這種教學方法將使你走得更遠,而不僅僅是學習如何構建一個應用程序。

教程階段(3-8周的認真編程)

當你開始學習編程的時候,有很多知識你還不知道。這些信息稱爲領域的專業知識。舉例包括:瞭解如何用ruby編寫循環,或者如何使用ruby on Rails從數據庫中提取內容,專業領域的知識包括特定的編程環境和特有的協議。
成爲自給自足開發人員的第一步就是能夠完成具體的任務,一旦你真正完成並掌握了具體的任務,你將大致瞭解任務的各部分如何組合在一起完成功能。隨着時間的推移,你將開始認識到模式,最後那些最初看起來令人困惑和陌生的事情將成爲你的第二天性。

對於初學者來說,最重要的技巧就是注意細節

在閱讀文檔或教程等材料時,密切關注細節是很重要的。即使是最細小的拼寫錯誤也會導致錯誤信息或bug的產生。一開始看到錯誤消息是令人沮喪的經歷,但這是學習過程中至關重要的一步。在此階段處理錯誤消息和問題將教會你在安全環境中進行編程的最重要技能之一:面向細節。

**調試的錯誤信息是非常重要的。**錯誤的信息雖然只是編程的一部分,不管是熟練的還是不熟練的人都會遇到,但是兩者的區別就是:熟練的人處理了越多的錯誤信息,他們就會花費越少的時間來修復他們。

  • 隨着時間的推移,你將學習到如何閱讀錯誤信息並快速提取問題的相關細節。第一次看到錯誤信息時,需要一段時間才能理解它的真正含義。但是,在你看過數百條錯誤信息之後(你將看到數百條錯誤消息!),你將能夠準確定位問題的位置,並找到解決問題所需的相關細節。
  • 從你解決的問題中學習。不要只是修正了錯誤就結束,徹底理解你解決的問題,通過從你遇到的每一個報錯中學習,當你再次遇到它時你將能很快的解決它。
  • 最開始你可能解決不了你遇到的任何問題,每個問題都要尋求幫助,隨着時間的推移,你將學會通過二次檢查代碼和網上搜索減少尋求幫助的頻率。

在教程階段,你將按照指導內容學習。首先,你會發現按照指令很有挑戰性,錯誤信息也會經常發生。隨着時間的推移,你將掌握調試錯誤和更好的關注細節的技能,並且能夠更快地取得進展。在結束教程階段時,你將注意到你能夠以更快的速度編寫代碼。

在這一點上,有些人感覺很有信心,好像他們已經準備好拋棄訓練階段,在沒有結構化指導的情況下開始構建東西,並且可以愉快地深入到最深處。其他學生將尋求更多的教程,試圖獲得更多的領域特定知識,以尋求一個更完整的理解。不幸的是,教程只會帶你走這麼遠,真正的信心不是在教程或指南中找到的。真正的自信來自於在一個你不知道如何解決的問題中掙扎,並且自己找到解決方案。

編程骯髒的小祕密。。。。。。

**你永遠不會知道解決問題所需要知道的一切。**在這個過程中,你可能會想象自己最終會學到所有你需要學習的東西,然後開始準備就緒。但是,這一刻永遠不會發生。

編程是一生的學習經歷。有經驗的軟件工程師會尋找尚未解決的問題的解決方案,因爲這給了他們更多學習的機會。如果你發現自己在等待那一刻的到來,那一刻你終於覺得自己對編程瞭如指掌,那麼你要知道:你等待的那一天永遠不會到來。但這是一件十分美妙的事情。

在這裏插入圖片描述
當你準備好進入下一階段的旅程時:

  • 你已經看到了足夠多的錯誤信息,你對報錯也不會有任何震驚。相反,你知道他們的真正含義,以及在哪裏查找代碼中的問題。
  • 你是搜索解決方案的專家。當你正在添加一個特性或看到一個令人困惑的錯誤信息時,你知道要搜索什麼才能找到你需要的信息。
  • 你可以參考應用程序的其他部分中編寫的代碼,並在其中遵循模式,而不是總是尋找一步步的指示。

編程拐點(2-4周心態端正)

拐點階段是學習編程過程中最令人沮喪的階段之一,但在許多方面,這是惟一重要的階段。這就是你逐步開始停止使用教程並開始解決沒有人再爲你準備好問題的解決方法和思路的時候。有些時候,你會覺得你還沒有準備好有能力解決這個階段,你想要回到建立一些東西的輪廓學習他們到底是做什麼而不是用他們去解決實際的問題。不要成爲這種心態的犧牲品,你會感到沮喪的原因是:

在編程拐點階段,您的編程速度將比前一階段慢10-20倍。

你可能會開始質疑自己,懷疑自己是否真的有能力成爲一名程序員。不安全感和懷疑感在這個階段很常見。
儘管你會覺得自己學習和完成事情的速度要慢得多,但實際上,你正在完成最重要的事情,這也是你最需要花費時間的地方,這個階段總是會想着掌握更多特定領域的知識,但是你要明白所有你學習的內容都是這個過程中必須要學習的知識。
程序性知識是一種能力,可以讓你在學習過程中自學你不知道的東西。當你需要實現一個新特性時,應該如何進行關鍵性搜索?在這個時候,當你想要完成很多事情的時候,你會覺得自己身處黑暗之中,學習如何自己發現光明是至關重要的,因爲你永遠不可能知道所有你需要知道的事情,因爲你可能都不知道你需要他們,所以你需要能夠解決目前遇見的問題。

大多數人意識不到學習編程需要專業的領域性知識和程序性知識。

在你的餘生中,每一天都要超越自己的極限

一些軟件工程師一旦找到自己的立足點,就會呆在自己的舒適區。這些類型的程序員被稱爲維護程序員,你不應該努力成爲這樣的人。相反,你應該每天都努力突破自己的極限。程序員辭職最常見的原因是,自認爲解決了所有有趣的問題,認爲它就不再具有挑戰性了。不要試圖把編程項目拉入你的舒適區,你應該找出你當前技能範圍之外的問題,這是建立和擴展你技能的唯一方法。

一位優秀的程序員會說:

我仍然覺得我身處困境之中,我只是越來越坦然的知道,那是我必須要去的地方。

在web開發中,實際上有兩個拐點會同時出現

web開發拐點是你能夠構建任何數據庫驅動的應用程序。這意味着能夠構建一個包含許多頁面的web應用程序,它可以從簡單的數據庫中檢索和存儲信息。Web開發人員稱之爲:CRUD。在這個階段,你還應該能夠通過遵循GitHub上提供的文檔或一篇博客文章將任何的第三方庫(例如ruby gem)集成到應用程序中。
算法和數據結構拐點是一個不那麼容易的拐點,但實際上更重要。除了掌握編程的基礎知識和解決複雜編程挑戰的深度知識外,征服這一點的人還將掌握他們正在使用的編程語言。

那些征服了算法和數據結構拐點的人將能夠做到這一點:

  • 編寫排序算法
  • 實現反向鏈表
  • 理解和編寫堆棧、隊列和樹的程序
  • 使用遞歸或迭代解決方案編寫計算機程序

簡而言之,一旦你通過了這個拐點,你就已經掌握了數據操作並理解了代碼決策的性能含義。傳統的大學計算機教育只關注學生算法和數據結構的學習,許多大學用通常不被業界使用的編程語言。

在大多數技術面試中,面試官會假定你已經通過了web開發的拐點,因爲這比較容易做到,他們的問題會集中在評估你在算法和數據結構方面的技能。 這些問題通常集中在我們上面提到的主題上:排序算法、反向鏈表、使用堆棧、隊列和樹。

Web開發+算法與數據結構 == 編程新世界的關鍵

這些開發人員如果能夠解決這兩個方面的挑戰:在高級web應用程序中構建複雜算法,這是專業web開發人員每天工作的核心內容。

“在學習編程時,領域特定的知識在整個過程中並不重要”

一旦你通過了拐點,這些概念將流暢的翻譯只需一週或兩週的時間,甚至幾天。

最終真正重要的:

  • 對Web開發框架有深入的理解
  • 用任何編程語言編寫複雜的算法代碼,都有紮實的基礎

招聘經理希望開發人員具有紮實的web開發和算法技能

當我在PayPal工作的時候,我的團隊僱傭了一位資深的Rails開發人員,但是他在Rails方面沒有任何的經驗,之前一直使用Python、LISP和Perl編寫代碼。幾天之內,他就完成了一個巨大的成果。更令人震驚的是,在幾周內,他就成爲了技術團隊的領導,這是我參與過的最好的招聘決策之一。

不要操之過急。很多人會說,AngularJS最近很火,JavaScript正在崛起。對於新興技術的崛起我是這樣認爲的:當你學習如何編程時,你唯一的目標應該是找到拐點並消滅它,一旦你這樣做了,學習新興的、熱門的、時尚技術就不會是一個困難的任務。
自力更生。在沒有系統性指導的情況下學習新的編程知識,意味着你不再需要任何人的幫助。這意味着,對於大多數你想要學習的東西,你只需要簡單地在網上搜索和閱讀各種你知道的材料就能完成。

但這並不是說你馬上就知道所有的事情了,而是說現在所有的事情都是可以預測的,所以本質上,你是不可阻擋的。

在拐點中培養的技能

作爲一名軟件開發人員,最好的參考資料是你已經編寫的類似代碼。當你完全理解你所寫的代碼時,你就不需要把所有的細節都記在腦子裏了。這意味着在需要構建新功能時你應該問自己的第一個問題是我以前是否實現過類似的功能? 如果答案是肯定的,那麼重新審視代碼並在你的頭腦中逐行覆寫代碼。重新解釋它在做什麼,然後問自己,我現在可以用同樣的方法嗎?

視頻不擅長解釋特定領域的細節。因爲視頻需要花很長時間,假設你希望與谷歌映射API集成。一旦你有過這樣的經歷,在GitHub中打開代碼、複製代碼並將其粘貼到一個新項目中只需要不到一分鐘的時間。另一方面,視頻通常需要10-30分鐘才能重新觀看。(新手看不懂書也沒辦法,筆者這是建立在非新手說的,可以理解)

高效通過拐點策略

在依據教程學習階段,階段性給自己一些問題的挑戰

  • 對於每一節課,試着做一些超出你正在學習的教程範圍的事情。如果你正在學習的課程提供了挑戰或自我指導,完成所有的,即便它很簡單。解決非指導性的挑戰將給你在沒有系統學習的情況下工作的重要經驗。(鍛鍊思考解決問題能力
  • 儘量少使用教程。在Firehose,我們經常指導學生如何集成某些gem或使用提供的文檔進行操作,但許多學生並不會簡單地按照教程中的說明去做,這些教程是針對那些剛剛開始學習的人的。通過拐點的學生會遵循文檔,並將這些教程作爲輔助工具。請注意,文檔將把你視爲已經通過拐點的開發人員。當你獨自一人的時候,在GitHub上閱讀和跟蹤文檔會給你帶來巨大的幫助。
  • 專注於要點並重複使用。學習如何做一些常見的事,比如從頭開始開發一個應用程序,將一個新應用程序推向GitHub和Heroku,以及儘早實現數據庫的遷移。

突破拐點可能頗具挑戰性,以下是一些幫助你度過難關的建議:

  • 要明白這是一個艱難的過程,對自己要寬容。同樣,設定現實的期望和目標。你無法將你和行業大牛的超人水平相比。要堅信你學到了很多東西,在這個階段,你正在學習一種全新的技能,自己去學習新事物得能力。
  • 如果你正在懷疑自己,並且有些失去了自信,要知道你的感覺是完全正常的。繼續工作。如果你還在掙扎,那就試着和那些剛剛度過難關的人談談。他們將能夠回答與你所處的階段相關的困惑,並向你保證你現在所經歷的都只是暫時的。堅持不懈地學習,但不要過度勞累。在這個階段,你要知道你一天最多隻能工作6個小時。在筋疲力盡的狀態下工作只會延長你到達拐點的時間。

在這個階段獲得自信的最好方法就是克服你的懷疑。你的情緒可能會像過山車一樣,有時,你會覺得自己像着了火一樣,但在同一個問題上掙扎了15個小時後,你會發現情況恰恰相反。

不知道某件事花了你5分鐘和5個小時哪個更令人沮喪,但每次你完成併成功實現一個新特性時,你所需要的一切都將是信心的迸發。在沒有任何幫助的情況下解決了一些困難的問題之後,你會沉迷於在自己的舒適區外建造東西的感覺。

如何知道你何時越過了拐點

拐點過程的最後階段是接受。接受軟件開發是一個不斷學習的過程。接受你已經成功學到了一切的感覺意味着你應該開始思考解決更復雜的問題了。(坦然面對你還差得遠這個事實

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章