摘要:程序開發(fā)能力和計(jì)算機(jī)應(yīng)用能力是檢驗(yàn)計(jì)算機(jī)專業(yè)教學(xué)的兩個(gè)重要手段,筆者結(jié)合自己的軟件開發(fā)經(jīng)驗(yàn)和教學(xué)經(jīng)歷,從學(xué)、讀、思、練、實(shí)踐和好習(xí)慣等6個(gè)方面探討了如何提高計(jì)算機(jī)專業(yè)學(xué)生的程序開發(fā)能力。
關(guān)鍵詞:學(xué)習(xí);實(shí)踐;程序;能力
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:B
高等教育的目的有兩個(gè),從社會(huì)角度來(lái)講是起濾網(wǎng)的作用,為社會(huì)提供不同類型、不同層次的人才;從人的角度來(lái)講是盡可能的發(fā)展個(gè)人的潛力,讓個(gè)人在社會(huì)中找到自己的位置。
作為計(jì)算機(jī)專業(yè)的老師,除了注重學(xué)生計(jì)算機(jī)基礎(chǔ)能力的培養(yǎng)外,還要注重學(xué)生專業(yè)應(yīng)用能力和專業(yè)擴(kuò)展能力的培養(yǎng),這樣學(xué)生才能適應(yīng)社會(huì)發(fā)展的需要;作為計(jì)算機(jī)專業(yè)的學(xué)生,必須提高自己的知識(shí)綜合運(yùn)用能力和程序開發(fā)能力,這樣才能在知識(shí)日新月異的時(shí)代占有一席之地。筆者結(jié)合自己的軟件開發(fā)經(jīng)驗(yàn)和教學(xué)經(jīng)歷,加上對(duì)學(xué)生的了解,從學(xué)、讀、思、練、實(shí)踐和好習(xí)慣6個(gè)方面來(lái)談一下如何提高學(xué)生的程序開發(fā)能力。
1 學(xué)
所謂學(xué)就是學(xué)習(xí),認(rèn)真學(xué)習(xí)程序開發(fā)基礎(chǔ)課程和專業(yè)課程,不斷地學(xué)習(xí)新的、先進(jìn)的開發(fā)工具;只有扎實(shí)的理論基礎(chǔ),編程才能游刃有余,才能寫出高水平的代碼,才能開發(fā)出高質(zhì)量的程序。
首先學(xué)好程序開發(fā)的最基礎(chǔ)的課程一一C語(yǔ)言,然后根據(jù)應(yīng)用范圍不同而選擇學(xué)習(xí)研究不同的開發(fā)工具。底層開發(fā)一般使用C和匯編;大型或者游戲軟件開發(fā)使用C或C++,一般用VC++或BC++;網(wǎng)頁(yè)編程可以選擇ASP、PHP或JSP;電子商務(wù)方面選擇.NET或J2EE;網(wǎng)絡(luò)應(yīng)用一般選擇JAVA。不過(guò)像數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)庫(kù)、英語(yǔ)、數(shù)學(xué)等課程,無(wú)論哪個(gè)方面的開發(fā)都需要學(xué)。
一般的基礎(chǔ)課程有計(jì)算機(jī)基礎(chǔ)、C語(yǔ)言、VB程序設(shè)計(jì)、數(shù)據(jù)庫(kù)原理、數(shù)據(jù)結(jié)構(gòu)、算法設(shè)計(jì)等,學(xué)習(xí)程序開發(fā)的基礎(chǔ)課程主要是學(xué)習(xí)一門語(yǔ)言,一門數(shù)據(jù)庫(kù),一門算法設(shè)計(jì)。基礎(chǔ)越牢固,編程效率越高,這一點(diǎn)在程序開發(fā)中會(huì)慢慢體會(huì)到。如果基礎(chǔ)課程不牢固,可能也能編軟件,但是很難開發(fā)出高水平的程序。
例如一般的程序會(huì)遇到費(fèi)用問(wèn)題,有費(fèi)用就要考慮費(fèi)用的大寫問(wèn)題,那么怎樣實(shí)現(xiàn)費(fèi)用的大小寫轉(zhuǎn)換呢?首先考慮算法設(shè)計(jì),然后考慮算法實(shí)現(xiàn)??紤]算法時(shí)就要考慮從左向右轉(zhuǎn)換還是從右向左轉(zhuǎn)換,確定后就可以通過(guò)循環(huán)控制結(jié)構(gòu)來(lái)實(shí)現(xiàn)轉(zhuǎn)換;中間用判斷結(jié)構(gòu)來(lái)判斷如果為零或中間有零的特殊情況等等。這樣一個(gè)問(wèn)題就通過(guò)簡(jiǎn)單的算法和基本控制結(jié)構(gòu)實(shí)現(xiàn)了,所以程序開發(fā)必須有扎實(shí)的理論基礎(chǔ),這些理論基礎(chǔ)來(lái)源于自己不斷地學(xué)習(xí)。
另外,很多的課程告訴我們一些程序的效率問(wèn)題,例如數(shù)據(jù)庫(kù)設(shè)計(jì)中提到了SQL語(yǔ)句,我們最先想起的就是Select語(yǔ)句,在數(shù)據(jù)量比較大的情況下,Select語(yǔ)句的查詢速度和數(shù)據(jù)庫(kù)中表的索引有很大的關(guān)系。但是很多情況下Select語(yǔ)句是不使用索引的,如果在Select語(yǔ)句中的where條件中出現(xiàn)下列情況的不使用索引:列上有數(shù)學(xué)運(yùn)算的,列上使用substr字符串函數(shù)的,‘%’通配符在第一個(gè)字符的,在列上使用字符串連接(II)的等等,那么在對(duì)大量的數(shù)據(jù)進(jìn)行查詢時(shí),不考慮以上情況的話,SQL語(yǔ)句的效率就比較低,所以只有不斷地學(xué)習(xí)好程序開發(fā)的基礎(chǔ)課程,學(xué)習(xí)好各種工具的應(yīng)用,才能寫出高效率的代碼。
2 讀
所謂的讀就是讀教材、讀程序、讀網(wǎng)上資料,然后把看到的經(jīng)典代碼和好的算法整理出來(lái),逐個(gè)消化、吸收,轉(zhuǎn)變?yōu)樽约旱闹R(shí),提高自己的程序開發(fā)能力。讀他人的代碼時(shí)不要單純地模仿,思想才是最重要的,主要是去理解別人的思想,讀完后思考自己是否能寫出更精煉、更有效的程序。多與他人交流,從交流中學(xué)習(xí)提高。
3 思
首先,事前思考有沒有可行性。給你一個(gè)課題或一個(gè)項(xiàng)目,最先做的是思考可行性問(wèn)題,包括技術(shù)可行性、經(jīng)濟(jì)可行性、法律可行性。如果給你一個(gè)悖論讓你用程序來(lái)實(shí)現(xiàn),本身是一個(gè)悖論,編寫程序肯定陷入死循環(huán),怎么可能解決呢?
其次,事中考慮有沒有更好的解決方案。微軟給了我們很好的思路,比如登錄界面、保存、輸入格式的限制和輸入范圍的限制等。登錄界面一般有用戶名和登錄密碼,并且默認(rèn)上次成功登錄系統(tǒng)的用戶名,輸入的密碼顯示為一串“*”,在這些操作中可以只使用鍵盤。那么我們開發(fā)的程序中的登錄界面是否也可以這樣呢?我們常用Woed和Excel,能設(shè)置定期保存,我們開發(fā)的程序是否需要實(shí)現(xiàn)定期保存?如何實(shí)現(xiàn)?其實(shí)我們可以在程序登錄時(shí)記錄系統(tǒng)時(shí)間,在一定的時(shí)間間隔內(nèi)實(shí)現(xiàn)備份,最簡(jiǎn)單的就是書寫代碼調(diào)用Winrar實(shí)現(xiàn)文件的壓縮備份。一些輸入的限制要根據(jù)內(nèi)容的邏輯進(jìn)行判斷到底應(yīng)該輸入的內(nèi)容或范圍是什么?例如有的月份能輸入31日,有的就不能,這都需要進(jìn)行邏輯判斷。如果通過(guò)代碼來(lái)控制,如何實(shí)現(xiàn)呢?開發(fā)程序時(shí)如果我們思考類似的細(xì)節(jié),并想辦法實(shí)現(xiàn),實(shí)現(xiàn)的過(guò)程就是我們程序開發(fā)能力提高的過(guò)程。
最后,事后考慮有沒有需要完善的,代碼有沒有需要優(yōu)化的。下面舉個(gè)代碼優(yōu)化的例子,求一元二次方程ax2+bx+c=0的根,其中a、b、c為任意實(shí)數(shù),這個(gè)例子很經(jīng)典,多數(shù)開發(fā)語(yǔ)言或程序設(shè)計(jì)的教材中都講到過(guò)。實(shí)現(xiàn)的步驟是先判斷a是否為0,再判斷b2-4ac是否為0,根據(jù)相應(yīng)的值求方程的根;a是否為0,必須判斷,因?yàn)槿绻鸻為0,就不是一元二次方程,但是很多教材中沒有提到;在判斷b2-4ac是否為0時(shí),需要這樣判斷fabs(b2-4ac)<=le-6,因?yàn)樵谟?jì)算機(jī)中,儲(chǔ)存實(shí)數(shù)一般都有誤差。所以事后必須思考,思考程序有無(wú)需要完善的功能,有無(wú)需要優(yōu)化的代碼,完善的過(guò)程就是程序開發(fā)能力提高的過(guò)程。
4 練
所謂練就是動(dòng)手做練習(xí),教材上的例題、課后習(xí)題都是很好的素材,都是編者經(jīng)過(guò)深思熟慮的結(jié)果,很有代表性。邊練習(xí),邊理解,邊思考,多問(wèn)為什么?然后根據(jù)自己的思考和理解對(duì)例子做一定的改動(dòng),看執(zhí)行結(jié)果是否和自己期望的一樣?出現(xiàn)問(wèn)題就設(shè)法調(diào)試、改正、編譯使其通過(guò)。例如有很多循環(huán)的例子,是否可以實(shí)現(xiàn)for循環(huán)和while循環(huán)相互轉(zhuǎn)化,只有通過(guò)自己的實(shí)際轉(zhuǎn)換后才能體會(huì)各個(gè)循環(huán)的特點(diǎn)。
練習(xí)要分階段分步驟,開始編一些趣味性的程序;然后當(dāng)積累到一定程度,就可以按照自己的想法編一些實(shí)用性強(qiáng)的程序,當(dāng)然可以從借鑒別人的勞動(dòng)成果開始:最后,系統(tǒng)地學(xué)習(xí)軟件工程,完全按照軟件生命周期的6個(gè)階段來(lái)做,通過(guò)不斷地練習(xí),不斷地完善軟件過(guò)程,提高程序開發(fā)能力。
5 實(shí)踐
如果有機(jī)會(huì),可以做實(shí)際的項(xiàng)目工程,在實(shí)踐中不斷地鍛煉自己的其他能力,如邏輯思維能力、業(yè)務(wù)能力、溝通交流能力。
邏輯思維能力是程序開發(fā)能力的基礎(chǔ),只有良好的邏輯思維能力才能開發(fā)出高性能的程序,才能保證程序的正確性。
業(yè)務(wù)能力和溝通交流能力是必需的,如果不懂業(yè)務(wù),就不知道用戶的需求,就不可能開發(fā)出適合用戶的程序。
實(shí)踐的項(xiàng)目不在大小,在于實(shí)踐的經(jīng)歷。通過(guò)實(shí)踐知道在實(shí)施項(xiàng)目中除了程序開發(fā)能力外還需要其他的能力,通過(guò)實(shí)踐知道項(xiàng)目的實(shí)施過(guò)程和環(huán)節(jié)。在實(shí)施的過(guò)程中遇到的各種各樣的問(wèn)題,使我們明白在程序開發(fā)中怎樣思考、解決這些問(wèn)題。例如在培訓(xùn)用戶時(shí),發(fā)現(xiàn)用戶對(duì)我們的業(yè)務(wù)流程不適應(yīng),用戶自己的業(yè)務(wù)流程比較簡(jiǎn)單,那么我們?cè)诔绦蜷_發(fā)時(shí)就可以借鑒用戶的流程,使我們的操作流程更簡(jiǎn)捷。在測(cè)試階段發(fā)現(xiàn)用戶經(jīng)常使用業(yè)務(wù)回退功能,那么我們就給主要的業(yè)務(wù)流程都加上業(yè)務(wù)回退功能,使系統(tǒng)功能更完善。在維護(hù)階段發(fā)現(xiàn)維護(hù)人員看不明白代碼,那么在程序開發(fā)階段就要注意良好的程序開發(fā)風(fēng)格并增加適量的注釋,保障程序的可理解性,提高土作效率。
6 好習(xí)慣
(1)先思后行:在程序開發(fā)前或解決問(wèn)題前,先考慮該問(wèn)題是否有可行性,有可行性再考慮計(jì)劃和實(shí)施。
(2)有備無(wú)患:程序開發(fā)之前,先找一些樣例程序仔細(xì)研究,應(yīng)該包含哪些基本功能?里面一些難度大的算法應(yīng)該怎樣實(shí)現(xiàn)?不打無(wú)準(zhǔn)備之仗。
(3)按部就班:程序開發(fā)要遵循軟件的生命周期,按照制定計(jì)劃、需求分析、軟件設(shè)計(jì)、程序編碼、軟件測(cè)試和運(yùn)行維護(hù)這6個(gè)階段來(lái)實(shí)現(xiàn)和完善軟件,不可越級(jí)。
(4)見名知意:程序再小,用的變量也不會(huì)少,變量起名應(yīng)當(dāng)“見名知意”,這樣可大大提高程序的易理解性和易修改性。
(5)開發(fā)規(guī)范:程序要書寫規(guī)范,形成良好的程序風(fēng)格,這樣程序才層次清晰,易于理解。
(6)多加注釋:對(duì)程序中自定義的變量、函數(shù)、子程序加以功能性的注釋說(shuō)明,好的程序中注釋能占到整個(gè)代碼的30%甚至50%,注釋最根本目的就是增加程序的可理解性。
(7)環(huán)境保護(hù):如果應(yīng)用程序需要修改系統(tǒng)設(shè)置,記著執(zhí)行程序前先保存設(shè)置,結(jié)束后要恢復(fù)設(shè)置,千萬(wàn)別污染系統(tǒng)。
(8)拿來(lái)主義:一個(gè)人的力量是有限的,大家的力量是無(wú)限的,平時(shí)多看書,有好的經(jīng)驗(yàn)方法、用得上的段子不妨拿來(lái);拿來(lái)先明白、再消化吸收、最后變?yōu)樽约旱闹R(shí)。