本文分兩部分介紹了編程的一些經(jīng)驗(yàn),一個(gè)從總體上講了如何學(xué)習(xí)編程、如何成為一名優(yōu)秀的程序員;第二部分介紹了中國(guó)人如何學(xué)習(xí)編程、學(xué)習(xí)什么,希望大家能喜歡。
一。如何學(xué)編程
要想成為一名優(yōu)秀的程序員,最重要的是掌握編程思想、找到編程感覺(jué),而不是死記硬背語(yǔ)言本身。掌握編程思想找到編程感覺(jué)后,在很多情況下,我們面對(duì)新的編程語(yǔ)言時(shí),只需簡(jiǎn)單了解該語(yǔ)言的語(yǔ)法特點(diǎn),就可以輕松應(yīng)對(duì)、立即應(yīng)用了。這就好比一個(gè)精通汽車修理之道的人,當(dāng)他著手修理一輛從未接觸過(guò)的品牌的汽車時(shí),只需看看該車的維修指南,故障就可以解決了。因此,掌握編程思想、找到編程感覺(jué)是一名程序員的高級(jí)境界,是在反復(fù)的實(shí)踐、觀察、分析、比較、總結(jié)中潛移默化積累的,絕不是一篇文章或者兩三小時(shí)的講解就能夠說(shuō)清楚的。
要學(xué)會(huì)編程思想、找到編程感覺(jué),必須從實(shí)實(shí)在在的編程實(shí)際工作中去實(shí)踐和體驗(yàn)。不少朋友在學(xué)習(xí)編程時(shí)只簡(jiǎn)單地學(xué)習(xí)語(yǔ)法、結(jié)構(gòu),既枯燥,目的性也不強(qiáng),降低了初學(xué)者的興趣和學(xué)習(xí)效果。而一般的書(shū)籍,都只從語(yǔ)言本身上去講解語(yǔ)法和舉一些針對(duì)這些語(yǔ)法的應(yīng)用例子,跟使用說(shuō)明書(shū)沒(méi)有太大差別,沒(méi)有起到灌輸編程思想,培養(yǎng)編程感覺(jué)的作用。正因?yàn)槿绱耍S多大學(xué)生雖然在學(xué)校學(xué)過(guò)C語(yǔ)言,但他們之中少有真正精通C語(yǔ)言的編程者,只是簡(jiǎn)單了解些語(yǔ)法罷了,許多重要的知識(shí)點(diǎn)都含糊不清。
其實(shí),在學(xué)習(xí)編程過(guò)程中,我們不必等到什么都完全明白了才去動(dòng)手實(shí)踐,只要明白了大概,就要敢于自己動(dòng)手去體驗(yàn)。有些人覺(jué)得以前從來(lái)沒(méi)做過(guò)而不敢自己?jiǎn)为?dú)動(dòng)手去做,非要等到什么都明白后才敢動(dòng)手實(shí)踐,這樣是很難取得進(jìn)步的。誰(shuí)都有第一次,有些問(wèn)題只有通過(guò)實(shí)踐后才能明白的,也只有實(shí)踐后才能把老師和書(shū)本上的知識(shí)變成自己的,高手與專家也是這樣成才的。
現(xiàn)在,不少培訓(xùn)中心都開(kāi)始注重對(duì)學(xué)員灌輸編程思想、培養(yǎng)學(xué)員的編程感覺(jué)。從程序的組織結(jié)構(gòu),運(yùn)行流程,常用技巧上進(jìn)行講解,教學(xué)員學(xué)會(huì)即用即查的方法,取得了不錯(cuò)的效果。拿北京維新計(jì)算機(jī)培訓(xùn)中心和銳信計(jì)算機(jī)培訓(xùn)中心提供的課程來(lái)說(shuō),他們的軟件工程師課程分為三個(gè)階段:
(1)第一階段,讓學(xué)員掌握計(jì)算機(jī)編程基礎(chǔ)、C語(yǔ)言編程和計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)知識(shí)。
在編程基礎(chǔ)課程中學(xué)員將了解計(jì)算機(jī)編程中常用的專業(yè)術(shù)語(yǔ)、計(jì)算機(jī)編程過(guò)程、計(jì)算機(jī)編程語(yǔ)言、編程中的算法技巧、集成開(kāi)發(fā)環(huán)境,為隨后的專業(yè)學(xué)習(xí)鋪平道路,軟件工程師班的前兩天為學(xué)員安排了計(jì)算機(jī)編程基礎(chǔ)課程。
C語(yǔ)言經(jīng)久不衰,與硬件和操作系統(tǒng)聯(lián)系緊密,編程思想博大精深,是著名的,被廣泛使用的編程語(yǔ)言。對(duì)于一個(gè)程序員來(lái)說(shuō),連C語(yǔ)言都不會(huì),是實(shí)在說(shuō)不過(guò)去的。在這部分課程中學(xué)員將熟悉條件、循環(huán)、移位等語(yǔ)句,地址(指針)、排序、鏈表、遞歸等概念與算法及一些常用的數(shù)據(jù)結(jié)構(gòu)。通過(guò)C語(yǔ)言的深入學(xué)習(xí),讓學(xué)員了解到最根本的編程思想和編程技巧。對(duì)于計(jì)算機(jī)編程人員,時(shí)刻都接觸到和應(yīng)用到計(jì)算機(jī)網(wǎng)絡(luò),許多應(yīng)用程序的開(kāi)發(fā)都涉及到網(wǎng)絡(luò)。
為了能以具備一兩年實(shí)際工作經(jīng)驗(yàn)的身份進(jìn)入到各軟件開(kāi)發(fā)公司,學(xué)員更需要對(duì)網(wǎng)絡(luò)知識(shí)的深入了解。計(jì)算機(jī)網(wǎng)絡(luò)課程將為學(xué)員講解正反網(wǎng)線的原理與制作、集線器、網(wǎng)橋與路由器、OSI七層協(xié)議模型、TCP/IP網(wǎng)絡(luò)原理、網(wǎng)絡(luò)安全與網(wǎng)絡(luò)攻擊、各種網(wǎng)絡(luò)應(yīng)用工具、網(wǎng)絡(luò)故障診斷、DHCP、DNS、Windows 2000用戶與安全、域與活動(dòng)目錄、Windows 2000的各種網(wǎng)絡(luò)服務(wù)與應(yīng)用。
(2)第二階段,專業(yè)課程的學(xué)習(xí)。
根據(jù)學(xué)員選擇的軟件工程師班別,進(jìn)入不同的專業(yè)課程的學(xué)習(xí),讓學(xué)員掌握該班別的主打開(kāi)發(fā)語(yǔ)言,為后期的項(xiàng)目實(shí)戰(zhàn)和日后的實(shí)際工作打下堅(jiān)實(shí)的基礎(chǔ)。
(3)第三階段,項(xiàng)目實(shí)戰(zhàn)。根據(jù)許多公司招聘的需求,應(yīng)聘者除了掌握某種主流開(kāi)發(fā)語(yǔ)言外,還要求熟悉數(shù)據(jù)庫(kù),對(duì)某些非主流語(yǔ)言也應(yīng)有所了解,這樣才能具有更強(qiáng)的應(yīng)變能力,第三階段的課程中安排了數(shù)據(jù)庫(kù)及其他簡(jiǎn)單的編程語(yǔ)言,以增加學(xué)員參與競(jìng)爭(zhēng)的能力。
在后期采用On-Job Training方式(用工作項(xiàng)目的方式)進(jìn)行培訓(xùn),以實(shí)際工作的案例作為培訓(xùn)流程,以能勝任實(shí)際工作為培訓(xùn)目標(biāo),讓學(xué)員在老師的帶領(lǐng)和指導(dǎo)下獨(dú)立開(kāi)發(fā)中等規(guī)模,緊密聯(lián)系實(shí)際應(yīng)用的項(xiàng)目,更具有實(shí)戰(zhàn)性和實(shí)用性。通過(guò)后期的On-job Training,學(xué)員可以直接獲得實(shí)際工作經(jīng)驗(yàn),增強(qiáng)學(xué)員獨(dú)立進(jìn)行項(xiàng)目開(kāi)發(fā)的自信心。學(xué)員在老師的輔導(dǎo)下進(jìn)行實(shí)際工作編程,老師除了傳授專業(yè)技能外,還傳授軟件編程思想和軟件設(shè)計(jì)的方法。除了在課程設(shè)置上開(kāi)設(shè)了相關(guān)的課程外,在學(xué)習(xí)過(guò)程的每一個(gè)項(xiàng)目都是利用完整的軟件設(shè)計(jì)方案來(lái)解決的。基于這種方式,使學(xué)員不只是學(xué)到專業(yè)知識(shí),而且學(xué)到專家解決問(wèn)題的系統(tǒng)方法。同時(shí),你還獲得并具備了一些成功的,寶貴的項(xiàng)目經(jīng)驗(yàn)。
中國(guó)人如何學(xué)編程
1、VC、VB、Delphi …… ,你該學(xué)哪個(gè)?
具體到編程而言,我要告訴你:任何一種計(jì)算機(jī)語(yǔ)言,都是計(jì)算機(jī)科學(xué)理論的載體或表現(xiàn)形式。C++很神嗎?Java很酷嗎?它們差距很遠(yuǎn)嗎?是的。但從理論的層面上講,它們沒(méi)有區(qū)別,都是“面向?qū)ο?rdquo;理論的一個(gè)具體形式而已。
現(xiàn)在的程序員們被發(fā)行編譯軟件(通常我們將其稱為“系統(tǒng)軟件”)的商家不斷推出的產(chǎn)品搞得眼花繚亂,頭痛欲裂。不斷地跟在新語(yǔ)言后面跑,這條路還沒(méi)跑到頭,那邊的“新路”又鳴鑼開(kāi)張了,于是再跟著跑……漸漸地有些人開(kāi)始感嘆:學(xué)海無(wú)涯、學(xué)無(wú)止境,或什么“程序員是青春飯,過(guò)了三十別想干”……
在此我不得不嘆息:中國(guó)的教育真是一種“形而上學(xué)”的教育。早在高中時(shí)代我們就學(xué)過(guò)“辨證唯物主義”的基本理論:做事情要抓主要矛盾。這一條恐怕誰(shuí)都知道,卻鮮見(jiàn)誰(shuí)能在實(shí)踐中把這一理論運(yùn)用得“爐火純青”的。把這一理論運(yùn)用到編程上來(lái)講就是:
理論是主要矛盾,語(yǔ)言是次要矛盾,學(xué)會(huì)了理論,再具體到學(xué)一種語(yǔ)言時(shí),你只不過(guò)是在進(jìn)行某種消遣而已。
現(xiàn)在學(xué)VC的普遍看不起學(xué)VB的或?qū)WDelphi的。但如果一個(gè)用Delphi的人,在需要寫(xiě)web程序時(shí),用TCP/IP做了一個(gè)構(gòu)架,嵌入到應(yīng)用程序中;而另一個(gè)用 VC的人卻只會(huì)把一個(gè)又一個(gè)的組件拖來(lái)拉去的做些個(gè)“例子程序”的翻版。你說(shuō)他們兩個(gè)誰(shuí)歷害?Delphi和VC誰(shuí)歷害?
真應(yīng)了這樣一段話,問(wèn):紐約好還是上海好?答:有錢哪兒都好,沒(méi)錢哪兒都不好。上海的富人并不比紐約的富人少多少的優(yōu)越感,而紐約的乞丐也不比上海的乞丐多多少幸福感。
現(xiàn)在你還會(huì)說(shuō)學(xué)VC的人就一定比學(xué)Delphi的人水平高、“錢景”好嗎?
2、“淺薄”絕不該是中國(guó)程序員的性ge特征!!!
想問(wèn)一句:中國(guó)程序員這么多,你們真地把基礎(chǔ)理論學(xué)好了嗎?別用你現(xiàn)有的編程經(jīng)歷告訴我:編程不需要數(shù)學(xué),不需要數(shù)據(jù)結(jié)構(gòu),不需要編譯原理…… ……說(shuō)話得負(fù)責(zé)任,您知道嗎?我之所以發(fā)表這篇文章,就是因?yàn)樵僖部床幌氯ミ@種在中國(guó)編程界漫延的歪理邪說(shuō)了!邪教害死的是人的個(gè)體,你們害死的是中國(guó)軟件業(yè)的未來(lái)!如果再讓這種理論繼續(xù)毒害編程新手的思想,中國(guó)將在計(jì)算機(jī)領(lǐng)域失去民族的尊嚴(yán)!!!
請(qǐng)問(wèn),操作系統(tǒng)、編譯軟件、數(shù)據(jù)庫(kù)系統(tǒng)…… 這些被稱為“系統(tǒng)軟件”的東東,中國(guó)有幾樣拿得出手的產(chǎn)品?也許是我孤陋寡聞,據(jù)我所知:我們國(guó)家一件像樣的也沒(méi)有。
不錯(cuò),我們是有一些網(wǎng)站的股票在西方上市了,我們是有一些人被國(guó)外公司請(qǐng)去做高級(jí)職員了,我們也有一些人把西方的官方網(wǎng)站給黑了……但是,我們用的編譯工具是誰(shuí)的產(chǎn)品?我們微機(jī)里裝得是誰(shuí)做出的操作系統(tǒng)?我們的程序跑在誰(shuí)的芯片上?
愛(ài)之深,恨之切。我愛(ài)的是中國(guó),但我痛恨不是中國(guó),而是在中國(guó)編程界普遍流行的“淺薄”和“自以為是”,這是我們民族軟件業(yè)的一顆毒瘤!
是的,現(xiàn)在編程方面快速入門(mén)的書(shū)滿天飛,讓程序員的門(mén)檻越來(lái)越低。我這個(gè)外行就得益于這個(gè)“低門(mén)檻”,跑了進(jìn)來(lái)。但進(jìn)來(lái)后,我們就不能再這樣淺薄下去了——我的兄弟們!
用他國(guó)提供的工具做幾個(gè)網(wǎng)站,寫(xiě)幾個(gè)應(yīng)用程序,弄出幾個(gè)病毒…… 是振興不了民族軟件業(yè)的。順便說(shuō)一句:我尊敬求伯君,但我不認(rèn)為金山公司和其系列產(chǎn)品配得上被稱為“民族軟件業(yè)”的大旗,相對(duì)這個(gè)稱號(hào),它差得太遠(yuǎn)了。
…… ……
寫(xiě)flash軟件的人會(huì)認(rèn)為用flash做動(dòng)畫(huà)的人比他歷害嗎?Adobe公司真的認(rèn)為考取Adobe證書(shū)的人是“人才”嗎?MSCE、MSCD…… 通過(guò)這類考試得到微軟徽章的人,在微軟眼里是“人才”還是“義務(wù)推銷員”?持這類證書(shū)以及其他一些大軟件公司認(rèn)證的人,你們還在以為自己是“中國(guó)軟件業(yè)的精英”而感嘆“懷才不遇”、工資太少嗎?
醒醒吧,朋友。別再用編程不需要理論的話來(lái)自欺欺人了,別再用自己的淺薄來(lái)教導(dǎo)別人像自己一樣淺薄了。我想問(wèn)問(wèn)那些稱數(shù)學(xué)、數(shù)據(jù)結(jié)構(gòu)等基礎(chǔ)課程對(duì)編程沒(méi)用的人:
請(qǐng)你們搞清一個(gè)概念:是這些理論“沒(méi)用”,還是你們“沒(méi)用到”;是你們“沒(méi)用到”,還是你們的水平根本“用不到”;是你們“不需要用”,還是你們根本“不會(huì)用”?
舉個(gè)例子,操作系統(tǒng)中的工作調(diào)度,若工作優(yōu)先權(quán)相同,用什么方法進(jìn)行調(diào)度?當(dāng)然是“先到先做”——這就是數(shù)據(jù)結(jié)構(gòu)中“隊(duì)列”的應(yīng)用。你們說(shuō)“用不到”,只怕是因?yàn)榈侥壳盀橹惯€沒(méi)機(jī)會(huì)接觸這類“高端編程”的挑戰(zhàn)吧?這樣的話,那就算了,掙你的錢去,但別再來(lái)這里誤人子弟,吹噓什么優(yōu)秀的程序員不需要理論。
是誰(shuí)說(shuō)系統(tǒng)軟件發(fā)展的黃金時(shí)代已經(jīng)過(guò)去了?Linux不就是在MS操作系統(tǒng)雄霸多年的情況下一舉成名的嗎?中國(guó)難道就找不到這樣一個(gè)機(jī)會(huì)?不,如果我們的程序員克服了現(xiàn)在的浮燥與急功近利,我們一樣可以在“系統(tǒng)軟件”這一軟件業(yè)的“高端”樹(shù)立自己的品牌!所以請(qǐng)看下面——
3、年輕人應(yīng)該有宏偉的志向。
用別人的產(chǎn)品做自己的東西,你永遠(yuǎn)只是個(gè)“高級(jí)客戶”,成不了真正的開(kāi)發(fā)者。不管你用他國(guó)的系統(tǒng)軟件開(kāi)發(fā)出多少好的產(chǎn)品,掙了多少錢,只要人家一升級(jí)、或一推出新產(chǎn)品,你口袋里的銀子連同最后一條小褲叉也會(huì)被剝奪得一干二凈。你,只不過(guò)是一個(gè)高級(jí)打工仔。
我希望打算進(jìn)入編程界的朋友們,特別是現(xiàn)在還很年輕的朋友,能有一個(gè)比較高的志向。更希望已經(jīng)進(jìn)到這行的朋友們能有以“振興民族軟件業(yè)”為己任,力爭(zhēng)成為中國(guó)軟件業(yè)的“旗手”。
我不贊同方東興把微軟罵得一無(wú)是處。更不贊同年輕人學(xué)他那樣,一賭氣而拒絕用微軟的產(chǎn)品,拒絕Windows、拒絕VC 、拒絕IE ……
我認(rèn)為方東興只是個(gè)狹隘的民族主義者。他看到了中國(guó)軟件業(yè)民族的一面,卻不愿承認(rèn)我們落后的一面。毫無(wú)根據(jù)的“自尊”等于自取滅亡。清朝末年,我們的科技并不落后于西方多少,但我們過(guò)分“自尊”的“大國(guó)思想”卻使我們失去了向其他國(guó)家學(xué)習(xí)的機(jī)會(huì)。當(dāng)我們嘲笑西方人的藍(lán)眼睛、大鼻子的時(shí)候,他們的堅(jiān)船利炮,卻把我們“央央大國(guó)”的皇帝、太后打得滿世界逃難。慈禧太后被打得滿地找牙的時(shí)候,不得不說(shuō)出“量中華之物力,博與國(guó)之歡欣”的齷齪話,此時(shí),她“大國(guó)皇太后”的自尊何在呢?前面自尊過(guò)了頭,事后必遭報(bào)應(yīng)。這報(bào)應(yīng)一持續(xù),就是幾百年,直到現(xiàn)在。難道我們還要繼續(xù)閉門(mén)造車,再走老路嗎?
我們現(xiàn)在承認(rèn)微軟比我們強(qiáng),向微軟學(xué)習(xí),并不等于我們永遠(yuǎn)要跟在他后面跑!在我們低下頭的時(shí)候,我們就應(yīng)該想到,何時(shí)能再抬起這顆高貴的頭顱!!!而且是“一定”!!!!!自尊不是錯(cuò),錯(cuò)是錯(cuò)在“太盲目”——妄自尊大,你就要和慈禧一樣被打得滿地找牙。做為一個(gè)大國(guó),一個(gè)明智的民族,我們不能諱疾忌醫(yī)。
年輕人,志當(dāng)存高遠(yuǎn)。相信我,當(dāng)你以民族振興為己任的時(shí)候,封王稱帝、富貴榮華,都只不過(guò)是千秋偉業(yè)的一個(gè)副產(chǎn)品。在這個(gè)尊重知識(shí)、崇尚科學(xué)的年代,志向高遠(yuǎn)的人,永遠(yuǎn)不必?fù)?dān)心自己的“錢途”。
不必諱言,我承認(rèn)我當(dāng)初進(jìn)入編程領(lǐng)域不完全出于興趣,也有“錢途”方面的考慮。但就好像當(dāng)年參加八路的戰(zhàn)士當(dāng)中,有些只是報(bào)著能吃上軍糧或打鬼子報(bào)家仇的思想入伍的,但后來(lái)卻學(xué)習(xí)了馬列,提高了覺(jué)悟,轉(zhuǎn)為以興國(guó)救民為目標(biāo)一樣,當(dāng)我一步步深入到這行以后,當(dāng)我決定考研并慢慢提高了認(rèn)識(shí)以后,我的目的變了。我覺(jué)得應(yīng)該有個(gè)更高的人生目標(biāo),更高志向和追求來(lái)支持我的行動(dòng)。這個(gè)目標(biāo)就是:為民族軟件業(yè)盡一把自己的力。
真心希望你與我同行。
4、幾點(diǎn)建議:
建議大家耐下心來(lái)先學(xué)好理論,然后再選擇具體的工具或語(yǔ)言。不過(guò),在所有這一切開(kāi)始以前,先打好C語(yǔ)言和匯編基礎(chǔ)。
能不能得道,就看你在見(jiàn)到別人做出一些花里胡哨的東西時(shí),是不是能堅(jiān)定信心、耐住寂寞、抵御誘惑了。
一個(gè)和我一起學(xué)習(xí)C語(yǔ)言的人,學(xué)完就直接開(kāi)始玩VC,而我則潛下心來(lái)學(xué)了些C++和理論方面的東西。早早地,他就能仿照書(shū)上用VC做些界面似的東西在我面前炫耀,可后來(lái),當(dāng)我基礎(chǔ)理論的學(xué)習(xí)告一段落,做個(gè)圖書(shū)管理程序賣了800大洋時(shí),他還只是停留在做“例子程序”的水平上。現(xiàn)在我們談?wù)撈鹁幊蹋疃仍缫巡豢赏斩Z(yǔ)了。他起跑領(lǐng)先,卻落在了后面。
我不敢自以為是,只是想用這個(gè)親身經(jīng)歷告訴大家:學(xué)編程,決不可心浮氣燥。
5、結(jié)束語(yǔ)我的話觸到許多人的痛處,而且由于寫(xiě)時(shí)心中氣憤難平,有些出言不遜,可能要遭人罵了。不過(guò),既然寫(xiě)了,就不怕罵。因?yàn)椋阂陨纤匀侵腋妫R(shí)不識(shí)貨,就看您的眼光了。
新聞熱點(diǎn)
疑難解答