037ac4a658a336199ee27e6543601e89
打造高效的开发环境

"工欲善其事, 必先利其器", 好的工匠离不开趁手的工具.

打造一套开发环境, 有多种多样的选择, 从硬件到软件, 大到电脑品牌, 小到使用哪种 Shell, 令人眼花缭乱, 该怎么做呢?

在本文中, 我将分享自己的一些经验与教训.

有一点需要强调的是, 不必过于纠结某些系统或者语言是不是最好的, 人在不同的情境下需求是不同的, 因此适合自己的就是最好的.

只在一台电脑上编程

我自己有多台电脑, 也尝试过使用多台电脑工作, 但最终我发现, 始终只使用一台电脑效率是最高的.

现在, 我每天上下班都使用 rMBP, 下班合上电脑带回家, 来到家打开盖子, 下班前时的屏幕内容原样展示出来, 很自然地就能立即投入工作.

只使用一台电脑对效率的提高, 主要包含下面两方面:

不中断的上下文

每天下班后电脑一合, 回到家再打开, 内容是连贯的, 没有切换上下文的成本. 这会带来两个好处:

节省时间

假设我们在工作中和在家中使用两台不同的电脑, 那么对于上面的情景, 回到家后就会变成:

  • 开机
  • 打开编程环境
  • 拉取代码
  • 回忆并找到问题点
  • 如果有相关网页的话, 打开浏览器, 通过云同步功能, 寻找历史记录

这几步所花费的时间, 需要 5 ~ 10 分钟甚至更多. 这些时间看似不多, 但对于一个每天 11 点多下班到家, 只能学习个把小时的人来说, 也是很心疼的. 更何况, 日积月累起来就多了.

节省精力

前面所说的回忆问题点, 以及重新寻找参考资料, 都是需要占用精力的.

对于经历了一整天高强度工作的我来说, 这些琐碎的小事也是很让人头疼的.

在疲劳的情况下, 这些小事会引发人的拖延症, 拖延症一犯就糟糕了. 人就会开始想: 哎呀, 好麻烦, 好难弄, 还是玩会儿吧, 毕竟工作一天都这么辛苦了.

于是学习就懈怠了.

避免重复搭环境

搞开发首先要搭环境, 搭环境这件事情既重要又烦人, 尤其是在网络还不通畅的时候, 有些国外的开发工具的网址访问不到, 费时费力, 让人很痛苦.

我最近常用的环境有:

  • GitHub, GitLab: 前者发现好项目, 后者托管代码
  • Android: Android Studio, 开发工具源, 各种仓库源
  • 前端: npm
  • Python: PyPI
  • Docker

虽然搭建的时候比较费劲, 但是搭建好后能够受益很久, 平日只需要偶尔维护一下.

可是, 假设我们同时使用两台电脑开发, 那么另一台也需要进行同样的环境搭建, 这样就需要付出两倍的时间搭建环境. 如果另一台设备是另一种系统, 还需要拿出额外精力来学习并适应那个系统.

这还会引入一个新问题, 就是需要维护两头的环境一致性. 比如在 macOS 机器上升级了依赖, 那么 Arch Linux 机器上也要对应地更新, 如果两边更新的机制不同, 那么就会带来额外的维护成本.

回到实际生活场景, 疲劳地回到家中, 还要用卡卡顿顿的网络下载一个一两百兆的依赖才能开始工作, 挺让人崩溃.

精通一种编辑器 / IDE

编辑器 / IDE 是我们每天编程都直接面对的工具, 它是我们双手的延伸. 可是有传输就有损耗, 在 "心到手到" 的过程中, 编辑器在其中给效率打了多少折扣呢? 能否做到如呼吸般自如呢?

编辑器和 IDE 的种类太多了, 有历史悠久的 Vim 和 Emacs, 还有比较流行的 JetBrains 和 Visual Studio Code, 还有平台特定的 XCode, 除此之外, 每年都有各式各样的新编辑器诞生.

哪种编辑器功能最强大是别人的事, 你自己能玩多转才是自己的事, 我们要关注后者.

写代码的过程, 这就像学打字, 有的人只能二指禅, 而有的人能够盲打.

盲打相较于二指禅, 提升的不只是速度. 由于灵感和创意都是转瞬即逝的, 人在思维活跃的时候, 不能被其他事情分心, 一分心, 思维的火花就被浇灭了.

二指禅是迸发不起思维的火花的, 因为太慢了, 远远走到前面的脑子只能等着, 大脑很快就会感到困顿.

写代码也是这样, 我通常会在纸上 (现在是使用 iPad + iPencil) 设计好模块架构与算法, 然后一鼓作气进行编程或者重构. 在这个过程中, 通过熟练的使用代码补全和各种快捷键, 使得它们完全不占用我的心智, 使得我的思考不被打断, 能够完全集中在设计和代码上.

这样心到手到, 写出来的代码质量是高的, 设计与实现也是完全吻合的. 这个过程也能节省精力, 就是让人感觉不累, 顺手还能很快地写好单测, 文档, 或者继续构思别的东西.

不过, 有一点需要强调的是, 工具只是工具, 编程水平与熟练工具是相关不蕴含因果的关系. 我在初学编程时走过一段弯路, 就是热衷于折腾 Vim 的各种插件, 结果 Python 没入门, Vim 脚本倒是写得挺溜.

命令行

命令行也是保持高效的一个重要因素, 因为命令行能以最高的投入产出比做一件事情.

假设说我们想帮助媳妇实现一个功能: 一键获取到 HPV 四价疫苗的最新新闻. 怎么用最低成本实现呢?

我首先想到的是使用 Google 新闻搜索, 然后加一个书签, 每次想看的时候打开看下.

这么做虽然很简单, 但是实际上成本也不低: 我们每天都得想着看一眼, 平时工作一忙就把这事给忘了.

让我们看看如果用命令行如何来做这件事呢?

  1. 设置一个 cron, 每天定时自动运行程序
  2. 用 Chrome 的 Headless 模式访问 Google 新闻的固定网址, 导出一张截图
  3. 我跟媳妇俩人建了一个钉钉群, 通过机器人把这个截图发到群里去

功能虽然实现了, 但是还有问题:

  • 导出的图只能看标题, 不能看内容, 解决的方法是:
    • 我们直接 Curl Google News API 得到一个 JSON
    • 用 Python 或者 JavaScript 写一个 Map 方法, 输出成钉钉能识别的 Markdown 格式
    • 发送钉钉
  • 重复内容
top Created with Sketch.