我是一个平庸的开发人员

2025-05-26

我是一个平庸的开发人员

我个人认识一些非常有才华的开发人员,他们几乎不用费力就能开发出优秀的软件。正因为这些才华横溢的人才,我们的行业才充满着高期望。但令人悲伤的事实是:并非每个人都是忍者/大师/摇滚明星级的开发者。

而我就是这样的一个人:一个平庸的开发者。如果你不是天才,这篇文章将指导你如何在这个行业生存下去。

我总是用谷歌搜索最简单的东西

我记不住很多东西。比如标准库里的函数和方法、参数的位置、包名、样板代码等等。

所以,我不得不去谷歌搜索。我每天都这么做。我还会复用旧项目的代码。有时我甚至会从 StackOverflow 或 Github 复制粘贴答案。没错,它就是StackOverflow 驱动开发

但我并不孤单。很多其他开发人员也这么做。Twitter上有一个很受欢迎的讨论,是由 的创建者发起的Ruby on Rails

但为什么这首先是不好的呢?嗯,它有几个缺点:

  1. 它允许你从其他人那里复制错误的设计决策或易受攻击的代码
  2. 它形成了一种特定的思维模式:如果我们无法通过谷歌找到某个东西,那么“休斯顿,我们有麻烦了”
  3. 当互联网瘫痪时,我们将无法工作

不过,我认为这不是什么大问题。它甚至可能成为你的秘密武器。我有一些建议可以参考,以减少负面影响。

如何生存

  1. 使用IDE自动完成和建议,这样你就不必再谷歌搜索语言基础知识
  2. 记住你已经在哪里(而不是如何)解决了这个问题。这样你就可以随时在那里找到解决方案
  3. 所有粘贴到项目中的代码都应该在之后进行分析、重构和审查。这样,我们就不会因为糟糕的代码而损害项目,而是能够快速找到解决方案,从而帮助项目。

我让事情简单直接

机器总是按指令行事。有时,它们只是被指令去做错事。所以,软件开发的主要问题并非机器,而是开发人员的脑力。他们的脑力非常有限。因此,我们——平庸的开发人员——不能浪费时间去创建复杂的抽象概念、晦涩难懂的算法或难以理解的长代码块。保持简洁就好

但是,如何判断这段代码简单,那段代码复杂呢?我们需要用WTFs/Minute方法来衡量代码质量。

每分钟代码质量如何?

原理非常简单易懂。如果你发现代码中有什么不明白的地方,那就说明它太复杂了。你该怎么办?

  1. 重写它以获得更清晰的设计
  2. 提供文件
  3. 在最棘手的部分添加注释。但请记住,注释本身就是代码的味道。

如何从头开始写简单的东西

  1. 对变量、函数和类使用正确的名称
  2. 确保程序的每个部分只做一件事
  3. 优先使用纯函数而不是常规函数
  4. 优先使用常规函数而不是类
  5. 仅在强烈需要时才回退到课程

我不相信自己

事实证明,一些开发人员能够交付高质量的代码。比如这位女士:玛格丽特·汉密尔顿,阿波罗计划的首席软件工程师。在这张照片中,她站在自己为登月任务编写的代码旁边:

玛格丽特·汉密尔顿

但是,每当我写代码时,我都不相信自己。即使是项目中最简单的部分,我也会把事情搞得一团糟。这可能包括:

  1. 语言错误
  2. 逻辑错误
  3. 设计错误
  4. 样式错误
  5. 安全错误
  6. WTF 错误(我最喜欢!)

没有什么神奇的书能教你“如何编写无 Bug 代码”。这很正常。所有软件都有 Bug,但这个框架除外。去处理它吧。

问题是:任何人都不应该被允许编写有明显错误的代码。至少,我们应该尝试一下。但我该如何保护项目免受我自己的侵害呢?有很多方法可以做到。

如何生存

  1. 编写测试。编写大量的测试。从集成测试到单元测试,都要编写。在CI每次拉取请求之前运行测试。这可以避免一些逻辑错误。
  2. 使用静态类型或可选静态类型。例如,我们使用mypywithpythonflowwith javascript。积极影响:更清晰的设计和“编译时”检查。
  3. 使用自动样式检查。每种语言都有大量的样式检查器
  4. 使用质量检查。有些工具会在代码库上运行一些复杂的启发式算法来检测各种问题,例如,这一行代码包含太多逻辑、这个类不需要、这个函数太复杂。
  5. 检查你的代码。在合并到之前检查一下master。合并之后
  6. 花钱请人审核你的代码。这项技术有巨大的积极影响!因为当开发人员第一次查看你的代码时,他们更容易发现不一致之处和糟糕的设计决策。

它不仅可以在我的计算机上运行

在我的机器上工作

大约十年前,我的团队开发了第一个大型软件项目,当时我们以java源文件的形式发布。结果它在目标服务器上编译失败了。当时距离给客户演示还有几个小时。这真是个巨大的失败!我们设法让它运行起来,但那段经历改变了我们的人生。

发生这种情况是因为构建流水线中配置繁琐,而且非常复杂。我们无法妥善管理这个系统的复杂性。从那天起,为了降低这一步的复杂性,我尝试将程序打包到隔离的环境中,并在实际部署之前在此环境中进行测试。

近年来,随着docker(以及容器的普遍)的兴起,它变得比以往任何时候都更容易。docker它允许您在同一个隔离环境中运行开发、测试和生产。因此,您不会错过任何重要的事情。

心疼你吗?就拿我自己来说,我总是在创建服务器、初始配置服务器或连接服务器时忘记一些东西。有太多事情需要注意!希望我们能够自动化部署。有很多很棒的工具可以自动化你的部署过程。例如:terraformansiblepacker。阅读这些工具,找到你真正需要的工具来完成你的任务。

我也尝试尽快设置CI/ 。这样,如果我的构建在测试或部署中失败,就会收到报告。CD

如何生存

  1. 自动化部署所需的一切
  2. 用于docker应用程序开发、测试和部署
  3. 使用部署工具

应用程序部署后,我仍然不相信自己

哦,终于,我的应用投入生产了。它现在运行正常了。我可以小憩一会儿,一切都不会出问题。等等,不!一切都会出问题。没错,我是认真的:一切都会出问题。

实际上,有一些工具可以更容易地发现和修复现有问题。

  1. Sentry。当您的任何用户发生错误时,您将收到通知。几乎可以绑定到所有编程语言
  2. 不同的服务工具将来自多个进程和服务器的日志收集到一个地方
  3. 服务器监控。在这里,您可以配置 CPU、磁盘、网络和内存的监控。您甚至可以在用户真正破坏服务之前,提前发现需要扩展的时间。

简而言之,我们需要在生产环境中监控我们的应用程序。我们有时会用到所有这些工具,有时只使用最需要的部分。

不断学习

哇,要学的东西可真多。但这就是道理。如果我们想写出优秀的软件,就需要不断学习。没有捷径,也没有神奇的诀窍。只要每天学习如何进步就行了。

总之,我们需要了解两个基本的事情:

  1. 每个人都会遇到问题。唯一重要的是我们为这些问题做好了多大的准备。
  2. 我们可以将问题的根源降低到可接受的水平

这和你的心智能力或心态无关。

文章来源:https://dev.to/sobolevn/i-am-a-mediocre-developer--30hn
PREV
面试准备:系统设计
NEXT
如何学习数据结构和算法(初学者终极指南)