當前位置:
首頁 > 知識 > 為什麼說學會學習是開發者重要且必備的技能?

為什麼說學會學習是開發者重要且必備的技能?

作者:Christian(編譯)


做一個高效的學習者,與做一個高效的編程人員一樣重要。


作為一名開發者,你的工作要求你每一天都要學習,而不只是每天關注Hacker News、Twitter、Reddit和Facebook。


在每天的工作中,你會不斷的遇到新的代碼庫和新的挑戰。在家裡的情況也一樣,你需要不斷的接觸開源repo和你自己的項目,這些都需要你不斷克服各種挑戰。


科技世界的變化非常快,學習最新的工具、語言和框架,會讓你覺得自己多了一份全職工作。長話短說:學習是一件艱難的事情。但是,要想在工作中不被淘汰,我們就需要具有快速、高效學習的能力。

去年一年內,我從一個連Chrome debugger都不會使用的人,成為了一名軟體工程師,加入了一家知名的數字貨幣企業。在這個過程中,我快速的學會了一門新的技能(編程)。


但是儘管如此,我依然覺得學習是一件困難的事情。


老實說,在這個過程中,每一個我遇到的新概念,都讓我掙扎萬分。我遇到了太多的未知,太多的不確定性。


我不斷質疑自己:「我怎麼可能堅持下去呢?」


「如果學習編程的過程中,我每一天都感覺這麼累,我會被累垮的。這真的是我想做的事情嗎?」


「如果編程是我想做的事情,我會感覺輕鬆一些嗎?藝術家在創作的時候會如此掙扎嗎?作家在寫作的時候會如此掙扎嗎?運動員在比賽的時候會如此掙扎嗎?在追求夢想的過程中,我們一定要如此掙扎嗎?」


「我難道不是應該在這個過程中找到快樂嗎?」


一、學習編程到底會不會有一天變得輕鬆一些?


會。一年之後,我發現學會一個新的編程概念依然會很「困難」,它還是會要求你高度自律,努力學習。


但是這個過程變得更加享受,而不是讓你覺得手足無措。

這一年究竟發生了什麼,居然會有如此大的改變。答案很簡單:我對學習的觀點發生了改變。曾經的「困難」變成了如今的「吸引」。


在這篇文章中,我將會講述這個轉變的過程。


二、這僅僅只是個開始


學習編程在最初的時候是全世界最難的事。


例如,你可以回想一下你所學的第一門編程語言。一些最基本的概念都會讓你感覺難以理解,例如語法和樣式。你還需要理解一些複雜的核心概念,例如值、類別、錯做、流控制、函數、高階函數、參數、閉包以及推遞等。


你會覺得自己在學雜耍,而且是一上來就給你8個酒瓶子讓你耍起來。


在我剛剛接觸閉包的時候,我花了好幾個星期才徹底搞明白了這個概念。當我剛接觸到這個概念的時候,我以為我馬上就理解了。但是之後當我嘗試在實際操作中使用它的時候,我發現自己立刻就卡住了。


這樣的情況會經常出現。在當老師的時候,我也經常會遇到這樣的情況:學生在第一次接觸到某個新概念的時候,無法馬上理解,有的時候接觸了10次依然無法理解。


但是對某個概念糾結久了以後,你會迎來一個「頓悟」的時刻,突然間一切都豁然開朗了。依然用我自己來舉例,我閱讀了大量有關閉包的文章,然後突然在一瞬間明白了這個概念。


我閱讀的每一篇文章,都給我提供了新的視角,在我對這個概念有了360度的了解之後,理解這個概念就成了順利成章的事情。

這次頓悟對我來說非常重要,因為它就像是一次獎勵,鼓勵我卻學習更多的知識。


三、學習是一個過程,而不是目標


如果我們將學習一門知識當成「不得不做的事情」,我們就會急著去完成,好用剩下的時間去做其他一些「有趣」的事情——我們「想要」做的事情。


但是,人的精力是有限的,因此將學習視為一場競賽,會讓我們產生倦怠,甚至對自己失望。


而如果你將學習視為一個過程,那麼每一次小的勝利都會讓你欣喜無比。這樣依賴,你就會獲得不斷學習的動力。


就像健身一樣。健身會給你帶來疼痛,如果停止鍛煉,疼痛也會隨之停止。但是疼痛並沒有遠離,下次鍛煉的時候它還會等著你。如果你能夠預見到疼痛會來,你的痛苦就會減輕一點。學會適應疼痛,熟悉疼痛,讓疼痛成為你生活中的一部分。你的回報,就是健康的身體和健美的身材,還有繼續健身下去的動力。


鍛煉會形成一個積極的連鎖反應:

為什麼說學會學習是開發者重要且必備的技能?



學習也是這樣。

四、把學習變成一個有吸引力的過程


想像你自己正在做第一個web應用。


最初的時候,面對空空如也的編輯器,你會感到恐懼,整個任務看上去根本無法完成。你什麼都不懂,在完成項目之前,你要學習大量的新東西。


但是,你決心已定,無論如何也要硬著頭皮上。


從那之後,你決定一點一點慢慢來。


首先,你需要一個創意,你要做什麼樣的應用?你的終端用戶是什麼人?


其次,你要做一個原型應用,或是做一些大概的設計,確定應用大致的樣子。你從朋友、互聯網那裡獲得反饋,然後進行迭代,不斷完善應用。


第三,你開始研究語言、工具和框架,選擇那些最適合你的東西。


之後,你開始集中精力完成這個目標。


有的時候你是在寫代碼。更多的時候,你是在調試bug和錯誤。

有的時候,你會累的無法繼續,於是決定休息一會。


其他時候,你一點代碼都不想寫。沒關係,你可以花時間來研究其他和你的項目類似的項目。


最終,經過幾周的辛勤努力之後,你將作出應用的基本框架。突然間,這個應用的開發過程變得不再那麼痛苦了。最初的努力終於迎來了回報,寫代碼或是進行重構對你來說已經不再是什麼難事——因為你以前已經做過100次了。


曾經讓你無比頭疼的事情,如今變得有意思起來了。


這就是我們的成長過程,我們在這個過程中越來越強大。無論是編程、跳舞、跑步還是閱讀:這些事情都不容易,而且這些事情都沒有「結束」或是「完成」的時刻。


把你的精力投放在某件事情中,享受這個過程,享受這個過程給你帶來的痛苦。因為最初的痛苦會在未來給你帶來回報:成就感和自我滿足感。


換句話說,掙扎和愉悅是相輔相成的。時刻牢記這個循環:

為什麼說學會學習是開發者重要且必備的技能?



五、一種學習科技概念的方法

下面我來說說我自己的學習方法。這種方法並不能適合所有人,因此如果你也有自己的學習方法,歡迎分享給我們。


我會使用我學習React.js的過程來舉例。


1、這個技術能解決什麼問題?


第一步:我會在谷歌上搜索React.js的文檔進行閱讀,了解這個庫的背景和東西。


對於學習來說,先弄懂「為什麼」,這是一個非常實用的方法。它能讓你了解以下幾個問題:


它和其他解決方案有和不同?


它對我有用嗎?


這個解決方案旨在解決哪些問題?


它是不是一個只能使用幾個月的工具?還是能夠從根本上改變我思考和寫代碼方式的工具?


2、通過閱讀了解核心概念

第二部,我會閱讀大量入門文章,以及文檔中提供的案例。


請注意,我現在還沒有開始接觸任何新的代碼。閱讀和了解應該放在實際操作之前。這一點非常重要,因為這樣做是在為未來的學習奠定基礎。


就算你可以在了解基本概念之前就學習React.js代碼,但是未來你依然需要回頭來了解這些核心概念,尤其是遇到bug的時候。


3、第一次寫代碼


在閱讀了大量文章之後,我會覺得自己對新技術有了一定的了解,甚至覺得自己已經徹底理解了它。之後,我就會開始接觸代碼了。


一般情況下,我會嘗試做一些規模非常小的項目,方法是跟著一段視頻指導。


4、遇到問題


無可避免的,你將會遇到問題。


閱讀說明文檔對你來說非常簡單,但是真正使用新技術的時候,你會意識到自己其實還什麼都沒有掌握。


在這個時候,我會產生放棄的念頭。但是在遇到問題的時候我不會真的放棄,而是提醒自己痛苦=收穫。現在放棄是懦弱的行為。

我會做如下幾件事情:


1.首先我會仔細分析自己所遇到的困難,然後試圖找出問題的根本原因。就算不知道原因是什麼,我也會猜測一下。


2.之後我會從電腦前站起來,做點放鬆的事情。在我頭腦混亂的時候,很難找到解決辦法。暫時遠離問題本身,有的時候會有良好的效果。


3.之後根據我的推測,我會試圖尋找解決辦法,但是先不再網上進行查詢,而是嘗試獨立解決。即使我的方向是錯誤的,在這個過程中我也能收穫良多。


4.如果我的推測方向是正確的,太好了,我自己解決了問題。如果我的推測是錯誤的,我會在谷歌上查詢文檔、博客或是Stack Overflow文章,在其中尋找解決方式。


5.在閱讀的時候,我會做筆記,尤其是那些有可能幫我解決問題的內容。


6.還是沒有解決方案?沒關係,在這個過程中我已經學到了很多東西,即使它們並沒有直接幫我解決問題。這些知識在未來一定會起到作用。


7.當我覺得自己真的無法解決的時候,我會在Stack Overflow上求助,或是請其他開發者同事來幫忙。


8.有的時候,這個過程只需要幾秒鐘,還有的時候需要幾個小時,甚至幾天的時間。無論時間長度,這個過程本身都會給我帶來巨大的好處,成為一名更好的開發者。


遇到問題的時候,你會覺得自己身在一個伸手不見五指的隧道中,到處尋找光亮。你一定會找到光線,而且在這個過程中,你會對這個隧道有所了解——正是對這個隧道的了解,才能讓你成為一名優秀的編程人員。

5、不斷重複


在做了一個小項目之後,我需要通過不斷的重複練習來掌握這種新工具。因此我會再一次自己用它做過項目。但是我依然不會去做大項目,而是繼續做一些與上一個項目有所區別的小項目。


6、掌握


業精於勤,因此我會通過不斷的做小項目來掌握新技術,直到我確定自己掌握了其中的核心概念。


最終,在通過閱讀、實踐之後,我終於準備好用新學的技術做點真正的東西了。


在整個過程中,我都會刻意的讓這個過程變得更有趣。我會不斷的提升難度,讓項目的難度稍稍高於我當前所掌握的技能,但是注意難度不能太高,免得將自己扔到深淵裡爬不上來。當我覺得自己被項目搞得疲憊不堪的時候,我會馬上休息一會。


六、 學習很有趣


有了良好的計劃,學習編程可以是一件很有趣的事情。期初的時候,你會覺得編程非常複雜,正是由於這個原因,很多人選擇了半途而廢,這些人放棄不是因為編程「無聊」,而是由於編程「太難」。


在經過了一段時間的適應之後,處理新信息就會變成你的肌肉記憶,無需特別的思考,大腦就會反應過來。學習,就是在痛苦的浪潮中存活,之後你就會獲得獎勵。


突然間,你會發現編程學習變得簡單了。


本文編號2341,以後想閱讀這篇文章直接輸入2341即可。


輸入m可以獲取到文章目錄


推薦


Linux學習


更多推薦15個技術類公眾微信


涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序猿 的精彩文章:

演算法之美:用圖像和聲音展現15大排序演算法全過程
如何獲得一份滿意的offer
開發和產品之間的恩怨從何來?
親測:如何優雅安全的享受智能社會的好福利
Java開發學習路徑和書籍推薦

TAG:程序猿 |

您可能感興趣

想要參與開發一款機器學習產品,你需要get哪些技能?
前端開發學習什麼?學前端需要基礎嗎?
大數據開發工程師需要具備哪些技能?
學大數據開發必看,你覺的難學、學不好是因為……
優秀的機器學習開發者都是這樣做的!
想要開發寶寶的思維潛力,首先媽媽得學會這些!
對不起讓你失望了,這屆蘋果開發者大會很可能不會發布任何新的硬體
學爬也可以變聰明?寶寶開發智力的機會,爸媽可不要錯過
不需要敲代碼就可以開發深度學習應用?我們來探個究竟
對於大數據開發的學習,正確的學習路線是什麼?
蘋果開發者大會無硬體產品,這項功能讓家長們爽了
開發者必讀!小程序後端技術你需要了解下
適者生存的社會,那些讓開發者獲得突圍的技巧是啥
Web前端開發核心技能是什麼?
想成為前端開發工程師,不能再錯過最後這次機會了!
有哪些超乎想像的惡魔果實能力開發?給你的話,能更好嗎?
推薦幾本書給新手,不要盲目追求學習開發人工智慧
一做數學題就頭疼?開發這三種腦能力,數學再也不是差科!
不要只會模仿老師練,深入了解體式的作用,才能開發更多新玩法
學會判斷機器學習模型的性能——開發基線模型技能