我是一个平庸的开发人员
我个人认识一些非常有才华的开发人员,他们几乎不用费力就能开发出优秀的软件。正因为这些才华横溢的人才,我们的行业才充满着高期望。但令人悲伤的事实是:并非每个人都是忍者/大师/摇滚明星级的开发者。
而我就是这样的一个人:一个平庸的开发者。如果你不是天才,这篇文章将指导你如何在这个行业生存下去。
我总是用谷歌搜索最简单的东西
我记不住很多东西。比如标准库里的函数和方法、参数的位置、包名、样板代码等等。
所以,我不得不去谷歌搜索。我每天都这么做。我还会复用旧项目的代码。有时我甚至会从 StackOverflow 或 Github 复制粘贴答案。没错,它就是StackOverflow 驱动开发。
但我并不孤单。很多其他开发人员也这么做。Twitter上有一个很受欢迎的讨论,是由 的创建者发起的Ruby on Rails
。
但为什么这首先是不好的呢?嗯,它有几个缺点:
- 它允许你从其他人那里复制错误的设计决策或易受攻击的代码
- 它形成了一种特定的思维模式:如果我们无法通过谷歌找到某个东西,那么“休斯顿,我们有麻烦了”
- 当互联网瘫痪时,我们将无法工作
不过,我认为这不是什么大问题。它甚至可能成为你的秘密武器。我有一些建议可以参考,以减少负面影响。
如何生存:
- 使用
IDE
自动完成和建议,这样你就不必再谷歌搜索语言基础知识 - 记住你已经在哪里(而不是如何)解决了这个问题。这样你就可以随时在那里找到解决方案
- 所有粘贴到项目中的代码都应该在之后进行分析、重构和审查。这样,我们就不会因为糟糕的代码而损害项目,而是能够快速找到解决方案,从而帮助项目。
我让事情简单直接
机器总是按指令行事。有时,它们只是被指令去做错事。所以,软件开发的主要问题并非机器,而是开发人员的脑力。他们的脑力非常有限。因此,我们——平庸的开发人员——不能浪费时间去创建复杂的抽象概念、晦涩难懂的算法或难以理解的长代码块。保持简洁就好。
但是,如何判断这段代码简单,那段代码复杂呢?我们需要用WTFs/Minute
方法来衡量代码质量。
原理非常简单易懂。如果你发现代码中有什么不明白的地方,那就说明它太复杂了。你该怎么办?
- 重写它以获得更清晰的设计
- 提供文件
- 在最棘手的部分添加注释。但请记住,注释本身就是代码的味道。
如何从头开始写简单的东西:
我不相信自己
事实证明,一些开发人员能够交付高质量的代码。比如这位女士:玛格丽特·汉密尔顿,阿波罗计划的首席软件工程师。在这张照片中,她站在自己为登月任务编写的代码旁边:
但是,每当我写代码时,我都不相信自己。即使是项目中最简单的部分,我也会把事情搞得一团糟。这可能包括:
- 语言错误
- 逻辑错误
- 设计错误
- 样式错误
- 安全错误
- WTF 错误(我最喜欢!)
没有什么神奇的书能教你“如何编写无 Bug 代码”。这很正常。所有软件都有 Bug,但这个框架除外。去处理它吧。
问题是:任何人都不应该被允许编写有明显错误的代码。至少,我们应该尝试一下。但我该如何保护项目免受我自己的侵害呢?有很多方法可以做到。
如何生存:
- 编写测试。编写大量的测试。从集成测试到单元测试,都要编写。在
CI
每次拉取请求之前运行测试。这可以避免一些逻辑错误。 - 使用静态类型或可选静态类型。例如,我们使用
mypy
withpython
和flow
withjavascript
。积极影响:更清晰的设计和“编译时”检查。 - 使用自动样式检查。每种语言都有大量的样式检查器
- 使用质量检查。有些工具会在代码库上运行一些复杂的启发式算法来检测各种问题,例如,这一行代码包含太多逻辑、这个类不需要、这个函数太复杂。
- 检查你的代码。在合并到之前检查一下
master
。合并之后 - 花钱请人审核你的代码。这项技术有巨大的积极影响!因为当开发人员第一次查看你的代码时,他们更容易发现不一致之处和糟糕的设计决策。
它不仅可以在我的计算机上运行
大约十年前,我的团队开发了第一个大型软件项目,当时我们以java
源文件的形式发布。结果它在目标服务器上编译失败了。当时距离给客户演示还有几个小时。这真是个巨大的失败!我们设法让它运行起来,但那段经历改变了我们的人生。
发生这种情况是因为构建流水线中配置繁琐,而且非常复杂。我们无法妥善管理这个系统的复杂性。从那天起,为了降低这一步的复杂性,我尝试将程序打包到隔离的环境中,并在实际部署之前在此环境中进行测试。
近年来,随着docker
(以及容器的普遍)的兴起,它变得比以往任何时候都更容易。docker
它允许您在同一个隔离环境中运行开发、测试和生产。因此,您不会错过任何重要的事情。
心疼你吗?就拿我自己来说,我总是在创建服务器、初始配置服务器或连接服务器时忘记一些东西。有太多事情需要注意!希望我们能够自动化部署。有很多很棒的工具可以自动化你的部署过程。例如:terraform
、ansible
和packer
。阅读这些工具,找到你真正需要的工具来完成你的任务。
我也尝试尽快设置CI
/ 。这样,如果我的构建在测试或部署中失败,就会收到报告。CD
如何生存:
- 自动化部署所需的一切
- 用于
docker
应用程序开发、测试和部署 - 使用部署工具
应用程序部署后,我仍然不相信自己
哦,终于,我的应用投入生产了。它现在运行正常了。我可以小憩一会儿,一切都不会出问题。等等,不!一切都会出问题。没错,我是认真的:一切都会出问题。
实际上,有一些工具可以更容易地发现和修复现有问题。
Sentry
。当您的任何用户发生错误时,您将收到通知。几乎可以绑定到所有编程语言- 不同的服务和工具将来自多个进程和服务器的日志收集到一个地方
- 服务器监控。在这里,您可以配置 CPU、磁盘、网络和内存的监控。您甚至可以在用户真正破坏服务之前,提前发现需要扩展的时间。
简而言之,我们需要在生产环境中监控我们的应用程序。我们有时会用到所有这些工具,有时只使用最需要的部分。
不断学习
哇,要学的东西可真多。但这就是道理。如果我们想写出优秀的软件,就需要不断学习。没有捷径,也没有神奇的诀窍。只要每天学习如何进步就行了。
总之,我们需要了解两个基本的事情:
- 每个人都会遇到问题。唯一重要的是我们为这些问题做好了多大的准备。
- 我们可以将问题的根源降低到可接受的水平
这和你的心智能力或心态无关。
文章来源:https://dev.to/sobolevn/i-am-a-mediocre-developer--30hn