哪些程序是每一個程序員都應該嘗試的

jopen 10年前發布 | 6K 次閱讀 程序員

  英文原文: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)

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!