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