前言,这个翻译系列有点让我骑虎难下的感觉,原本打算翻译软件破绽呢,然而发现这篇文章更乏味,于是就决定先翻译这一篇。
原文: https://www.simplethread.com/…
这篇文章是我依然喜爱编程的十件事的续篇。
11. 学习新工具
软件工程在许多方面依然是不成熟的。这意味着咱们的工具会一直的倒退。对于旧有的问题人们一直给出新的办法去解决。在加上来自于程序员喜爱的懈怠驱动式翻新,你就会有各种各样的实用工具和开源解决方案去简直解决任何问题。我在 DIY(Do it yourself 本人动手做) 畛域有过相似的感触。比方,在木工畛域,你能够应用电锯手工管制角度,只有你有足够的毅力和急躁就能做的很好。而后你的木匠敌人带着它的斜切锯来了,哦,天呐 (原词为 oh,man,译者认为这里表赞叹,所以未采取直译),这些角度就变得如此容易切割,那么润滑,看起来那么丑陋。如果你和我相似,那应该也了解,那是一种十分让人满足的体验。如果你认真思考,编程也能够给你很多机会找到适宜当前任务的工具。
12. Helping people 帮忙他人
我以前写进入软件工程畛域是因为对视频游戏感兴趣,并且驱动我去了解视频游戏背地产生了什么。尽管这是真的,让我继续对技术放弃趣味的另一部分起因是齐全的掌控感。这是四周大多数人都不了解的货色,而我能够帮忙他们了解它。是的,这意味着有的时候要为敌人或家人做 IT 反对。是的。当人们的冀望不统一可能就会感到腻烦。这实用于大多数技术业余,我置信医生、机械师、建筑师、律师也会有一样的感觉,每个人必须设定界线。归根接地,我很开心有一项技能能够帮忙他人。即便我偶然不得不把手举起来说:“道歉,我不晓得你的打印机出了什么问题,然而你否试过重启”
13. Practicing magic 修习魔法
我年老的时候浏览过大量奇幻书籍。直到现在我依然空想成为一名巫师,领有说出正确咒语或执行正确的步骤就能扭转四周世界的能力。我想平凡的作品能够做到这点,然而我素来没写过任何被我认为是魔法的货色。最靠近感觉本人像是施展魔法的时刻是构建软件,特地是在 DevOps 方面,如果你编写了正确的 Ansible 脚本或 Terraform 打算,忽然之间一整个协调的服务器队列都在依照你的志愿运作。如果你天天做 DevOps,就会让你丢失兴奋感。但对于我来说,这是非常少有的让我看到所有东倒西歪,就像施展魔法般让人欢快,令人沉醉。
14. Turning ideas into reality 将想法变成事实。
咨询业最酷的事件是有机会帮忙很多人建设他们独自建设不了的产品 - 远远超出他们原有愿景的产品。他们可能有一个产品的想法,或者他们对问题有充沛的理解和信念,认为肯定有更好的形式 (办法)。不论怎么样,咱们有能力让他们产生,把形象的想法变成事实世界中的人可能从中受害的货色。我永远不会厌倦领导客户实现这个过程,即发现他们真正想要实现的指标,而后帮忙他们将这些想法变成一个真正的、无效的零碎。
15. Diagnosing ridiculous Heisenbugs 修复一些匪夷所思的 bug
Heisenbug 是一个对于 bug 的术语,当你试图去找起因并且复现时无奈复现。它也是随机呈现并且没有显著谬误的 bug 的通用缩写。大多数软件中的 bug 都是间接的,比方没有思考过的状况,没有思考的上游效应等。然而有些时候,你碰到这样一个问题,始终找起因,然而依据代码推断基本就不可能有这样的行为。然而在你放弃之前,老天啊,你象征地重现了它。这时你就晓得你要学点好货色了,尽管它可能并不令人欢快。他可能是一个谋杀案,而你就是凶手。这个 bug 会填补你的常识空白,进步你的专业知识程度。例如,通常状况下,如果磁盘有空间并且过程有权限就能够向磁盘写入文件,除非它是一个旧的 FAT32(文件系统) 的磁盘,你正在向外面写入一个 65k 大小的文件,因为清理过程,写入会偶然失败。这对我集体来说是一个特地苦楚的教训。
16. Solving impossible problems 解决一些不可能的问题
在软件工程畛域,如果有短缺的工夫和精力,简直任何问题都是能够被解决。这既让人兴奋也让人困倦。有时人们会要求你去做不可能做的事件,有时答案是不行,技术还不存在。但更多时候,答案是,这依赖于你进行头脑风暴和钻研,和共事进行白板会议。你经常就能相处一个以前你感觉不可能被解决的解决方案。提醒: 不可能的解决方案通常是通过找出如何将问题从新定义为可解决的问题。而后,你再解决这个问题。一个常见的例子是,如果实际上不能让一个操作变得更快,但兴许咱们能让用户感觉更快。我也曾涉足其余畛域,但没有什么能与编程等量齐观,因为我常常面对那些感觉不可能解决的问题,但最终还是找到了解决办法。
17. SQL
我非常高兴 NoSQL 静止稍稍消退,称为另一个版本的正确工具。我钻研过很多备选的数据库,他们在特定状况下表现出色。例如我喜爱的 Redis 和 Elasticsearch。然而,我依然认为关系型数据库是很棒的通用数据存储 – 它们是鲨鱼而不是恐龙。(译者著: 鲨鱼和恐龙是同一个时代的物种,这里译者认为是在暗喻关系型数据库在不断进步,适应时代。) 我喜爱 PostgreSQL 和其余关系型数据的一个很大起因是 SQL,是的,它由一些奇怪的不统一之处,并不完满,然而一旦你把握了基础知识,SQL 就是一种查问和解决数据集的漂亮直观形式。
在不同的键上连贯多个数据集,做聚合、分组等,为缺失的值提供默认值。当然,你能够在 Ruby、Python、C# 中做所有这些事件,并且成果也不错。然而在 SQL 中更加污浊,或依据数据集的值来更新一个数据集的属性?是的,我将放弃我的 SQL 技能敏锐,非常感谢。
18. Psychic debugging 通灵调试
零碎存在着一个奇怪的问题?是 DNS 的问题吗?不是?你确定?好吧,是字符编码的问题? 你确定你没有从 Word 中粘贴一些智能引号? 兴许是缓存没有正确。在这个畛域曾经有一些念头了,一个乏味的事件就是某些乏味的事件就是某些问题会一直呈现。我曾经数不清有多少次同时形容了一个问题。我在对于代码无所不知的状况下就能准去地诊断出这个 bug。这相对让人感觉是某种神秘的、通灵的力量,但其实只是我犯了很多谬误,看到了很多奇怪的货色。
顺便说一句,在那时,问题永远都在 DNS 上,即便是你曾经齐全排除了 DNS。
19. Refactoring 重构
重构指的是改良软件的内部结构,同时保留它的可察看行为。但更一般地说,它是指在个别不扭转性能的状况下,清理代码。
一些开发人员认为这很乏味并且浪费时间。但这个观点是错的,道歉,我认为重构是编程中最大的乐趣之一,特地是在长时间工作在一个零碎下的时候。在生活中,你有多少的机会修改过来的谬误?你有多少机会从新扫视过来的决策并更新它们以适应一直变动的环境。对我来说,并不是很多,并且可能进入凌乱的代码局部,构想如何更清晰地组织它,而后井井有条地进行合成和去模糊化时,你会感到无比的满足。当你实现重构后,测试依然通过,所有工作都和以前一样,但它不再是代码库中人们胆怯批改的局部。
20. Being cool under pressure 在压力下放弃沉着
最初一点这并不是编程独有的,但这是我常常体验到的状况。在我职业生涯的晚期,我和一些高级开发人员一起工作,他们在压力下放弃平静。
你会从一个重要的客户那里收到一份奇怪的生产错误报告。数据隐没了?这到底是怎么回事?你会开始钻研这个问题,并且胃里有会有一种沉甸甸的感觉 ….. 哦,事件十分不对劲,肾上腺素开始跳动。所有都十分蹩脚,你拉进领导开发人员开始缓和地讲述你所做的所有。他们让你说完,而后平静地回到结尾,兴许走到白板前。“好吧,让咱们从列出咱们晓得的货色开始,而后咱们能够列出 …..”等等。你从惶恐不安到感觉所有都会好起来。有这样人在你的团队真是一种解脱。不知何故,只管困难重重,我想我曾经胜利地在很多软件工程背景下成为这样的人。我能够排汇团队中人的压力,并散发回一种平静的感觉。这并不是说我有什么非凡的能力;我只是看到了足够多的软件问题,并设法找到了正当的解决放那。所以我置信不论这个新的危机是什么,咱们都能度过。可能为咱们团队中的人提供平静的起源十分让我开心。