轉(zhuǎn)載-每個程序員都應(yīng)該嘗試的挑戰(zhàn)性項目

作者:量子位
鏈接:https://www.zhihu.com/question/26436364/answer/937824533
來源:知乎
著作權(quán)歸作者所有沪羔。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)蠕搜,非商業(yè)轉(zhuǎn)載請注明出處泰涂。

文本編輯器

不使用GUI框架中內(nèi)置的文本框組件缴挖,要如何搭建支持光標移動究抓、選擇、插入和刪除操作的文本框笔链?

這個項目中纱注,存在兩個主要挑戰(zhàn):

  • 如何將文本文檔存儲在內(nèi)存中
  • 學(xué)習(xí)文本光標在流行的編輯器中的行為

不要小看這些基礎(chǔ)的功能,其中有許多細節(jié)值得注意税稼。比如當光標位于文本當中烦秩,按下向上箭頭,光標會移動到何處郎仆?

image

[圖片上傳失敗...(image-531e3e-1578808750433)]

△圖源:Austin Z. Henley

如果你覺得這太簡單只祠,還有進階測試:

  • 撤銷/重做
  • 自動換行

最后總結(jié)一下知識要點:

  • 用于存儲文本的數(shù)據(jù)結(jié)構(gòu):數(shù)組,rope扰肌,gap buffer抛寝,piece table
  • 文本光標的行為和實現(xiàn)
  • 撤銷/重做的設(shè)計模式:記憶,命令
  • 分離文本視覺和記憶的抽象

別忘了還有拓展閱讀喲:


image
image

2D游戲-太空侵略者

即使是最簡單的游戲也需要考慮數(shù)據(jù)結(jié)構(gòu)和設(shè)計模式。

在這個項目中盗舰,你的任務(wù)是從頭到尾實現(xiàn)一個定義明確的游戲晶府。最好使用SDL,SFML钻趋,PyGame這樣的2D圖形庫川陆。

第一步,創(chuàng)建對象移動的效果蛮位。

第二步较沪,了解有關(guān)游戲循環(huán)的所有信息。游戲?qū)嶋H上是在繪圖失仁、獲取用戶輸入和處理游戲邏輯之間循環(huán)购对。

第三步,處理用戶輸入陶因。

第四步,學(xué)習(xí)如何創(chuàng)建和管理所有游戲?qū)ο蠹捌錉顟B(tài)垂蜗。比如如何生成動態(tài)數(shù)量的敵人楷扬。

第五步,學(xué)習(xí)如何應(yīng)用游戲的邏輯贴见。子彈頭位置何時更新?什么時候會有更多敵人出現(xiàn)在屏幕上?怎么判定敵人被干掉了稿黍?游戲何時結(jié)束暇番?

甚至,在進階階段档悠,你還可以考慮引入AI廊鸥,來制造更加“智能”的敵人。

編譯器-Tiny BASIC

從頭開始編寫一種非常小的類似于BASIC的語言編譯器辖所,然后將其編譯為任何其他語言惰说。比如,用Python編寫可以輸出C#代碼的Tiny BASIC編譯器缘回。

image
image

△圖源:Austin Z. Henley

知識點:

  • 詞法分析
  • 句法分析
  • 遞歸下降解析
  • 抽象語法樹
  • 語義分析
  • 優(yōu)化passes
  • 代碼生成

迷你操作系統(tǒng)

從這個項目開始吆视,難度就加大了。

操作系統(tǒng)依賴于硬件酥宴,因此入門門檻比較高啦吧。但這個項目可以幫助你更好地理解計算機底層都發(fā)生了什么。

作者亨利推薦了一本免費電子書《使用Rust構(gòu)建RISC-V操作系統(tǒng)》作為入門教材(地址見文末)拙寡。

image
image

△圖源:Austin Z. Henley

知識點:

  • 交叉編譯
  • Bootloading
  • BIOS中斷
  • x86模式
  • 內(nèi)存管理和分頁
  • 排程(Scheduling)
  • 文件系統(tǒng)

如果以上四個項目授滓,你都覺得so easy,那么就來嘗試一下最后這兩個高難度項目吧。

電子表格

電子表格應(yīng)用程序(如Excel)將文本編輯器和編譯器的挑戰(zhàn)結(jié)合在了一起褒墨。

在這個項目中炫刷,你需要學(xué)會如何在內(nèi)存中表示單元格內(nèi)容,并實現(xiàn)用于方程式的編程語言解釋器郁妈。

電子游戲機模擬器

這是一個操作系統(tǒng)+編譯器的二合一挑戰(zhàn)項目浑玛。

挑戰(zhàn)內(nèi)容是,編寫一個虛擬機噩咪,讓虛擬機可以像真實的CPU和其他硬件組件一樣運行顾彰。

亨利的建議,是從簡單的虛擬控制臺入手胃碾,比如CHIP-8涨享。

網(wǎng)友建言獻策

博客一出,在Hacker News仆百、Reddit上受到了廣大碼農(nóng)們的歡迎厕隧。

有網(wǎng)友說:

這些項目能讓我接觸到完全不同的領(lǐng)域和問題,比我日常的工作更能激勵我俄周。

并且吁讨,網(wǎng)友們紛紛建言獻策,又推舉出好幾個優(yōu)質(zhì)上手項目:

  • 從零搭建數(shù)據(jù)庫
  • 光線追蹤器
  • 矢量圖形編輯器
  • 圖像解碼器
  • 網(wǎng)頁聊天室
  • pi計算器的位數(shù)
  • 通用終端實用程序(如grep)
  • FTP客戶端和服務(wù)器

所以峦朗,這些項目是否激發(fā)了你的靈感建丧?

Talk is cheap. Show me the code. 快動手練起來吧~

傳送門

博客地址:
http://web.eecs.utk.edu/~azh/blog/challengingprojects.html

Hacker News討論(內(nèi)含更多項目推薦):
https://news.ycombinator.com/item?id=21790779

《使用Rust構(gòu)建RISC-V操作系統(tǒng)》:
http://osblog.stephenmarz.com/index.html

發(fā)布于 2019-12-16

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市波势,隨后出現(xiàn)的幾起案子翎朱,更是在濱河造成了極大的恐慌,老刑警劉巖尺铣,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拴曲,死亡現(xiàn)場離奇詭異,居然都是意外死亡凛忿,警方通過查閱死者的電腦和手機疗韵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侄非,“玉大人蕉汪,你說我怎么就攤上這事〕言梗” “怎么了者疤?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長叠赦。 經(jīng)常有香客問我驹马,道長革砸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任糯累,我火速辦了婚禮算利,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泳姐。我一直安慰自己效拭,他們只是感情好,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布胖秒。 她就那樣靜靜地躺著缎患,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阎肝。 梳的紋絲不亂的頭發(fā)上挤渔,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音风题,去河邊找鬼判导。 笑死,一個胖子當著我的面吹牛沛硅,可吹牛的內(nèi)容都是我干的眼刃。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼稽鞭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了引镊?” 一聲冷哼從身側(cè)響起朦蕴,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弟头,沒想到半個月后吩抓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡赴恨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年疹娶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伦连。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡雨饺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惑淳,到底是詐尸還是另有隱情额港,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布歧焦,位于F島的核電站移斩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜向瓷,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一肠套、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猖任,春花似錦你稚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至室琢,卻和暖如春乾闰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盈滴。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工涯肩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巢钓。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓病苗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親症汹。 傳聞我的和親對象是個殘疾皇子硫朦,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容