有哪些計算機科學方向的課程作業(Assignment/Project)值得一做?
01-05
歡迎各位分享自己做過的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 Project3. 操作系統Spring 2014 CS162: Operating Systems Programming.4. 機器學習Xin-Shun Xu, MIMA Group at SDU5. 計算機系統相關CS:APP3e, Bryant and O"Hallaron6. 編譯原理學了編譯原理能否用Java寫一個編譯器或解釋器? - 王召德的回答
[本人代碼:GitHub - wangzhaode/PL0-compiler-SLR: a simple compiler of PL/0 by Java]7. Java 實現一個可以聯機的你畫我猜小遊戲,支持聊天和詞庫持久化存儲 (適合Java入門者) [本人代碼:GitHub - wangzhaode/DrawSomething]之前回答過類似的問題,這裡轉過來:
作者:張泰源
鏈接:學習一門新的編程語言有什麼推薦的輪子可以拿來練手的? - 知乎用戶的回答來源:知乎著作權歸作者所有,轉載請聯繫作者獲得授權。……大家可以看得出來我寫了很多網站,和少量的app……真的隨便找個idea就可以妥妥的開始寫了……刷代碼量最有效的方式,沒有之一如果入門了,還不滿足,建議找對應的開源項目跟進參與,或者自己寫個輪子然後開源,拿我自己舉例……
- 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
- 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應該怎麼翻譯?