這篇文章是寫給低年級的人的,已經工作的就不用來看我廢話浪費時間了。
最近總是有人問如何確定自己方向的問題,說是看到有的人在搞手機,有的人在搞網頁,有的人在搞遊戲,還有其他的什麼的,然後說自己只懂得這麼一點東西不知道該怎麼辦之類的事情。我一直在一些做軟體開發的群組裡混,裡面有很多學生,也有很多從業者。那些人對於人們在基礎不夠紮實的情況下就「做各種各樣具體的項目」有兩種說法,一種說是浮躁,另一種說是這樣開闊眼界是好的。
大學就四年。學校通常安排前兩年學數學英語,然後大一學語言大二學資料結構。到了大三有很多比較具體而且複雜的課程,然後就要找實習,大四其實就是在找工作,課也沒有,衛生也不檢查了,等於在租學校的宿舍住。
於是在這短短的三年裡面想在電腦那麼多領域裡面找到自己喜歡的,然後鑽研下去,最後還有所成就的話,還是比較難的。因此很多人常常會看到自己周圍突然有兩三個人就乾了點什麼很有成就感的事情了,一問,以前學過的。這種人我也接觸了幾個。我有一個同學說是高中的時候被稱為代碼狂人,給emule寫了點代碼,然後還自己做了個即時通訊工具賣了出去。到了大學就一直在重寫這個東西,最後實習就到騰訊去了。前幾天還遇到個人,說是小學就在折騰flash裡面的action script了,後來投靠perl,說是一直到了大一才寫了一個超過2000行的程式。我也沒去求證,只是覺得比較不可思議。
於是我想,就照著那些傳統的路子先搞定一門語言(《C Primer》),然後學資料結構(《演算法導論》),再去學點庫(《STL原始碼分析》《深入淺出MFC》),之後弄點設計模式(《設計模式》),最後寫個某某管理系統(笑)什麼的,也是無聊了點。竟然要學了那麼多東西,才能弄出一個看得見摸得著的程序,也太考驗人的意志力了吧。幾乎是個人都是從拖曳控制開始的。那些一開始就摸著黑白螢幕狂搞演算法的人,要嘛是NOI出身,要嘛是ACM出身,然後對著幾道演算法題樂此不疲。但是最後有所成就的,很少。我在學校認識了那麼多ACM出身的,最後也就一個去了google。感覺風險還是有點大。
但是反過來也是有問題的。要是一開始就從介面開始弄,人也是很容易浮躁的。很多人因此就陷入了對花花世界的追求了(根據對群體裡面的人的統計),譬如說特別關心怎麼在ListView前面畫棵樹什麼的。這種人裡面,其中一些有追求的,最後都會沿著Windows SDK,再走到DDK,最後寫驅動,一腳踏進泥坑,從此不能自拔,當然這些人也是少數。每當有少數人人對著剩下的多數人說跟「我今天實現了讓Word不能打開某某文件」差不多的這些事情的時候,他們兩眼大放異彩,然後就開始跪求源碼,狂問用了什麼API,最後當程式碼終於到手的時候,就放進之前精心準備好的一個資料夾裡面,封存萬世,從此再也不去看了。當然也有其他的版本,譬如說老是下載書,而且還是rar,然後從來不解壓一樣。曾經有這麼一個人就在群組上炫耀說自己有多少多少G的電子書。我讓他上截圖,結果全是rar。根本沒看嘛,他自己也承認了。
於是怎麼看兩條路都是很有危險的,這就是為了什麼到了大四的時候,能學成的人總是不多的緣故。 太容易陷進去了 。這是什麼意思呢?人總是只對自己做得好的事情感興趣。對自己還沒做的事情感興趣那種是好奇,需要嚴肅看待。當人終於做好了一件事情之後,就會一直不斷的鑽研下去,這當然是好事。但是,從此只見樹木不見森林,以為全天下的編程就那一件事情,那當然是要吃虧的。
所以首先要開拓眼界,知道世界上原來還有這麼多的東西可以做。 在差不多知道程式設計是什麼東西的時候,需要這個玩一玩,那個玩一玩 。不然就會看到旁邊的同學這個用java在手機上跑一個能告訴你1 1=2的東西,那個人用PHP MYSQL弄了個留言版,看得唾液直流,心裡發慌,說自己對著C的黑白螢幕弄了這麼久居然連那點小玩意都做不出來,自尊心很容易受到打擊的。
於是在玩過了之後呢,要及時收手,就專門做一件事情好了 。因為這時候自己已經大概知道自己看見的東西差不多就是那個樣子,想做自己也做得出來,看著別人寫那些花邊的程序也就不會給自己施加太多壓力了。專門做一件事情的意思就是,選定一個方向,然後找書,找人,看程式碼,寫程式。 譬如說可以去弄圖形做遊戲,也可以去弄腳本引擎做做編譯器,還可以跟著老師去搞什麼資料探勘啊嵌入式什麼的 。對一個領域的深入研究最大的用處是可以讓自己接觸 複雜的問題 。
當然,當研究得深入了之後,程序就越寫越大了,這個時候就會出現很多各種各樣的問題了。譬如說效率太低啦,程式一出錯就要全盤推倒重來啦(這個還是比較可悲的),程式碼太多很難組織函數啊類什麼的啦,或者說名字給你用光啦等等。這時候就需要各種各樣的理論知識了,譬如說資料結構與演算法,還有設計模式什麼的。當然講來講去也就這幾樣,因為“這世界上沒有銀彈”,所以那些通用的東西必然不多,剩下的還是要靠在同各領域裡面其他人的積累或者自己的研究才能最終解決的。
上面所說的可以做的各種各樣的事情還是偏向於理論化一點,其實有一個學術上的領域還是不夠的,因為最終一個程序在跟計算機打交道的時候靠的是輸入輸出,也就是俗稱IO的東西了。這究竟是什麼呢?也就是說,知道那個地方放著你要的數據,你要把它拿過來。你自己算出了什麼,知道要往哪裡放,你要放。這裡麵包含的東西很多,譬如說典型的,鍵盤和螢幕上的輸入輸出,網路要用的Socket啦Web Service啦,那些看得見的視窗啦控制啦,讀寫硬碟啦,還有其他什麼的。這種 在某一平台上的專用的API 都是至少要熟悉一種的。不然你光學會這個演算法那個演算法有什麼用啊,譬如說你想對一個圖片進行壓縮,專門學了那個知識,但是一個bmp放在硬碟上你卻讀不進來,那豈不沒意義了麼。
於是說了這麼多,無非就是剛開始的時候要去見識世面,然後挑一個來慢慢研究,最後研究著研究著程序搞大了,就自然會碰到很多高級的問題了。這時候去解決了,其實本科需要你具備的程度其實也差不多達到了。
所以很多人都洗心革面,終於開始努力研究一個領域的問題了。領域總是複雜的,這時候會遇到很多程式設計上的問題,譬如說演算法太複雜表達不出來啦,文件讀著就掛啦,一不小心越界了之後造成了很多奇怪的問題啦( C )等等。這種關於調試的問題,一般只能夠靠自己錯得多錯得離譜了,最後就成才了。當然前人也總結出了經驗,寫了本叫《 Why Programs Fail 》的書,想看的話可以自己去下載。其次, 具體的庫總是有很多書和文檔的,沒事也要多看點 ,譬如說用Visual Studio的人都得把MSDN給裝了。
話也差不多說完了,雖然我自己也覺得這篇文章比較虛,因為這也是「通用的東西」。具體自己該怎麼辦自己得好好想想。我就把這篇東西獻給現在大一大二那些還在迷宮裡轉的弟弟妹妹了,要是有什麼特殊的疑難雜症的話,就私底下聯絡我吧。
總之,無論什麼時候,手頭上都要留有一個可以研究的問題才好。
免費領取LAMP兄弟連原創php教學光碟/《細說PHP》精要版,詳情諮詢官網客服:http://www.lampbrother.net
PHPCMS二次開發 http://yun.itxdl.cn/online/phpcms/index.php?u=5
微信開發 http://yun.itxdl.cn/online/weixin/index.php?u=5 🎜>行動互聯網伺服器端開發
http://yun.itxdl.cn/online/server/index.php?u=5Javascript
課程 http://yun.itxdl.cn/online/js/index.php?u=5
CTO訓練營 5
|