头图
原文来自于: https://www.simplethread.com/...

这篇博文的灵感来自于我的联合创始人Justin的《编程20年我学到的事》,我没有在这个列表添加太多,但是读了这篇文章之后,我发现我在想所有仍然让我喜欢编程的事,即使做了20年。下面是带给我快乐的10件事。

近些年,我的日常工作主要是领导和管理,更多的在于为别人创造成功的环境,但在这个清单里面,我主要关注的是作为一个开发者编写代码和在生产系统上的方方面面。不管你的编程经验如何,我希望下面这些能够让你共鸣。享受吧(enjoy)

1. 等等,这怎么做到的(或者这是为啥呢)

这是开发者的特别体验,我从未在编程之外的领域体会过。你正在研究一些问题,探寻其逻辑实现,因为它与预期不符合。但事实上,你越看,你就会越感到困惑...这个系统怎么会出来正确的结果呢?我非常喜欢这一刻,因为这意味着你即将取得一些突破,学到一些非常重要的东西。这有点像科学研究的老话: “科学研究上最令人兴奋的短语,那个预示着新发现的短语,不是我找到了它,而是有趣 ”(译者注: 突破性发现往往来自于意料之外的发现,在问题解决中,遇到意料之外的事情并不是坏事,反而会有新的突破发现)。

2. 一个精心设计、维护良好的说明文档

你是否有过这样的经历,走进朋友的厨房,一切都很明朗? 厨具摆放的井井有条(合情合理),需要的一切都在手边并且容易发现。这很像我进入一个代码仓库,仓库里面有一份设计良好的readme带给我的快乐。readme的好坏依赖于项目本身,应该包括清晰的先决条件说明和基本安装命令、可能会遇到的问题以及解决方案,获得初始数据的一些简单命令,运行测试等等。如果我能够轻松运行该仓库中的代码并基于此进行开发,很少有其他东西能够像设计良好的Readme来赢得我的尊重。

3. 测试用例通过 🟢🟢🟢🟢🟢

软件开发中一个非常酷的事情是我们能够从我们构建的逻辑中立刻得到反馈,并且测试过程本质也是可以自动化的。当然,也不是所有的事情都能自动化。比如UX反馈通常需要用户参与,并且我们并不需要对每一行代码都进行可靠性测试,这花费的代价会有些大。

尽管如此,你仍然可以在写下代码之后,写一个测试来验证在设定条件下它是否具备你期望的行为。它也不仅仅是即时的,你也可以保存这个测试,并在其他人使用的时候提供使用说明。这非常酷。我的大多数爱好,反馈周期都比较长。比如烘焙和园艺,可能需要几天甚至几个月才能得到反馈。而且即使如此,解释结果并猜测出错结果仍然需要一定程度的专业知识。但我永远不会厌倦的是,运行测试样例并且看到所有的测试样例通过。

4.rails new

译者注: rails new 是一个 Ruby的一个脚手架,rails new,我们通过几个命令就可以搭建起一个简单的Rails项目。

是否有过一个项目开始构建时的兴奋劲? 我喜欢那种从零开始,有着无限可能感觉,没有技术债的项目。这也是我到现在仍然喜欢通过Darden’s i.Lab(一个咨询网站)来向年轻的企业家提供建议的一个原因,也是我在20年以后仍然喜欢咨询的原因之一。你可以在许多事情上获得这种感觉,但软件有些不同,我们更强调自动化和框架。几个命令,砰!你就获得了一个应用的脚手架,你可以使用这个脚手架来实现你的想法。漂亮。当我盯着一个空白页面的时候,我时常会希望有一个这样的脚手架用来协作。

5. Vim

译者注: Vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。

译者注: 没仔细用过,不做过多评价。

还需要我说吗?如同年轻人说的, 如果你用过你就知道了(原文是一个缩写: IYKYK If You Know You Know)。实际上,我爱的不一定是Vim,我主要比较喜欢Vim的模式编辑。简单的说,在Vim中你可以在两种模式下切换,一种是插入,一种是控制文本。在控制文本模式下(也称正常模式)下,你可以通过三个字符删除逗号之前的所有字符。一旦你习惯了,你就再也回不去了。在我自己的电脑上,我甚至将shell也设置为了vi模式,这样我就可以使用一些组合按键来操作命令行参数。如果你没准备好,那么面对Vim就会很困惑,如果你有了充分的了解,那么就会发现它很强大。

6. Building Our Tools 构建工具

说到Vim... , 在懒散的周日下午,我喜欢看木工节目,如The Woodright's shop. 主持人在节目中讨论古时候的工具和木匠的历史。他们通常从基本工具开始,比如手锯和凿子,然后向你展示如何制作一个你自己的工作台。甚至有时是一个简单的车床或磨床。这很吸引我,经常让我想到软件开发。我们用来编写代码和构建软件的工具也是由代码来构建。我们的工具一般由其他程序员创造,如果有时间,我们完全可以自己构建工具出像Vim这样的工具来满足我们的需求。构建工具非常让人满足,在社区方面也非常的强大。因为它创造了一个自动化反馈循环,有助于加速软件崛起、

7. Open Source 开源

在某种程度上,构建工具只是我热爱开源软件的一个方面。也有人说过开源软件对于个人、公司乃至于整个人类文明有着不可思议的价值。我只想说开源真他妈的酷。除了维基百科,我想不到其他的,开源软件是人类曾经尝试过的最大知识协作项目,而程序员处于这个项目的最初阶段。如果人类文明在100年内、1000年、10000年后仍然以某种可识别的方式存在,那么我预计我们仍然会有某种形式的数字指令协作集,也就是开源软件。我只知道人们可能觉得开源软件已经稳固和成熟了。但我们进入这个改变人类文明的努力才只有几十年,开源软件太棒了。

8. 性能优化。

接下来让我们回到地面,即时过了20年,我依然热爱处理性能问题。最近我的多数工作的内容都是主观和微妙的。例如职变革, 可能需要几个月才能看到你努力的成功。但是处理性能问题是客观的和具体的。比如这个页面加载太慢了,修复它。通常来说,修复它很简单,比如加上索引或者缓存。但有些情况,就需要深入研究,运用你多年来积累的知识。这可能也是一个机会让你去了解磁盘如何存取数据的深奥知识,或者一些有趣的东西。有些情况,问题可能从无法简单的被解决。所以你需要退后一步,重新考虑用户体验和基础架构。比如,你可以让用户感觉上快一点。在下班前,通常就有一个明确的解决方案。之前这个也面在最大负载场景下需要6秒。现在只需要300毫秒。哇哦,可以开香槟了。

9. Removing Toil(自动化流程)

上面的点主要来自于我自身,毕竟是我列出来的仍然让我喜欢编程的十件事,但是真正让我对编程这个职业痴迷不已却并不是兴趣,而是它如何影响周围的世界。有些时候,我意识到我可以使用软件开发的方式来改善同胞的生活。这就是我决定这就是我余生值得追求的东西。软件行业的兴起对社会有着深远的影响,或好,或坏。但有一件事,我觉得完全的好,就是消除重复的劳动。消除那些重复的,不需要用到创造力的工作。想象一下这样一个任务,理清楚库存和规格之间的关系,突出缺口。这是需要一个人每天花费数小时进行文本匹配的乏味任务。这也是计算机擅长的任务。现在将这项任务交给计算机,这个人就可以将时间花在根据计算机的输出做出判断,然后与其他部分协调,确定优先级等等。

自动化也有负面影响,但是总体来说瑕不掩瑜,我相信不管任何背景的进行职业活动,并将自己独特的见解和才能带入这些职业活动时,这才是一个良好的社会。人们浪费生命在一些重复艰苦的工作上不利于文明进步。

10. 写给我自己

最后以我的初衷来结束讨论,最初我学习编程是因为我想要解决一些问题,我想让一些BBS的操作自动化,因为我厌倦了下载完成的时候点击下一个,下载的失败的时候点击重试。我想一定有更好方法。当时已经有了一种脚本语言,我记得是perl。我已经忘记了具体的细节。但这正是这种感觉让我喜欢上了编程。你会有这样的感觉,会有更好的解决方案,因为你有编程的能力,如果你想改变它,那通常就有更好的解决方案。

我现在已经很少有一天去写代码了,但是我经常仍然会我自己写代码。在上周我写了一个脚本每天去拉取一种鲜为人知的举重器材的价格,并将其存储到一个CSV文件中。我想获得这个价趋势,但是制造商的网站太小了无法被大型的数据追踪器覆盖到。但这无法难倒我,我是一个程序员,我会解决他。

结论

这并不一定是编程中最让我喜欢的十件事。但它们是我脑袋中第一批想到的事。当我写作的时候,我想到了其他十几个。如果你是一名程序员,我可能漏掉了你喜欢的事。软件开发社区变的更加多样化,对于不同背景的人更加友好。其中最酷的事情在于看到不同的人在编程中得到共鸣,他们会带来新的视角。如果有其他喜欢的事,或者不喜欢我喜欢的事请请告知,感谢阅读。


北冥有只鱼
147 声望35 粉丝

引用和评论

0 条评论