還買了很多有關編程的書?
說說我學習編程的經歷吧,或許能給您一些啟發。
我從初中開始接觸到電腦,最早用的是PC1500看上去象一臺計算器,有一塊能顯示兩行代碼的液晶屏幕,和一臺小小的針式打印機(出租車上打印發票的那種)。當時的編程語言是Basic(蓋茨做的那一版),只背了一些語法,基本上不得要領。之后用上了老喬的蘋果電腦,由于能在電腦上繪圖打游戲,感覺很有意思。努力鉆研了一下子,用Basic寫了一個打坦克的小游戲,但是性能不行卡的不要不要的。這個階段基本上就是熟悉了一下編程語言的語法規則。
上大學后,學習了計算機原理和匯編語言。當時覺得匯編語言和數字電路超好玩,于是跑到學校實驗室,試圖用繼電器組裝數字電路,做出加法器,結果繼電器的響應時間控制不了,做出來的加法器根本沒法正常動作。不過,過程還是很有趣的。這個階段對計算機硬件的工作原理有了一定的認識。編程上沒有多大進步,只是又學了一門Fortran。
畢業后一直沒用上編程,直到后來出國打工,才重新撿起編程。當時自學了兩個星期C語言,就匆忙上陣了。我寫的第一段C語言代碼,與其說是用C語言寫的不如說是SQL文,因為C的代碼只做了一件事,就是利用字符串函數,拼接出SQL文,送進數據庫進行計算。即便是這樣上線的時候竟然連編譯都過不去,很苦逼地調試了三天三夜,發現只是因為Windows下的換行符跟Unix不一樣完成的,我的C語言處女作沒啥毛病。這之后就牛X了,C語言的程序越做越多。一次接了一個開發Windows跟Unix通信接口的項目,遇到的難題是Unix傳過來的全角字符在Windows上都成了亂碼的問題。當時對操作系統沒啥概念,實在沒頭緒了,就把字符的二進制編碼從內存里讀出來,研究了幾天就發現Unix編碼跟Windows編碼的高低字節剛好是反過來的,于是做了暴力轉換,算是解決了。在那之后才發現VC++提供了大量的標準庫可以完美解決。我當時也因為自己的無知慚愧了好久。之后,認真讀了一遍《現代操作系統》受益匪淺,大致對各種語言的標準庫的函數結構有了一個比較清晰的認識,也就是知道了每個函數是要解決什么問題。
互聯網興起的時候,老板看重了我善于暴力解決問題的能力(一言不合就直接開掛寫內存),讓我去做動態網頁開發。網頁程序要分客戶端和服務器(現在叫前端后臺),剛開始的時候,還真有點蒙圈,不過弄清楚了客戶端和服務器也就沒啥難度了。當然了在這里我說的跟輕松,實際上也是下了苦功用C語言解析了TCP/IP協議,自己寫了一套HTTP的服務程序,才基本上整明白Apache、IIS這些Web服務的功能。一時間自我感覺超級好,就感覺任何編程語言都是小菜一碟,那時候用過的語言也有幾十種了,基本上都能在三天之內上手。印象最深的是做了一個大項目,接觸到了一套非常完善的Java架構,使用這套架構可以把設計要求跟輕松轉成代碼,省去做出來的程序節省很多調試時間,顛覆了我對架構的認知。
正當我覺得自己已經是編程大牛的時候,我遇到了一個真正的大牛,他徹底改變了我對編程的看法。此人不會寫程序,一次我寫了一段相當復雜的代碼給他看,他只掃了一眼就指出那段代碼肯定有問題,我當然不服氣了。不過他只懂要求不會寫代碼,不能指出問題所在,只是反復說我的代碼不對,我只好反復琢磨要求,終于想到了一個簡單而直接的算法,只用幾行就解決了問題。這件事讓我意識到程序語言有語法和語義兩個緯度,語法是最基本的,但不懂程序的語義就永遠都當不上大牛。要掌握語義這一塊,就得學點數學,懂數學建模才行了。遺憾的是,后來轉到管理崗上,基本上不再寫代碼了,這一塊也就沒有再深入進去了。
在我所接觸過的語言中,C語言應該是最簡單的一種。相比Java這些所謂的高級語言,C語言的語法非常簡單而且直接。只是現在很多高級的操作系統都對內存做了很多保護,C語言程序也因此受到很多限制,學C語言的時候,少了很多探索的機會。
總之,C語言說到底是直接操作系統資源的程序。不懂C語言,雖然也能編程,但涉及到底層處理的功能就只能靠別人做的程序包做開發了。想學會C語言只學語法是不夠的,您還得學點計算機原理和操作系統,至少得明白那些個指針都在干什么才好吧。