我如何通过懒惰、不耐烦和过度自信来做得更多
懒惰
不耐烦
过度自信
懒惰、急躁和傲慢。Perl 语言的创始人 Larry Wall 在他的著作《Programming Perl》中提出了伟大程序员的三大美德。更具体地说,他将其称为“Perl 程序员的美德”,但这三大美德的范畴显然超越了 Perl 语言本身。
这篇文章想探讨的是懒惰、缺乏耐心和过度自信如何提升了我的工作效率和质量。但更重要的是,它讲述了这些美德如何让我在享受工作的同时,更快地解决手头的问题,以及它如何也能为你带来同样的效果。
懒惰
我高中时就爱上了编程。我的老师非常棒,比我遇到的大多数大学教授都更有才华。我认为她之所以如此高效,是因为她真正专注于教授程序员应有的心态,而不是任何特定语言的语法。她教给我的最重要的一点就是“懒惰”。这是优秀程序员三大美德中的第一美德。以下是“Perl编程”中对“懒惰”的描述:
懒惰听起来像同名的恶习,但两者是有区别的。恶习是逃避眼前的工作。而美德是逃避未来的工作。
天哪,我真是把这话记在心里了。懒惰已经成为我作为一名程序员的核心理念,也是高质量工作的关键因素。毕竟,程序员的工作就是尽可能多地完成工作,以确保以后尽可能少地做事。懒惰的程序员能够编写出可扩展的软件和可维护的源代码。懒惰的程序员就像魔术师,能让未来的问题消失。
组织
开发软件时,总会出现很多令人沮丧的问题。你会遇到 bug,会犯“它在我的机器上能用”的错误,或者在你完全不知道原因的情况下却能正常工作。你得花费大量时间去尝试解决这些问题,而这些问题本来是可以避免的。所有这些问题的根源都在于同一个问题:缺乏组织性。
以我之前见过的几个项目启发的文件结构片段为例:
.
├── api.go
├── capMon.go
├── health.go
├── kubernetes.go
├── logs/
│ └── output.txt
├── processor.go
├── procMon.go
├── projectBinary
├── send.go
├── sync.go
└── yamlMon.go
我只能说,哎呀。
我只是开玩笑,我还能说更多。我是说什么是 capMon?我们在玩 Pokémon 吗?主要的起点在哪里?原来答案就在processor.go
,就在 1000 行文件的中间。那 呢api.go
?如果不是kubernetes.go
、health.go
、send.go
和sync.go
都是 API 的一部分,那可能还说得通。如果不查看代码,你永远不会知道这一点,代码也充满了错误和混乱。这是一个焦油坑——一旦你进去,你就会挣扎,你越挣扎,你就会陷得越深。
像这样的文件结构还有其他几个问题,但我必须停下来,否则我会一直写下去。像这样的代码库已经浪费了好几个月的时间,不幸的是,这种情况很常见。
以下是该软件的修订结构:
.
├── api/
│ ├── api.go
│ ├── health.go
│ ├── kubernetes.go
│ ├── send.go
│ └── sync.go
├── cmd/
│ └── program/
│ └── main.go
└── database/
├── capability.go
├── process.go
└── yaml.go
代码本身可能无法修复,但即使是像这样的小改动也可以节省数周的时间,最好的部分是从一开始就不需要做太多工作。
但这超越了软件结构。我记不清有多少次试图帮助别人解决问题,却只能费力地翻遍一堆零散的文件和目录,才找到一个简单的解决方案。我明白,我们只是凡人,但“以后总能修好”的心态很少能给任何人带来好处。没错,以后可以修好,但会更麻烦。一旦我学会了避免麻烦,从一开始就把事情做好,我惊讶地发现我节省了这么多时间。
自动化
我现在上的是网络学校,但不久前我还在校园里上线下课程。在那所学校,我上了一门特别糟糕的课,因为一位非常糟糕的教授。我们被要求互相批改作业,他声称这是一次“学习机会”,而且他制定了极其武断的规则,要求我们必须遵守。在大学里,这很正常,但他最大的过错是让我们为他设计测验和考试的题目。
我们被分成几个小组,每周,每组都要设计五道选择题、五道简答题和五道代码片段题,一共持续了十五周。我们编写的每个问题都必须采用非常特殊的格式,文件的行尾也必须如此,\r\n
因为他当时使用的Windows记事本软件就是用来运行的。除了我们之前布置的任务之外,这又增加了大量的工作量。
最初两周,我们尝试手动完成工作。结果一团糟。有些团队成员总是在最后一刻才开始工作,遗漏了问题,而且每个人都忘记了自己的次要职责(编辑、提交等等)。那么,我该如何解决这个问题呢?当然,我花了两周时间从零开始创建了一个完整的网站。它看起来是这样的:
它功能齐全,内置代码编辑器、交互式多选输入和进度统计功能。最重要的是,它会记录每个人的进度,并严格按照要求格式化问题。我差点就做到了,当所有人都投票通过提交后,服务器会自动给教授发邮件,但课程还没来得及就结束了。
这个故事的寓意是,无论你多么有条理、准备充分,你都无法阻止令人沮丧的工作出现。有些事情会不由自主地降临到你身上。但不要担心;你总是可以让它自动化。
在工作中,我几乎把所有需要一分钟以上才能完成的工作都自动化了,而且我经常这么做。我不再用工具集设置机器,脚本会帮我完成。我不再把软件部署到测试机器上,而是用另一个程序帮我完成,并实时将日志反馈给我。自动化可能很容易,也可能很难。它可以是一个简单的脚本,也可以是一个复杂的程序。在考虑自动化某件事时,你必须评估它能为你节省多少时间。开发脚本的时间会比手动完成任务花费的时间更长吗?大多数情况下,你会发现答案是否定的,你可以完全自动化这些任务。
不耐烦
这是优秀程序员的第二个美德。摘自本书:
不耐烦是当计算机按照它自己的意愿运行而不是按照你的意愿运行时产生的一种令人不快的感觉。或者更确切地说,当软件另一端的程序员选择了错误的默认设置、制作了糟糕的 GUI 或不让你访问这些数据时。你已经体验过足够多这样的情况,所以不会再让其他程序员承受同样的痛苦,把你浪费时间的沮丧转化为对其他人的益处。
任何需要与他人合作的程序员都遇到过这个问题。它是任何低效率行为的固有烦恼,它扰乱了我们渴望的即时满足感。然而,这个问题很常见,以至于我倾向于不相信那些声称自己没有处理过这个问题的程序员。
但急躁并不总是适用于与他人合作。很多时候,你发现最难相处的其实是自己。本节将探讨如何对自己保持耐心,以及如何让自己更容易与他人合作。
使用正确的工具
你不应该为了砍树而从零开始制作自己的电锯,但我经常看到有人使用原生 JavaScript 来构建复杂的用户界面,而不是使用框架。这样做所耗费的时间和资源对于手头的任务来说简直是荒谬的。使用合适的工具确实可以让你从几个月的任务完成时间缩短到几周甚至几天。
对我来说,最让我震惊的是意识到我们写文字的效率是多么低下。你有没有想过,用鼠标一遍又一遍地复制粘贴东西要花多少时间?或者用箭头键移动到文档的另一部分要花多少时间?所有这些时间加起来,你几乎感觉不到,直到你不再使用它们。这都是因为我们使用的工具是为了易用性而设计的,而不是为了效率。对于普通人来说,这没什么问题,但作为技术专业人士,在我看来,这是完全不可接受的。
自从我学习了 Vim 之后,这种情况就改变了。如果你还不知道 Vim 是什么,它是一款专为使用快捷键设计的文本编辑器。我的意思是,默认情况下鼠标是禁用的。它的学习曲线很高,但从长远来看,它能为你节省大量时间。毕竟,我们大多数人每天都在写文字。举个例子,假设有一组行需要更改前缀。以下是我在 Vim 中的做法:
普通的复制粘贴员可能需要 15 秒才能完成的工作,我却将其压缩到最多 2 秒。不仅如此,它还具有可扩展性。虽然这可能不太实际,但即使你给我 1000 行代码,我也能以同样的速度完成。
让我们看一个更复杂的例子。假设你有一个 CSV 文件,里面记录了人们的姓名、工作和手机号码,你需要将其转换为 JSON 格式。在 Vim 中,它看起来如下:
据我所知,其他任何工具都做不到这一点。我只需要教它一次如何格式化文本(我没有教它,因为这需要 15 秒),然后让它重复这个过程 15 次即可。我做过无数次类似的事情,每次遇到这种情况,我都忍不住庆幸自己节省了这么多时间。另一种方法是编写一个完整的程序来帮你格式化文本,或者逐行手动复制粘贴文本,我经常看到人们这样做。
我在这里重点介绍了 Vim,因为它完美地诠释了“用对工具,做对事”,但这仅仅是个例子。你每天做的很多事情,很可能都用错了工具。一般来说,如果你觉得有比你现在用的方法更好的方法来完成某项任务,那么很可能就真的有。
附注:了解你的工具
这似乎是不言而喻的,但即使你使用了正确的工具,如果你不知道如何使用它们,它们也于事无补。我记不清有多少次有人告诉我“我希望工具 W 能完成 X、Y 和 Z 的功能”,我只是想指出工具 W 确实能完成 X、Y 和 Z 的功能,只要他们读过说明书,就会明白。
我明白,说明书很枯燥,但如果你每天都在使用(并且骂脏话)某个工具,你应该知道它的功能。花点时间读读那本长达五页的说明书,了解它的用途。虽然枯燥乏味,但能帮你省去以后的麻烦。
作为一个特例,我尤其担心,有多少人在专业环境中编写软件,却几乎不懂他们使用的语言;他们下载了已经内置功能的库,从而招致安全风险。深入学习一种工具,例如用于为他人制作内容的编程语言,是非常有价值的。这个问题存在于比你所知的更多的软件中,你可以通过查看 GitHub 上的开源软件很容易地发现它。
过度自信
傲慢,最后的美德在《Programming Perl》中有这样的描述:
傲慢自大是指觉得只要有合适的工具,你就能做任何事。这都是简单的编程问题,对吧?但傲慢也很可能让你飞得离太阳太近。
傲慢是程序员在不断获胜和解决问题的过程中产生的过度自信。它就像酵母,滋生懒惰和急躁,并使它们变得不可或缺。如果你觉得这些事根本不重要,那又何必刻意安排呢?如果你觉得工具帮不上忙,那又何必学习呢?正是这种过度自信,让程序员即使在看似不可能的事情面前也能继续前进。
或许这是我内心的狂妄,但我并不担心飞得太近。事实上,我认为这完全是必要的。科技处于创新的前沿。我们正在成为一个软件定义的世界,需要有人去探索这个界限。需要有人去看看我们能走多远。
在我学到这么多之后——尽管我还有很长的路要走——一切皆有可能。每个问题都只是难度问题,而非可能性问题,正是这种心态驱使着我做得更多;也正是这种心态激励着我变得懒惰和不耐烦,这样我才能专注于前进。
所以总而言之,无论你年轻还是年老,经验丰富还是缺乏经验,你都应该努力成为最懒惰、最没有耐心、最固执的人。你的同事会因此更加尊重你,你也会。
鏂囩珷鏉ユ簮锛�https://dev.to/rburmorrison/how-i-do-more-by-being-lazy-impatent-and-over-confident-5gap