如何為程序員提供適當的語言教育,這個問題似乎在TechRepublic論壇上引起了激烈的爭論。我逐漸意識到(從這些討論中受到的最大影響),應該為軟件程序員提供兩種語言教育途徑:一個真正的計算機科學程序,它主要關注于算法、程序設計的理論方法和通過什么方法將這些算法傳遞給真正的程序員。
今天,我將通過下面的步驟向大家介紹一個完美的課程。我認為這種課程沒必要在大學里面開設,因為它是一種職業訓練,而不是理論學習(我一直認為大學里面沒有商業活動,所有不應該開設MBA課程)。然而,程序設計課程將分成傳統的八個學期,這些課程中不包括普通教育的必修課和只能在最后一個學年才能獲得的選修課。
第一學期
程序設計導論
這個課程關注于程序的基本結構:控制語句、循環條件、等等。理想的教育方式是用一個非常簡單,免于欺騙的程序語言,這個語言支持(但是不是必須使用)面向對象程序語言OOP。它也需要加強好的編程習慣。我懷疑(不幸的)VB.NET用Explicit和Strict開始將很好的適合于此種情況,或者可能是Ruby(我對它不太了解,所以不能說太多)。Pascal語言對于這個課程來說,也是一個非常好的備選方案。
數理邏輯1
在這個課程中將學到正規的邏輯證明法和反證法的基本結構。
需求收集
這個課程的焦點是收集工程中的商業需求,了解誰是重要的投資人,并從他們那得到信息,多與真正的用戶接觸,以便了解用戶的需求,等等。即使是在客戶正集中關注“怎么樣實現”的時候,了解工程“為什么要實現”也是非常重要的。這個課程還將告訴你如何在工程中引進最好的方法,即使客戶可能會認為他們不需要這些方法。
網絡和系統管理基礎
這個課程將幫助程序員了解軟件運行的環境,特別是在現代化的世界中,了解軟件環境是非常必要的。在這個課程中,學生將學到非常多的基本網絡知識和系統管理知識,這可以使學生了解產品環境的普遍問題,并掌握如何在代碼中預防這些問題。在這個課程中,還應該特別關注許可問題和TCP/IP協議在解決紛爭方面的應用。
第二學期
可用性和可及性
優秀的程序員需要了解所有用戶的普遍需求(可用性)和一些用戶的特殊需求(可及性)。這是一個免費代碼課程,它將向學生介紹如何根據用戶需求來設計優秀界面的基本原理。
數理邏輯2
這是數理邏輯的高級課程。
數據庫理論
這個課程通過一個良好的數據庫設計探索向學生介紹數據庫的知識。這里將介紹關系數據庫和標準數據庫,也將學習關于應用程序和報表的不同需求。還將特別介紹如何適當的使用索引、主鍵、視圖、存儲過程等等。
程序設計基本原理
使用極端的拆開式語言(類似與EdScheme),學生將花一個學期的時間創建一些基本的庫來擴充語言,這些庫都是用簡單類型和控制結構開發的,通過這種方法可以使這個語言成為一個發育完全的語言。
面向對象(OO)設計
學生將學習OO設計和程序設計技巧。將有重要的時間討論OO工程的合適結構,并討論如何在一個團隊環境中合理利用OO技術來工作。
第三學期
數據結構
使用C語言版本,這個課程將使學生了解普通的數據結構,例如鏈表、堆棧、隊列、圖、樹,等等。
技術規范
這個課程建立于需求收集課程,它將教學生如何將商業需求轉換成技術規范。特別應該注意商業用戶表達的思想和技術人員了解的思想之間的不同。
數據驅動應用
在這個課程中,學生將創建數據驅動應用軟件,結合他們面向對象的程序設計(OOP)知識、數據庫知識、數據結構知識和界面設計知識來構造簡單的客戶端/服務器應用軟件。
WEB設計基礎
在這個課程中將學習HTML、CSS和JavaScript,同時還要學習程序員必須掌握的基本圖形編輯軟件。這里主要強調根據標準,創建有用的、可訪問的網站。
第四學期
數據有效性
在這個課程中,學生將學習一些關于執行數據有效性的必要性,和執行數據有效性的技術。在這里還要學習基本的正則表達式指令。
C++ 1
對于C++語言的初學者來說,主要學習如何面向對象編程,并編寫出無懈可擊的代碼。
動態/解釋性語言
這個課程主要是學習不同動態和解釋性語言的通用用法,其中包括Per、Ruby、Python和JavaScript。學生將學習動態/解釋性語言的特性,也將學習如何在適當的文本中合理的利用它們。
報表
在這個課程中,學生將學習如何為報表創建數據模型,并創建報表。需要特別注意的是,向用戶顯示的數據應該用簡單易懂,且符合習慣的。
第五學期
C++2
作為上學期C++課程的后續部分,學生們應該在指導老師和助教的幫助下編寫兩個小型C++程序和一個較大的C++應用程序。
數據庫體系結構
學生們將會深入學習數據庫設計與體系結構,重點在于數據庫體系結構對于編程的影響。標準化與如何編寫快速執行的SQL代碼之間的關系也將會有所探討。SQL代碼的執行速度依賴于標準化的水平。
CPU基礎
在這門課程中,學生們將會詳細學習CUP體系結構的本質,包括CISC(復雜指令集小型計算機系統)和RISC(精簡指令集小型計算機系統)平臺之間的區別,二進制執行,內存管理等等,同時還將會提供利用匯編語言進行手工編碼的練習。
開發方法學
本課程將會講授諸如瀑布方法,快速原型化方法,RAD等各種開發方法之間的區別。學生們將會參加一系列正在舉行的研討會,研討會搭建了一個模仿的開發環境,學生么可以交換扮演客戶和開發人員的角色。
第六學期
Java
這門關于Java的基礎課程將會使的學生達到熟練的水平。他們將會學習Java語言,JVM(Java虛擬機)原理和Java與J2EE應用服務器之間的關系。
VB.NET
學生將會學習VB.NET以及.NET框架和ASP.NET系統。重點講授事件驅動應用開發。
C#
學生將會學習C#語言,以及它的大量高級特性如匿名函數,λ演算等等。
安全
這是一門精深的課程覆蓋編寫安全代碼的細節問題。學生將會學習到緩沖區溢出,數據確認,SQL注入攻擊,跨站點腳本攻擊和其它典型安全問題。同時,還會要求學生找出他/她們以前參與開發的項目的安全漏洞并修改這些漏洞,因此作為練習并強化已存在的代碼。
第七學期
UNIX程序設計
學生們將會學習專門針對UNIX平臺的程序設計。重點學習的是進程(包括forking),管道,套接字和重定向的重要角色。同時,還會給學生一些指導并練習編寫部屬在UNIX系統上的應用程序。
Windows程序設計
學生們將會學習針對Windows平臺的程序設計。學習重點方面包括UI用戶接口設計和Windows API。另外的重點將是關于安全方面的介紹。
獨立程序設計
本課程將會要求學生利用他們選擇的方法開發一個大型的項目。他們必須完成的工作包括需求分析,規范說明編寫,計劃,開發和測試他們的應用。
QA質量分析
在這門課程中將會教授學生質量分析(QA)的技巧。學生們將會學習質量分析、執行負載測試,單元測試,代碼走讀并希望他們能夠改正發現的任何問題。代碼將會為他們預先編譯,從而可使他們將重心放在質量分析過程而不是代碼編寫過程。
文檔
學生們將會學習到如何正確的為代碼編寫文檔、各種可用的文檔編輯技巧以及使用不同技巧的最佳時間、地點。內嵌代碼,引用生成,幫助文件創建,手工編碼等都將包括其中。這是一門半學期的課程。
第八學期
團隊程序設計
這門課程將要求學生參與四個獨立的小組項目。在其中的三個項目中,學生們的角色是開發人員,在第四個項目中,學生們作為業務分析人員/項目經理/技術負責人。每個項目為期半學期。每個學生將會同時參加兩個并行項目。
多線程開發
在這門高級課程中,學生將會學習并行程序設計,其中將會講授信號,并發和數據繼承等。學生們還將會學習到Java線程模型pthreads和.Net線程模型。
第八學期選修課程
每位學生必須選擇下列課程之一作為他們第八學期的最后課程:
圖形學
學生們將會學習到在Windows平臺上利用C++和DirectX編程進行窗口操作和圖形處理。
設備驅動程序
學生們將會學習編寫設備驅動程序并練習利用匯編語言在功能有限的UNIX平臺上編寫一個簡單的驅動程序。
優化與重構
學生們將會學習檢查代碼以發現無用代碼并進行代碼重構來提高性能,方便維護并減少潛在的失敗點。本課程將會提供給學生預先編寫好的代碼以使他們集中經歷學習重點知識。
科學程序設計
學生們將在UNIX系統上利用他們選擇的語言練習將科學理論和數學算法轉換成代碼。
網絡程序設計
本課程將教授學生如何編寫利用套接字進行計算機之間通訊的程序。學生們將會學習到實踐建議和動手能力訓練以決定是利用一個已經存在的協議更有意義還是開發一個新的更有意義、UDP 和TCP的選擇等,此外還將會重點介紹HTTP協議和運行在LANs局域網和WANs廣域網上的應用程序之間的區別。
希望你能希望這個系列。同時,歡迎你的反饋信息!