很多同學(xué)現(xiàn)在正在搞ACM,知道C++在很多情況下不如C語言靈活,尤其是stl等工具的使用上,不能隨心所欲編寫想要的算法。但是,C++作為C語言的超集,面向?qū)ο蟮乃枷氲鹊榷际荂語言不可及的。它兼具其他面向?qū)ο笳Z言的特性,并向下兼容C語言,在在很多同學(xué)看來應(yīng)該拿它作為入門語言。當(dāng)然,初讀C++ Primer這類書的時候很難啃下來,但是如果結(jié)合上課講解的知識,對C++有個大致的了解是沒有問題的。但是很多學(xué)校仍舊拿C語言作為入門計算機(jī)語言,C++課程名字直接就是面向?qū)ο螅行┎豢伤甲h。
還有為什么學(xué)校不會介紹一個重要的工具——STL?它的正確性、穩(wěn)定性和高效性已經(jīng)被無數(shù)次驗證,為什么學(xué)校不介紹它。很多同學(xué)相信STL在真正的軟件設(shè)計里面應(yīng)用十分廣泛的。
他們問了一個非常好的問題。不過我的回答也許讓你失望,我今年1月去做過學(xué)校調(diào)研交流,對學(xué)校在程序設(shè)計教學(xué)中的做法還是認(rèn)可,并且作為一段時間以來要學(xué)習(xí)的。在我所在的學(xué)校,盡管第一門程序設(shè)計課稱為程序設(shè)計基礎(chǔ)或C++程序設(shè)計,在這個為時兩學(xué)期的課中,第一個學(xué)期基本還是C的內(nèi)容,講C++中面向過程的程序設(shè)計,第二個學(xué)期是面向?qū)ο蟮牟糠帧D銈儗W(xué)校的分兩門課的教學(xué),中間還要插入一個以實踐能力提高為主的短學(xué)時課程,其好處是明顯的。
要回答你們的問題,必須明確,在大學(xué)里第一門程序設(shè)計課程中要解決的主要問題是:學(xué)會編程序。因此名為XX語言程序設(shè)計,重點在于程序設(shè)計方法,然而現(xiàn)實的考慮中也不得不將很大的精力投入到語言本身中來。學(xué)習(xí)第一門語言,首先在于能設(shè)計程序,至于用這個語言解決工程中實際問題的方案,倒是要放在其次了。
大學(xué)的課程是一個體系,想要實現(xiàn)的某一個目標(biāo)常體現(xiàn)在多門課程中,并且各門課程之間能夠形成承接關(guān)系。舉一個例子,排序在學(xué)科中很重要,數(shù)據(jù)結(jié)構(gòu)中有專門的內(nèi)容,在程序設(shè)計入門課程中,也要初次嘗試。這些嘗試要比學(xué)會用STL中的sort算法更有意義,更應(yīng)該放在優(yōu)先的地位。再如,你正在做的計算幾何問題,以及圖形學(xué)課程中將要學(xué)習(xí)的算法,不是也有現(xiàn)成的圖形包可以直接使用嗎?實際上,大學(xué)的課程從用的角度有兩方面的兼顧,一是能夠直接用,二是要通過這種體系,為你將來進(jìn)一步地理解STL、圖形包之類的機(jī)制、工具提供支持。而后者,你應(yīng)該意識到,這是專業(yè)人員,無論在思維方式上,還是對適應(yīng)行業(yè)變化,甚至是引領(lǐng)行業(yè)變化的資本所在。
有一句大家相傳甚廣的話你沒有說出來:大學(xué),有用的不教,盡教沒有用的。從某種意義上這句話對,但是,在“用”的層次上多加區(qū)分之后,你會發(fā)現(xiàn),直接用于工程,以及直接用于學(xué)習(xí)能力提高與思維方式改變,間接用于形成終身學(xué)習(xí)能力,適應(yīng)技術(shù)的可能變化,這都是大學(xué)之用。在此當(dāng)中,“直接用于工程”沒有太多的突出,也不見怪。學(xué)習(xí)計算機(jī)的另外一些路子,市場用什么就學(xué)什么,想轉(zhuǎn)做另外一個方向的工作,必須接受培訓(xùn),他們所學(xué)的全部就是直接用于工程的知識。
做了如上的解釋,我不能回避學(xué)校教育中的缺失。我們正處在這個時期,其實真實的世界中,補(bǔ)上這個缺失,又會在新的發(fā)展階段遇到新的不足。其中還有一個缺失是,沒有讓同學(xué)們體會到直接用和間接用之間的關(guān)系。我當(dāng)老師多年,也深知在“讀高中是為了考大學(xué)”,“上大學(xué)是為了找工作”這樣的直接思維甚濃的條件下,大學(xué)在改變學(xué)生的學(xué)習(xí)方面,不只是只堅持目前該有的做法就算可以的了。C++課中是需要有STL的內(nèi)容的,但在有限學(xué)時,以及不少學(xué)生在學(xué)習(xí)上的投入問題,其中的取舍,作為老師是有糾結(jié)的,當(dāng)學(xué)生的,不同的人,根據(jù)情況,可以有不同的應(yīng)對。
意識到這一點,也就知道了,大學(xué)的教學(xué)計劃只是一個公共的要求,是一個獲得畢業(yè)證的最低標(biāo)準(zhǔn),要知道除了老師教的,課外必須要有自己額外加的。這一部分是可以有充分的自主性的。你另加STL就是一個很好的做法。參加ACM競賽要額外做大量練習(xí),這也是一個超越教學(xué)計劃的做法。在某個時期,需要,也可在應(yīng)用能力提高上投入了,自行安排學(xué)習(xí)即是。如果屆時選擇用的語言是C++,把STL用熟,那是不可回避的事。上過了大學(xué),就要有準(zhǔn)備,也要練出自學(xué)能力,需要學(xué)的東西,并不一定需要人教。如果不去擺脫總讓人教的思維,結(jié)果就是當(dāng)技術(shù)發(fā)展了,你將不能主動地站到前沿,在等人教的過程中,面臨無情的淘汰。
回到你問的問題上,在工程中用哪種語言,根據(jù)需要去定。而實際上,在大學(xué)中程序設(shè)計入門,選用哪種語言,是可以有多種選擇的。比如還有的學(xué)校用Java,國外開始有用Python的。這都是多種選擇中的一種,各有利弊。作為學(xué)生,你的選擇是,照你的學(xué)校安排的路線去執(zhí)行。其中的不足,還要有課外的學(xué)習(xí)作為補(bǔ)足。上課只造就所有同學(xué)共性的地方,課外卻使你擁有了自己的精彩。不同的同學(xué)在課外有了不同的選擇,于是分出了水平上的階梯,以及出現(xiàn)了各具特色的人才。
用好你當(dāng)前的教學(xué)計劃中提供給你的幫助,開創(chuàng)出自己有效的自學(xué),讓你的大學(xué)更精彩。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.