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