用一个小时编写一个小程序
【CSDN 编者按】要想快速编写程序,必须要认真考虑技能、工具选择、摊销和回报。
原文链接:https://buttondown.email/hillelwayne/archive/how-much-can-you-code/
未经授权,禁止转载!
首先,我们来探讨一下哪些任务适合自动化。
如上图所示,如果你花费一天多的时间实现了每个月只能节省 5 分钟的任务,那么纯属浪费时间。
当然,自动化除了节省时间之外,还有其他意义。例如, 花一天时间自动化每个月只能节省5分钟的任务并不划算,但如果你十分厌恶这项任务,那么仍然是值得的。
这个问题会引出另一个问题:为什么你需要花费一天时间?
为什么不能是一个小时?
如果你能快速写出完整的程序,那么编写程序就能成为解决更广泛的问题、且节省时间的解决方案。一个小时是“快”的一个很好的衡量标准。一个小时就是一顿午饭的时间。
谈及快速编写程序,我认为我们必须考虑到下面这些因素。
技能
快速编程是与软件工程截然不同的一项技能。软件工程原则并不适用于快速编程。当然,良好的组织和清晰的意图仍然很重要,但是很多 SE 理论都是围绕如何作为团队的一部分持续开发现有代码库。例如,我很少为自己的脚本编写测试。设置测试需要时间,使用固定装置设置集成测试需要更多时间。
同时,快速反馈非常重要,甚至比常规编程更重要。我通过一种方式来快速设置和执行脚本。
代码是否方便理解也无关紧要。这些程序都很小,如果你无法理解代码,完全可以重写。如果需要扩展,也可以“适当地”重写。
对于脚本中应该使用多少第三方依赖项,我有点纠结。有时,第三方库确实很有帮助,但是你需要花时间学习和了解,而且许多第三方库的文档都很糟糕。我认为,能够弥补语言本身缺陷的依赖是好的,但是你为了逃避学习而选用某些库就不太正确。我用 click 制作了一个 Python 工具,很快就后悔了。
工具的选择
关系到工具选择的因素有下面几个。如果我们想尽可能快速地写出一个完整的程序,就应该选择简洁而富有表现力的语言。简洁的语言更容易调整,因为你需要修改的字符更少。样板代码则是负面因素。
动态语言具有一定的优势。运行时错误比静态错误更好。如果程序在执行第 20 行代码时出现类型错误,那么运行时故障仍会执行第 1~19 行,这就可以为你提供这些代码能否正常工作的信息。
一个同样重要的因素:选择适合的领域。这取决于需要自动化的任务。有些语言有很好的内置函数,有些语言恰好有很好的库。有时,最好的工具不是编程语言。最近,我遇到了一个任务:抓取谷歌地图上 100 个街道地址的 url,我采用了 Power Automate。PA 是一款有点糟糕的工具,但它有良好的浏览器自动化技术,非常适合这项任务。此外,它在 Windows 11 中是免费提供的。所以,最终我们只用了半个小时就完成了任务。
此外,我还用正则表达式、shell(特别是 PowerShell)以及电子表格解决了很多问题。
其他注意事项:一个好的 CLI 库是必须的。拥有一个良好的 GUI 框架固然很好,但不那么重要。你需要保证能够运行单个文件,并且能够使用调试器。如果条件允许,还可以考虑使用非常友好的 Copilot。
摊销
摊销指的是,算法有一些昂贵的操作和许多开销低廉的操作,因此整体运行时间低于你的预期。例如,向数组追加元素的开销是 O(1),即使有时你需要花费O(n) 来调整数组的大小,整体开销依然是 O(1),因为这种情况很少发生。
对于此处讨论的问题来说,摊销指的是,为编写脚本投入的时间可以加快将来编写脚本的速度。这对于提高技能非常重要,因此我们应该详细讨论一下。首先,熟练之后能减少查找信息的时间。
通过搜索引擎查找信息需要花费很多时间。在软件工程中,这点时间开销并不重要,因为我们的大部分时间都花在阅读上,但是现在你需要快速编写程序。将信息移动到本地缓存(文本文件、注释)很好,如果你已经掌握了这些信息,那就更好了。
此外,编写脚本会生成可供你复制粘贴的代码片段。我制作第一款应用时花了很多时间,但后面的应用编写速度明显加快,因为我可以复制粘贴已有的代码。至少,在不同的脚本中查找某些代码的速度比上网搜索更快。
编写脚本会让你接触到语言中极具表现力的黑魔法,例如宏和元编程。你知道将哪些代码放入团队维护的代码库中是很糟糕的?但是,这些黑魔法非常适合快速编写脚本,一旦你学会了如何使用这些黑魔法就会事半功倍。
因此,真正掌握一门语言有很大的好处,同时了解许多不同的工具也有好处。
回报
在美国芝加哥,每逢芝加哥小熊队主场的棒球联赛,乘坐地铁红线就是噩梦。所以我编写了一个 lambda 脚本来提醒自己。这个脚本真的可以改善我的生活吗?可以。如果需要三个小时才能写这样一个脚本,我还会写吗?可能不会。
☞舍百万年薪搞“大事情”,稚晖君的机器人 neZHa 现世! ☞ChatGPT 类大语言模型为什么会带来“神奇”的涌现能力?
[广告]赞助链接:
关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
随时掌握互联网精彩
- SUNDB高性能国产数据库产品
- Pearcleaner专为macOS用户打造的应用程序清理工具
- 大咖云集 | 关键信息基础设施安全保护论坛即将召开
- C++、Rust 编译一样糟糕?我用 1.7 万行代码试了试
- 《浪潮之巅》作者吴军万字长文:中国算力的危与机
- 台湾多家电视台及高校被黑客攻击
- 如何一出场就成为全场焦点?
- 看雪·众安 KCTF赛况直播 | 群雄逐鹿!领跑大神?潜力黑马?
- 在Z|吉利控股集团(高至45K/月)诚招应用安全负责人及工程师(Web安全、SDLC)
- Python 被爆大 Bug,攻击者可远程代码执行漏洞!
- CSDN《IT人才成长路线图》重磅开源!60+ 专家,13 个技术领域,绘出 35 张图谱
- Facebook、Signal、Google聊天应用程序曝漏洞,音频视频数据恐被监听