“PHP 是最好的语言!”这个段子曾非常流行。PHP 也曾一度是 Web 开发领域最受欢迎的语言。而 HTML5、AJAX、WebSocket 等技术所推动的 Web 2.0 变革,以及 Google 推出的 V8 引擎所带来的 JavaScript 的巨大性能释放,Node.js 已经势不可挡,在 Web 2.0 时代傲视群雄。而 PHP 则逐渐式微,开发者数量不断萎缩。想在 2018 年成为一名 Web 开发者?本文将从就业前景和技术两个方面讨论,为什么要选择学习 Node.js 而不是 PHP!
我经常被我的学生们问到的最常见的问题之一是,“为什么你在课程中教授 Node.js 而不是 PHP?” 我告诉他们,“相信我,我在行业内工作”显然不够。因此,本篇就是我在课程中包含 Node.js 的原因,以及如果你想要成为一名开发者,你应该抛弃 PHP 的原因。尽管我用这两种语言作为一个例子,但我会在本文中向你展示一个框架,用来决定你应该在接下来的开发生涯中学习哪些工具、编程语言、框架以及代码库。
作为一名开发者,你的时间和资源是有限的,你必须决定将你的时间投入到哪些语言和工具中,从而获取最大回报。
现在,你最好问自己一个问题:我能将时间和精力投入到哪些学习上,才能在未来的开发事业中获得知识、薪资和满意度方面的最大净值?
这并不意味着选择最容易的路径。这意味着选择一些工具,使你能够在接下来的许多年中保持竞争力的同时,提升你的技能,从而使你成为一名 高级开发人员。
在本文的结论部分,你会发现所有我所推荐的 2018 年的技术,如果你想要成为一名 Web 开发者的话。 因此,如果你实在急不可耐,可以直接跳到本文末尾。否则,请抓住这次千载难逢的机会,开启一段冒险之旅。
我们会在本文中使用两种类型的分析:就业前景分析和技术分析。下面就是具体内容。
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。
总是需要有所取舍。从来不会有一种技术,你学了之后就能解决所有的难题并且不会过时。我们所能做的就是分析我们的选项,然后挑选出投资回报最好的一个。看看上面所讲的工作前景分析和技术分析,我们可以看出一个明显的赢家。
尽管所有技术用它们特定的方式使用都非常棒,但我们生活在一个信息如此丰富的世界,因此我们必须对我们可以集中精力并深入学习的话题数量进行限制。
在我的课程中,我教授一些这个领域的职业生涯相关的方法论,以及像 Facebook、Netflix、Google 和 Amazon 之类的一些大公司所使用的工具。如果你想要在 2018 年成为一名全栈 Web 开发者,我建议你学习:
HTML5
CSS3
Javascript
React.js
Node.js + Express.js
PostgreSQL
以及其它一些技术…
围绕技术的讨论应该有来自双方的意见,我建议你读一读评论。记住,总是存在权衡取舍,而你在工作中使用什么工具最终取决于你自己。我们所能做的就是了解我们的选择项,而不是盲目跟风。最后,愿意考虑与你自己不同的意见。
「前端之巅」是 InfoQ 旗下关注大前端技术的垂直社群。紧跟时代潮流,共享一线技术,欢迎关注。
原 文:Want to be a Web Developer? Learn Node.js not PHP
译 文:前端之巅
作 者:张健欣 译
更多文章:SDK.cn