生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

想成为一名 Web 开发者?你应该学习 Node.js 而不是 PHP

  • 2018-04-17
  • 本文字数:4502 字

    阅读完需:约 15 分钟

我认为,这是一种暗示…

我经常被我的学生们问到的最常见的问题之一是,“为什么你在课程中教授 Node.js 而不是 PHP?” 告诉他们,“相信我,我在行业内工作”显然不够。因此,本篇就是我在课程中包含 Node.js 的原因,以及如果你想要成为一名开发者,你应该抛弃 PHP 的原因。尽管我用这两种语言作为一个例子,但我会在本文中向你展示一个框架,用来决定你应该在接下来的开发生涯中学习哪些工具、编程语言、框架以及代码库。

作为一名开发者,你的时间和资源是有限的,你必须决定将你的时间投入到哪些语言和工具中,从而获取最大回报。

现在,你最好问自己一个问题:我能将时间和精力投入到哪些学习上,才能在未来的开发事业中获得知识、薪资和满意度方面的最大净值?

这并不意味着选择最容易的路径。这意味着选择一些工具,使你能够在接下来的许多年中保持竞争力的同时,提升你的技能,从而使你成为一名高级开发人员

在本文的结论部分,你会发现所有我所推荐的 2018 年的技术,如果你想要成为一名 Web 开发者的话。因此,如果你实在急不可耐,可以直接跳到本文末尾。否则,请抓住这次千载难逢的机会,开启一段冒险之旅。

我们会在本文中使用两种类型的分析:就业前景分析技术分析。下面就是具体内容:

图片来源: https://vizteck.com/blog

Node.js vs PHP — 就业前景分析

我们会这个分析中使用 Stackoverflow 开发者调查数据和 LinkedIn 数据。我们也将只聚焦 Web 开发相关的技术。

流行度:

在排行榜中,JavaScript 连续 5 年是最常用的编程语言。Python 的使用 5 年内首次超过 PHP。那么 Node.js 是什么情况呢?Node.js 是一种 JavaScript 运行时环境。通俗点讲,Node.js 是一种使用 JavaScript 的方式,就像你在服务器端使用 PHP 那样。因此,在本文中,你可以将 Node.js 当作 JavaScript。


你可以看到,Node.js 和 JavaScript 排在首位,而且明显比 PHP 流行。

在过去 5 年中,Stackoverflow 从开发者调查中收集数据,发现 JavaScript 和 Node.js 之类的语言的流行度在增加,而像 PHP 之类的语言的使用情况在萎缩:

React 最受开发者喜爱,然而,Node.js 是开发者最想要掌握的,而且是第二受喜爱的。

薪资待遇和工作机会:

考虑到拥有的开发经验,使用下表中蓝线以上语言(例如 Go、Rust 和 Clojure)的开发者的薪资相对较高,而使用蓝线以下语言(例如 PHP)的开发者的薪资相对较低。表中圆圈的大小表示该语言相对于其它语言来说的使用者数量。
PHP 开发者的薪资明显更低且他们的开发经验年限更少。

在 LinkedIn 招聘,你可以看到全世界发布的 Node.js 职位比 PHP 职位多了差不多 10,000 个。这还不算 Node.js 相对于 PHP 来说是一个年轻得多的技术,而且 PHP 在 WordPress 中广泛使用,而 WordPress构建了互联网上 30% 的网站

最终,你可以看到,各地区的技术职位的平均薪资(我没有包含世界栏,因为 PHP 都没有在世界栏上榜):




当然,我们在这里不是要吐槽PHP。我们只是通过观察这些数值来决定选择学习什么。PHP 明显比JavaScript 和Node.js 之类的技术排名低。

更新:截至本文发布,stackoverflow 发布了2018 年调查结果。 PHP 的衰退在扩大

总结:

PHP 人气在下降,而 Node.js 的就业市场和人气在增加。总之,PHP 开发人员的薪资明显比其他开发人员低,而且差距似乎在继续加大

Node.js vs PHP — 技术分析

让我们看一看这两种技术各自的优缺点。

Node.js 优点:

  • 非常适合那些客户端和服务器端需要保持实时通信的应用。类似 socket.io 之类的工具,使得构建聊天应用之类的东西非常简单。同样这个功能也让 Node.js 适合那些处理物理网设备数据的应用以及单页应用,而这种类型的应用现在非常普遍。
  • 原生的 JSON 序列化和反序列化,与 Web 中的 AJAX 请求配合得非常好。
  • 对具有非阻塞输入 / 输出的事件驱动应用非常有用(输入 / 输出是指一个信息处理系统与外部世界的通信。这个信息处理系统可能是计算机,而外部世界可能是一个人或者另外一个信息处理系统,例如数据库)。
  • 你学会了 JavaScript,你就学会了 Node.js。你不需要去学习另外一种语言,例如 PHP。这意味着,你可以花费全部精力学习和掌握 JavaScript。你将能够用同一种语言编写前端和后端代码。
  • 许多流行的客户端框架,例如 React、Vue 和 Angular 是用 JavaScript 编写的,而且 JavaScript 是现代浏览器的主流语言。当你在服务器端使用 Node.js 时,你就可以获得在整个应用开发栈使用同一种脚本语言的所有好处。前端和后端使用同一种语言非常易于维护:这使得所有团队成员之间的协作更容易,因为前端和后端开发人员都使用相同的 JvaScript 数据结构、方法和语言规范。
  • 当处理来自客户端的大量请求时,单线程事件驱动系统非常快。
  • 通过 ** NPM ** 可以获取越来越多的客户端和服务器端第三方代码库,以及 Web 开发命令行工具。另外,大多数这些项目都托管在 GitHub 上,你可以报告一个问题,或者创建自己的代码分支进行定制。
  • 可以运行 JavaScript 相关工具和其它 Web 开发者相关工具的环境已经成为标准环境,包括任务执行器、压缩工具、代码检查工具、格式化工具、预处理工具、打包工具和分析处理器。
  • 许多新的 API 和 AWS Lambda 之类的服务提供原生支持。
  • V8 引擎的所有性能提升,我们都可以从中获益。V8 是 Google 研发的 JavaScript 解析器,Node.js 构建在 V8 引擎之上。由于谷歌开发团队不断提高 V8 的性能,Node.js 免费从中获益。

Node.js 缺点:

  • 上面提到的 NPM 包会让你的代码变得臃肿,这些包可能是不安全的,而且由于有太多选项,想找到一个好用的软件包很困难(观察下载数和 GitHub 统计数据是一种解决这个问题的方法)。
  • 有太多使用 Node.js 和 npm 包构建服务器的方法。这使得新入门的开发人员更难以从中挑选。
  • 不适合那些依赖 CPU 消耗量大的代码的服务器。(例如,图像处理或排序等复杂算法)。一般来说,任何输入 / 输出之外的事情都可以看作是消耗 CPU 的代码。通常,多线程服务器环境比 Node.js 更适合这种场景(解决方案:如果需要,你可以用 C 语言编写 CPU 密集的代码)。
  • Node.js 不能利用底层系统或机器的所有核心。你必须自己写逻辑来使用多核处理器。这可以用许多方法实现,但是这需要一点额外的工作(当你能够最大化系统的 CPU 利用率时,这就会成为一个优势)。

Node.js 总结:

Node.js 非常适合那些并发连接数比较多的应用,每一个请求只需要很少的 CPU 时钟周期。这使它非常适合目前互联网上的许多应用,例如单页应用应用和实时应用。

使用 JavaScript 内置的异步处理,可以创建高度可伸缩的服务器端代码,最大化单个 CPU 的利用率和内存,并且能够比传统的多线程服务器处理更多的并发请求。

Node.js 的依赖、规则和指南更少,这使得开发人员可以更自由更有创造力地按照他们的方式开发他们的应用。开发人员可以为他们的项目选择最佳的架构、设计模式、模块和功能,通过 NPM 从社区中获益。

PHP 优点:

  • 由于 PHP 诞生年代久,因此有一稳健庞大的社区。
  • PHP 有一个功能强大的代码库,包含流行的网站构建平台(例如 WordPress、Joomla、Drupal)。CMS(内容管理系统),例如 WordPress,使得在几分钟内部署一个博客或者一个电商网站非常容易,而且允许非开发人员非常容易地进行定制。
  • 使得用非开发工具进行安装更容易,适合个人或者小型公司,他们不需要懂 SSH 和 Linux 服务器。基础托管平台提供的大量 PHP 应用(例如 cPanel)可以通过一次点击就安装完毕。
  • 和其它通用用途的编程语言不一样,PHP 是特意为 Web 设计的。PHP 提供了一种非常棒的服务器端解决方案,而不需要担心浏览器端的 JavaScript,因为所有的页面都可以轻易由服务器端生成和渲染。如果你想要避免在客户端传送太多代码,这就非常有用。Node.js 也可以这样做,但是解决方案没有这么简单。
  • PHP7 和 HHVM(由 facebook 支持)开发提高了 PHP 的性能。

PHP 缺点:

  • PHP 只用于后端。这意味着,如果你想要做客户端相关的工作或者被认为是一名全栈开发者,你还是需要学习 JavaScript。
  • 使用 PHP,服务器端重渲染和大量访问服务器的请求来生成和渲染页面,对于单页应用来说,并不是一个好的选择。
  • 每个活跃的客户端消耗一个服务器进程。不适合拥有很多客户端连接的 App。
  • 与 Node.js 相比,新的 API 和 AWS Lambda 之类的服务对于 PHP 的原生支持有限。
  • 它遵循经典的客户端 - 服务器模型,其中每个页面都初始化应用、数据库连接和 HTML 渲染。这使得当你导航一个网站时,PHP 比 Node.js 应用要慢。Node.js 应用一直运行,只需要初始化一次。因此,随着 HTML5、AJAX 和 WebSocket 等 Web 技术的出现,Node.js 更适合新的 Web 发展方向。

PHP 总结:

PHP 简单易学,围绕它有一个庞大的社区。对于标准化的博客或新闻站点方案来说,PHP 是一个不错的选择。它能够借助于最流行的 CMS(内容管理系统)——WordPress 的力量。WordPress 使你能够无需编写太多代码,就可以定制博客。然而,在这种情况下,更简单导致质量不怎么样。一项技术越容易学习,人们进入该领域也就越容易,然后就增加了人才供应,你的服务的收费也就更低。

结论

随着 WordPress 的普及,PHP 是 Web 1.0 时代最顶尖的语言之一。Node.js 在 2009 年发布,而且技术上来讲并不是一种语言,而是 JavaScript 的一种运行时环境。Node.js 是新一代 Web 开发的佼佼者,在 Web 2.0 时代遇到的越来越多的基于事件的、数据驱动的、I/O 密集的应用,更适合用它来构建。

特别是,Node.js 基于事件的异步架构,使得它非常适合实时应用,例如消息和协作应用。在这些应用中,会发生大量并发请求,并且客户端和服务器之间会有大量前后端交互。没有 WordPress 就活不成?Node.js 有它自己非常棒的 CMS—— Keystone.js

总是需要有所取舍。从来不会有一种技术,你学了之后就能解决所有的难题并且不会过时。我们所能做的就是分析我们的选项,然后挑选出投资回报最好的一个。看看上面所讲的工作前景分析和技术分析,我们可以看出一个明显的赢家。

我选择 Node.js。

尽管所有技术用它们特定的方式使用都非常棒,但我们生活在一个信息如此丰富的世界,因此我们必须对我们可以集中精力并深入学习的话题数量进行限制。

在我的课程中,我教授一些这个领域的职业生涯相关的方法论,以及像 Facebook、Netflix、Google 和 Amazon 之类的一些大公司所使用的工具。如果你想要在 2018 年成为一名全栈 Web 开发者,我建议你学习:

HTML5

CSS3JavascriptReact.jsNode.js + Express.jsPostgreSQL**** 以及其它一些技术…

你可以通过阅读我的文章《在2018 年学习编码》,或者查看我的在线课程,带你从零经验到成为一名拥有必备开发技能的职业开发者(使用优惠券代码: MEDIUMNODE1723 ,只需要 10.99 美元)。

你觉得怎么样?

更新: 围绕技术的讨论应该有来自双方的意见。我建议你读一读评论。记住,总是存在权衡取舍,而你在工作中使用什么工具最终取决于你自己。我们所能做的就是了解我们的选择项,而不是盲目跟风。最后,愿意考虑与你自己不同的意见。

关于作者


Andrei Neagoie 高级软件开发者。目前致力于打造教授开发技巧的终极课程。可以在 twitter 上 @andreineagoie ,和他交流。

查看英文原文: Want to be a Web Developer? Learn Node.js not PHP

感谢覃云对本文的审校。

2018-04-17 18:193677

评论 1 条评论

发布
用户头像
keystone功能还是没有wordpress强大。
2019-07-12 09:45
回复
没有更多了
发现更多内容

MySQL-MVCC与锁机制

insight

3月日更

深入理解 JavaScript, 从作用域与作用域链开始

koala

JavaScript 大前端

Apache Ranger安全认证配置

大数据技术指南

大数据 3月日更

Android开发必须要会!2021大厂Android面试经验,全网疯传

欢喜学安卓

android 程序员 面试 移动开发

ARTS-Week-1

绝影

ARTS 打卡计划 ARTS活动

《经济学人》2021年3月27日刊精彩文章导读及资源免费下载

wbliu85

一束光的旅程

白洞计划

Ai调参炼丹,一篇就够了

泳鱼

Python 机器学习 深度学习 AI

Ai特征选择,一篇就够了

泳鱼

Python 人工智能 机器学习 深度学习 AI

巩固知识体系!应聘高级Android工程师历程感言,面试建议

欢喜学安卓

android 程序员 面试 移动开发

领域驱动设计101 - 绑定模型与实现

luojiahu

领域驱动设计 DDD

Photoshop CC 2019 の 安装

空城机

PhotoShop ps p图 adobe

由浅入深了解Nirvana NAC公链的两面性NA公链

区块链第一资讯

区块链 公链 挖矿

阿里P7大牛手把手教你!美团Android开发工程师岗位职能要求,附赠课程+题库

欢喜学安卓

android 程序员 面试 移动开发

马特系统开发流程丨马特量化机器人系统开发案例

系统开发咨询1357O98O718

火币矿池pro系统开发介绍案例丨火币矿池pro源码功能

系统开发咨询1357O98O718

Golang :后端开发中的万能药吗?

华为云开发者联盟

后端 开发 分布式系统 Go 语言

HUBDEX交易所系统开发源码案例

系统开发咨询1357O98O718

EGG NETWORK永动金融EFTalk火爆来袭

币圈那点事

一文归纳Python特征生成方法(全)

泳鱼

Python 机器学习 深度学习

2021最新分享字节四面成功拿Offer!

比伯

Java 编程 架构 面试 计算机

经常被面试官问道的JavaScript数据类型知识你真的懂吗?

koala

JavaScript 面试 大前端

Spark性能调优-Shuffle调优及故障排除篇

五分钟学大数据

spark Spark调优 3月日更

简单数据结构总结

我是程序员小贱

3月日更

实例讲解如何制作Python模式程序

华为云开发者联盟

Python 编程语言 星型程序 Programs 模式程序

Java面试必问:一位清华大牛用一个坦克大战讲明白了23种设计模式(视频+源码笔记)

Java架构追梦

Java 架构 面试 设计模式 坦克大战

【JS必知必会】高阶函数详解与实战

koala

JavaScript 面试 大前端

3.1 Go语言从入门到精通:包

xcbeyond

3月日更 Go 语言

如何阅读 Java 字节码(Byte Code)

Kori Lin

Java JVM bytecode 字节码

4大华为云“安全镖局”秘密法宝揭秘

华为云开发者联盟

态势感知 华为云 企业主机安全 数据安全中心 Web应用防火墙

Google Material Design 元件库

zhuchuanming

元件库

想成为一名Web开发者?你应该学习Node.js而不是PHP_PHP_Andrei Neagoie_InfoQ精选文章