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