談談如何高效學習程式設計技術
進入大學前,自己也就是個只會開關機和玩過QQ的電腦小白,當然也是受學習環境所限,沒有學習過相關的電腦知識。以至於在選大學和報專業的時候,當時只是覺得計算機未來發展前途不錯,就作為非第一志願選擇了。因為從小對發明創造感興趣,所以小時候一直夢想著當一名發明家,發明出有用的東西,但是最後卻陰差陽錯地進到了電腦科學學院學習。
大一上學期,只有一門和計算機相關的概論課,這是全校都會開的通識課程。這時候也很少有同學帶筆記本電腦,那時的我對程式設計技術也是一無所知,我就只能在手機上看些相關的內容。QQ裡面有個興趣部落功能(類似於百度貼吧),我就隨便關注了幾個計算機相關的,有時間就刷一刷,看一看,慢慢知道了有 Java、C語言、C++ 等程式語言(那時候我對程式設計技術還只停留在語言層面上),也在興趣部落裡看了一些吹噓這個語言好和那個語言好之類的帖子,當然也有很多看不懂的,最喜歡看那些搞笑的程式員段子。
正所謂笨鳥先飛,我怕大一下學期跟不上專業課的學習,所以在大一寒假我就開始學習大一下學期的C語言,C語言也是我們大一唯一一門專業課程。大一寒假我有了我的個人膝上型電腦,當時也沒有書,是一位學長給了我一本 《C Primer Plus》的電子書,我就在手機上看,剛開始也是看不懂,也對比了其他的C語言電子書籍,什麼C語言從入門到精通,C語言程式設計實踐之類的,最後發現還是 《C Primer Plus》稍微能看懂些,跟著書中敲程式碼(當時最早用的是 Dev C++ IDE,後來用的才是 Vistual Studio 系列),寫個 Hello Word 都出現各種各樣的問題,一方面也是書中程式碼的C語言標準和我用的編譯器的標準不同(雖然 C++ 相容 C語言,但也並不完全相容)。手機上也有可以編譯C語言的安卓軟體 C4droid ,後來手邊沒電腦的時候,也用這個測試一些程式設計例子。慢慢地,看 《C Primer Plus》跟著敲程式碼,也似乎可以看懂很簡單的程式碼了,但是拋開書自己寫,連個類加計算(比如計算從 1 加到 100)都寫不了,也記不住C語言的語法,當時我是用最原始的方法,手寫記筆記。一段 Hello Word 的程式,從引入標頭檔案到main函式,甚至是一個標點符號:分號和左右大括號,我都在書中(反覆看前幾章)提煉了一些語句,加以說明,解釋這個是幹什麼的,那個是幹什麼的,每行程式之間寫滿了密密麻麻的解釋(現在回想起來,哈哈~)。我那時是想靠著把東西記住來寫程式,後來確實也可以離開書 “默寫” 些簡單的程式了,至少是清晰的寫出 Hello Word 是沒啥問題了。開學老師教C語言的時候,有了寒假自學的基礎,我基本都可以聽懂(那時班上確實很多人都聽不懂),對程式也逐漸由記憶變為了理解。那時做班上的學習委員,和老師交流會多一些,自己也買了本《C Primer Plus》的實體書繼續看,越學越有興趣,那時C語言中最難理解的也就是指標了。當時的C語言老師,可以說是我的程式設計啟蒙老師,後來的 C++ 也是這個老師教的。和大多數老師不同,我們老師上課講完理論後,會手把手教我們寫C語言(後來的 C++ 也是),而一些老師則是為了省事,講完理論複製一下和書配套的程式碼執行看看輸出就完事了。這兩種效果是完全不一樣的,後面這種完全讓人不知道為什麼要這麼寫(雖然老師分析的頭頭是道,但是大多數學生都不以為然)。而且大多數老師實際程式設計用的也根本不是C語言,所以我們老師在課上手敲程式碼的時候可能也會出錯(這真的很正常,而且有時候老師是故意這麼寫錯,看我們能否發現問題),那時我比大多數同學提前學過一點,所以總能率先發現問題,老師也經常表揚我,這種滿足感在當時真的無語倫比,這在一定程度上也激勵我學習C語言。雖然我現在也不用C語言寫程式碼,但是很多程式設計的習慣(這和老師的言傳身教是分不開的)是從那時候就開始培養起來的。我很慶幸自己遇到一位很棒的老師(老師的治學態度令我記憶猶深),這真的打開了我以後學習程式設計世界的大門。
在大一下學期加的一個程式設計師群,有個前輩說 PHP 和 C語言語法很像,說我有C語言基礎可以學習一下,那時也是聽說了 PHP 是最好的語言(:smile:)。正好學校也有一個網站維護的組織(被認為是大神的聚集地),有幾個方向,其中就有 PHP 方向,並且他們在暑假安排的也有學習。由於暑假我要去無錫,不能和他們一起學習,所以就自學了一點 PHP 和 JavaScrapt 知識(非常少,學完也還是小白階段),當時手動搭建 PHP 環境出各種問題,最後沒辦法用的 PHP 整合開發環境 WampServer。我那時也看視訊,但是不知道版本的重要性,按照視訊做就是不對,當時挺令人抓狂的。
大一暑假開始跟著慕課網上的視訊學習 C++,對 C++ 的語法有了大致的掌握,但對一大堆的函式(虛擬函式、過載(運算子)函式)還是一頭霧水。在大二上學期開學的時候,我和老師聊到這些,老師笑著說帶著這些問題聽我的課,看能不能搞懂。學習C語言的時候更多學習的是語法,教材也是譚浩強的C語言書,對演算法學習很少,也就會寫基本的排序演算法(比較排序)和一些迭代相關的函式(牛頓迭代法、解方程函式)。學 C++ 的時候才學了點演算法和資料結構的基本知識。這學期學習 C++ 的時候,我前一個月基本都是在吃老本,C++ 被擱置了。
上面說到學校的網站維護組織,雖然我沒有參加他們的培訓,但他們還是給了我一個機會。為其一個月的考察期,由組長(大我們一級的學長)指導我們,給我們佈置任務,還有最終要完成的選拔作業(一個只有增刪改查的簡單部落格系統)。組長每週會了解我們的學習情況,還給了我們 PHP 學習的視訊(雲知夢強哥的視訊)。我比起組裡的其他同學,已經落後了,所以我那時每日每夜的看視訊做筆記,有時候一天只睡三四個小時,白天還要上課,我花了半個月就把原本一個月的視訊看完了,但寫部落格系統時還是寫不出來。當時也很苦惱,看了視訊也沒用呀,組長也給我們講了講系統的功能和應該重點視訊的哪些節,提示了一些思路,最後一個星期,我迫於壓力(當時一方面是班上學習相關的事情也很多,經常要開會安排事情和收發班上作業,凡事都親力親為就比較忙,另一方面也是自己壓力太大了,想的太多),便主動聯絡組長退出了(當時是 9 個人競爭 3 個名額)。過了一個星期,自己想明白了,把這個系統也做出來了。由於沒有加入這個組織,這個學期除了 C++ 外,大部分時間都在慕課網上瘋狂看視訊(那時慕課網還沒有收費視訊,視訊也都可以下載),差不多看了 200 多個小時(截止到目前,在慕課網學習時間 500 多個小時,大部分都是大二看的),學習了一些工具(Git、Sublime Text)和前端知識,包括學的第一個前端框架 Bootstrap,這些知識我現在都還很受用,Git 和 GitHub 也是從那時開始玩起的。
再回到 C++,有了 PHP 基礎的我,開始對比這兩門語言的差異性,C++ 的面向物件概念(虛擬函式、繼承還要加上關鍵字等)覺得和 PHP 的面向物件相比 C++ 真的是太麻煩了,我也和老師討論過這個問題,老師當時也推薦我們學習其他更容易上手的面嚮物件語言,如 Java,C#。
大二下學期開學我開始手寫自己的部落格網站,用的是 PHP + Bootstrap,寫這個部落格網站也是為了練手(當時也知道有類似於 wordpress 的部落格搭建框架),自己也買了臺騰訊雲的伺服器,那時騰訊雲學生認證,優惠很大,一年的免費域名加一元一個月的雲主機(1核1G記憶體1M頻寬,足夠我玩了),伺服器系統用的是 Windows Server 2008(那時還不會 Linux)。折騰了一個月,部落格網站初步完成。
本文作者:Wizey
本文連結:http://wenshixin.gitee.io/blog/2018/11/20/談談如何學習程式設計技術/
版權宣告:本作品採用 ofollow,noindex" href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank">知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。轉載請註明出處!
