程式設計15年的技術大神之經驗告白,樣樣實在

乞力馬紮羅的雪CYF發表於2015-09-26
學習過程中的彎路是不得不走的,但是學習方法上的彎路還是可以繞的。

得到經驗和浪費時間終歸是兩回事嗎?

我是個完完全全自學入門的人,現在雖已經進入科班,但是我認為經驗還是可以分享給想自學程式設計的大家的。當然如果大家是想要為了資訊學的競賽學習,那我覺得這個答案就不適合你了,你應該選擇更為系統,更為針對,強度也更大的訓練方法。

1.

大多數人學習程式設計最早的懊惱就是不明所以的“燙燙燙燙燙燙燙燙”,雖然基本教育的節奏都是從大的C語言開始,但是作為一個早早自學程式設計的人來看,C語言作為入門語言是很容易打擊人的(教材本身的質量也是一個因素),所以如果是自學入門的話,不妨學一學的入門容易規則簡單的語言培養語感和基本素養,例如PHP、VB這樣的東西,可以很快做出一個可以看可以用的東西,是很有成就感的,有了自信就自然而然得會想深入的提升自己了。

2.

自己當年中學的時候做論壇,那時候流行的是Discuz!,為了做好玩的互動外掛學的PHP。當時的感覺是,自學一門程式語言並不輕鬆,在會的人看來容易的概念其實不容易灌輸給完全不會的人。最開始自己就是啃書本,上課都不記筆記的我把學習到的東西規規整整地記在本子上,直到把基礎的語法和語言特性都瞭解了才停止。不一定像我這樣,但是作為一個一清二白的菜鳥,一定要讓自己有一個把基礎的基礎看下去的驅動力才可以。

3.

實踐是檢驗真理的唯一標準。實踐對於初學者而言非常重要,但是C語言課本上的實踐大多是一些就事論事,針對知識的題目,面對一個控制檯程式,其實做完了……過幾天也不會覺得這個有什麼意思,所以我認為一定要儘可能的嘗試去做一個可以用的東西。學PHP做個登陸頁面呀~學VB仿個Win計算器呀~學Java做個掃雷~總之做出能夠對除你之外的人都能有一點點興趣的東西,對自己是很鼓舞的。在這方面,C語言這種,對於初學者做圖形介面比較不友好的語言……主要的問題就是不會讓你產生那種真正解決問題的成就感。

4.

最開始的實踐是一種拼湊,因為知識的不牢靠,但是需要解決的問題對自己又是如此的龐雜,所以那個時候的程式碼都是以能解決問題為主,而不是以好的方法解決問題為主。現在回過頭來看當年寫過的論壇家族,論壇寵物中心,從外觀上講確實是當時一流的,但是背後的程式碼著實慘不忍睹。不過對於初學的人而言,能夠利用現有知識達成目標已經是竭盡全力了。那個時候的程式設計沒有精雕細琢,就是為了實現而實現,也不管有多少if套著if,甚至變數名我都能起成$if。不過我必須承認的是,沒有那段經歷,我可能不會如此的喜歡程式設計。當有人使用了你的成果,不管是對他提出建議還是提出讚美,對於一個尚未破殼的菜鳥而言,都是很棒的感覺。說實話,作為初學者,敢寫程式碼,就是個里程碑了。

5.

歷史和人的感覺是很像的,當你的程式碼寫得多了的時候,你自然就會覺得寫得不好看。照現在的話講,那些程式碼一點都不優雅。作為一個逼格滿滿的人,完成任務已經不再是一個追求,當Ctrl+C/V成了程式設計的必備步驟的時候,你自然而然的就會思考了:是不是可以不這樣做?這是一個重要的過程,你會想要提升你程式碼的執行效率,你會想減少查詢資料庫的次數,你會想用輕便的程式碼實現想要的功能……當你步入這個階段的時候,恭喜,菜鳥終於入門了。

這是三個大坑,演算法優化資料庫查詢優化程式碼複用

你得心甘情願跳進去,再慢慢往外爬

5.

看上去我好像在抬高PHP一樣,其實不是這個意思。我只是覺得作為一個可以立竿見影的入門語言,它是很合適的。進入大學計算機專業後,我和同學一樣,一起學習C語言,我沒有接觸過這門語言,但是我卻比周圍的初學者們更快更好地接受了它,即便是像記憶體、資料型別、指標等從沒有接觸過的概念,我也比別人更快的認識清楚。我覺得這一方面是因為程式設計所帶來的學習能力的提升,另一方面也是因為我自認為我不是菜鳥所帶給我的自信和動力。我當時做了很多出格的事情,當講課、教科書都在用VC的時候,我執拗的使用VS2010,因為我覺得這個使用者體驗好。在課設說明書還在按照Turbo C說明圖形介面的時候,我卻找了個能在VS下使用的仿造的圖形庫EasyX。其實人都是追求美的,老師也不喜歡你開個DOSBOX滾動翔一樣的Turbo C給他演示。擅用和檢索現有的工具和資源,是這個時期我最大的收穫。

當然,這裡也挖了一個大坑,使用者體驗

前幾天知道,我的學弟學妹們都放棄Turbo C了。

6.

在學校的學習過程是這樣的:C -> C++ -> Java。

C++和C截然不同,作為一個擁有物件導向特性的語言,它帶給我們很多新鮮的概念。儘管初次見面的時候我們彼此都如此羞澀,誰都看不懂誰。在學習C++的時候,其實我並沒有提起多大的勁頭,只是覺得STL很好很方便,在OJ上刷題的時候能比C省事不少。不過之後看到一本國外的關於物理引擎的書,便又是提起了12分的興趣看了看。那本書終歸我是沒有看完,不過只看一部分我便能感受到自己的膚淺——原來類是這麼用的啊。

很久之後我才知道這是一個高階坑:設計模式

7.

之後資料結構的課程設計,按照套路是要用Java做UI的,但是Java的IDE在我的電腦上一直表現不佳,加上除錯時候的種種不順暢,使得我我對Java做窗體程式好感不佳。於是我想起了初中的VB,隨後又聯想到了它的同門C#(求別問怎麼聯想的=。=),那種拖拽做介面的爽快感……經過我的推廣,班裡最後只有一人用Java做UI,還有另外一個人用的MFC。這個其實是想說,我這個人比較懶,所以喜歡找更好的解決方案,存在就有存在的價值,短短5天,所有人都可以用C#做出一個好看的介面,而Java搞得很麻煩又不好看。這不是在談優劣或是投機取巧,而是在談生產力效率。我訓練的人可以5天上崗,做得比你訓練一個學期的人還要好,那這就是價值。

8.

其實一路走來,站的越高,自己就越容易被顛覆。

當PHP寫程式碼覺得原始的時候,框架這樣的東西就會跳在你眼前打臉。

當WinForm程式做起來感覺到程式碼混搭的怪異的時候,就發現其實還有個WPF。

當覺得Java臃腫效能堪憂的時候,高階的Web技術又會顛覆你對Java的偏見。

學習程式設計的人需要這樣一個自我認知和自我提高的過程,老實說,我覺得這其實不算彎路,這可都是經驗呀。這些所謂的彎路是你只要踏上這條路就必走不可的,就像是宜家的步道設計,人家設計好就是要你走遍全程。因為這是一個過程,學習過程上的彎路是寶貴的。

學會選擇,學會甄別,學會找到適合自己的方法,這才最重要。


原文連結:http://toutiao.com/a4274046777/?iid=2940446160&app=news_article&tt_from=mobile_qq&utm_source=mobile_qq&utm_medium=toutiao_ios&utm_campaign=client_share


github主頁:https://github.com/chenyufeng1991  。歡迎大家訪問!

相關文章