每个程序员都应尝试的更具挑战性的项目

2020-12-21 06:37:07

一年前,我发布了每个程序员都应尝试的具有挑战性的项目。它包括文本编辑器,Space Invaders,BASIC编译器,小型操作系统,电子表格和视频游戏机模拟器。它在整个互联网上爆炸式增长,一个月内累积了超过100,000次观看(更多有关病毒式传播的信息)。

是的,3D图形!在原始的具有挑战性的项目清单之后,我得到了很多建议,提出了射线追踪器的建议。我同意他们。实际上,这是我在2009年学习C#时尝试做的第一件事。如果您不立即了解所有数学知识或术语,请不要担心,只要继续努力就可以了。关于光线追踪器的资源很多,一路激励您的视觉效果可以奖励您。

即使使用300行代码,光线跟踪器也可以生成一些真正美丽的图像!首先,您可能会陷入支持各种反射,光和材料的困境。否则您会意识到单个图像可能需要花费几分钟的时间来渲染,因此您将开始进行优化。例如,您可以将光线跟踪器与线程并行化,减少相交候选的数量,或者使用探查器来跟踪分配了多少对象并找到瓶颈(我最初有一些错误的代码...)。

有创造力!我不想走另一条经过半优化的光线跟踪器的路线,也不想追求超现实的折射。相反,我故意降低了分辨率,以便可以制作实时动画。下落的颗粒使旋转的圆环的gif可以在Twitter上获得很多赞。我认为独立游戏有很多机会走这条路线,并具有独特的艺术风格。将来请留意我的8位怀旧视频游戏!

键值存储实际上只是一个字典。给它一个钥匙,找回价值。您可以添加新键,删除键或更新值。 Viola,您已经创建了一个NoSQL数据库!但是,您可以更进一步,将其作为Web API提供,以便将来的所有Web应用程序都可以利用您的数据库服务。

我非常喜欢这个项目,因为创建基本的" database"非常简单。您可以从使用所使用的任何编程语言附带的字典数据结构开始,并在其之上添加一个Web API。但是,与所有这些想法一样,还有很多可以添加的内容:针对高性能,安全性和多个用户的优化,原子事务,数据类型,批处理操作,持久性,故障恢复以及在多个服务器上运行它的能力。很快,您将拥有像Redis或Amazon DynamoDB这样价值十亿美元的产品。

认真地,启动您的代码编辑器并使用您喜欢的语言来尝试这一语言。我用Go和Racket来做,以了解它们之间的差异。很有启发性。开箱即用的Go版本在小型测试中的表现就足够了。

我第一次接受软件开发职位的采访是"当您在网络浏览器中键入Yelp.com并按Enter时会发生什么?我做得不好,被拒绝了。因此,我开始了真正了解一切工作原理的旅程。我发现最有趣的部分是浏览器如何将HTML和CSS转换为呈现的网页。 (旁注:这是一个很普遍的面试问题,我太无知了,而且有一个惊人的资源投入了太多的细节,无法回答何时发生的事情。)

请不要对设计一些破坏Safari或Brave的杀手级用户界面寄予厚望。不好了。在此之前,您还有很多工作要做!通过说给您一个HTTP库和一个HTML解析器,来缩小范围,但是您必须实现自己的渲染器。您不能使用WebBrowser窗口小部件或类似WebKit的工具。你是做什么???

我的建议是从制作基于文本的Web浏览器开始。实际上,您还可以忽略几乎所有格式。忽略所有JavaScript和CSS。步骤将是使用给定的URL执行HTTP GET,解析HTML以查找应显示的文本,然后将其显示在屏幕上。这就对了。

一旦获得纯文本,就可以使用很多功能。您可以添加选项卡,历史记录,后退和前进按钮等。但是在某些时候,您可能需要的不仅仅是文字...,我希望您好运。我可能永远也不会尝试用文字以外的方式呈现网页的视觉元素,但也许有一天,当我发现无限的时间时。一次采取一个步骤,专注于单个HTML标签和属性。如果您尝试这样做,请告诉我!

好吧,这是您建立理论上可以使您变得富有的东西的机会:一个股票交易机器人!像我所有项目的想法一样,构建一个基本的交易机器人非常简单,但是您可以添加无穷的功能和改进。您甚至不需要了解任何投资知识就可以开始。在此过程中,您至少将学习如何利用不同的Web API,处理数据以及应用现有的或创建自己的交易策略。您可以在大量历史数据上对其进行测试,也可以只用垄断资金来进行测试。

不够?应用机器学习或设置Twitch流,让陌生人控制您的资金。

这是基本交易机器人的路线。首先,找出一些您希望您的机器人进行交易的大公司(例如Apple,Tesla和Target)。其次,确定何时购买和何时出售的条件。例如,如果当前价格达到52周低点,则购买。如果达到52周高点,则卖出。 (不要用真钱来使用这种策略!这太傻了。)第三,弄清楚如何使用免费的API获取股票数据。有一些不错的库可以使之变得容易。第四,建立一个具有垄断资金(没有股票经纪人)的测试环境。让它运行!

现在可以享受无尽的乐趣...可以长时间对历史数据进行自动化测试,实施数十种交易算法并进行比较,添加可视化效果,使用其API连接到真实的股票经纪人,尝试一些机器学习或进化算法, 以及所有成功的垃圾邮件Twitter。 在实施这些项目时,请分享您的进度,并让我知道您有其他想法!