如何自學程式設計?如何少走彎路?

劉榮飛發表於2021-01-03

如果耐心讀完本文,對您學習程式設計大有幫助

明白學習程式設計的思維,可以少走很多彎路

對於所有程式設計學習者,尤其是零基礎的同學們,在學習的初期,一定要給自己做一個思想上的轉變。

在我的程式設計學習理論中,這個思想的轉變至關重要,什麼時候你把這個思維轉換過來了,你就是真正上道的那一天。

這個思維轉換就是:

不要把自己當學生,而是要把自己當開發者。

不同的身份認同感,最後會導致不同的行為模式,而這行為模式,會對你的程式設計學習造成非常大的影響。

區別一:記筆記 VS 寫技術文章

學生有一個特點,就是他們喜歡記筆記,但是開發者不怎麼記筆記,而是會把自己學會的東西寫成技術文章、教程的形式發表在技術部落格或者知乎等網站上。

一個很有名的學習法叫做費曼學習法,這個學習方法簡單地說,就是在學完一個東西之後,去給別人講明白,注意,是講給別人聽,當你寫成文章發表在網上的時候,你自然會去用更通俗的語言,更清晰的邏輯去講述這個事物背後的邏輯,這個過程,是對自己學習的一個檢驗,也是加深映像,整理思路的重要過程。

那麼如果你是去記筆記的話,很有可能,你不會去試圖講清楚這個東西,而是傾向於去照抄,或是不完全照抄,以“提綱”或是“知識點”的形式抄在本子上,說句實話,照抄的筆記,真的沒用,因為現在搜尋引擎的能力已經可以讓你把大多數東西快速找到,你為什麼還要照抄到筆記本上呢?

從功利的角度考慮,技術文章的寫作,別人可以直接訪問,也可以逐漸累積你的影響力,一個好的個人技術部落格,會給你的簡歷加分很多,而一個厚厚的筆記本,沒有人會管你記了什麼。

區別二:以學會XX為目標 VS 以做出XX為目標

你會發現,學生思維裡面有一個重要的特點,就是他們總是特別關注自己“學會了什麼”,不僅如此,他給自己定的目標,定的計劃,永遠都是”學會XX書第XX章內容“。

學生永遠在準備, 而開發者早已動手。

如果你還在上學,學生思維是“這個學期我要學會XX課程”,而開發者思維是“這個學期我要做出XX”。

如果學Python,學生思維會拿起一本教材,開始從頭到尾看,我不知道你們發現沒有,幾乎所有那種程式語言教材,長得都差不多,上來先是基本的語法,基本的整型變數,浮點型變數之類的,然後伴隨著幾個小的教學例子。

開發者學Python,他第一步絕對不是去書店買教材,而是先去了解,Python適合做什麼,然後他了解到,Python適合做爬蟲,資料分析,AI,還能很輕鬆地搭建Web後端,之後他逛了一下午Github,看了看那些Python高星專案都是做啥的,於是他給自己定下了這個目標:

半年時間內,我要用Python和Python周邊的庫搭建出一個網站,這個網站服務端運用爬蟲技術爬取一些資料,可以提供知乎粉絲性別比例分析功能。

學生繼續看書,一個個的知識點去記憶,拿著他的小本本去總結知識點,而開發者上官網簡單的看了下Reference Doc的簡單互動式語法教程後,便馬上開始了邊做邊學的過程,有了一個實際的專案目標,朝著這個目標走,不斷地發現自己不會這,不會那,然後有目的性的去補足知識,他了解到了beatuiful soup作為爬蟲主庫,flask作為後端web服務主庫,然後會去看一些簡單的教程,在這個過程中,基礎語法得到了熟練,也訓練了工程能力。

學生的成就感來源於學會了什麼,開發者的成就感來源於做出來什麼

開發者很功利,他們深知他們學會的所有東西都是為了開發出偉大的產品而服務的,所以他們絕對不會出現“在學一個東西,但是也不知道學這個用來幹嘛”的窘境。

區別四: 線性學習 VS 遞迴學習

學生喜歡線性的學習,因為線性的學習(拿本教材從頭到尾慢慢看)正是符合了他們對確定性的追求,可惜這違背了學習的本來面目

開發者知道,人腦最不擅長的就是線性列舉,即便我們認識幾千個漢字,但是我們無法去線性地去將所有認識的漢字列舉出來,我們的大腦,本就不是用來進行線性思考的,而複雜度上了一定程度的知識,線性的掌握,基本不可能。

有難度的知識,往往是這樣的:為了搞懂A,而去學B,為了學會B,而去學C,這叫遞迴學習,遞迴雖深,但有回溯,它最終會回溯到我們的起點。

所以開發者的學習更偏向於遞迴式的學習,而且可能會以一個知識點為起點,去完成樹狀知識外圍的遍歷。(有點像搜尋引擎的爬蟲)

知識是樹狀結構, 或者網狀結構

當我們試圖遍歷一個樹的時候, 最簡單直接的方式就是遞迴, 如果你非要去”線性”的學, 那就你是把程式設計學習當成了連結串列, 還是“單向”的,這種演算法怎麼可能用來遍歷樹呢?

區別五:拿會XX定義自己 VS 拿XX專案作者定義自己

inus 從來不說自己精通 c 語言, 與其說他不需要, 不如說他不關心, 因為他是 linux 和 git 的作者.

linus 這個程式設計師之神就是一個典型的開發者思維的人.

我希望所有計算機專業的同學們, 等你們畢業了之後, 你的github應該是綠油油的, 而不是貧瘠的一片白.

我希望你們用你們的簡歷裡寫的是”用c語言實現了一個XX引擎, github連結github.com/xxxxxx

而不是”精通c語言“.

我希望學生們明白, 任何一個像樣子的專案, 製作週期至少是按月計, 你的大學有四年時間, 哪怕一個專案做一年, 你也能拿出兩三個好專案, 不一定有多少star, 但是要完整, 文件, 測試, 一應俱全.

我希望學生們知道, 做專案和寫課後習題不一樣, 課後習題一個小時, 而專案是長期不斷努力, 不斷學習突破的過程, 需要你每天都搞, 善始善終, 最終拿出成果來.

我希望學生們明白, 這個世界衡量一個人的成就, 從來都是”他做了什麼”, 而不是”他學會了什麼”, 不要總用修煉內功去感動自己, 必要時, 也請你為開源世界貢獻一點自己的力量.

我希望學生們明白, 考上985, 拿獎學金, 這都不叫成就, 因為和別人沒關係, 只有真正影響到別人的東西, 讓這個世界變得更好的東西, 才是值得去”秀”的.

最後送給學生們一句話:

願你早日忘記學生的身份, 以開發者的姿態, 面對這個世界。

作者:牛岱
連結:www.zhihu.com/question/39431192/an...
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

精簡總結

上面有一些東西是零基礎的朋友從來沒有聽過的名詞,比如linux,github,遞迴式學習。我試圖用更加小白的方式簡單總結一下。

  1. 不是為了學會某個知識,學習只是為了做出某個產品而服務。
  2. 關注自己做出了什麼東西,而不只是關注學會了什麼,不然就會感覺好像什麼都會,但是什麼都做不了。
  3. 不要害怕遇到困難和錯誤,解決了所有錯誤,剩下的就是成功。就像迷宮中尋找出口一樣,沒可能一下子就能找到正確出口的。
  4. 定好目標之後,瞭解一下需要學習哪些知識,就搜尋相關的知識來學習,學習過程中遇到不會的,繼續搜尋,如此往復,邊做邊學,做完產品,知識也自然學會了。這就是遞迴式學習法
  5. 把你做產品過程中學到的知識,寫成文章教程,或影片教程,分享給別人,讓別人能根據你的教程學會知識。一方面鞏固了知識,另一方面別人看到可以幫你指出錯誤,最後,你沒遇到的坑,別人遇到了請教你,也是等於幫你學習。

整個文章就到這裡結束了,希望對您有所幫助。也歡迎幫忙分享給更多的朋友,幫助到更多的朋友。

轉載地址:dot2.com/tutorial/e6eb5e6ae9324955...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章