寫什么程序最能練技術?
1. Hello World - 因為.. 其實沒有特別的原因。每個人都把它作為自己的第一個程序。
2. Fizz Buzz – 據說它被用來過濾掉大部分的面試候選人。那么為什么要冒著風險面試呢?這會教你基本的數學、條件和循環。
3. 二分搜索-遞歸的一個很好的入門。讓你熟悉數組和函數。
4. 合并排序- 分而治之。這會有助于你編寫代碼。
然后就是根據你從事或想要從事的領域,選擇更合適的程序練習。avid Edwards(美國密蘇里州,西北密蘇里州立大學,Vendavo首席技術官):
嘗試解決以下問題,這肯定會提高您作為軟件工程師的技能。
為一個簡單的 LL 語法編寫一個編譯器,其中包括一個分詞器、解析器和代碼生成器。它是許多基本構建塊的綜合。
在你選擇的語言集合庫中實現符合映射接口的哈希映射。它讓你了解不尋常的數據結構。
blocking thread-synchronous隊列。它可以教你一些關于并發和線程同步。
Martin Michelsen(美國加州,加州理工學院畢業生,Quora軟件工程師,30年編程經驗):
對于對系統和基礎架構感興趣的人(如我),我建議你積累一些經驗:
網絡
寫一兩個服務器。簡單的靜態文件HTTP服務器或SMTP服務器是一個很好的開始。如果您想進入并發,寫一個多線程IM服務器或游戲服務器,構建一個無服務器的本地聊天服務。
存儲
構建一個簡單的文件系統。FUSE可以為你抽象出內核接口;你所要做的就是實現基本的文件系統功能。以一致的、可靠的和可擴展的方式扁平化復雜的目錄結構并不容易,需要考慮很多邊緣情況。
Assembly
即使你從來沒有在實際項目中計劃使用它,了解計算機的實際工作原理也是至關重要的。用匯編語言編寫一個簡單的程序或算法——比如,快速排序。盡量優化它。還要實現setjmp()和longjmp()——這可以讓你打破你從高級語言中學習到的規則。
操作系統概念。
編寫malloc()和free()并不像你想象得那么容易。你會學到很多關于鎖定和并發的知識。
語言。
為一種語言編寫編譯器/解釋器。甚至可以設計自己的語言。生成工作代碼是一個很好的開端,但如果可以,嘗試優化生成的代碼。
對于對游戲開發感興趣的人,我可以推薦一套不同的:
繪圖。
編寫一些簡單的OpenGL程序。