【CSDN 编者按】要想快速编写程序,必须要认真考虑技能、工具选择、摊销和回报。

原文链接:https://buttondown.email/hillelwayne/archive/how-much-can-you-code/

未经授权,禁止转载!

作者 | HILLEL WAYNE  译者 | 弯月

责编 | 王子彧

出品 | CSDN(ID:CSDNnews)

首先,我们来探讨一下哪些任务适合自动化。

如上图所示,如果你花费一天多的时间实现了每个月只能节省 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 类大语言模型为什么会带来“神奇”的涌现能力?
☞GPT-4 版“贾维斯”诞生,国外小哥用它 4 分钟创建网站、聊天就能创建 GitHub repo......

用一个小时编写一个小程序相关推荐

  1. 用python编写一个处理报文的小程序

    最近用python编写了一个处理报文的小程序,最后保存成.txt格式. 主要内容非常简单,介绍如下: 1.报文内容如下所示,比较乱,因为要输入到matalab中进行仿真验证,因此,需要将里面的'\n' ...

  2. 用python编写一个掷骰子的小程序

    摘要: 编写了一个掷骰子的程序,主要通过pygame模块实现了以下几点功能:1.每次点击开始键时,骰子都会转动起来.2.每次开始后点击停止键时,骰子停止并且随机停在1-6的某一个数字上.3.按下结束键 ...

  3. python软件代码示例-用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

  4. 2020-2-15一个web登录注册小程序与Spring初始+作业

    文章目录 建立一个Web登录注册小程序 1.先在Mysql数据库中新建一个数据库 2.在IDEA中新建一个工程 3.对项目进行简单分层 4.设计一个实体类 5.引入一个jdbc工具类 6.写一个测试类 ...

  5. 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)

    大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...

  6. 做一个很难的小程序是怎样的体验(一)

    "小程序能做什么样的产品?" 这可能是我被问到最多的关于小程序的问题.通常我会说:理论上,小程序能力还挺完整的,大部分 Web 可以做的产品,都可以落地. 但理论终归是理论,唯有实 ...

  7. qt给qdialog加一个滚动条_这些小程序技巧,你敢说你一个用不到?

    都是小技巧,废话不多说,上代码! 改变小程序原生组件大小 微信官方提供了一些基本组件,但是有的组件没有提供类似size的属性,我们只需要一个css就可以解决,以radio为例: 小程序picker组件 ...

  8. 能不能用python开发qq_用Python写一个模拟qq聊天小程序的代码实例

    用Python写一个模拟qq聊天小程序的代码实例 发布时间:2020-09-09 07:49:29

  9. 还在想假期去哪玩?直接做一个旅游攻略小程序

    憋了几年好不容易解封准备出去散散心,但看着大江南北这么多景点是不是有点让你选择强迫症呢?那就先制作一个旅游攻略小程序看看驴友们的分享吧.

最新文章

  1. graphcut 用于最优缝合先寻找_Image Stitching
  2. linux ssh连接交换机_linux SSH 隧道
  3. java 连接sqlserver2005_JAVA用jdbc连接SQLServer2005
  4. Facebook:15年来最重要的转型,F8大会掀开打造私密社交网络的新篇章
  5. SparkContext源码分析
  6. 更改Sharepoint管理中心端口号
  7. 鸿蒙系统手机9月11日,鸿蒙系统9月11日,将有望正式成为国际第三大手机操作生态系统...
  8. dbms_排名前50位的DBMS面试问答
  9. JS实现下一天的显示
  10. c语言中宽字节,fgetwc读取的是宽字节么?
  11. MQTT教程(一):MQTT简介
  12. Mysql 2018国家统计局区划和城乡划分数据库(包含经纬度数据,以及数据来源,提供大家参考)
  13. 如何清空c盘只剩系统_怎么清空c盘只保留系统文件,详情介绍
  14. 安装关系型数据库MySQL 安装大数据处理框架Hadoop
  15. 测试硬盘怀道的软件,硬盘坏道检测工具(HDDScan)
  16. nginx日志中$request_body 十六进制字符(\\x22) 引号问题处理记录
  17. www.tf.tt index.php,恶意软件分析 URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析...
  18. 小甲鱼python课后题和答案简书_【py小甲鱼笔记】-函数
  19. swift代码转oc代码_什么是不安全的Swift代码?
  20. 金蝶云星空与盘古MES系统数据集成对接方案

热门文章

  1. xiaodi内网anquan(9)
  2. K8S Label 和 Selector
  3. h5(HBuilderX+mui)开发App
  4. Unity制作人物头像小图标和小地图
  5. popupwindow 不抢夺焦点_儿童摄影指南:寻找不一样的视角
  6. 如何使用Divi建立会员网站 - 第2部分
  7. CS3属性之弹性布局
  8. 2021年广东省安全员B证(项目负责人)新版试题及广东省安全员B证(项目负责人)试题及解析
  9. 计算机毕业设计Java网约车管理系统(源码+系统+mysql数据库+Lw文档)
  10. (原创)LEON3入门教程(四):基于AMBA APB总线的七段数码管IP核设计