现代程序设计 (课程设计中, 征求意见稿)
背景:?
????? 目前中國大陸大學里學的編程主要有兩種:
1)????? 學編程為了應付考試,偏重于靜態的知識點, 語言細節。以閉卷考試為主。有些學校的數據結構和算法課有許多實際的練習,也有的課程練習很少。
2)????? 學編程為了ACM 算法比賽,偏重于算法, 解決抽象的問題。主要是由興趣小組/面向比賽方式。
?
大部分同學到了工作中都用不著上面兩種能力 (忘了語言細節可以查;? 不用像比賽那樣在短時間內搞尖端的算法) , 但是他們要寫高效的,可維護的,經得起實際考驗的程序,而且往往會用到大學里沒有講到的語言來做。?
?
沒有這些知識和經驗的同學, 就很痛苦,例如這個同學做軟工課的第一個作業:
?
????? http://www.cnblogs.com/76er/archive/2012/09/25/2703143.html?
?
又如這個被這個同學吐槽的:
http://www.cnblogs.com/buptzym/archive/2013/05/25/3099389.html?
?
同學們對現有的程序設計課也有很大意見:
http://www.cnblogs.com/SuperBrothers/archive/2012/12/11/2812678.html?
| 很多人在Blog中都提到了我們大一的時候一門選修課——Java。(實質上應該叫“Java語言程序設計”),但是課上根本沒有,對就是根本沒有教會我們如何使用Java語言解決工程上任何實際的例子。甚至Console 輸出Hello World!\n? 都是自己查的Baidu。 然后考核方式是“開卷答題”+“2000行Java大作業”。學了半天什么什么歷史,什么什么面向對象的啥啥啥,能寫程序嗎?開卷考試抄就行了。大家都是80、90分。大作業怎么辦?誰都不會寫,寫出來都是面向過程風格的C-style的代碼。能完成一個工程么?肯定不能。那怎么辦?只有拿別人的代碼抄抄改改。 ? |
http://www.cnblogs.com/buaashine/archive/2012/12/10/2808107.html
這樣又引申到了“很有名”的Java課。 全年級200多人,在Java課上學會Java的,我想不超過10個吧,每年每屆學生都是如此,老師在講臺上空談概念,沒有課后練習,沒有實際例子,考試考什么是接口,try...catch有什么用,由于是開卷考試,我們都“答出”了“標準答案”,但誰也沒學會。
?
所以看起來這是一個缺口:?? 如何為了寫高質量的程序而學習各種編程理論,技術和技巧。實事上可以說是我的《現代軟件工程》課的前 1/3 內容: 個人項目和結對項目。
?
對學生的要求:
1)? 針對大學二/三年級學生; 假設學生已經會了數據結構/基本算法, C/Java 的基本語法和一些程序設計常識并有一些實踐。
2)?? 先修課:? 數據結構和算法;
?
?
?
講課的安排 (大約有12 次課):
1)?? 建立和維護自己的源代碼庫 (GitHub),? 基本操作; 建立和維護自己的技術博客, 開始每個學生報告目前會的語言和代碼量.
2)? ?程序如何處理用戶的輸入
3)?? 寫容易懂的程序? (代碼復審,結對編程), 程序理解,寫讓人懂的程序? (代碼可讀性)
4)??? C/C++? 語言中的基本設計模式??
a.??? 單例 (singleton)
5)??? 程序如何測試效能 (Performance)
6)??? 如何做單元測試
7)??? 一個進程里面的線程如何通訊
8)??? 模塊之間如何通訊 (API 的設計)
9)??? 程序之間如何通訊,? 怎么讓不同語言寫的程序互相通訊, RESTful 設計
10)?? 如何設計程序去測試別的程序
11)?? 寫能處理大數據的程序
12)?? 可擴展的程序
?
?
在這個課程中, 我們想讓學生有機會在實踐中學到程序設計的一些原則 (我都不全懂, 也不會全講, 或者全部強加給學生)。 例如:
?
?
課怎么上??
所謂做中學 ( learning by doing), 大家寫好玩的程序, 互相觀摩,? 看書上網查資料,? 相互學習,? 寫點博客記錄心得, 錄點視頻展現效果。我對編程語言懂得不多,但是手頭題目倒是挺多的。 作業肯定不少,但是大量的作業不是壓迫學生,而是通過有深度有難度的作業來調動、發揮學生的潛能。軟件開發這么好玩,真正感興趣的同學會做很多作業之外的探索。
?
怎么評分?
據說有很多考研補習班都是以 “包過”? 為口號,? 我覺得如果學生每個題目都認真做了,? 分享了必要的博客/視頻,一定會過的。
?
這是網絡公開課么?
課是在北航計算機學院上 ( 討論中 )。? 資料盡量放到網上,學生的程序/博客/視頻都是公開的。
上課時間地點:
?
周一晚上 6-8pm 北航 主南? 210,? 10/21 號起,時間不變,但是地點改在新主樓 D218。
??
?
課程質量如何??
今年是第一次開課,? 大部分東西的第一版都不怎么樣,? 所以不要期望值太高。? 然而駑馬十駕,? 功在不舍,? 持續改進幾年之后, 也許會有可觀之處。
?
?
課程的教材 和 TA:
中文版 代碼大全 (第二版) 斯蒂夫·邁克康奈爾 ISBN: 7121022982? Code Complete (2nd Ed)?Steve McConnell? ISBN: 9780735619678
Agile Software Development Principles, Patterns, and Practices,? by Robert C. Martin
重構:改善既有代碼的設計? Martin Fowler (馬丁 福勒), Kent Back, et al.
?
助教的博客: http://www.cnblogs.com/softwareTA/?
?
?
?
課程的的定位和擴展:
參考? 習而學的軟件工程教育, 這門課的定位:?? “數據結構 & 算法”???? --> “C 或者 JAVA 語言初步”?? -->? “現代程序設計語言 I”?? --> “現代軟件工程”
?
這門課有許多內容可以放進來,? 但是考慮到一般大學生的水平和時間,? 一些深入的話題可以放在? 現代程序設計 II 中。
?
未決定的議題:?? 可以分兩門課,? 由淺入深。第一門課用 C, JavaScript 語言為例, 講程序設計基礎, 第二門課擴展到 (Python,Java, C++) 同時講接口設計, 設計原則, 重用,重構等。
?
當然還有 @GeniusVczh 的 一系列關于程序語言的文章。
?
?
這門課不講什么:
算法, 某種程序設計語言的基本語法,編譯原理,?? 程序和用戶的交互,? 用戶需求分析,項目的管理, 軟件的測試。
?
打分:
每次作業大都要交兩個部分,? 代碼和博客
a)????? 代碼簽入到 GitHub 中, 包括代碼, 測試用例, 使用說明, 測試數據。 等。?
b)????? 博客寫到cnblogs.com 自己的博客賬戶中。博客寫什么:
a.?????? 程序的架構和思路
b.????? 自己在寫這個程序的心得
c.?????? 自己在這個作業中的時間消耗和開發效率分析 (請看軟件工程師的能力和評價)
d.????? 程序運行結果的截屏或者效果的錄像
?
每次作業滿分10 分,? 每次博客滿分10 分。把同學的作業和博客按照質量分為4檔:
第一檔:? 9 – 10 分?? (不超過1/3)
第二檔: 5 – 6 分???? (不超過1/3)
第三檔: 2 – 4 分
第四檔:? 1 分
遲交作業的同學: 0 ?分.
超過截止日期兩周不交作業的同學: ?-5 分.
?
?
?
?注: 一些題目:
??????? 縱橫加,? word search,? 彩球, Programming Pearls: graph generator
總結
以上是生活随笔為你收集整理的现代程序设计 (课程设计中, 征求意见稿)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 现代软件工程 作业 团队项目计划
- 下一篇: THU: 成绩录入系统的bug