这篇文章汇编了 19 项在 2019 年可能会很有价值的技能和主题。但请不要感觉到有任何压力——我和其他大多数开发者也并非对每一个主题都很熟悉。我只是觉得这些东西应该值得我们关注,而且 JavaScript 生态系统的发展本来就永无止境。

1. 增加类型和模式——TypeScript 是 2019 年的一个非常好的候选项

事实证明,无类型编码不仅效率不高,而且容易出错。但这并不意味着你一定要使用严格的类型语法,你可以根据实际情况选择类型的严格程度,比如使用 JSON Schema或 Joi来验证实体和模型,或者用静态类型来注解 JS(请参考 https://github.com/facebook/flow ),或者使用全类型的 TypeScript。

TypeScript 在 2018 年取得了显著的进展,似乎已经进入了 Node 领地。如果你计划使用 TypeScript,那么应该问一下自己,你是否只是想要使用它的类型功能,如果也要使用接口和抽象类,那么可能需要学习新的编程范式。

2. 丰富你的 linter

linter 实际上是免费的午餐,只需要 5 分钟的设置,就可以免费获得自动代码保护,并在输入代码时发现重大问题。认为 linting 只是花拳绣腿的日子已经一去不复杂了。如今,linter 可以捕获严重的代码问题,例如错误没有被正确抛出、丢失信息、没有完成的 promise,以及其他你从未真正想要留在代码中的错误。

3. 更多的 Java 和更少的 Ruby——加深你的架构知识

有关 NodeJS 生态系统的架构和设计方面的知识并不多,每个人都在谈微服务,但只谈到了一些内部结构。因此,大多数应用程序和示例都是基于 MVC 概念以及一些来自 Ruby 的其他模式。这有什么问题?MVC 适用于构建内容服务,但在构建健壮的后端方面差强人意。你可以用两个类——Controller 和 Model 来描述你的整个业务逻辑、规则、数据访问、与其他微服务的通信吗?

我绝对不建议采用重量级的 Java/Spring 模式(所以我们才会来到 Node 的领地,不是吗?),而是选择一些能够提供价值却不会牺牲应用程序简单性的想法。

4. 计划如何利用 Async Hook 来获得更好的跟踪和上下文

单线程模型有一个缺点——请求会丢失上下文:当它们流经多个文件并执行异步操作时,变量在整个生命周期中不会被保留。为什么这个很糟糕?例如,开发人员通常希望在每个日志条目中包含唯一标识符,以便稍后可以关联同一请求的所有日志条目——在 2018 年实现这个并不是很容易。

2019 年将会有新的东西出来,Async Hook 就是其中之一(不是全新的特性,但很快就会结束实验阶段)——简单地说,这是一种在异步操作开始和结束时随时注入自定义代码的机制。这样就可以关联同一请求的所有代码并保留上下文。这为很多自定义程序包奠定了基础,这些程序包将 Node 的跟踪和上下文能力提升到了一个新的水平。

5. 了解最新的“Serverless”

注意:这里将 FaaS 和 Serverless 这两个词互换使用,尽管它们并不完全相同。

最初,FaaS 用于微任务的开发,而不是用于“微服务”应用程序。随着它们受欢迎程度越来越高,云供应商的胃口也越来越大,很快,新功能开始堆叠起来,到了 2019 年,它似乎变成了强大的应用程序基础设施。

它现在可以与 Kubernetes 展开竞争并为大型应用程序提供服务吗?有些人认为 Serverless 和 FaaS 是正交技术,但实际上,2019 年的每一个新的云应用程序都必须选择三者中的一个:裸机实例(如 EC2 或 GCP 计算)、Kubernetes 或 FaaS。因此,了解 K8S 和 FaaS/Serverless 并知道它们之间的区别将成为一项必备的设计技能。

6. 了解最新的 JavaScript 特性

我并不是一个只顾追求每一个语言新特性的狂热粉丝,有时候,这些闪亮的玩具会违背代码的简单性原则。一些真正有价值的 JavaScript 特性会随着时间沉淀下来(比如两年前引入的 async/await),所以 TC39 提案列表和 node.green值得一探究竟。

7. 熟悉至少一种 API 技术——GraphQL 是 2019 年的一个很好的候选项

REST 风格的 API 与它的设计目标相得益彰:可以很好地控制实体的修改和查询。假设你有一个财务记录系统,你可能希望设计非常严格的端点,即单个显式数据模型。然而,在其他非常常见的场景中,REST 表现不足,比如执行一系列可能返回不同数据集的查询、需要最小化 API 有效载荷的低带宽网络、强调速度的机器到机器通信,等等。那么是否应该换成其他的?当然不是,你可以选择混合使用。API 并不是架构,它们只是应用程序的端口(即入口点),并且多种 API 样式可以共存,甚至是在单个 Web 框架之上,如 Express。

那么要学习哪一个?你最好的选择可能是 GraphQL,它正在成为主流。它的生态系统已经非常成熟,可以提供非常流行的用例,如动态搜索和层次数据源。另一方面,gRPC 仍然是一种适用于服务器到服务器间通信的小众技术,因为其开销非常小(例如用于 Pub-Sub/ 消息队列系统)。

8. 超越单元和集成测试

你已经对测试金字塔、单元、集成和端到端测试很熟悉了?很好,这些是成功测试策略的基础。在过去的 10 年中,开发领域发生了巨大的变化,但测试模型几乎保持不变,于是我们不禁想知道如何测试像微服务、丰富的前端和 Serverless 这样的东西。一些现代技术与传统技术栈相辅相成,有时候甚至可以替换它们,以便实现更精简的测试策略,获得更高的投资回报率。

9. 在监控中遵循 SRE/DevOps 最佳实践

2019 年,即使是一个中型应用程序也可能包含数十个移动部件。然而,大多数开发人员没有花心思去学习由 SRE 工程师教给他们的监控和警报方面的知识。例如,开发人员通常会优先考虑并专注于 CPU 和内存等内部硬件指标,而不是去考虑会直接影响最终用户体验的指标,例如错误率或延迟。这些面向客户的指标有时候被称为“黄金信号”,而在 2019 年,你可能希望从关注这些指标开始,并采用类似的最佳实践。

10. 像攻击者一样思考:通过学习攻击工具和技术来提高安全级别

如果你不能像攻击者那样思考,也就无法像防守者一样思考。2019 年,你不应该将防御工作外包给第三方公司或只依靠静态安全扫描程序:攻击类型的数量非常之多,应用程序发生变更的速度是不可控的——在开展安全研讨会两天之后,团队有可能又添加了几个新的 AWS 服务、数据库类型和新的 IAM 角色……因此,开发人员其实是最大的隐含威胁,教育他们似乎是最终的补救措施。你必须将安全 DNA 根植到你自己和团队中,并为所有东西添加安全保护。

当你开始这么做之后,事实证明,安全问题并不没有那么可怕。你只需熟悉常见的攻击类型和工具,画出应用程序架构和流程,并想想你自己会如何攻击它。随着时间的推移,在不知不觉中,你将在做出每个设计决策和编写每一行代码时考虑安全问题。

11. 制定包更新策略

2018 年的教训:过早更新可能很危险。一个团队通常会使用这两个包更新策略中的一种:一个是尽快更新,有时甚至使用自动化流程。一个是根本没有更新策略,有时候是看心情进行更新。虽然第一种方法似乎更好,但令人惊讶的是,它在 2018 年成为最危险的方法:在 40 天之内,社区就发现了好多个恶意包事件,如 flat-stream,那些在等待或没有进行更新的人反而平安无事。可以考虑使用自动化工具正式化更新策略,并找到不更新和更新之间的最佳平衡点。

12. 进行渐进式安装,将部署和发布阶段分开

2019 年,你可能会发现进行更安全的部署非常重要,也就是不一次性推出到所有的生产环境,然后让你的小心脏像锤子一样砰砰跳。进行细粒度部署(也就是金丝雀部署)可以分为 3 个阶段:部署——将新代码发送到隔离的新生产环境(例如新的 Kubernetes 服务或新的机器实例)。在这个阶段,它不为实际用户提供服务,所以没有什么可担心的。测试——现在有少数人可以使用生产环境的实例,并测试新代码。发布——逐步允许更多的用户使用新版本,在你有足够的信心后,可以下架旧版本。

需要注意的是:进行全面的金丝雀部署在 2019 年仍然是非常昂贵的,因为它需要协调很多基础设施部件,如路由和监控。因此,请考虑从简单和半手动金丝雀部署开始(例如根据监控指标手动启动更多部署了新版本的主机)。

13. Kubernetes 正在吃掉这个世界

有一个很明显的趋势:Kubernetes(K8S),一个为应用程序组件提供网络、横向扩展、部署和其他骨干服务的基础设施,现在几乎是托管应用程序的事实标准。它的受欢迎程度是非常惊人的:在所有云供应商的支持下,拥有无与伦比的扩展生态系统,54%的企业已经拥有至少一个 K8S 集群。

如果你是初学者,这里提供了一个很好的入门概述。同时也请了解 Istio、K-Native、Kuberenes 作业、网络政策、Helm、Scaffold。一句话:你花在加深了解 K8S 技能上的时间最终会给你带来回报。

14. 区块链技术提供了一些很好的机会

一个很明显的趋势:区块链不只是用于比特币和加密功能,它也可以用于任何分布式事务性系统。

15. 获得机器学习技能,至少有一定的谈资

一个很明显的趋势,可惜的是,我对机器学习库一无所知,我的 2019 年目标至少是能够说出一些有关机器学习的东西,并能够找出快速获胜的机会(例如像 tensorflow.js 和 brain.js 这样的 JS 库可以在没有强大的基础设施的情况下提供一些见解)。

16. 了解其他开源库代码

注意,长时间在一个项目中使用同样的技术可能会让你的视野变窄,并隐藏了很多替代方案。所以,努力去了解更多其他的项目,主要是成功的开源项目。

17. 深化对 Linux 操作系统的理解,重点关注 Linux 进程方面的东西

了解 Linux 进程将会让你获得真正的竞争优势,因为它会影响很多开发任务,如监控、保护进程、使用 Docker、优雅地关闭等其他任务。努力了解进程、信号、权限模型、常用命令、进程类型,等等。

18. 深入了解 Node.js 内部

我真的很喜欢 Ryan Dahl(Node.js 原始作者)讲的一句话:“你不可能理解所有的东西。但是,你应该让自己去了解系统”。当你需要处理令人头疼的生产环境问题或设计一些基础设施组件(例如监控事件循环性能)时,对底层机器的深入了解被证明是有价值的。你可能已经熟悉了 v8 和 libuv 等核心构建块。

那么 2019 年是深入了解 Node.js 的好时机,例如,了解每个 libuv 事件循环周期内究竟发生了什么?或者可以了解与操作系统 IO 的交互是如何进行的(例如活动句柄)?

19. 学习使用科学的方法

你学到的和内化的东西将塑造你未来的职业生涯。然而,很多开发人员既没有学习策略,也没有学习如何使用科学的方法进行有效的学习。

在一个关于“防止 JavaScript 类型错误”的会议上,VP 要求继续使用 JavaScript 而不重构整个代码库(不使用 TypeScript……),突然你的一位同事建议使用 Facebook Flow,房间里的每个人都表示赞同!你突然想起你曾经看到过有关它的文章,但它从来没有被你内化,只是在你的脑海中一闪而过。

这是怎么回事?

显然,有一种叫作“竞争幻觉”的现象解释了为什么我们会忘记这些东西:你可能花了 1 个小时阅读一篇博文,但在几天之内就不记得了!研究表明,如果你稍后尝试与某人说起这些东西,或者在第二天再次阅读文章摘要,就可以大大提高记忆成功率。当然,还有其他各种技巧可以帮助你在正确的时间记住并获取正确的知识。花几个小时学习如何学习可以为你的职业生涯带来很大的帮助!

英文原文:

https://medium.com/@me_37286/19-ways-to-become-a-better-node-js-developer-in-2019-ffd3a8fbfe38

在2019年,如何成为更好的Node.js开发者?相关推荐

  1. 2019 年,19 种方法让自己成为更好的 Node.js 工程师

    原文作者:Yoni Goldberg 译者:UC 国际研发 Jothy 写在最前:欢迎你来到"UC国际技术"公众号,我们将为大家提供与客户端.服务端.算法.测试.数据.前端等相关的 ...

  2. 英巴卡迪诺_什么是迪诺? 一个更好的Node.js

    英巴卡迪诺 如果您喜欢Node.js但不喜欢它的包管理器npm ,或者想要一个比Node.js更安全JavaScript运行时环境,则可能会发现感兴趣的新开源项目Deno (单词Deno是Node的字 ...

  3. 更优雅的 node.js 框架 :nestjs 5.1 发布 ,支持异步动态 modules 。

    Nest是构建高效,可扩展的 Node.js Web 应用程序的框架. 它使用现代的 JavaScript 或 TypeScript(保留与纯 JavaScript 的兼容性),并结合 OOP(面向对 ...

  4. 2019,被催更了!2020,干就是了!

    2019 年已经过去了 13 个小时,回望 2019,有没有哪个瞬间让自己真正感动呢? 这种瞬间的确很多.很多....... 2019 年参见了 Elastic 开发者大会,面基了很多社区中活跃的真大 ...

  5. 2019年,你需要关注这些Node API和Web框架

    对于Node.js框架和开源软件来说,2018年是非常有趣的一年.开发者社区讨论了企业赞助对开源项目的作用以及如何维护那些没有经济支持却有数百万人使用的项目.同样,安全问题也得到了极大关注,一些流行的 ...

  6. 如何更好的利用Node.js的性能极限

    通过使用非阻塞.事件驱动的I/O操作,Node.js为构建和运行大规模网络应用及服务提供了很好的平台,也受到了广泛的欢迎.其主要特性表现为能够处理庞大的并且高吞吐量的并发连接,从而构建高性能.高扩展性 ...

  7. (八)JS异步进阶,更深更广搞定JS异步【想要进大厂,更多异步的问题等着你】

    JS异步进阶 提问 event loop JS如何执行 示例 总结event loop的过程 DOM事件和event loop promise进阶 三种状态 状态的表现和变化 then和catch对状 ...

  8. 让你的 Node.js 应用跑得更快的 10 个技巧

    Node.js 受益于它的事件驱动和异步的特征,已经很快了.但是,在现代网络中只是快是不行的.如果你打算用 Node.js 开发你的下一个Web 应用的话,那么你就应该无所不用其极,让你的应用更快,异 ...

  9. WasmEdge 0.9.1 发布:更佳 networking 支持与开发者体验、安卓支持

    WasmEdge 0.9.1 发布! 更好的 networking 支持与开发者体验.安卓支持 WasmEdge 0.9.1 发布了!此版本集成了高性能 networking.JavaScript 流 ...

最新文章

  1. sql的不等于条件优化_SQL优化案例(2):OR条件优化
  2. [解答] python下如何安装SocketServer?
  3. 2.2 逻辑回归-机器学习笔记-斯坦福吴恩达教授
  4. plsql developer导入导出序列方法
  5. 配置Hibernate二级缓存步骤
  6. myeclipse/eclipse方法和类的自动注解
  7. ORL人脸识别tensorflow实现
  8. 淘宝客佣金设置多少合适?淘宝客的佣金是怎么算的?
  9. 如何让新建网站被搜索引擎快速收录
  10. 结构化、半结构化、非结构化数据
  11. 在计算机上格式u盘启动,请问U盘制作成启动盘后插电脑上显示0字节,打不开也无法格式化,提示磁盘写有保护怎么回事?...
  12. Exploratory Social Network Analysis with Pajek(第三版)8
  13. 集体名词做主语时下谓语的单复数选择
  14. 微信共享智能充电桩小程序开发功能方案
  15. OpenCV技巧 | 常用格式图片保存为透明背景图片(附Python源码)-教你轻松制作Logo
  16. Apache 的 X-sendfile
  17. 用Python进行多元线性回归分析(附代码)
  18. 扫描探针显微术入门(7)
  19. 东野圭吾《梦幻花》读后感
  20. 抄底的艺术——量化交易之路

热门文章

  1. Perforce 使用说明
  2. 分享一下字符串匹配BM算法学习心得。
  3. Ubuntu 9.04安设教程(傻瓜版)
  4. vim显示行号、语法高亮、自动缩进的设置
  5. VC++读写INI文件示例
  6. Bochs调试Linux内核初级入门2、bochs调试断点和单步指令、0x7c00、关中断和开中断指令
  7. JAVA 调用Web Service
  8. (重要)java都是值传递,与对象形参所指向的对象改变,其实参所指向的对象也相应改变并不矛盾(2011年9.30日一天写的两个程序的总结结果)...
  9. Vue(小案例_vue+axios仿手机app)_实现用户评论
  10. Codeforces 861D - Polycarp's phone book 字典树/hash