哪些程序是每一個程序員都應該嘗試的
英文原文:What are some programs every programmer should make at least once?
在 Quora 上有這一個討論:“哪些程序是每一個程序員都要寫的?”PHP100 在這里為大家整理了一些較為完整的答案,僅供參考。
認準自己喜歡什么
如果你像我一樣,對系統和底層結構感興趣,我推薦你嘗試下面的事情:
網絡設計:編寫一兩個服務器程序,可以從靜態文件 HTTP 服務器或者一個 SMTP 服務器開始。如果你想深入了解并發性,那就學習些一個多線程的 IM 服務器或游戲服務器。再進一步的話,就試著實現節點探索系統,并用它去做一些有用的事情,比如在無服務器情況下實現局域聊天的服務。
存儲系統:創建一個簡單的文件系統。FUSE 可以幫助你抽象出內核的接口,你要做的就是實現基本的文件系統功能。一致,可靠并可擴展的轉化一個復雜的路徑結構不是一件簡單的事,而且還有很多邊界情況需要你去考慮。
匯編語言:即使你沒有打算在一個實際的項目中用上它,你也需要了解計算機是如何工作的。用匯編語言寫一個程序或算法(比如快速排序),然后嘗試去優化它。接著實現 setjmp ()和 longjmp (),可以讓你對它們有新的理解,和你在高級語言中學到的內容是不同的。
操作系統的概念:寫一個 malloc ()和 free ()函數可能沒有你想得那么簡單。你思考過它們為什么有時候會失敗嗎?寫一個線程的調度算法,你就會明白很多關于鎖和并發的問題。
語言:為某一種語言寫一個編譯器或解釋器,甚至你可以創造你自己設計的編程語言。寫出可以執行的有效代碼是一個好的開始,下一步就盡可能地優化它們。
對于那些對游戲開發感興趣的朋友,我推薦你做另外一些嘗試:
圖像與圖形:你肯定希望你的游戲界面很好看,那就學習寫一些簡單的 OpenGL 程序。先做一個旋轉的立方體,然后對它加一些可以互動的東西。根據規則,做一些東西,然后用提供的函數讓它看起來像其他的東西,比如熾熱燃燒的羽毛或雨 滴。只要你有足夠的想象力,你就可以在屏幕上創造任何的形象。
操作系統概念:游戲大多有著復雜的系統,系統中的每一件事都要在特定的時間以特定的方式展現出來。游戲的背后有很多玩家看不到的東西,但是游戲的設計者必須可以響應玩家在游戲中的請求。
網絡設計:如果你希望人們可以在不同的機器上一起打游戲,你就要想出一種方法實現他們之間的聯系。要設計一個快速,允許再擴展的協議。
安全性:玩家總想通過作弊取的好成績,所以安全性在這里就顯得很重要。提前想到玩家可能對你程序的修改,然后建立一些規則限制他們這樣去做。比如,雖然你不能阻止玩家讀取游戲的內存,但你可以通過經常移動那些敏感的數據,讓它變得很難。
人工智能:大家都喜歡和其他人一起玩游戲,或許你可以讓他們和機器人一起進行游戲。
上面只是提到了兩個方向,或許你是對數據處理,網頁設計或計算機視覺感興趣,你也可以嘗試在那些領域的項目和技術。
如果你想學的更多,那就寫一個編譯器吧
編譯器里可以學到:
1. 詞法分析和語法分析;
2. 匯編語言;
3. 優化代碼;
我會學習這些:
1. 服務器/瀏覽器/代理服務
2. 優化編譯器
3. 垃圾回收機制
4. 內存分配
5. 命令解析器(shell)
6. 驅動
7. 編輯器
8. 生成文件
9. Lambda calc 解釋器
每一個程序員嗎?反正我會從這些做起:
1. Hello world;
2. 寫一個基本的程序:打印1-100 中除了可以被 3 整除的所有整數;
3. 一個要用到數組的程序;
4. 一個要自己寫函數的程序;
我認為其它的建議都過于高級了,特別是對于那些非軟件工程師,只是在其他行業中用簡單的程序實現某一目的罷了。
譯文:http://www.php100.com/html/it/focus/2014/1105/7718.html
(翻譯:PHP100_Zeroing)