計算機科學中有哪些典型的練手項目?
如題,計算機領域有哪些 project based learning 的項目?
比如設計編程語言、操作系統、搜索引擎、瀏覽器等。歡迎拓展到細分領域和相關領域。
國外有個很有意思的程序員叫Martyr2,他通過頭腦風暴想出了125個小項目,並根據其主題分成了10個分類。
英文原文在這裡:Martyr2s Mega Project Ideas List!
中文翻譯在這裡:有了這個列表,程序員不愁沒練手的小項目了(順便推薦一下翻譯方的微信公眾號jobbole,定期推送IT諮詢、技術乾貨~有興趣的朋友可以關注下)
另外,他還出了本電子書,包含了額外幾十個項目共200多個小項目以及一些項目的解決思路,這本書的介紹在這裡:http://www.coderslexicon.com/downloads/the-programmers-idea-book/
(順便分享一下自己寫小項目經驗同時給自己做的練手項目做個廣告:之前想造一個 HTTP 伺服器輪子,寫的過程中漸漸發現很多人都有這樣學習高性能伺服器開發的需求,但是發現一個問題:網上教程和教材都寫太簡單,於是很多人會想去看 Nginx 的實現,但是它代碼量又比較大,很容易看不下去。那我就寫一個比 toy 伺服器複雜,但是比 Nginx 簡單,同時又保持 Nginx 核心結構的輪子吧!於是就有了 Zaver,鏈接在這裡:https://github.com/zyearn/zaver。Zaver 的目的是幫助開發者理解基於 epoll 的高性能伺服器是如何開發的。Nginx 是一個非常好的伺服器開發學習範例,但是它的代碼規模較大也較複雜,讓許多人望而卻步。Zaver 用非常少的代碼展示了像 Nginx 這類高性能伺服器的核心結構,為開發者進一步學習網路編程打下基礎。所以你看,有需求才有寫項目的動力,需求是在日常開發和思考中發現的,這樣寫出來的項目不僅對自己是鍛煉,而且也能幫助很多人,豈不是一舉兩得。)
------ 我是125個小項目搬運線 ------
文本操作- 逆轉字元串——輸入一個字元串,將其逆轉並輸出。
- 拉丁豬文字遊戲——這是一個英語語言遊戲。基本規則是將一個英語單詞的第一個輔音音素的字母移動到詞尾並且加上後綴-ay(譬如「banana」會變成「anana-bay」)。可以在維基百科上了解更多內容。
- 統計母音字母——輸入一個字元串,統計處其中母音字母的數量。更複雜點的話統計出每個母音字母的數量。
- 判斷是否為迴文——判斷用戶輸入的字元串是否為迴文。迴文是指正反拼寫形式都是一樣的詞,譬如「racecar」。
- 統計字元串中的單詞數目——統計字元串中單詞的數目,更複雜的話從一個文本中讀出字元串並生成單詞數目統計結果。
- 文本編輯器——記事本類型的應用,可以打開、編輯、保存文本文檔。可以增加單詞高亮和其它的一些特性。
- RSS源創建器——可以從其它來源讀取文本並將其以RSS或者Atom的格式發布出去。
- 實時股價——可以查詢股票當前價格。用戶可以設定數據刷新頻率,程序會用綠色和紅色的箭頭表示股價走勢。
- 訪客留言簿/日誌——允許人們添加評論或者日記,可以設置開啟/關閉評論,並且可以記錄下每一條目的時間。也可以做成喊話器。
- 新聞和比分播報器——一個桌面應用,可以從網上收集新聞和比賽分數,將結果在屏幕上滾動播出。
- 占星羅盤——用占星術來預測每天的運程。
- 密碼簡訊——可以將數據加密解密,並能將其發送給朋友。
- 幫你挑禮物——輸入一堆你可能會送的禮物,當有人過生日時,該程序會隨機選擇一樣禮物。也可以加上一個額外功能,可以告知哪裡可以弄到這個禮物。
- HTML生成器——將 TEXT 文檔轉換成HTML文件,對製作網頁HTML文檔很有用。
- CD-Key生成器——利用某種演算法生成一個唯一的key。軟體開發者可以用它來作為軟體的激活器。
- 正則表達式查詢工具——用戶可以輸入一段文本,在另外的控制項里輸入一個正則表達式。運行以後會返回匹配的內容或者正則表達式中的錯誤。
網路
- FTP工具——與遠程網路伺服器交互文件。
- 原子鐘校時——從網上同步原子鐘時間。全世界有很多原子鐘,可以把它們都列出來。
- 聊天應用(IRC或者MSN風格的)——像IRC那樣的聊天室軟體或者MSN那樣的實時聊天軟體。更複雜一點的話,可以為聊天制定一套你自己的傳輸協議。
- 獲取當前天氣——獲取某個地區當前的天氣情況。
- P2P文件共享應用——像LimeWire、FrostWire、Bearshare或者torrent風格的應用。
- 埠掃描器——輸入某個ip地址和埠區間,程序會逐個嘗試區間內的埠,如果能成功連接的話就將該埠標記為open。
- 郵件檢查工具(POP3/IMAP)——用戶輸入一些賬號信息,包括伺服器、ip、協議類型(POP3或者IMAP),應用每隔一段時間就會檢查下該賬號下的郵箱。
- 數據包嗅探器——偵測電腦上進出的數據包,獲取諸如目的地和大小之類的信息。
- IP註冊地查詢——輸入ip地址,查詢該ip是在哪註冊的。
- Whois查詢工具——輸入一個ip或者主機地址,通過whois查詢並將結果返回。
- 郵編查詢——輸入郵編,返回使用該郵編的地區名稱。
- 遠程登入——遠程登入桌面類型的應用,可以查看和控制遠程電腦(假如你已經獲得許可權)。可能需要你自己的網路和兩台電腦來進行測試。
- 網站定時檢查器——每隔一段時間或者在預定的時間嘗試連接某個網站或者伺服器,來檢查它是否可以連上,如果連不上了會通過郵件或者桌面通知來告知你。
- 小型網頁伺服器——簡易版的網頁伺服器,可以存放包含Javascript和其它形式代碼的HTML文件。複雜一點的話可以嘗試流媒體視頻、創建一種伺服器端語言或者其它類型的流媒體。
- 網路蜘蛛——一個可以自動執行網頁上各種任務的程序,任務包括網站檢查、頁面抓取、數據摘要以及網路郵務。
類
- 產品庫存管理——創建一個管理產品庫存的應用。建立一個產品類,包含價格、id、庫存數量。然後建立一個庫存類,記錄各種產品並能計算庫存的總價值。
- 電影商店——管理錄像帶租借,記錄借出時間、到期時間、逾期費用。複雜一點可以生成逾期用戶的賬號報告。
- 航空/酒店預訂系統——創建一套預訂航班或酒店的預訂系統。不同的航班座位和酒店房間收費不一樣。譬如頭等艙要比經濟艙貴。帶閣樓的套間要更貴些。記錄下何時有空房可供預訂。
- 學生成績管理器——記錄一個班級的學生(創建一個Student類,記錄他們的名字、平均分和考試分數)和他們的成績等級。根據學生的測驗和作業的分數計算出平均分和成績等級。複雜一點可以將數據畫在貝爾曲線上。
- 銀行賬戶管家——創建一個名為「Account」的抽象類,有三個為「CheckingAccount」、「SavingsAccount」和「BusinessAccount」的子類。通過類似ATM的程序來管理這些賬戶的借貸。
- 館藏目錄——創建一個圖書類,記錄書名、頁數、國際標準書號、是否借出。用它來管理各種書籍,允許用戶進行借出和歸還操作。複雜一點的話,可以生成逾期圖書和逾期費用的報告。也可以讓用戶進行預約操作。
線程處理
- 下載進度條——創建一個表示下載進度的進度條。進度條由獨立的線程操作,通過委託來和主線程進行通訊。
- 下載管理器——允許程序同時下載數個文件,每個都用單獨的線程進行背景下載。主線程會關注下載進度並且在下載完成時通知用戶。
- 聊天軟體(遠程聊天)——做一個聊天軟體,允許你通過ip直接連接到另一台電腦,也允許你的「伺服器」程序處理多個請求連接。
- 批量縮略圖生成器——在進行圖片轉換的處理時會需要很多時間,尤其是圖片很大時。做一個圖片處理程序,能讓你在做其它事的時候在後台線程里將數百張圖片轉換成某個大小的圖片。複雜一點的話可以用一個線程來縮放,用另一個線程來為縮略圖重命名。
Web應用
- 所見即所得編輯器——創建一個在線編輯器,允許用戶移動元素、創建表格、書寫文本、設置顏色,而用戶不必懂HTML。就像Dreamweaver或者FrontPage。如果需要例子的話,可以參看DIC。
- 分頁瀏覽器——創建一個可以分頁的小型網頁瀏覽器,可以同時瀏覽幾個網頁。簡化一點的話不要考慮Javascript或者其它客戶端代碼。
- 文件下載器——該程序可以從網頁上下載各種資源,包括視頻和其它文件。用於有很多下載鏈接的網頁。
- 遠程登錄——創建一個遠程登錄的應用,可以通過網路登錄伺服器並能執行一些基本命令。
- 在線白板——做一個在線白板程序,你和朋友們可以一起在白板上進行一些操作,畫圖、寫字等等。
- 帶寬監視器——這個小工具可以記錄你已經在網上上傳和下載多少數據流量了。可以試著做份報告或者圖表來展示各時段的使用情況。
- 書籤搜集管理器——該程序可以讓用戶上傳書籤並將它們排序,去掉重複的,並能生成書籤文件以供Firefox/IE/Safari等使用。複雜一點的話可以試著將書籤整理進不同的文件夾。
- 密碼保險箱——用來記錄各種密碼,並且將它們加密,這樣別人就看不到了。
- iGoogle媒體播放器小部件——做一個iGoogle小部件,可以用來播放本地音樂列表,也可以每天分享一首歌。也許還可以讓別人看到你最近聽了些什麼歌。
- 基於文本的遊戲——做一個像Utopia那樣的文本RPG,遊戲中,你可以創建一個文明、收集資源、共鑄聯盟、施放法術、回合制系統。看看是否能夠統一王國。
- 定時自動登錄——做一個程序可以在預定的時間登錄進某個指定的網頁並且執行特定的動作,然後在登出。可以用來檢查郵箱、發布常規內容、為其它程序獲取信息。
- 電子卡片生成器——可以讓用戶製作自己的電子卡片並發送給其他人。可以使用flash也可以不用。可以使用圖片庫,也可以加上深刻的格言警句。
- 內容管理系統——像Joomala、Drupal、PHP Nuke這樣的內容管理系統。從簡單的做起,慢慢增加其它功能。
- 模板製作器——該網站應用允許用戶輸入各種顏色代碼、元素、尺寸,來為PHPBB、Invision Board、MySpace之類的應用創建模板文件。
- 驗證碼生成器——應該在登錄時見過有數字有字母的驗證碼圖片吧?這可以防止自動登錄和垃圾廣告。試著自己做一個,如果使用PHP的話,看下GD的圖片函數。
文件
- 試卷生成器——該程序可以從文件中隨機挑選出不同的題目生成一份試卷。每份試卷可以不一樣,通過讀取答案來給打分。
- 快速啟動——該工具可以添加各個程序的小圖標,點擊小圖標就可以運行程序。和Windows的快速啟動類似。
- 文件管理器——做一個文件管理器,要加些新特性,更佳的搜索功能、新圖標、新外觀。
- 文件記錄排序工具——從文件中讀取記錄,將其排序並寫迴文件中。允許用戶選擇排序風格以及排序關鍵字。
- 生成財務交易文件並且算出平均值——將財務交易讀進文件,按照賬戶分類、算出各項目的總量或平均值、理清各賬戶的借貸數據。
- Zip文件生成器——用戶輸入不同文件夾的文件,也許還包括其他電腦中的文件,然後程序將這些文件打包成zip文件。複雜一點的話,打包時對這些文件進行壓縮。
- PDF生成器——從txt、html或其它文件中讀取數據生成PDF文件。可以做成一個網頁服務,用戶上傳文件,返回一個pdf版本。
- 批量文件命名器——程序批量處理一些文件,將根據用戶提供的過濾器為它們重命名。譬如用戶輸入的過濾器為myimage###.jpg,那麼會生成至少包含3位數的文件名,譬如myimage001.jpg、myimage145.jpg,甚至是myimage1987.jpg,因為1987也滿足了至少包含3位數的條件。
- MP3標籤生成器——修改MP3文件的id3v1標籤。還可以試著在MP3文件的頭部加入id3v2的標籤,譬如album art標籤。
- 日誌文件生成器——該程序可以記錄指定事件的日誌。譬如程序做了什麼、系統在幹什麼、文件什麼時候被修改了。
- Excel分頁輸出器——做一個在線程序,可以讀取文件內容生成一個excel分頁。可以通過CVS或者其它文件格式來做。複雜一點的話看看是否能創建公式欄位。
- RPG角色屬性生成器——做一個程序來給RPG角色隨機分配屬性點數,可以由用戶制定一些分配規則。可以生成職業、性別、力量/魔法/敏捷點數、額外能力或者貿易技能。把結果保存成文件,這樣跑團的時候地下城主可以把它列印出來。
- 文件複製工具——該工具可以批量處理文件複製和備份操作。
資料庫
- SQL查詢分析器——該工具可以讓用戶輸入一條查詢命令,讓其運行於本地資料庫中。盡量讓它運行得更高效。
- 遠程SQL工具——該工具能讓你通過網路在遠程伺服器上執行查詢操作。它能接收遠程主機地址、驗證用戶名和密碼、執行查詢並返回結果。
- 卡片整理器——創建一個在線應用,用來記錄搜集到的卡片。可以讓用戶輸入整套卡片,查看哪些已經有了,哪些還需要搜集。要增加複雜度的話,還可以讓用戶知道還差多少可以完成,或者已經收集卡片的價值。
- 報告生成器——該工具可以根據資料庫中的表格生成一份報告。譬如根據訂單表格生成銷售報告。
- 資料庫備份腳本製作器——該程序可以讀取資料庫的對象、關係、記錄和步驟,生成一個sql文件,該文件可以導入另一個資料庫或者作為備份文件。
- 備忘錄——該程序可以讓用戶設置一個日期和某個事件的時間、事件備註並將它們放到日曆上。用戶可以查看日曆、搜索特定的事件。複雜一點的話,可以讓用戶設置重複發生的事件,譬如每天、每周、每月、每年等等。
- 預算記錄器——該程序可以記錄家庭預算。用戶可以添加支出、收入,計算一段時間內的收入和支出。複雜一點的話,讓用戶指定一個時間段,顯示該時間段內的家庭收支情況。
- 電話簿——記錄各種聯繫人和他們的號碼、郵箱、備註。複雜一點的話可以讓用戶連上網將電話簿發布到設置好的網站上。
- 電視節目記錄器——你是否有不想錯過的電視節目?但沒有錄像機或者想之後能找到該電視節目然後錄下來,那麼可以做個程序尋找各種在線電視導航網站,記錄下電視節目名稱、播放時間、播放頻道,存在資料庫中。資料庫或者網站到時就會發郵件提醒你,節目就快在某個頻道開始了。
- 旅行計劃系統——該系統可以讓用戶管理旅行路線,記錄下航班和酒店安排、感興趣的地方、預算和時間表。
- 實體關係圖生成器——該程序可以讓用戶整合實體關係圖,並將其保存起來,也可以用它來生成一些基礎SQL語句。
- 資料庫翻譯器(MySQL&<-&>SQL Server)——該工具可以從資料庫A讀取數據,生成資料庫B使用的SQL語句,將數據存入資料庫B。比較常用的是SQL Server和Oracle使用的MySQL伺服器。
- BBS論壇——為你和小夥伴們做一個論壇,可以發帖、管理、分享想法和構思。
圖像和多媒體
- 幻燈片——做一個以幻燈片形式顯示各種圖片的程序。為了增加難度可以做些額外的效果,譬如漸進檢出、星型擦除、窗口漸隱。
- 思維導圖——允許用戶記錄下各種構思並且快速地進行頭腦風暴將這些構思整合到一張思維導圖中。越快越好,因此要讓用戶能迅速地寫下構思,然後將其拖到可視的導圖中去,將構思之間的關係展現出來。
- 導入圖片並存成灰度圖——該工具將圖片上的彩色除盡並保存。可以增加對比度調整、色化等額外功能以增加複雜度。
- 在線流媒體視頻——試著自己做一個在線流媒體視頻播放器。
- MP3播放器(以及其他格式的音樂播放器)——該小程序用來播放你最愛的音樂文件。複雜一點的話看看能否加個播放列表功能和均衡器。
- 批量圖片處理——該程序可以將一個文件夾內的圖片進行統一的處理,譬如降低圖片色調、轉換格式或者修改文件屬性。還可以嘗試給圖片增加標籤。
- CD燒錄器——可以輕鬆燒錄CD的工具。
- YouTube下載器——可以從http://Youtube.com上下載視頻到硬碟中,要支持包括FLV和AVI在內的文件格式。
- 牆紙管理工具——做一個管理牆紙的程序,可以定時更換刷新牆紙,也可以針對解析度進行縮放。
- 截屏程序——做一個可以截屏的工具,複雜一點可以增加一個轉發郵件的功能。
- 圖片瀏覽器——該程序可以查看電腦上各種格式的圖片,譬如PNG、GIF、JPG、BMP、TIFF等等。
- 交通信號燈——試著做一個交通信號燈並且把它放到可以互動的場景中。不要讓汽車闖紅燈或者撞到其它車。
- MP3-WAV轉換器——MP3格式本質上就是壓縮版的WAV。試著將MP3轉換成WAV格式以供可以處理WAV格式的程序使用。請記住1MB的MP3大約等於10MB的WAV。
- 簽名生成器——是否在網上見過有人的留言後面有條生成的簽名?試著做個程序讓用戶可以指定背景、文字、顏色和對齊方式來定製一個簽名檔。
- 屏保——電腦空閑時會運行的屏保程序。簡單版的可以使用一些標準圖片,複雜版的可以做出能在屏幕上轉來轉去的3D物體。
- 水印——你是否想保護你圖片的版權?在圖片上加上標誌或者文字,這樣別人就不能輕易地從你網站上盜圖了。做一個程序來給你的圖片加上水印吧。
- 海龜圖——創建一個20*20的格子,用命令讓一隻海龜在格子上畫線。可以前進、左轉、右轉,拿起或放下筆等等。複雜一點的話,允許程序從文件中讀取命令列表。可以在網上了解到更多關於「海龜圖」的信息。
遊戲
- 戰船——創建兩塊遊戲面板,玩家各佔一邊,在上面放置一些戰船,玩家看不到對方的面板。每艘船都占幾個格子,玩家輪流攻擊某個格子,如果格子上有船,那就命中目標,否則就是未命中。當一艘船所佔的所有格子都被攻擊命中了,那麼船就被擊沉。誰先將對方戰船全部擊沉就獲勝。
- 象棋跳棋——象棋或者跳棋遊戲。可以試著做成可以聯網玩,用圖形用戶界面來實現悔棋、保存走棋過程並且可以回放。
- 劊子手——從文件中隨機選擇一個單詞,讓玩家猜單詞中的字母。旁邊是一幅隱藏的行絞刑的畫,猜錯一個單詞,畫就顯示出一部分。畫全部顯示出來時還沒能猜全的話玩家就輸了。
- 填字遊戲——創建一個填字遊戲,並為每個詞提供一個提示信息,讓玩家填上所有正確的單詞。
- 青蛙跳——讓青蛙跳過河或者馬路,過河的話要跳在順流而下速度各異的木頭或者睡蓮葉子上,過馬路的話要避開速度各異的車子。
資料庫
設計與使用:各種信息管理系統、不同類型的Web應用及其存儲方案。。理解與實現:k-v存儲系統、、xx語言的Redis Client、MySQL存儲引擎、小型關係型資料庫。。參加Sigmod比賽。。計算機網路
區域網工具:聊天、文件傳輸、聯機對戰。。
客戶端:FTP、郵件、。。各種爬蟲:P2P種子搜索、網站爬蟲、全網爬蟲。。網路協議:Wireshark花式玩法、各種網路命令實現、用戶態協議棧實現。。組網:中小型千兆網吧組建、校園網網路規劃等等(用模擬器)。。。編譯原理、程序語言理論
前端:各種詞法、語法分析;各種自動生成器的實現;C++/Scala各種新特性的實現(。。)。。自製解釋/編譯器(FP向):演算 -&> 簡單類型演算 -&> 擴展的類型化演算 -&> ML/Haskell子集自製解釋/編譯器(其他):Scheme/PL0 -&> Oberon/Tiger -&> Tiny JS/Java...貢獻xx項目:如LLVM的指針分析模塊、GCC的xx平台移植、MLton的Supercompilation(逃。。)
操作系統
各種小工具:進程管理器、常用命令。。模擬文件系統 各種進程調度的模擬:先來先服務、優先權調度、時間片、多級反饋隊列等並發控制典型案例及其演算法實現:哲學家共餐、生產者-消費者、銀行家。 修改內核:比如增加內核調用各種演算法的並行化實現自製OS(如基於Nachos、Weenix)。。計算機組成原理、體系結構
3-8 解碼器,xx器
交通燈控制、電梯控制、洗衣機控制。。簡單運算器、控制器的設計、實現將運算器、控制器組成簡單CPU給CPU增加高級功能(流水線、超標量、亂序執行等等) 設計核間的一致性協議(用Gem5等模擬器) 找一個科學計算類的程序,逐步優化:考慮內存層次、並行、向量化等改OpenSPARC。。。圖形學、機器學習等省略Lisp 解釋器(
CS四大最愛:詞法分析器,腳本解釋器,區域網聊天工具,學生信息管理系統。
如果一個本科生可以寫出一個小資料庫, 支持不同的存儲模型, 再配上基本的查詢語句支持, 做個簡單的查詢優化器, 寫個客戶端, 還可以增加對事務的支持, 還可以支持分散式事務, 支持不同的一致性粒度, 加個sever間的負載均衡啊, 高可用啊, 心跳啊, 流控啊, 內嵌個http sever用於監控啊, 等等, 我覺得可以用到本科階段的幾乎所有基礎知識。
以上看起來很多, 其實只做簡單的功能實現, 不用追求工業級標準, 代碼量不算多。反正肯定沒有 10W 行。有兩個要點: 不要用第三方庫, 存儲引擎用c或者c++, 練習一下手動內存管理。不然起不到鍛煉作用了。我一直覺得寫個這樣的資料庫最適合本科生鞏固所學的。
補充一下:
詞法分析器無聊透頂。寫個小內核的話, 知識點覆蓋不全面。要是覆蓋全的話, 難度大了點。寫解釋器要是不支持 continuation 和自定義語法, 模式匹配... 這些高級特性, 用C或者LISP沒啥區別。代碼也沒幾行。寫個翻譯器倒是很有意思, 比如 scheme2c, ocaml2js之類的。要是學過數字電路, 用 Verilog 之類的語言寫個小CPU也很有趣。利用 Reinforcement Learning 演算法寫個 Flappy Bird 的通關程序
奇怪大家興趣點果然不一樣,我印象里的開發小遊戲練手四大天王是:
山寨貪食蛇,山寨俄羅斯方塊,山寨坦克大戰,山寨超級馬里奧。
不過這幾年似乎更流行做山寨連連看,山寨寶石迷陣,山寨flappybird、山寨2048。
PS:我不是CS專業的。
再PS:一般來講相關專業學生分兩類,一類是能憑興趣做出 @王鵬說的東西或者我說的東西的,一類是卡在大boss「用for循環和printf在屏幕上用*擺出各種圖形」不百度就掛科的。pintoes
寫個編譯器。
不知道什麼是經典,就一路這麼過來,從老師讓開發的項目到後來自己想做的項目,貌似每一屆的人都是這樣過來的
1、計算器,大學那會兒,開發的第一個項目就是計算器,因為項目簡單,非常適合新手入門學習,這裡有多個計算器項目,是用不同語言寫的:
Java - Java版的計算器C/C++ - C語言製作簡單計算器Python - Python開發簡單計算器使用flex和bison實現一個計算器
Android - Android手機上的計算器實現2、然後什麼簡單博客啊、留言本啊、記事本啊、簡單的論壇之類的,貌似也是必選的項目啊:
PHP - PHP留言本Java - Java實現記事本NodeJS - Node.js實現私人筆記Java - Java日記軟體——記錄生活每一天NodeJS - 用NodeJS打造一個簡單的博客Python - Flask開發輕博客NodeJS - Meteor+Angular實現輕論壇3、再後來學的貌似多了一點,想要有一點小互動,就有什麼聊天室之類的
Python - Python聊天室HTML5 - 基於Server-Sent Event的簡單聊天室Java - Java和WebSocket開發網頁聊天室C/C++ - C語言利用epoll實現高並發聊天室4、再後來吧,就想把自己所學的在實際生活中應用出來,所以就會自己倒騰各種比較好玩的小項目
C/C++ - C語言實現ping程序Python - 基於 Python 的文件備份PHP - ThinkPHP實現雲書籤PHP - 轉盤抽獎Web - 親戚稱謂計算器Python - 基於scrapy爬蟲的天氣數據採集(python)Web - Ajax歌詞同步播放器C/C++ - 酷炫OpenGL旋轉地球模型C/C++ - dialog+ncurse實現命令行帶提醒功能計時器Python - scapy編寫簡單的ARP掃描腳本Python - 簡單的http代理伺服器Python - pygame開發打飛機遊戲Linux - GTK開發視頻播放器NoSQL - 120行代碼實現簡單的即時搜索NodeJS - Node.js實現簡單爬蟲Web - JavaScript實現玫瑰花太多了……當然上面貼出的項目,我好多技術領域也沒學,只是給大家一個參考,不知道做什麼項目的時候可以去各大IT學習網站看看,什麼慕課啊、實驗樓啊之類的,上面有很多項目,看著看著就知道自己想做什麼,對什麼感興趣了……Hello world
個人傾向把CS分成三類:理論,系統,應用
理論方面可以做個常見演算法和數據結構的實現與可視化,比如VisuAlgo - visualising data structures and algorithms through animation
系統方面可以自己動手從零寫個操作系統,參考自己動手寫操作系統
應用方面可以選擇一個領域做個聚焦爬蟲,給用戶提供實時航班價格比較,酒店價格比較等等
以上是本人嘗試做過的三件事,總的來說趣味性很強,而且」實用性「也很強,對你找工作都會有很大幫助。有人提到了寫編譯器,這個確實很鍛煉人,我也寫過一個不完整的Scheme編譯器,由於興趣原因沒法堅持寫,可能是個人功利性較強,沒法沉下心鑽研技術吧。女生顏值比較網站(參考facemash)
環宿舍樓偷拍四軸飛行器教務處系統篡改腳本教師U盤課件盜取木馬舍友路由器抓包分析器ftp你懂得資源分享站……突然感覺學CS的學生好歡樂有木有問問其他學校的小學期,大作業,課程project都做的啥不就完了
https://github.com/justjavac/Programming-Alpha-To-Omega
graphics的ray tracer,還可以順便練習C++。