每个程序员都应该尝试的项目

一年前,我发表了“每个程序员都应该尝试的项目”一文 。文中列出了每个程序员都应该去尝试的项目,包括一个文本编辑器、太空入侵者游戏、一个 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,找到需要显示的文本,并将其显示在屏幕上 。你要做的就是这些 。


推荐阅读