一個老程序員對學弟學妹的一些忠告
我是一個在程序界混得不算太久但自以為有點積淀的老程序員,今天想敞開心扉跟沒有畢業的學弟學妹們談談心,純粹談自己的個人看法。
對編程初學者來說,或者對仍在大學接受高等教育,即將成為編程工作者的人來說,IT 界的技術風潮是不可追趕的。很多人扔掉大學計算機基礎課程的課本,而去購買許多看起來很高上大的“編程寶典”,我不想說這些裝逼,也許是個人的學習方式不 同,我只是覺得如果他們把追趕這些時髦技術的時間多花一點在基礎的課程上應該是可以走得更遠的。
計算機技術不等于編程技術
很多人把我們學計算機的當成是修電腦的,很多計算機專業的人對此非常反感。也有人把我們學計算機的當成是寫程序的,這難道就對了么?很多在校的 學生就會這么認為,認為學計算機就是學編程,計算機專業就是編程專業,也只上和編程有關的課程,其他和編程關系不大的計算機基礎課程統統不管,這令我非常 詫異。
其實編程只是計算機技術應用過程中一種復雜性最低的勞動,這就是為什么 IT 業最底層的人是程序員(CODER)。計算機技術包括了多媒體,計算機網絡,人工智能,模式識別,管理信息系統等等這些方面。編程工作只是在這些具體技術 在理論研究或者工程實踐的過程中表達算法的過程。編程的人不一定對計算機技術的了解就一定很高。而一個有趣的現象是,不少大師級的計算機技術研究者是不懂 編程的。網上的炒作和現實中良好的工作待遇把編程這種勞動神秘化了。其實每一個程序員心里都明白,自己這些東西,學的時候并不比其它專業難,所以自然也不 會高檔到哪里去。
死記硬背,沒有靈活應用
我見過一本女生的《計算機網絡原理》教材,這個女生像小學生一樣在書上劃滿了橫杠杠,筆記做得滿滿的,打印出來一定比教材還厚。我不明白的是, 像計算機網絡原理這樣的課程有必要做筆記?我們的應試教育的確害了不少學生,在上《原理》這一類課程的時候許多學生像學《馬列原理》一樣逐字背誦記憶。這 乃是我見過的最愚蠢的行為。所謂《原理》,即是需要掌握它為什么這樣做,學習 why,而不是 how(怎樣做)。極端認真的學生背下以太網的網線最大長度,數據幀的長度,每個字段的意義,IP 報頭的格式等等,但是忘了路由的原則,忘了 TCP/IP 協議設計的宗旨。總之許多人花了大量的時間把書背得滾瓜爛熟卻等于什么也沒學。
對于編程語言的學習也一樣,這里拿 C++ 舉例,很多學生都死扣 C++ 語法的細節不放,看了很多 C++ 教程,甚至是在網上也學習很多關于 C++ 語法的課程。但是在寫程序的時候突然發現又忘記了這些語法,然后再繼續去翻書,這種場景各位應該不少遇到吧。有個師弟就跟我說:“C++ 太難了,學了這里忘了那里,學了繼承忘了模板。”我的回答道:“你不去學就容易了”。我并沒有教壞他,只是告訴他,死摳 C++ 的語法就和孔已己炫耀茴香豆的茴字有幾種寫法一樣毫無意義。你根本不需要對的 C++ 語法太關心,動手編程就是了,有不記得的地方一查 MSDN 就立馬搞定。我有個結論就是,實際的開發過程中對程序語法的了解是最微不足道的知識。這是為什么我在為同學用 Basic(我以前從沒有學過它)寫一個小程序的時候,只花了半個小時看了看語法,然后再用半個小時完成了程序,而一個小時后我又完全忘記了 Basic 的所有關鍵字。
基礎沒學好,亂趕技術時髦
這是我想說的重點,大多數人都希望自己寫的應用或者網站能盡快上線,然后賺很多白花花的銀子,這也無可厚非,畢竟我們的代碼總是需要有商業價 值。但是,我覺得這種想法對那些已經真正進入軟件行業的人來說是合理的,但是對大部分(注意我說的是大部分,在校創業的也有一部分)在校的準程序員來說, 這種想法是要不得的,一個并未進入到行業競爭中來的初學者最大的資本便是他有足夠的時間沉下心來學習基礎性的東西,學習 why 而不是 how。時髦的技術往往容易掌握,而且越來越容易掌握,這是商業利益的驅使,為了最大化的降低軟件開發的成本。但在 IT 領域內的現實就是這樣,越容易掌握的東西,學習的人越多,而且淘汰得越快。但基礎學扎實了,無論今后出來什么新技術,再怎么變幻莫測,它總是架在計算機原 理上的,到時候你還不是對它手到擒來?
這里有一個和我有關的例子,大家可以看看:
在大一時我還找不到開機按紐,而我的一位同學已經會寫些簡單的匯編程序了。我把大二的所有時間花在了匯編,計算機體系結構,數據結構,操作系統原理 等等這些課程的學習上,而他則開始學習 HTML 和 VB,并追趕 ASP 的潮流。大三的時候我開始學習 Windows 操作系統原理,學習 SDK 編程,時間是漫長的,這時我才能夠用 VC 開發出象模象樣的應用程序。我曾一度因為同學的程序已經能夠運行而自己還在學習如何創建對話框而懊惱不已,但臨到畢業才發現自己的選擇是何等的正確。和我 談判的公司開出的薪水是他的兩倍還多。下面有一個不很恰當的比方:假設學習 VB 編程需要 4 個月,學習基礎課程和 VC 的程序設計需要 1 年。那么如果你先學 VB,再來學習后者,時間不會減少,還是 1 年,而反過來,如果先學習后者,再來學 VB,也許你只需要 1 個星期就能學得非常熟練。
這是一個很典型的例子,在大學里,你的主要任務還是學好基礎,我聽很多學弟們經常把《計算機組成原理》《網絡原理》的課程逃掉去實驗室機房做一些 WEB 開發,個人覺得是非常愚蠢的做法。
說了這么多,這也算是我作為一個過來人的心得,如果你還是在校的學生,或者是剛要進入 IT 行業的初學者,我真摯地希望,我的這些忠告可以在你未來的職業生涯上派上用場。