|
2009-05-04
這篇文章是寫給低年級(jí)的人的,已經(jīng)工作的就不用來看我廢話浪費(fèi)時(shí)間了。
最近總是有人問如何確定自己方向的問題,說是看到有的人在搞手機(jī),有的人在搞網(wǎng)頁,有的人在搞游戲,還有其他的什么的,然后說自己只懂得這么一點(diǎn)東西不知道該怎么辦之類的事情。我一直在一些做軟件開發(fā)的群里面混,里面有很多學(xué)生,也有很多從業(yè)者。那些人對(duì)于人們?cè)诨A(chǔ)不夠扎實(shí)的情況下就“做各種各樣具體的項(xiàng)目”有兩種說法,一種說是浮躁,另一種說是這樣開闊眼界是好的。
大學(xué)就四年。學(xué)校通常安排前兩年學(xué)數(shù)學(xué)英語,然后大一學(xué)語言大二學(xué)數(shù)據(jù)結(jié)構(gòu)。到了大三有很多比較具體而且復(fù)雜的課程,然后就要找實(shí)習(xí),大四其實(shí)就是在找工作,課也沒有,衛(wèi)生也不檢查了,等于在租學(xué)校的宿舍住。
于是在這短短的三年里面想在計(jì)算機(jī)那么多領(lǐng)域里面找到自己喜歡的,然后鉆研下去,最后還有所成就的話,還是比較難的。因此很多人經(jīng)常會(huì)看到自己周圍突然有兩三個(gè)人就干了點(diǎn)什么很有成就感的事情了,一問,以前學(xué)過的。這種人我也接觸了幾個(gè)。我有一個(gè)同學(xué)說是高中的時(shí)候被稱為代碼狂人,給emule寫了點(diǎn)代碼,然后還自己做了個(gè)即時(shí)通訊工具賣了出去。到了大學(xué)就一直在重寫這個(gè)東西,最后實(shí)習(xí)就到騰訊去了。前幾天還遇到個(gè)人,說是小學(xué)就在折騰flash里面的action script了,后來投靠perl,說是一直到了大一才寫了一個(gè)超過2000行的程序。我也沒去求證,只是覺得比較不可思議。
于是我想,就照著那些傳統(tǒng)的路子先搞定一門語言(《C++Primer》),然后學(xué)數(shù)據(jù)結(jié)構(gòu)(《算法導(dǎo)論》),再去學(xué)點(diǎn)庫(《STL源代碼分析》《深入淺出MFC》),之后弄點(diǎn)設(shè)計(jì)模式(《設(shè)計(jì)模式》),最后寫個(gè)某某管理系統(tǒng)(笑)什么的,也是無聊了點(diǎn)。竟然要學(xué)了那么多東西,才能弄出一個(gè)看得見摸得著的程序,也太考驗(yàn)人的意志力了吧。幾乎是個(gè)人都是從拖控件開始的。那些一開始就摸著黑白屏幕狂搞算法的人,要么是NOI出身,要么是ACM出身,然后對(duì)著幾道算法題樂此不疲。但是最后有所成就的,很少。我在學(xué)校認(rèn)識(shí)了那么多個(gè)ACM出身的,最后也就一個(gè)去了google。感覺風(fēng)險(xiǎn)還是有點(diǎn)大啊。
但是反過來也是有問題的。要是一開始就從界面開始弄,人也是很容易浮躁的。很多人因此就陷入了對(duì)花花世界的追求了(根據(jù)對(duì)群里面的人的統(tǒng)計(jì)),譬如說特別關(guān)心怎么在ListView前面畫棵樹什么的。這種人里面,其中一些有追求的,最后都會(huì)沿著Windows SDK,再走到DDK,最后寫驅(qū)動(dòng),一腳踏進(jìn)泥坑,從此不能自拔,當(dāng)然這些人也是少數(shù)。每當(dāng)有少數(shù)人對(duì)著剩下的多數(shù)人說跟“我今天實(shí)現(xiàn)了讓W(xué)ord不能打開某某文件”差不多的這些事情的時(shí)候,他們兩眼大放光芒,然后就開始跪求源碼,狂問用了什么API,最后當(dāng)代碼終于到手的時(shí)候,就放進(jìn)之前精心準(zhǔn)備好的一個(gè)文件夾里面,封存萬世,從此再也不去看了。當(dāng)然也有其他的版本,譬如說老是下載書,而且還是rar,然后從不解壓一樣。曾經(jīng)有這么一個(gè)人就在群上炫耀說自己有多少多少G的電子書。我讓他上截圖,結(jié)果全是rar。根本就沒看嘛,他自己也承認(rèn)了。
于是怎么看兩條路都是很有危險(xiǎn)的,這就是為了什么到了大四的時(shí)候,能學(xué)成的人總是不多的緣故。 太容易陷進(jìn)去了 。這是什么意思呢?人總是只對(duì)自己做得好的事情感興趣。對(duì)自己還沒做的事情感興趣那種是好奇,需要嚴(yán)肅對(duì)待。當(dāng)人終于做好了一件事情之后,就會(huì)一直不斷的鉆研下去,這當(dāng)然是好事。但是,從此只見樹木不見森林,以為全天下的編程就那一件事情,那當(dāng)然是要吃虧的。
所以首先要開闊眼界,知道世界上原來還有這么多的東西可以做。 在差不多知道編程是什么東西的時(shí)候,需要這個(gè)玩一玩,那個(gè)玩一玩 。不然就會(huì)看到旁邊的同學(xué)這個(gè)用Java在手機(jī)上跑一個(gè)能告訴你1+1=2的東西,那個(gè)人用php+MYSQL弄了個(gè)留言版,看得唾液直流,心里發(fā)慌,說自己對(duì)著C++的黑白屏幕弄了這么久居然連那點(diǎn)小玩意都做不出來,自尊心很容易受到打擊的。
于是在玩過了之后呢,要及時(shí)收手,就專門做一件事情好了 。因?yàn)檫@個(gè)時(shí)候自己已經(jīng)大概知道自己看見的東西差不多就是那個(gè)樣子,想做自己也做得出來,看著別人寫那些花邊的程序也就不會(huì)給自己施加太多壓力了。專門做一件事情的意思就是,選定一個(gè)方向,然后找書,找人,看代碼,寫程序。 譬如說可以去弄圖形做游戲,也可以去弄腳本引擎做做編譯器,還可以跟著老師去搞什么數(shù)據(jù)挖掘啊嵌入式什么的 。對(duì)一個(gè)領(lǐng)域的深入研究最大的用處是可以讓自己接觸復(fù)雜的問題 。
當(dāng)然,當(dāng)研究得深入了之后,程序就越寫越大了,這個(gè)時(shí)候就會(huì)出現(xiàn)很多各種各樣的問題了。譬如說效率太低啦,程序一出錯(cuò)就要全盤推倒重來啦(這個(gè)還是比較可悲的),代碼太多很難組織函數(shù)啊類什么的啦,或者說名字給你用光啦等等。這個(gè)時(shí)候就需要各種各樣的理論知識(shí)了,譬如說數(shù)據(jù)結(jié)構(gòu)與算法,還有設(shè)計(jì)模式什么的。當(dāng)然講來講去也就這幾樣,因?yàn)?ldquo;這世界上沒有銀彈”,所以那些通用的東西必然不多,剩下的還是要靠在同各領(lǐng)域里面其他人的積累或者自己的研究才能最終解決的。
上面所說的可以做的各種各樣的事情還是偏向于理論化一點(diǎn),其實(shí)有一個(gè)學(xué)術(shù)上的領(lǐng)域還是不夠的,因?yàn)樽罱K一個(gè)程序在跟計(jì)算機(jī)打交道的時(shí)候靠的是輸入輸出,也就是俗稱IO的東西了。這究竟是什么呢?也就是說,知道那個(gè)地方放著你要的數(shù)據(jù),你要把它拿過來。你自己算出了什么,知道要往哪里放,你要會(huì)放。這里面包含的東西很多,譬如說典型的,鍵盤和屏幕上的輸入輸出,網(wǎng)絡(luò)要用的Socket啦Web Service啦,那些看得見的窗口啦控件啦,讀寫硬盤啦,還有其他什么的。這種在某一平臺(tái)上的專用的API都是至少要熟悉一種的。不然你光學(xué)會(huì)這個(gè)算法那個(gè)算法有什么用啊,譬如說你想對(duì)一個(gè)圖片進(jìn)行壓縮,專門學(xué)了那個(gè)知識(shí),但是一個(gè)bmp放在硬盤上你卻讀不進(jìn)來,那豈不沒意義了么。
于是說了這么多,無非就是剛開始的時(shí)候要去見識(shí)世面,然后挑一個(gè)來慢慢研究,最后研究著研究著程序搞大了,就自然會(huì)碰到很多高級(jí)的問題了。這個(gè)時(shí)候去解決了,其實(shí)本科需要你具備的水平其實(shí)也差不多達(dá)到了。
所以很多人都洗心革面,終于開始努力研究一個(gè)領(lǐng)域的問題了。領(lǐng)域總是復(fù)雜的,這個(gè)時(shí)候會(huì)遇到很多編程上的問題,譬如說算法太復(fù)雜表達(dá)不出來啦,文件讀著讀著就掛啦,一不小心越界了之后造成了很多奇怪的問題啦(C++)等等。這種關(guān)于調(diào)試的問題,一般只能夠靠自己錯(cuò)得多錯(cuò)得離譜了,最后就成才了。當(dāng)然前人也總結(jié)出了經(jīng)驗(yàn),寫了本叫《 Why Programs Fail 》的書,想看的話可以自己去下載。其次, 具體的庫總是有很多書和文檔的,沒事也要多看點(diǎn) ,譬如說用Visual Studio的人都得把MSDN給裝了。
話也差不多說完了,雖然我自己也覺得這篇文章比較虛,因?yàn)檫@也是“通用的東西”。具體自己該怎么辦自己得好好想想。我就把這篇東西獻(xiàn)給現(xiàn)在大一大二那些還在迷宮里轉(zhuǎn)的弟弟妹妹了,要是有什么特殊的疑難雜癥的話,就私底下聯(lián)系我吧。
總之,無論什么時(shí)候,手頭上都要留有一個(gè)可以研究的問題才好。
it知識(shí)庫:關(guān)于計(jì)算機(jī)專業(yè)的人如何學(xué)好編程,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。