有哪些計算機科學方向的課程作業(Assignment/Project)值得一做?

歡迎各位分享自己做過的Assignment/Project, 本科生/研究生均可。


Assignment 1: Analyzing Program Performance on a Multi-Core CPU : Parallel Computer Architecture and Programming : 15-418/618 Spring 2016


以下都是山東大學本科階段的部分實驗項目,希望對你有幫助

1. 圖形學

CSCI 480 Programming Assignment 3: Ray Tracing

[本人代碼:GitHub - wangzhaode/RayTracing: a simply raytracing project]

2. 網路安全

SEED Project

3. 操作系統

Spring 2014 CS162: Operating Systems Programming.

4. 機器學習

Xin-Shun Xu, MIMA Group at SDU

5. 計算機系統相關

CS:APP3e, Bryant and O"Hallaron

6. 編譯原理

學了編譯原理能否用Java寫一個編譯器或解釋器? - 王召德的回答

[本人代碼:GitHub - wangzhaode/PL0-compiler-SLR: a simple compiler of PL/0 by Java]

7. Java

實現一個可以聯機的你畫我猜小遊戲,支持聊天和詞庫持久化存儲 (適合Java入門者)

[本人代碼:GitHub - wangzhaode/DrawSomething]


之前回答過類似的問題,這裡轉過來:

作者:張泰源

鏈接:學習一門新的編程語言有什麼推薦的輪子可以拿來練手的? - 知乎用戶的回答

來源:知乎

著作權歸作者所有,轉載請聯繫作者獲得授權。

  • Java
    • ftp伺服器和客戶端
    • 新聞網頁解析程序:自動解析新聞網頁中的正文、標題、時間、來源
    • 利用Java RPC實現分散式文件系統的伺服器
    • 寫Android App
  • C++(包括C吧)
    • 自己從頭寫個搜索引擎
      • 分詞
      • 倒排文檔索引
      • ……
    • 實現一個B+樹(當初實現了很多個數據結構,但這個可能是最複雜最考驗人的了)
  • Scala
    • 用Play寫網頁
    • 寫ML演算法,放到Spark上面跑
  • Python
    • 寫網站後端,很多很多的網站後端,用Django/Flask/web.py/Tornado
    • 用scikit-learn做機器學習
  • Javascript
    • 寫網頁前端,很多很多的網頁前端,用各種各樣的庫,jQuery/AngularJS, ReactJS
  • C#
    • 大一時我們自己寫了一個Naive的QQ,雖然實現得完全不scalable和robust,但是能實現那麼多功能也是不容易的好嗎(C#的好處就是拖界面比較簡單)
    • C#有自己的MVC框架,所以,寫網站……
  • Swift
    • 寫iOS app

……大家可以看得出來我寫了很多網站,和少量的app……真的隨便找個idea就可以妥妥的開始寫了……刷代碼量最有效的方式,沒有之一

如果入門了,還不滿足,建議找對應的開源項目跟進參與,或者自己寫個輪子然後開源,拿我自己舉例……

  • Java
    • Cassandra 分散式資料庫,最近在跟進issue並check-in code
  • Python
    • Tornado,我讀了一遍關鍵源碼

  • Javascript
    • 寫前端的時候為了實現特定功能,我hack過無數javascript庫……包括AngularJS……


1. Lisp 方言解釋器

2. 類 SECD 虛擬機

3. 把 1 編譯到 2 的編譯器


我覺得我們系大二時候做的NEMU,大三系統方向做的綜合實驗,以及在體系結構課的一些課後實驗都挺好的。但是我沒找到鏈接。。。因為我們作業系統改掉了,所以只能簡單描述一下我們做了什麼。

1.

NEMU是一個類似虛擬機的東西,計算機系統基礎這門課的實驗, 包括實現i386 ISA,存儲結構, (兩級cache + memory),中斷,系統調用啥的,最後是要在這個虛擬機上跑仙劍奇俠傳。全程用軟體模擬,比較適合系統方向入門。所以我們是在大二上時候做的。我看到有同學分享了CSAPP的Lab Assignments,那個我們當時也做了,也是計算機系統基礎這門課實驗的一部分。

2.

綜合實驗其實分成了好幾個部分,其中一部分就是NEMU,接下來是大二下的時候寫的簡單操作系統,大三上寫的編譯器以及在FPGA上寫的流水線cpu。 然後在大三下的綜合實驗裡面把這些都搞到一起。

2.1

簡單操作系統,用的類似於MIT的OS

2.2

編譯器,是類似於C語言的一個語言,我們起名叫C minus minus。後端是MIPS ISA。在中間代碼優化的phase裡面有一個bonus,如果你生成的中間代碼足夠少的話,實驗部分是有一定加分的。亦可賽艇。

2.3

流水線CPU, MIPS ISA, 有轉發單元 (forwarding unit), 冒險處理 (hazard unit),還有一個簡單的branch prediction, cache + DRAM的存儲結構。有一個協處理器(coprocessor0)處理中斷和系統調用。

3.

體系結構課主要是一些reading assignment,除此之外有一個cache的實驗,最後也有一個project。最後的那個project可以選擇paper review,或者驗證別人的實驗,或者自己提出一些改進。我當時選的是驗證性任務,具體是驗證 CAWA: Coordinated Warp Scheduling and Cache Prioritization for Critical Warp Acceleration of GPGPU Workloads (ISCA"15)。用的GPGPU-Sim。文章是自己選的。因為之前沒有接觸過GPGPU,所以通過這個實驗對GPGPU,或者是更廣泛的multi-core processor有了點了解吧。

評論裡面已經有兩位大神給出了部分鏈接地址

最新版NEMU:ICS2015 Programming Assignment 以及框架代碼地址:GitHub - nju-ics/ics2015: NJU ics2015 PA

以後找到鏈接分享。


分散式系統:

6.824 Home Page: Spring 2016

操作系統:

6.828 / Fall 2014

Rust Programming:

Schedule - CIS 198: Rust Programming



做過ray tracing

其實是有很多方法能做的,不過我最後實現了opengl預覽,多線程跑ray trace,用avx指令集優化,包圍盒加速,還有很痛苦的在freeglut上寫了交互。

這樣一來,就比最基本簡單的光線跟蹤要考驗人了吧。

可以覆蓋到opengl編程,光線跟蹤原理,並行計算,指令集,甚至還有項目的結構。

而且我這樣用c++寫的話,還能順便學學c++11(順便被坑一坑)

至於哪裡好嘛,只是自己覺得有點成就感(然而沒什麼卵用)


清華大學的操作系統實驗課程。


Berkeley的AI, pacman系列


CMU ~213的lab

配合csapp食用風味更佳

地址在此

https://www.cs.cmu.edu/~213/


斯坦福的pintos


微信公眾號MOOCPLUS里好像有這類課程


大一下,剛寫了一個存分配器,功能類似 malloc 和 free.

寫完之後 對 內存和數據結構 有了更加貼切的理解。雖然不工作量不大,大概300-400行左右的量,但學到的東西 很多。


推薦閱讀:

C語言初學者,在電腦性能足夠的情況下,VS2017,codeblocks,devcpp如何選擇?
這種背景的學生,計算機專業應該怎麼選擇學校?
計算機語言可以以變數名作為類型判斷么?
大學的軟體工程比技校強在哪裡?
在計算機中utility應該怎麼翻譯?

TAG:計算機 | 大學 | 開放課程 | 計算機科學 | MOOCs |