學(xué)習(xí)編程的過程中可能會走哪些彎路?
@Crossin
回頭看學(xué)生時代,最大的彎路就是怕走彎路、想不走彎路。
糾結(jié)該學(xué)什么語言、該研究哪個方向、該做項(xiàng)目還是啃算法,生怕一失足成千古恨,踏上一條不歸路。
很久之后才發(fā)現(xiàn),與其糾結(jié)選擇,不如找個點(diǎn)堅(jiān)持下去。好比爬山,你在山腳下糾結(jié)該從哪條路上去,而實(shí)際上,每一條都能通往山頂,每一條都不會是筆直平坦的。你怕錯過另一條路的風(fēng)景踟躕不前,卻不知道只要登上山頂就可以一覽眾山小。
如果一定要說個經(jīng)驗(yàn)教誨,那就是盡可能多地寫代碼、讀源碼、讀文檔。
有兩個詞,一個叫做功不唐捐,一個叫做殊途同歸。
@Blueve
學(xué)習(xí)過程中的彎路是不得不走的,但是學(xué)習(xí)方法上的彎路還是可以繞的。
得到經(jīng)驗(yàn)和浪費(fèi)時間終歸是兩回事嗎。
我是個完完全全自學(xué)入門的人,現(xiàn)在雖已經(jīng)進(jìn)入科班,但是我認(rèn)為經(jīng)驗(yàn)還是可以分享給想自學(xué)編程的大家
的。當(dāng)然如果題主是想要為了信息學(xué)的競賽學(xué)習(xí),那我覺得這個答案就不適合你了,你應(yīng)該選擇更為系統(tǒng),更為針對,強(qiáng)度也更大的訓(xùn)練方法。
1.
大多數(shù)人學(xué)習(xí)編程最早的懊惱就是不明所以的“燙燙燙燙燙燙燙燙”,雖然基本教育的節(jié)奏都是從偉大的C語言開始,但是作為一個早早自學(xué)編程的人來看,C語言作為入門語言是很容易打擊人的(教材本身的質(zhì)量也是一個因素),所以如果是自學(xué)入門的話,不妨學(xué)一學(xué)的入門容易規(guī)則簡單的語言培養(yǎng)語感和基本素養(yǎng),例如PHP、VB這樣的東西,可以很快做出一個可以看可以用的東西,是很有成就感的,有了自信就自然而然得會想深入的提升自己了。
2.
自己當(dāng)年中學(xué)的時候做論壇,那時候流行的是Discuz!,為了做好玩的互動插件學(xué)的PHP。當(dāng)時的感覺是,自學(xué)一門編程語言并不輕松,在會的人看來容易的概念其實(shí)不容易灌輸給完全不會的人。最開始自己就是啃書本,上課都不記筆記的我把學(xué)習(xí)到的東西規(guī)規(guī)整整地記在本子上,直到把基礎(chǔ)的語法和語言特性都了解了才停止。不一定像我這樣,但是作為一個一清二白的菜鳥,一定要讓自己有一個把基礎(chǔ)的基礎(chǔ)看下去的驅(qū)動力才可以。
3.
實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。實(shí)踐對于初學(xué)者而言非常重要,但是C語言課本上的實(shí)踐大多是一些就事論事,針對知識的題目,面對一個控制臺程序,其實(shí)做完了……過幾天也不會覺得這個有什么意思,所以我認(rèn)為一定要盡可能的嘗試去做一個可以用的東西。學(xué)PHP做個登陸頁面呀~學(xué)VB仿個Win計(jì)算器呀~學(xué)Java做個掃雷~總之做出能夠?qū)Τ阒獾娜硕寄苡幸稽c(diǎn)點(diǎn)興趣的東西,對自己是很鼓舞的。在這方面,C語言這種,對于初學(xué)者做圖形界面比較不友好的語言……主要的問題就是不會讓你產(chǎn)生那種真正解決問題的成就感。
4.
最開始的實(shí)踐是一種拼湊,因?yàn)橹R的不牢靠,但是需要解決的問題對自己又是如此的龐雜,所以那個時候的代碼都是以能解決問題為主,而不是以好的方法解決問題為主。現(xiàn)在回過頭來看當(dāng)年寫過的論壇家族,論壇寵物中心,從外觀上講確實(shí)是當(dāng)時一流的,但是背后的代碼著實(shí)慘不忍睹。不過對于初學(xué)的人而言,能夠利用現(xiàn)有知識達(dá)成目標(biāo)已經(jīng)是竭盡全力了。那個時候的編程沒有精雕細(xì)琢,就是為了實(shí)現(xiàn)而實(shí)現(xiàn),也不管有多少if套著if,甚至變量名我都能起成$if。不過我必須承認(rèn)的是,沒有那段經(jīng)歷,我可能不會如此的喜歡編程。當(dāng)有人使用了你的成果,不管是對他提出建議還是提出贊美,對于一個尚未破殼的菜鳥而言,都是很棒的感覺。說實(shí)話,作為初學(xué)者,敢寫代碼,就是個里程碑了。
5.
歷史和人的感覺是很像的,當(dāng)你的代碼寫得多了的時候,你自然就會覺得寫得不好看。照現(xiàn)在的話講,那些代碼一點(diǎn)都不優(yōu)雅。作為一個逼格滿滿的人,完成任務(wù)已經(jīng)不再是一個追求,當(dāng)Ctrl+C/V成了編程的必備步驟的時候,你自然而然的就會思考了:是不是可以不這樣做?這是一個重要的過程,你會想要提升你代碼的執(zhí)行效率,你會想減少查詢數(shù)據(jù)庫的次數(shù),你會想用輕便的代碼實(shí)現(xiàn)想要的功能……當(dāng)你步入這個階段的時候,恭喜,菜鳥終于入門了。
這是三個大坑,算法優(yōu)化、數(shù)據(jù)庫查詢優(yōu)化、代碼復(fù)用。
你得心甘情愿跳進(jìn)去,再慢慢往外爬。
5.
看上去我好像在抬高PHP一樣,其實(shí)不是這個意思。我只是覺得作為一個可以立竿見影的入門語言,它是很合適的。進(jìn)入大學(xué)計(jì)算機(jī)專業(yè)后,我和同學(xué)一樣,一起學(xué)習(xí)C語言,我沒有接觸過這門語言,但是我卻比周圍的初學(xué)者們更快更好地接受了它,即便是像內(nèi)存、數(shù)據(jù)類型、指針等從沒有接觸過的概念,我也比別人更快的認(rèn)識清楚。我覺得這一方面是因?yàn)榫幊趟鶐淼膶W(xué)習(xí)能力的提升,另一方面也是因?yàn)槲易哉J(rèn)為我不是菜鳥所帶給我的自信和動力。我當(dāng)時做了很多出格的事情,當(dāng)講課、教科書都在用VC的時候,我執(zhí)拗的使用VS2010,因?yàn)槲矣X得這個用戶體驗(yàn)好。在課設(shè)說明書還在按照Turbo C說明圖形界面的時候,我卻找了個能在VS下使用的仿造的圖形庫EasyX。其實(shí)人都是追求美的,老師也不喜歡你開個DOSBOX滾動翔一樣的Turbo C給他演示。擅用和檢索現(xiàn)有的工具和資源,是這個時期我最大的收獲。
當(dāng)然,這里也挖了一個大坑,用戶體驗(yàn)。
前幾天知道,我的學(xué)弟學(xué)妹們都放棄Turbo C了。
6.
在學(xué)校的學(xué)習(xí)過程是這樣的:C -> C++ -> Java。
C++和C截然不同,作為一個擁有面向?qū)ο筇匦缘恼Z言,它帶給我們很多新鮮的概念。盡管初次見面的時候我們彼此都如此羞澀,誰都看不懂誰。在學(xué)習(xí)C++的時候,其實(shí)我并沒有提起多大的勁頭,只是覺得STL很好很方便,在OJ上刷題的時候能比C省事不少。不過之后看到一本國外的關(guān)于物理引擎的書,便又是提起了12分的興趣看了看。那本書終歸我是沒有看完,不過只看一部分我便能感受到自己的膚淺——原來類是這么用的啊。
很久之后我才知道這是一個高級坑:設(shè)計(jì)模式。
7.
之后數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì),按照套路是要用Java做UI的,但是Java的IDE在我的電腦上一直表現(xiàn)不佳,加上調(diào)試時候的種種不順暢,使得我我對Java做窗體程序好感不佳。于是我想起了初中的VB,隨后又聯(lián)想到了它的同門C#(求別問怎么聯(lián)想的=。=),那種拖拽做界面的爽快感……經(jīng)過我的推廣,班里最后只有一人用Java做UI,還有另外一個人用的MFC。這個其實(shí)是想說,我這個人比較懶,所以喜歡找更好的解決方案,存在就有存在的價(jià)值,短短5天,所有人都可以用C#做出一個好看的界面,而Java搞得很麻煩又不好看。這不是在談優(yōu)劣或是投機(jī)取巧,而是在談生產(chǎn)力、效率。我訓(xùn)練的人可以5天上崗,做得比你訓(xùn)練一個學(xué)期的人還要好,那這就是價(jià)值。
8.
其實(shí)一路走來,站的越高,自己就越容易被顛覆。
當(dāng)PHP寫代碼覺得原始的時候,框架這樣的東西就會跳在你眼前打臉。
當(dāng)WinForm程序做起來感覺到代碼混搭的怪異的時候,就發(fā)現(xiàn)其實(shí)還有個WPF。
當(dāng)覺得Java臃腫性能堪憂的時候,高級的Web技術(shù)又會顛覆你對Java的偏見。
……
學(xué)習(xí)編程的人需要這樣一個自我認(rèn)知和自我提高的過程,老實(shí)說,我覺得這其實(shí)不算彎路,這可都是經(jīng)驗(yàn)呀。這些所謂的彎路是你只要踏上這條路就必走不可的,就像是宜家的步道設(shè)計(jì),人家設(shè)計(jì)好就是要你走遍全程。因?yàn)檫@是一個過程,學(xué)習(xí)過程上的彎路是寶貴的。
至于我之前所說的學(xué)習(xí)方法上的彎路,大多是指教材選擇、訓(xùn)練方法上的彎路,這些彎路可以通過前輩的指導(dǎo)來避免,我覺得這種彎路走上了,就是浪費(fèi)時間?,F(xiàn)在時間這么寶貴,我們都要講效率的。當(dāng)大家都說譚老的書不好的時候,就不要選這本書了。當(dāng)大家都說某些習(xí)題沒有用的時候,就不要去做了。學(xué)會選擇,學(xué)會甄別,學(xué)會找到適合自己的方法,這才是最重要的嗎。