原文地址:matt.might.net/articles/wh…
摘要:由於電腦科學領的飛速發展,要想辨識出現代電腦科學學位包含哪些知識,是一件具有挑戰性的事情。
“什麼是每一個計算機專業的學生應該知道的知識?”,教職員工們正在參與這場討論,我彙總了我的想法作為這個問題的答案。
我試著把這個問題作為下面四個問題的結合來回答:
- 每個學生應該知道什麼才能
獲得一份好的工作
? - 每個學生應該知道什麼才能
維持終身就業
? - 每個學生應該知道什麼才能
進入研究生院
? - 每個學生應該知道什麼才能
對社會有利
?
我下面的想法包含與現代計算機相關的一般原則
和特別推薦
。
計算機專業的學生,請自由使用這篇文章作為自學指南。
如果有任何新增和刪除的建議,請發電子郵件或推特給我。
郵箱:matt-blog@might.net
推特:http://www.twitter.com/mattmight
更新:謝謝您的建議和提醒,當我收到後,我會將其整理進文件,以保持積極更新。
作品集 VS 簡歷
電腦科學專案從工程和數學中脫離而出,採取了一種基於簡歷的方法來招聘畢業生。
一份簡歷無法說明程式設計師的能力。
每一個計算機專業的學生應該建立一個作品集。
作品集應該和個人部落格一樣簡單,上面有每一個專案或成就的文章。一個更好些的作品集應該包含每個專案的文章以及可公開瀏覽的程式碼(託管在github或者Google code上)。
應該連結並記錄對開源軟體的貢獻。
程式碼作品集能夠讓僱主直接判斷你的能力。
GPAs(平均分)和簡歷卻做不到。
教授們應該設計課程專案來豐富作品集,學生在每一個課程完結時,應該花時間去更新作品集。
作品集例子:
技術交流
電腦科學中的孤狼是一種瀕臨滅絕的物種。
現代電腦科學家必須習慣於和非程式設計師有說服力地、清晰地交流。
在較小的公司,程式設計師是否能和管理人員交流想法,可能會關係到公司的成敗。
不幸的是,通過增加一門課程無法解決這個問題。(儘管技術交流方面的紮實課程並不會有任何壞的影響)
需要更多的課程提供學生機會,去展示他們的工作,並通過口頭表達來保護他們的想法。
特別推薦
建議學生掌握一個像PPT和(我最喜歡)Keynote一樣的展示工具。(抱歉,雖然我很喜歡基於LaTeX的展示工具,但這些工具太過靜態)
對於製作美觀的數學文件,LaTex是最好的選擇。
所有技術文件的書面作業都應該用LaTeX提交。
推薦閱讀
- Writing for Computer Science by Zobel.
- Even a Geek Can Speak by Asher.
- The LaTeX Companion.
- The TeXbook by Knuth. (Warning: Experts only.)
- Notes on Mathematical Writing.
- Simon Peyton-Jones's advice on How to Give a Good Research Talk.
- My advice on how to send and reply to email.
工程核心
電腦科學不完全等同於工程學。
但是,足夠接近。
電腦科學家會發現自己和工程師一起工作。
電腦科學家和傳統的工程師需要說同樣的語言---一門來源於實時分析,線性代數,概率論和物理的語言。
電腦科學家應該通過電磁場來研究物理學。但是,要做到這一點,它們需要通過多元微積分(以及用於良好度量的微分方程)來處理。
在進行聲音訊號模擬時,掌握概率和線性代數(通常是線性代數)是無比重要的。在解釋結果時,沒有任何東西可以代替對統計學的紮實理解。
推薦閱讀:
- Calculus by Spivak.
- All of Statistics: A Concise Course in Statistical Inference by Wasserman.
Unix哲學
電腦科學家應該適應並實踐Unix計算哲學。 Unix哲學(相對於Unix本身)強調語言抽象和組成來實現計算。
在實踐中,這意味著對命令列計算,文字檔案配置,無IDE軟體開發的概念感到滿意。
特別推薦
由於Unix systems的流行,今天的電腦科學家應該能流利地掌握基本的Unix,包括如下能力:
- 瀏覽和操作檔案系統;
- 用管道進行組合操作;
- 習慣於用
emacs
和vim
編輯檔案; - 給一個軟體專案建立、修改和執行Makefile;
- 寫一個簡單的shell指令碼。
學生們在不瞭解Unix哲學的強大能力前會抵制它。因此,最好的方法是激發學生去完成在Unix上具有相對優勢的有用任務。 比如:
- 從給定的目錄中找出佔磁碟空間最大的5個資料夾。
- 從計算機上找出重複的MP3檔案(從內容判斷,而不是檔名)
- 取一列姓名,其名稱和姓氏都是小寫,對他們進行合理的調整。
- 找出第二個字母是x,倒數第二個字母是n的所有英文單詞。
- 一臺電腦的麥克風輸入直接通過網路從另一臺電腦的擴音器輸出。
- 給定一個目錄,將所有檔案的檔名中的空格替換成下劃線。
- 報告web伺服器中來自特定IP地址的最後十次錯誤訪問。
推薦閱讀
- The Unix Programming Environment by Kernighan and Pike.
- The Linux Programming Interface: A Linux and UNIX System Programming Handbook by Kerrisk.
- Unix Power Tools by Powers, Peek, O'Reilly and Loukides.
- commandlinefu.
- Linux Server Hacks.
- The single Unix specification.
以下下內容正在翻譯,敬請期待
系統管理
程式語言
離散數學
資料結構和演算法
理論
計算機體系結構
作業系統
網路系統
安全
密碼學
軟體測試
使用者體驗設計
視覺化
並行
軟體工程
形式化方法
圖形與模擬
機器人
人工智慧
機器學習
資料庫