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程序。