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

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

    获得纯文本之后,你就可以添加其他功能了。你可以添加标签、历史、后退和前进按钮,等等。但到了某个时候,你可能想要的不只是文本……那么祝你们好运。渲染网页视觉元素可能是我永远不会去尝试的事情,或许要等到我有用不完的时间。一步一步来,每次只关注一个 HTML 标记和属性。如果你想尝试这么做,请让我知道是如何进行的。

    更多资料:

  • Browsh:一个基于文本的浏览器

  • HTML标准

  • Mozilla的HTTP文档

  • 让我们来构建一个浏览器引擎

  • Web浏览器工程

  • 股票交易机器人

    现在,你有机会构建一些理论上可以让你变得富有的东西:股票交易机器人!构建一个基础的交易机器人是非常简单的,你可以添加无穷无尽的功能。你甚至不需要了解任何与投资有关的知识。在这个过程中,你至少可以学到如何利用不同的 Web API、如何处理数据,并应用现有或创建自己的交易策略。你可以使用大量的历史数据来测试它。

    这样还不够?那就用上机器学习或搭建一个Twitch流,让陌生人来控制你的钱。

    这是一个基础的交易机器人开发路线。首先,找出几家你感兴趣的大公司(如苹果、特斯拉和 Target)。第二,确定何时买进、何时卖出。例如,如果当前价格达到 52 周低点就买入,如果达到 52 周高点就卖出。(千万不要把这个策略用在实际当中,这个策略其实是个愚蠢的策略)。第三,弄清楚如何使用一个免费的 API 来获取股票数据。第四,建立测试环境,让它跑起来!

    现在可以找乐子了……使用历史数据进行自动化测试,实现几十种交易算法,并对它们进行比较,添加可视化,使用 API 连接到真正的券商服务器,尝试一些机器学习或进化算法,并将成功的交易结果共享到 Twitter 上。

    更多资料:

  • 交易信号

  • trump2cash:一个交易机器人

  • Q学习

  • 如何从零开始构建一个股票交易机器人

  • 免费构建一个人工智能股票交易机器

  • 如何用Python构建算法交易机器人

  • 罗宾汉API指南

  • 原文链接:

    https://web.eecs.utk.edu/~azh/blog/morechallengingprojects.html

(0)

相关推荐

  • web端的数据库,你会用吗?(干货注意收藏)

    WEB前端开发社区 1周前 前言 做为有着多年前端开发者,深知前端的技术迭代较快日新月异,在平日里主要把精力放在ES6.TypeScript以及Vue和React等前端的流行技术栈上,对web端的数据 ...

  • 50年长盛不衰,SQL为什么如此成功?

    关系数据模型于 1970 年推出,并已占据主导地位 50 年.它为什么如此成功?这要归功第一性原理和布什内尔定律. 1971 年 3 月,英特尔推出世界上第一款通用微处理器--英特尔 4004.它有约 ...

  • 那些 40 岁的程序员都去哪了?

    前些时候北京市政府做了一个关于 996 的调研,第一时间我参与了调研,同时发到所有读者群,让大家一起发声. 不少朋友开始热烈的讨论起来,有人很乐观认为这是改变的开始,也有人觉得这就是走一个形式.不管怎 ...

  • 神级程序员都用什么工具?2020 年度开发工具 Top 100

    本文经授权转自公众号CSDN(ID:CSDNnews) 作者 | StackShare Team 译者 | 李磊 在过去的 2020 年,诞生了哪些新的开发工具?最优秀的开发工具和开发服务是什么?神级 ...

  • 为什么说 80% 的程序员都缺乏基本功?

    昨天我在 InfoQ 上看文章的时候,看到了 InfoQ 对熊节老师的专访.感觉这篇文章说的非常有意思,大致说: 有人说:"初级程序员才比招式,高级程序员只看内功." 什么是基本功 ...

  • 别不信,98%的程序员都是这样的

    故事 上周有事回北京一趟,恰好小老弟没上班,便约起来聚聚.酒过三巡时,他突然露出失落的表情,我忙问为什么,才知道他最近正在找工作,面试的过程让他身心俱乏. 18年毕业之后,他就进了一家小公司从事jav ...

  • 每个程序员都必须知道的8种数据结构

    快速介绍8种常用数据结构 数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作.数据结构在计算机科学和软件工程领域具有广泛而多样的用途. 几乎所有已开发的程序或软件系统 ...

  • 程序员都看不起的国产的编程语言之易语言

    易语言是一门国产的编程语言,它的关键字都是中文的,这是一款可以让中国人轻松入门学习的编程语言,只要认识汉字,会使用电脑,都可以轻松学会这门语言. 然而Java程序员多多少少都会有些瞧不起易语言,在他们 ...

  • 35岁以后的程序员都去做什么了?

    大厂在很多求职者心中都自带光环,应届生更会以进入大厂为荣,大厂就是YYDS! 那这个YYDS是怎么来的呢?我们可以来看一组数据-- 苹果公司员工平均年龄:31岁: Google员工平均年龄:30岁: ...

  • 程序员都是如何解决吃饭问题的?

    在知乎上搜"程序员",问答里都透着自我玩笑式的秃头气.前几天一位刚刚申请博士成功的同学跟我吐槽,说程序员博士这类群体,抑郁的风险系数非常大.甚至我们在群里讨论什么时候去西藏旅行时, ...

  • 今天是1024程序员节!为什么程序员都喜欢穿格子衫?

    中国程序员节是每年的10月24日,该节日由博客园上的一个投票发起. 在计算机技术中,1G=1024MB,1024是程序员们最为敏感的数字,是二进制计数的基本计量单位之一. 一说起程序员,就会浮现程序员 ...