半年也沒學會C語言,編程真的需要天賦么?
最近在知乎上看到了一個很有趣的問題,題目叫做:編程學習真的需要天賦嗎?
提問題的題主說自己花了半年的時間硬啃C primer plus,結果看到鏈表的時候就再也看不下去了。然后又看算法導論,看得頭疼欲裂。于是陷入了困惑,為什么同樣是半年的時間,別人可以把基礎的算法都學完,但是自己卻一無所獲呢,難道真的是天賦不行嗎?
其實之前公眾號里也有很多小伙伴問過我同樣的問題,今天就和大家聊聊,希望能夠幫助到大家。
不要通過啃書的方式入門
在我看來題主最大的問題可能不是天賦不夠,而是選錯了學習方法。
說起來不同的人有不同的方法,有些人喜歡看視頻,有些人喜歡看書,還有些人喜歡直接上手練習。不同的方法就好像游戲里的不同職業(yè)一樣,優(yōu)勢不同,本質上并沒有高下之分。所以現在很多年輕人很喜歡B站學習法,在B站上找一些學習視頻,配合彈幕看起來非常舒適。
如果要給這些學習方法做個排序的話,視頻應該是最簡單的,其次是博客,然后是上手練習,最后才是看書??磿旧峡梢哉f是當中最難的,我自己也親身體驗過。在我高中剛畢業(yè)的時候,我也曾經試著自學過C語言。和題主不同的是,由于高中的時候參加信息競賽,所以我當時是有編程基礎的,也會一門語言。但即使如此,一整個暑假,我愣是沒有把C語言啃下來。
當時我也以為是我自己的問題,我倒沒懷疑我的天賦,因為畢竟學過一門語言了。我覺得是我毅力不夠,偷懶太多了。結果上了大學之后,聽了幾節(jié)C語言課了解了一下語法,然后又去機房練習了一下,C語言就寫得有模有樣了。當時還幫一個其他學校的同學寫了個圖書管理系統(tǒng)。
我后來試著看書啃過很多技術領域,基本上都沒有啃下來,但是通過其他的途徑基本上折騰了一下,就都入門了。我慢慢總結出了規(guī)律,當我們從零開始入門的時候,最好不要選擇看書硬啃的方式。因為看書的過程當中會遇到很多很多的問題,這當中很多問題甚至我們不能很好地描述,因為我們本身就沒完全理解。另外一個問題是寫書的人視角和看書的人視角是完全不同的,因為寫書的人已經會了,很多內容他會不自覺地覺得這是天經地義應該了解的,讀者也應該都懂了,但實際情況往往不是如此。
所以再好的大學也是把書當做教材,而不是讓學生去自學,原因就在這里。
循序漸進學習法
我個人總結出來的是循序漸進學習法,其實也可以理解成防勸退學習法。
當我們學習一個新的領域的時候,最大的困難或者是問題其實不是我們學到的東西,或者是我們不理解的東西,而是勸退。往往遇到的困難多了,就會想要退縮逃避。這種心態(tài)人人都有,也是人之常情,人類就是很討厭自己不擅長的東西,這個很難完全避免。雖然無法避免,但是我們既然預料到會有這種情況,其實可以防止它發(fā)生。
防止心態(tài)崩潰的方法就是想辦法不要讓自己心態(tài)崩潰,也就是降低學習的難度。一開始的時候先選擇比較簡單的資料和內容,比如面向純小白的視頻或者是公開課。我們先通過這些入門資料對要學習的東西有一個大概的了解,然后再找一些最簡單的挑戰(zhàn)上手實操,從實際操作當中體會它的運作原理。
這里要注意,循序漸進法入門門檻低,但是需要我們不斷加碼,不能半途而廢。很多人就到實操這一步就停止了,學了一點操作就以為自己懂了,后面只是積累經驗不再學習新的內容了。這會導致我們遺漏很多重要的知識點,或者對很多地方理解不夠深刻。我個人會在這個階段之后,再進行系統(tǒng)性的學習,比如找一本經典的教材完整看一遍。由于我們已經對這個領域有一定了解,并且都已經上手實操過了,對很多技術細節(jié)已經有一定的概念了。這個時候再看書其實是一種查漏補缺的作用,完整看一遍下來之后,會學到很多高級的技巧,以及夯實我們的理解。
看完書之后,我們可以再進一步找一些高難度的內容來實操。就拿算法舉例,一開始學完算法理解完概念之后做的是基礎題?;A題做完了再來鞏固學到的內容,做一些難度加大的提高題。提高題做完了,再做和其他算法結合以及需要其他更多知識和能力的困難題。等困難題都做完了,那么說明這個算法是真的學到家了。
總結下來就是通過這種逐漸加碼給自己提高難度的方式來反復鍛煉和夯實自己的能力。
天賦沒那么重要
其實對于程序員這一行,我們很難說出天賦究竟是什么。
是人特別聰明,什么技術一學就會嗎?還是特別有耐心,可以閱讀無數源碼也不會覺得厭煩?還是思維縝密,以至于很少寫出bug?
看起來這些都是天賦對吧,但其實它們都不重要。首先先拿聰明來說,聰明的人學東西的確快。但問題是我們這行學東西快不快并不重要,重要的是精不精。精通遠遠比會的多重要,但精通一門技術無論是誰都是需要長久的打磨和鍛煉的,對于聰明人來說也一樣不是一件容易的事。再說耐心和思維縝密,這兩點其實都是可以訓練的,都屬于可以訓練的技能。我自己之前就很沒耐心,也粗心大意,寫出過很多bug。但是經過幾年的錘煉和訓練,養(yǎng)成了操作前三思的習慣,已經很少出錯了。
都說行業(yè)內卷,競爭激烈。說起來也的確如此。大公司的崗位這么多人競爭,一點也不比公務員遜色。但如果換個角度,我又會覺得有些言重。因為90%的程序員日常工作就是重復著已經熟練的技能,能夠逼著自己不斷突破,不斷學習的,少之又少。靠著經驗積累,靠著不斷的工作,很多人一樣可以進入大公司,拿到不錯的薪水。
有人在我知乎下面留言說,阿里的P7就是普通程序員的天花板。可是我認識很多P7,他們當中能做到不斷自我提升的,也一樣是少數。能讓我感知到天賦的,更是幾乎沒有。所以與其把阿里P7稱作是行業(yè)天花板,倒不如說是不會持續(xù)提升自己人的天花板。
有的時候我倒覺得天賦這個詞本身就是留給傳奇和天才的,像是樓教主、陳立杰這種頂級大牛,我一定是覺得有天賦的。他們能夠用一年時間做到國家隊水平,兩三年時間成為全國甚至世界冠軍。這種成就顯然不只是努力就能實現的,背后一定有頂級甚至過人的天賦。我曾經聽學長說過acm界一位熱愛女裝參賽的傳奇選手,他為了金牌苦肝數年才最終如愿,付出的努力之多令所有人驚嘆。人送外號凡人的極限,也就是說作為凡人無論多么努力就只能達到他的水平,再往上就是神一樣的天賦型選手了。
雖然這是一個玩笑,但也有些啟發(fā)意義。有些時候我們就需要有這樣的心態(tài),坦然接受自己就是一個沒有天賦的普通人。雖然沒有天賦,但我們也不是什么都做不了。靠著努力和熱忱,凡人的極限也一樣能拿金牌,也一樣可以有光明的未來。
本文轉載自微信公眾號「TechFlow」,可以通過以下二維碼關注。轉載本文請聯(lián)系TechFlow公眾號。