写点什么

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

  • 2018-12-25
  • 本文字数:4472 字

    阅读完需:约 15 分钟

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

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

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

事实证明,无类型编码不仅效率不高,而且容易出错。但这并不意味着你一定要使用严格的类型语法,你可以根据实际情况选择类型的严格程度,比如使用 JSON SchemaJoi来验证实体和模型,或者用静态类型来注解 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


2018-12-25 10:283533
用户头像

发布了 731 篇内容, 共 480.9 次阅读, 收获喜欢 2008 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

喜讯!云起无垠荣膺信通院 2023 - 2024 年度 “铸链” 案例自主研发创新成果奖

云起无垠

【YashanDB知识库】服务器重启后Yashandb无法启动

YashanDB

数据库 yashandb

鸿蒙 NEXT 开发之后台任务开发服务框架学习笔记

威哥爱编程

HarmonyOS HarmonyOS框架 HarmonyOS NEXT HarmonyOS5.0

质变科技 AI-ready Data Cloud|行列混存格式下的读链路优化

AI数据云Relyt

数据仓库 AI-ready 数据云

质变科技 AI-ready Data Cloud|如何构建 Auto Table Service 保证高性能查询

AI数据云Relyt

数据库 大数据 数据仓库 数据湖

【杂谈】服务端能同时处理多少个 Socket 连接?背后的资源与限制分析

不在线第一只蜗牛

网络 服务器

SD-WAN加速海外SaaS访问速度

Ogcloud

网络加速 SD-WAN SD-WAN组网 SDWAN SD-WAN国际专线

为什么技术高管汇报一定要用数据说话?

思码逸研发效能

程序员 研发效能 IT管理 研发效能度量 管理技术团队

【YashanDB知识库】IMP跨网络导入慢问题

YashanDB

数据库 yashandb

扫段攻击来袭,DDoS防御面临新挑战

网络安全服务

IP udp syn DDoS DDoS 攻击

AutoMQ 流表一体新特性 Table Topic 发布: 无缝集成 AWS S3 Table 和 Iceberg

AutoMQ

kafka iceberg 3S reinvent

1219| 清华AI助攻科研升职 | Anthropic揭示模型风险 | Genesis开源物理引擎 | 字节新视觉理解模型 | OpenAI功能革新 | 武汉大学成立AI学院 | 上海报业数字人上线

言寡意多

KaiwuDB 智能综采应用项目获中国信通院数据库星河“典型案例”

KaiwuDB

数据库

一触“伙伴+华为”体系,传媒行业点亮数智之光

脑极体

AI 传媒

决赛预告|2024数据库编程大赛前8名入围,决赛将评选出SQL大师!

NineData

火山引擎云基础、模型服务等多产品更新发布,为企业大模型应用落地再提效

极客天地

DNS DDoS攻击威胁加剧,国科云解析筑牢网络安全防线

防火墙后吃泡面

天谋科技时序数据库 IoTDB 入选工信部中国电子信息行业联合会优秀创新软件产品推广目录

Apache IoTDB

《Django 5 By Example》读后感

codists

Python django

苹果M4芯片玩游戏怎么样?全新MacBook Pro 适合打游戏吗?

阿拉灯神丁

crossover pd虚拟机 MacBook Pro 苹果mac游戏 macOS 14 Sonoma

【YashanDB知识库】如何处理no free block in dictionary cache

YashanDB

数据库 yashandb

【YashanDB知识库】in大量参数时查询性能慢

YashanDB

数据库 yashandb

Kali Linux 2024.4 发布 - 领先的渗透测试发行版

sysin

kali Linux

李飞飞团队多模态模型统一动作与语言;OpenAI 推出电话服务,让更多人与 Chatgpt 对话丨 RTE 开发者日报

声网

质变科技 AI-ready Data Cloud|从存算分离到Serverless,数仓要解决的关键问题

AI数据云Relyt

大数据 Serverless 数据仓库 数据湖 存算分离架构

从体系建设到深化应用,中国管理会计实现十年跃迁(上)

用友智能财务

【YashanDB知识库】insert语句有编码不识别字,执行卡住问题

YashanDB

数据库

在2019年,如何成为更好的Node.js开发者?_大前端_Yoni Goldberg_InfoQ精选文章