一年前,我發表了“每個程序員都應該嘗試的項目”一文。文中列出了每個程序員都應該去嘗試的項目,包括一個文本編輯器、太空入侵者游戲、一個 BASIC 編譯器、一個小型的操作系統、一個電子表格和一個視頻游戲控制臺模擬器。這篇文章在網上爆紅,一個月內瀏覽量超過 10 萬次。
現在,我要加入更多“現代”的項目:
- 光線追蹤器
- 鍵值存儲Web API
- Web瀏覽器
- 股票交易機器人
光線追蹤者
它是 3D 圖形!在發表前一篇文章后,我收到很多評論,建議加入光線追蹤器。我同意了他們的建議。事實上,這是我在 2009 年學習 C#時最先嘗試的一個項目。如果你無法馬上理解所有與數學相關的東西或術語,請不要擔心,你可以循序漸進,努力取得進步。網上有很多關于光線追蹤器的資源優勢,在學習過程中,你會獲得強烈的視覺感受。

光線跟蹤器可以生成一些非常好看的圖像,只需要 300 行代碼!首先,你可能需要支持各種反射、光線和紋理,或者你開始意識到原來渲染一張圖片需要幾分鐘,所以你開始優化。你可以使用線程并行化光線追蹤器、減少交集的數量,或者使用分析器來跟蹤分配了多少對象并找出瓶頸。
創意!我不想再去做另一個優化到半路的光線追蹤器,也不想追求超現實的折射效果。相反,我特意降低了分辨率,這樣就可以做出實時動畫。一個帶有下落粒子旋轉圓環的動圖可以讓你在推特上獲得不少點贊。我認為獨立游戲可以走這條路,創造出獨特的藝術風格。請期待我的 8 位復古視頻游戲!
更多資料:
- 系列書籍之“Ray Tracing In One Weekend”
- 《計算機圖形程序設計入門》
- 計算機圖形入門
- 用Python開發光線跟蹤器
- Go光線追蹤器優化
- 用JAVAScript實現實時的光線追蹤
- 層次包圍盒結構
- 光線追蹤寶石
- 光線追蹤器挑戰
- 實時渲染
鍵值存儲 Web API
鍵值存儲實際上就是一個字典。向它提供一個鍵,它就返回一個值。你可以添加新鍵、刪除鍵或更新值。實際上,這就是一個 NoSQL 數據庫!不過你可以更進一步,將其作為 Web API,這樣你未來的所有 Web 應用程序都可以使用你的數據庫服務。
我真的很喜歡這個項目,因為用它來創建最基本的“數據庫”真的很容易。你可以從使用任何一門編程語言所提供的字典數據結構開始,并在這個基礎之上添加一個 Web API。除此之外,你還可以添加更多的內容:性能優化、安全性和多用戶、原子事務、數據類型、批處理操作、持久性、故障恢復,以及跨多個服務器運行能力。很快,你就會擁有像 redis 或 Amazon DynamoDB 那樣價值 10 億美元的產品。
說真的,打開你的代碼編輯器,并使用你最喜歡的編程語言嘗試一下。為了獲得不同的體驗,我用 Go 和 Racket 試過了,并從中獲得了很多啟發。在一些小型的測試中,我的 Go 版本的性能已經足夠好了。
更多資料:
- 鍵值數據庫
- B樹數據結構
- 原子性
- 如何使用Go構建一個鍵值存儲
- Badger:超快的Go鍵值數據庫
- 如果你想深入了解數據庫,可以看看這本《自己動手設計數據庫》
Web 瀏覽器
第一次面試一個軟件開發崗位時,面試官問我:“當你在瀏覽器上輸入 Yelp.com 并按回車鍵時,都發生了什么”?我回答得不好,沒有通過面試。于是,我開始了解萬物運作原理的旅程。我發現最有趣的是瀏覽器如何將 html 和 css 轉換成渲染好的 Web 頁面。這是一個很常見的面試題,但我卻因為太無知沒有回答好。有一個非常棒的資源,它為很多問題提供了答案。
想要設計出一些足以擊垮 Safari 或 Brave 的殺手級用戶界面?不要抱太大希望了。在你達到那個目標之前,還有很多事情要做!不如讓我們來縮小一下范圍,假設你有一個 HTTP 庫和一個 HTML 解析器,你必須實現自己的渲染器。你不能使用 WebBrowser 或 WebKit 之類的東西。你會怎么做?

我的建議是從創建一個基于文本的 Web 瀏覽器開始。實際上,你也可以忽略所有的格式化問題,忽略所有的 JavaScript 和 CSS。你要做的是使用給定的 URL 執行 HTTP GET,解析 HTML,找到需要顯示的文本,并將其顯示在屏幕上。你要做的就是這些。
獲得純文本之后,你就可以添加其他功能了。你可以添加標簽、歷史、后退和前進按鈕,等等。但到了某個時候,你可能想要的不只是文本……那么祝你們好運。渲染網頁視覺元素可能是我永遠不會去嘗試的事情,或許要等到我有用不完的時間。一步一步來,每次只關注一個 HTML 標記和屬性。如果你想嘗試這么做,請讓我知道是如何進行的。
更多資料:
- Browsh:一個基于文本的瀏覽器
- HTML標準
- Mozilla的HTTP文檔
- 讓我們來構建一個瀏覽器引擎
- Web瀏覽器工程
股票交易機器人
現在,你有機會構建一些理論上可以讓你變得富有的東西:股票交易機器人!構建一個基礎的交易機器人是非常簡單的,你可以添加無窮無盡的功能。你甚至不需要了解任何與投資有關的知識。在這個過程中,你至少可以學到如何利用不同的 Web API、如何處理數據,并應用現有或創建自己的交易策略。你可以使用大量的歷史數據來測試它。
這樣還不夠?那就用上機器學習或搭建一個Twitch流,讓陌生人來控制你的錢。

這是一個基礎的交易機器人開發路線。首先,找出幾家你感興趣的大公司(如蘋果、特斯拉和 Target)。第二,確定何時買進、何時賣出。例如,如果當前價格達到 52 周低點就買入,如果達到 52 周高點就賣出。(千萬不要把這個策略用在實際當中,這個策略其實是個愚蠢的策略)。第三,弄清楚如何使用一個免費的 API 來獲取股票數據。第四,建立測試環境,讓它跑起來!
現在可以找樂子了……使用歷史數據進行自動化測試,實現幾十種交易算法,并對它們進行比較,添加可視化,使用 API 連接到真正的券商服務器,嘗試一些機器學習或進化算法,并將成功的交易結果共享到 Twitter 上。
更多資料:
- 交易信號
- trump2cash:一個交易機器人
- Q學習
- 如何從零開始構建一個股票交易機器人
- 免費構建一個人工智能股票交易機器
- 如何用Python構建算法交易機器人
- 羅賓漢API指南
原文鏈接:
https://web.eecs.utk.edu/~azh/blog/morechallengingprojects.html