继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【译】为什么编程都带点强迫症?

慕田峪4524236
关注TA
已关注
手记 204
粉丝 19
获赞 51

软件开发者的强迫症生涯

我花了一周的时间来编码。疯狂地、不断地、痴迷地。瞥了一眼时钟,我发现我不仅因为编码错过了早餐,还因为编码错过了午餐。当我再看时钟时,外面已经天黑了。

有时我觉得编码带着点必然的强迫症。你必须在你的脑海中记住如此多的细节,我不确定是否有可能在不沉浸的情况下编码。"克莱夫-汤普森(Clive Thompson)在《比你想象的更聪明》(Smarter Than You Think)一书中写道:"编程需要对细节的关注,以及将一切视为一系列过程的能力。" 但它不只是需要对细节的关注。它需要对细节的强烈关注。一个错乱的分号可以使一个百万行的庞然大物轰然倒下。一个函数的错误返回会破坏你所有精心编写的逻辑。像这样的事情,除了需要忽略对食物的痴迷,还需要什么呢?

编码,如果要说它是什么的话,就是能够同时在几十、几百个部分之间跳跃。它能够同时考虑整个应用程序,同时钻研一个功能的微小细节。当你的代码不能运行时,是因为你打错了字,因为你的逻辑是错误的,因为你使用了错误版本的库,还是因为你编辑了错误的文件?有一百万种方法可以(而且确实)出错,从硬件到依赖关系,再到你自己的愚昧无知。

当我睡觉时,我仍然看到代码。我梦到了代码。梦到函数、类和控制结构。有时,在早晨,我醒来时脑子里已经有了一个棘手问题的解决方案。即使在我睡着的时候,我也在写代码。

对于那些写代码的人来说,这可能很熟悉。通过扎克伯格的同期文章和《社交网络》讲述的Facebook的起源故事(尽管它令人不快),是一个人迷上了他的编码问题,并在夜间进行编码。(诚然,他的任务是从大学网站上抓取女性图片来贬低她们,但我们不能因此责怪PHP)。) 代码往往是由痴迷者写的。

一位同事在处理棘手的问题时,经常整晚编码。第二天,我在她的git提交上看到了时间--代码写到午夜以后,一直到凌晨。

虽然我说我一直在编码,但其他人可能使用不同的术语:软件工程、编程、开发、黑客。关于这些术语,有一个高度紧张但无关紧要的辩论。就个人而言,我把它称为脚本。今天使用最多的语言毕竟是 JavaScript。

脚本是一个更谦虚的术语。它可以阻止我产生超出我能力范围的想法。代码是一个供计算机遵循的脚本。它让计算机做一些事情,而这些事情在理论上是可以手动完成的。我们可以询问附近所有的 Uber 司机他们在哪里,并在地图上标出他们的位置。Uber 应用程序为我们提供了脚本。它为计算机提供了一套指令,就像一个非常精确、非常直白的演员。脚本描述了一个人可能需要几个小时才能完成的过程,但计算机可以在几毫秒内完成。

我通过吃饭时间编码,因为你可以称之为流动。我在区域内,在卷轴上,在我的槽中。沉浸在任务中,全神贯注。随着代码行数的增加,时间悄然流逝。

我不能说我是一个优秀的程序员。当我还是孩子的时候,我记得第一次写出神奇的文字让电脑听从我的指令时,我感到很惊讶。后来,当我学会了更多的魔法词时,我觉得我在作弊。我没有读过手册,也没有学过计算机科学。我不知道什么是贝塞尔曲线,也不知道应该使用哪种排序算法。简而言之,我不是一个合格的软件工程师,只是一个涉猎者。是的,我知道如何制作网站和数据库,如何使用命令行和与 API 对话,但这些都是为了实现其他目标。我不是一个合格的开发者。

我们是一个被冒名顶替综合症困扰的行业--部分原因是我们都是冒名顶替者。没有人在任何时候都知道所有的代码。总会有人比我们更痴迷。我想我们都担心有一天会成为 Linus Torvalds 的一个咆哮目标

Torvalds 是 Linux 的创造者,是大多数现代计算机服务器的基础。他还写了 git,一个几乎所有软件工程师都用来存储他们的代码的系统(两个产品都以他的名字命名:一个以他的名字命名,一个以他的个性命名)。他在科技界声名狼藉,不仅因为他的智慧,还因为他对他不喜欢的代码的滥用。从他的公开谈话中随意挑选一条线索:他说,这段代码是 "狗屎......纯粹的垃圾,而且写错了"。许多开发者最担心的是,Torvalds 会以某种方式掌握他们的代码,并对其提出意见。有时我在想,Torvalds 是否是世界上唯一没有患过冒名顶替综合症的软件工程师。他是一个 "直言不讳"(读作:粗鲁)、不畏强权的软件工程师的典型,声称只对代码质量感兴趣。我发现有人在试图模仿他。这是一种耻辱。软件行业不需要更多的人以可怕的方式提供好的建议。

这些天,我在管理团队。我的工作是预算、治理和审批,而不是函数、对象和封装。我用 PowerPoint 而不是PowerShell 来处理。但是,能够编写代码就像能够说另一种语言一样--这是一种能够伴随你的技能。在代码中,事情变得可能,而这些事情用手是做不到的。

我经常发现自己在写一些代码来解决问题--连接到旧系统和提取数据的代码。手动做这些事需要几周时间,但脚本在几分钟内就能完成。我的代码很丑陋,难以管理,是那种应该被扔到地下室的野兽,但是没有人需要看到它。他们只需要知道,他们认为要花六个月时间的任务已经完成了,而现在还不是午餐时间。

上周就是这样的一个星期。有一项任务(太无聊了,不能在这里描述)需要做,所以我打开 Sublime Text,写起了代码。这不是能赢得任何奖项的代码,也不是能大规模推广的代码,Torvalds 不会对它印象深刻。

当我开始写代码时,我的团队会呻吟。"老板又来了,"他们想。不是所有的人--有些人很高兴我是 "他们中的一员"。也许其他人,很高兴我理解困扰他们的挫折感。

编码是一个令人沮丧的过程。尽管计算机很聪明,尽管我们一直在谈论可用性,但编码可能感觉是一项不可能完成的任务。通常,它更多的是试验和错误,而不是严格的思考。

代码会出错,会崩溃,会停止工作,会出于我不理解的原因做一些我不期望的事情。如果我写,电脑把它的手扔在空中,或许他无法理解我在说什么。真的吗?电脑?以你所有的硅、芯片和兆位数,你就不能解决这个问题吗?

这是一个只有在编码圈子里才承认的事实,大多数编码是用头撞墙,在谷歌上搜索错误,在Stack Overflow上查看,尝试不同的东西,直到你找到一个有效的方法。这就是现代世界的建立方式。漏洞是测试中没有出现的情况。

我将是一个糟糕的全职软件开发人员。吸引我注意的是解决一个问题,而不是写代码。我不善于拿起票据,编写功能代码,确保测试覆盖率,并通过单元测试进行部署的繁琐工作。我非常尊重那些日复一日做这些工作的人,但我不是他们中的一员。我编码是为了解决特定的问题。我写代码是为了实现一些东西,而不是为了它本身。

代码是想法和现实之间的粘合剂--它是我们体现我们意图的方式。它是对我们意图的最纯粹、最精确的表述。在我上周度过的那几个小时里,我对我的手指打字和鼠标点击没有记忆。我的记忆已经离开了我的身体。我记得将系统的运作方式可视化。我记得错误和形成概念性组件的心理图像。我不记得写过任何代码。

有时我在想,我是否真的喜欢编码,还是说这是我必须要抓的一个兴奋点--好像我写的每一行代码都是一种刺激,是在我和我想要实现的目标之间的东西。

但是,到了早上,我带着一个新的想法、一个新的解决方案、一个新的结构化函数或重构对象的整洁方式醒来,我又回到了电脑前。在我刚刚做完这最后一点之后,我就会吃早餐。


作者:归人_
链接:https://juejin.cn/post/6996117810036342791
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP