程序员「开发者成长」1x程序员五年总结出的经验法则( 三 )


在使用 Python 时 , 你应该使用类型提示 , 这么做更明智一些 。
规则 6:何时使用硬核语言
我认为 Go、Rust、Haskell、Erlang、Clojure、Kotlin、Scala 是更“硬核”的语言 。 在这些语言中 , 我只用 Kotlin 交付过产品代码 。
但是设想一下 , 如果我正在构建一个延迟和性能比社区或类库支持更重要的全新的 Web 服务 , 那么我可能会使用 Go 或 Rust 。
我在做一些不需要很多业务逻辑的事情时 , 比如一些非常优雅的东西或数学函数方法 , 可能会用到 Haskell 或 Erlang 。
我不知道我什么时候会使用 Clojure , 我想 , 如果我真的开始了解和喜欢 Lisp 了 , 我就会使用它 。 我知道 Clojure 是一个编译为 JVM 字节码的函数范型 , 但我更喜欢使用 Kotlin 。 因为 Kotlin 能与 Java 一起使用 , 而且 IntelliJ 对它的支持也很不错 。 对于 Scala 也类似 , 我首先会选择 Kotlin 。
规则 7:如何使用 Javascript
我写过的最糟糕的代码就是用 Javascript 写的 。 当时 , 我正在为亚马逊做一个移动购物专家 , 我团队中的同事对于 JS 框架的有关内容都知之甚少 。 我们用的是 vanilla JQuery 。
一开始还很简单 , 但很快我们就有了很多新的前端需求 , 管理前端状态简直就是一场噩梦 — 想想看 , 组件消失了 , 然后又出来了 , 我们也不知道为什么 , 所以我们把每个变量都输出到了控制台 。
许多人都有过如此糟糕的经历 , 我就是其中之一 。 但我认为这主要是我们自己造成的 。 几年后的今天 , 我的 JS 指南是:
1、使用 Typescript, 这是更明智的选择 。
2、尝试尽可能将逻辑推给服务器 。 如果前端不是超级复杂 , 我将考虑类似于 Phoenix 的选择 , 它实际上是把所有东西都推给了服务器 。
3、使用 Vue 之类的框架 , 或者在需要前端交互时使用 React 。
4、不要跳过单元测试 。
规则 8:何时使用 C 或 C++
我觉得不是你选择了 C , 而是它选择了你 。 有各种应用程序都必须使用 C 语言 , 如操作系统、语言设计、底层编程和硬件应用等 。
C++ 很有趣 。 它似乎非常适用于机器人、电子游戏和高频交易等应用程序 , 因为在这些应用程序中 , 没有“垃圾回收”使其性能更优于 Java 。
规则 9:如果你希望不必重新构建就可以测试服务器上的变更 , 那么就使用 PHP 或 Hack 吧
出于安全方面的考虑 , 在亚马逊禁用 PHP , 但是至少在 2020 年有大量 Facebook 和 Slack 的后端在使用它的继承者 Hack 。
在写这篇文章之前 , 我从来没有考虑过何时使用 PHP 或 Hack 。 也许是因为这在亚马逊是一种禁忌吧 。 我知道 Slack 和维基百科都在使用它 。 Slack 的人声称它拥有一个真正对开发人员友好的编程环境 , 例如 , 你不需要重新启动本地服务器来查看你改动的内容 , 而且它有 web-native 的并发支持 。
技 术规则 10:何时使用微服务
当我需要每隔一段时间运行一个相对小且简单的代码块时 , 我就会使用微服务 。
规则 11:选择哪种数据库技术
当需要执行即时查询和或需要支持 ACID 和事务时 , 请选择 SQL 。 否则选择 NoSQL 。 虽然 NoSQL 在事务处理方面越来越好 , 但 PostgreSQL(我熟悉 AWS Aurora 风格)在可用性、扩展性和持久性方面也越来越好 , 而这些正是 NoSQL 的传统优势 。
测 试规则 12:何时编写单元测试
在任何时候我都会尝试编写单元测试 , 只要预计缺陷产生影响 , 无论多么细微 。 缺陷的预计影响应该是:缺陷的可能性 × 缺陷的成本 。 我的做法像是一种逃避 , 因为我无法精确计算这些值 。 但是 , 至少对于我编写的代码和通常给出的需求来说 , 一般出现代价高昂的缺陷的可能性还是非常大的 。
但每个代码块都应该有一个简单的单元测试 , 从而验证代码是以可测试的方式编写的 , 这真的非常重要 。