
很多同學(xué)現(xiàn)在正在搞ACM,知道C++在很多情況下不如C語(yǔ)言靈活,尤其是stl等工具的使用上,不能隨心所欲編寫想要的算法。但是,C++作為C語(yǔ)言的超集,面向?qū)ο蟮乃枷氲鹊榷际荂語(yǔ)言不可及的。它兼具其他面向?qū)ο笳Z(yǔ)言的特性,并向下兼容C語(yǔ)言,在在很多同學(xué)看來應(yīng)該拿它作為入門語(yǔ)言。當(dāng)然,初讀C++ Primer這類書的時(shí)候很難啃下來,但是如果結(jié)合上課講解的知識(shí),對(duì)C++有個(gè)大致的了解是沒有問題的。但是很多學(xué)校仍舊拿C語(yǔ)言作為入門計(jì)算機(jī)語(yǔ)言,C++課程名字直接就是面向?qū)ο螅行┎豢伤甲h。
還有為什么學(xué)校不會(huì)介紹一個(gè)重要的工具——STL?它的正確性、穩(wěn)定性和高效性已經(jīng)被無(wú)數(shù)次驗(yàn)證,為什么學(xué)校不介紹它。很多同學(xué)相信STL在真正的軟件設(shè)計(jì)里面應(yīng)用十分廣泛的。
他們問了一個(gè)非常好的問題。不過我的回答也許讓你失望,我今年1月去做過學(xué)校調(diào)研交流,對(duì)學(xué)校在程序設(shè)計(jì)教學(xué)中的做法還是認(rèn)可,并且作為一段時(shí)間以來要學(xué)習(xí)的。在我所在的學(xué)校,盡管第一門程序設(shè)計(jì)課稱為程序設(shè)計(jì)基礎(chǔ)或C++程序設(shè)計(jì),在這個(gè)為時(shí)兩學(xué)期的課中,第一個(gè)學(xué)期基本還是C的內(nèi)容,講C++中面向過程的程序設(shè)計(jì),第二個(gè)學(xué)期是面向?qū)ο蟮牟糠帧D銈儗W(xué)校的分兩門課的教學(xué),中間還要插入一個(gè)以實(shí)踐能力提高為主的短學(xué)時(shí)課程,其好處是明顯的。
要回答你們的問題,必須明確,在大學(xué)里第一門程序設(shè)計(jì)課程中要解決的主要問題是:學(xué)會(huì)編程序。因此名為XX語(yǔ)言程序設(shè)計(jì),重點(diǎn)在于程序設(shè)計(jì)方法,然而現(xiàn)實(shí)的考慮中也不得不將很大的精力投入到語(yǔ)言本身中來。學(xué)習(xí)第一門語(yǔ)言,首先在于能設(shè)計(jì)程序,至于用這個(gè)語(yǔ)言解決工程中實(shí)際問題的方案,倒是要放在其次了。
大學(xué)的課程是一個(gè)體系,想要實(shí)現(xiàn)的某一個(gè)目標(biāo)常體現(xiàn)在多門課程中,并且各門課程之間能夠形成承接關(guān)系。舉一個(gè)例子,排序在學(xué)科中很重要,數(shù)據(jù)結(jié)構(gòu)中有專門的內(nèi)容,在程序設(shè)計(jì)入門課程中,也要初次嘗試。這些嘗試要比學(xué)會(huì)用STL中的sort算法更有意義,更應(yīng)該放在優(yōu)先的地位。再如,你正在做的計(jì)算幾何問題,以及圖形學(xué)課程中將要學(xué)習(xí)的算法,不是也有現(xiàn)成的圖形包可以直接使用嗎?實(shí)際上,大學(xué)的課程從用的角度有兩方面的兼顧,一是能夠直接用,二是要通過這種體系,為你將來進(jìn)一步地理解STL、圖形包之類的機(jī)制、工具提供支持。而后者,你應(yīng)該意識(shí)到,這是專業(yè)人員,無(wú)論在思維方式上,還是對(duì)適應(yīng)行業(yè)變化,甚至是引領(lǐng)行業(yè)變化的資本所在。
有一句大家相傳甚廣的話你沒有說出來:大學(xué),有用的不教,盡教沒有用的。從某種意義上這句話對(duì),但是,在“用”的層次上多加區(qū)分之后,你會(huì)發(fā)現(xiàn),直接用于工程,以及直接用于學(xué)習(xí)能力提高與思維方式改變,間接用于形成終身學(xué)習(xí)能力,適應(yīng)技術(shù)的可能變化,這都是大學(xué)之用。在此當(dāng)中,“直接用于工程”沒有太多的突出,也不見怪。學(xué)習(xí)計(jì)算機(jī)的另外一些路子,市場(chǎng)用什么就學(xué)什么,想轉(zhuǎn)做另外一個(gè)方向的工作,必須接受培訓(xùn),他們所學(xué)的全部就是直接用于工程的知識(shí)。
做了如上的解釋,我不能回避學(xué)校教育中的缺失。我們正處在這個(gè)時(shí)期,其實(shí)真實(shí)的世界中,補(bǔ)上這個(gè)缺失,又會(huì)在新的發(fā)展階段遇到新的不足。其中還有一個(gè)缺失是,沒有讓同學(xué)們體會(huì)到直接用和間接用之間的關(guān)系。我當(dāng)老師多年,也深知在“讀高中是為了考大學(xué)”,“上大學(xué)是為了找工作”這樣的直接思維甚濃的條件下,大學(xué)在改變學(xué)生的學(xué)習(xí)方面,不只是只堅(jiān)持目前該有的做法就算可以的了。C++課中是需要有STL的內(nèi)容的,但在有限學(xué)時(shí),以及不少學(xué)生在學(xué)習(xí)上的投入問題,其中的取舍,作為老師是有糾結(jié)的,當(dāng)學(xué)生的,不同的人,根據(jù)情況,可以有不同的應(yīng)對(duì)。

意識(shí)到這一點(diǎn),也就知道了,大學(xué)的教學(xué)計(jì)劃只是一個(gè)公共的要求,是一個(gè)獲得畢業(yè)證的最低標(biāo)準(zhǔn),要知道除了老師教的,課外必須要有自己額外加的。這一部分是可以有充分的自主性的。你另加STL就是一個(gè)很好的做法。參加ACM競(jìng)賽要額外做大量練習(xí),這也是一個(gè)超越教學(xué)計(jì)劃的做法。在某個(gè)時(shí)期,需要,也可在應(yīng)用能力提高上投入了,自行安排學(xué)習(xí)即是。如果屆時(shí)選擇用的語(yǔ)言是C++,把STL用熟,那是不可回避的事。上過了大學(xué),就要有準(zhǔn)備,也要練出自學(xué)能力,需要學(xué)的東西,并不一定需要人教。如果不去擺脫總讓人教的思維,結(jié)果就是當(dāng)技術(shù)發(fā)展了,你將不能主動(dòng)地站到前沿,在等人教的過程中,面臨無(wú)情的淘汰。
回到你問的問題上,在工程中用哪種語(yǔ)言,根據(jù)需要去定。而實(shí)際上,在大學(xué)中程序設(shè)計(jì)入門,選用哪種語(yǔ)言,是可以有多種選擇的。比如還有的學(xué)校用Java,國(guó)外開始有用Python的。這都是多種選擇中的一種,各有利弊。作為學(xué)生,你的選擇是,照你的學(xué)校安排的路線去執(zhí)行。其中的不足,還要有課外的學(xué)習(xí)作為補(bǔ)足。上課只造就所有同學(xué)共性的地方,課外卻使你擁有了自己的精彩。不同的同學(xué)在課外有了不同的選擇,于是分出了水平上的階梯,以及出現(xiàn)了各具特色的人才。
用好你當(dāng)前的教學(xué)計(jì)劃中提供給你的幫助,開創(chuàng)出自己有效的自學(xué),讓你的大學(xué)更精彩。

熱門跟貼