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