如果耐心讀完本文,對您學習程式設計大有幫助
明白學習程式設計的思維,可以少走很多彎路
對於所有程式設計學習者,尤其是零基礎的同學們,在學習的初期,一定要給自己做一個思想上的轉變。
在我的程式設計學習理論中,這個思想的轉變至關重要,什麼時候你把這個思維轉換過來了,你就是真正上道的那一天。
這個思維轉換就是:
不要把自己當學生,而是要把自己當開發者。
不同的身份認同感,最後會導致不同的行為模式,而這行為模式,會對你的程式設計學習造成非常大的影響。
區別一:記筆記 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,遞迴式學習。我試圖用更加小白的方式簡單總結一下。
- 不是為了學會某個知識,學習只是為了做出某個產品而服務。
- 關注自己做出了什麼東西,而不只是關注學會了什麼,不然就會感覺好像什麼都會,但是什麼都做不了。
- 不要害怕遇到困難和錯誤,解決了所有錯誤,剩下的就是成功。就像迷宮中尋找出口一樣,沒可能一下子就能找到正確出口的。
- 定好目標之後,瞭解一下需要學習哪些知識,就搜尋相關的知識來學習,學習過程中遇到不會的,繼續搜尋,如此往復,邊做邊學,做完產品,知識也自然學會了。這就是遞迴式學習法
- 把你做產品過程中學到的知識,寫成文章教程,或影片教程,分享給別人,讓別人能根據你的教程學會知識。一方面鞏固了知識,另一方面別人看到可以幫你指出錯誤,最後,你沒遇到的坑,別人遇到了請教你,也是等於幫你學習。
整個文章就到這裡結束了,希望對您有所幫助。也歡迎幫忙分享給更多的朋友,幫助到更多的朋友。
轉載地址:dot2.com/tutorial/e6eb5e6ae9324955...
本作品採用《CC 協議》,轉載必須註明作者和本文連結