去年夏天,我和一位朋友讨论了哪些资源可能对学习编程的人有所帮助。我的朋友说,他们认为有些人可能会从一系列有趣的小程序项目中受益——你可以在晚上或周末做的事情。
那么让我们来谈谈吧!我喜欢编写在我的生活中有一些边际效用的小程序。有点像这样:
- 啊!我生活中的一个小问题!
- 我知道,我敢打赌我可以用 CODE 解决这个问题。耶。
- 4小时的快乐编程随之而来
这并不总是最实用的(我用编程解决的许多问题本可以通过其他方式在更短的时间内解决),但只要您的目标实际上是享受编程乐趣并且您的程序不会受到伤害其他任何人,我认为这是一个很好的方法:)
所以这里有几个我做过的小型个人编程项目的例子。我不会谈论“学习项目”,因为我的目标是学习特定的东西,因为我已经写了十亿篇关于它的博客文章。
这些更多的是只是做一些没有特定学习目标的有趣事情。
戏剧节没有日历
当地的艺穗节有很多节目,但我没有一个地方可以看到一页一页的日历。所以我写了一个 Python 脚本来抓取他们的网站并生成一个日历。这是代码和输出。
打印小书的封面
我最近看到一个TikTok 视频,其中有人制作了他们阅读的电子书的微型物理版本。我决定尝试一下,所以我需要打印一堆书籍封面的小版本。我本可以手动调整它们的大小,但我决定改用编程来完成。
所以我写了一点 HTML 和 CSS ( tinybooks.html ),把它转换成 PDF,然后打印出来。
让我的扫描仪更好地工作
这几乎不是“编程”,但我需要为一个家庭成员扫描一堆文件,而且我不喜欢可用的软件。因此,我为scanimage
编写了一个小型 shell 脚本包装器,以使该过程更简单。这个实际上对我帮助很大,扫描时我仍然使用它。
预约疫苗
当第二剂 COVID 疫苗开放时,所有的位置都已满。原来网站的后端有一个 API,所以我编写了一个脚本,每隔 60 秒左右轮询一次 API,并观察取消并通知我,以便我可以提前预约。
事实证明这不是必需的(无论如何很快就会有更多的约会),但这很有趣。
看房市数据
几年前我们想买一套公寓,我很生气,我无法获得任何有关历史价格的信息,所以我写了一个 iPython 笔记本,它查询当地房地产网站的 API 来抓取一些信息并计算一些随着时间的推移,每平方英尺的价格等统计数据。
我不认为这实际上对我们购买公寓有帮助,但这很有趣。
(“使用本地服务的 API”似乎是一个持续的主题,我最喜欢的事情之一是使用秘密的未记录 API,您需要将 cookie 从浏览器中复制出来才能访问它们)
填字游戏名片
在 2013 年,我认为拥有一张能与我的一些兴趣填字游戏的名片可能会很有趣。所以我编写了通用软件来从文本文件中生成填字游戏。我很确定从未打印过名片,但写起来很有趣。
生成信封
不久前我正在邮寄一些杂志,我决定要在每个信封上打印自定义标签——有点像“邮件合并”的情况。所以我写了一个 Python 程序来遍历所有的邮寄地址并生成一些 HTML 和 CSS。然后我将 HTML/CSS 转换为 PDF 并打印信封。这很好用。
研究掷骰子模式
一位朋友向我展示了一个掷骰子游戏,您可以掷一堆骰子并将值相加。我提到过,如果你掷出足够多的骰子并把所有的值加起来,在某些时候它会变得不那么“随机”。
但后来我想看看它的随机性到底少了多少。所以我写了一个小程序来掷 2500 个骰子,然后把结果的总和加起来很多次,看看它是如何工作的。 (大概你可以用数学计算同样的东西,但用代码更容易)
这是很少的代码,我将在这里内联它。 (它是 Python)。这是[输出]( https://gist.github.com/jvns/e4a35ca2bad90c1a0fcaf578a803b456
import random def roll(): return sum(random.randint(1, 6) for i in range(2500)) while True: print(roll())
将绘图导入 Notability 应用程序
我正在使用一个名为 Squid 的应用程序进行绘图,并且我正在切换到 Notability 并希望将我的旧绘图放入 Notability。所以我对 Notability 文件格式进行了逆向工程。
我不认为这最终有用(我最终切换到具有真正 SVG 导入的不同绘图应用程序),但我玩得很开心。
关闭转发
这是一个稍微小一点的项目(花了一天多的时间),但我决定我不想再在 Twitter 上看到转发,所以我写了一个小网站,这样我就可以关闭转发。
我真的很喜欢小项目
所有这些例子都是较新的,但我认为当我开始学习编写这样的小型低风险项目时,确实对我有帮助。我喜欢那个
- 它们只适合我(如果出现问题,没关系!)
- 我可以在一个晚上或周末完成它们(这不是悬在我头上的巨大的东西)
- 如果它有效,我的生活中就会有一些有形的输出(比如一些信封或微型书籍或日程安排、名片或更好的 Twitter 体验)