# \*关于 Web 前后端的一些牢骚

这一小节不推书，简单讲一下前端与后端的选择问题，并且谈一下学哪些语言性价比较高。

Web 开发是当前最热门并且在可见的未来还会继续甚至更加热门的领域，计算机行业 80%（可能不止）的岗位都与其有关。根据工作内容的不同，Web 开发分为客户端（Client）和服务器端（Server），俗称前端（Frontend）与后端（Backend），市场需求量都非常大。

在十几年前，Web 开发还是一个非常小众的领域，而且也根本不分前后端，因为那时连前后端分离的概念都没有形成。那时 Web 开发几乎就意味着拿 HTML（顶多带上一点点 CSS）写一些静态网页，然后拿 PHP 将它们串起来，而 JavaScript 在那时只是一个小玩具，几乎没人拿它当什么什么真正的编程语言，其为数不多的作用就是显示动态时钟或是在网页上显示那些五毛花瓣特效。而如今情况已经完全不同了，PHP 没落的颓势已经无法挽回，HTML 与 CSS 已经不再是网页开发的重点，而当时只能当玩具使的 JavaScript 俨然已经完全占领了前端，并且还有着入侵后端的趋势。

先说前端。俗称的前端三件套即 HTML、CSS 与 JavaScript 三门语言，但严格来说只有 JavaScript 算是图灵完备的编程语言，HTML 与 CSS 只是标记语言，并且一般来说也只有 JavaScript 需要花很多时间去学习，HTML 与 CSS 虽然如果要深究也很复杂，但通常能用到的知识只需要半天就能学得差不错。由于浏览器只能跑 JavaScript，而现在主流的 JavaScript 引擎实现都非常复杂，甚至不亚于操作系统，因此各大浏览器厂商根本不可能费尽心力再支持另外一门可以在浏览器上运行的语言（WebAssembly 除外，这东西实际上就是打算成为浏览器端的汇编语言，供高性能场景使用，不会对 JavaScript 的统治地位产生太大影响），所以在可预知的未来 JavaScript 几乎没有被替代的可能性，因此学前端毫无疑问只能选择 JavaScript，并且也完全不用担心过几年就被代替。

前端目前已经入侵了很多其他行业，JavaScript 甚至在人工智能、物联网开发、桌面端开发等占据了一席之地。而 Node.js 的出现使得 JavaScript 不再局限于浏览器，可以直接与操作系统交互，这导致 JavaScript 现在可以一定程度上代替后端，并且已经有许多中小规模的网站整个前后端技术体系都是用 JavaScript 实现的，例如语雀。不过仍不应当将 Node.js 当作真正的“后端”，应该只将其视作前端的一种拓展，由于其固有的局限性，仍旧很难胜任大型网站的后端任务，目前 Node.js 在大型网站里主要还是被当作中间件（Middleware）使用。

后端语言很多，Java/Go/Python/Ruby/PHP 百花齐放，但是目前比较推荐的是 Java 和 Go。Python 后端已经没落，目前 Django 框架基本上只适合当玩具使用，搭一下小网站（我不否认 Django 可以开发大型甚至超大型项目，Instagram 就是案例，但说实话现在 Django 想要再火起来几乎不可能），而且受限于 Python 本身性能很差（你要打算一开始就上 JIT 那另说），还不如 Node.js 快；PHP 尽管在多年前在后端领域占据统治地位，但目前正渐渐没落，PHP8.1 的出现也不能阻止其颓势，现在学 PHP 无异于是 49 年入国军；Ruby 虽然在几年前火过一阵子，Ruby on Rails 也至今仍旧是最适合人类使用的后端框架，但现在已经快凉透了，也不建议学。

而 Java 尽管已经用了十多年，但仍旧很热门，Spring 框架至今也是最成熟稳定的后端选择，未来应当不会被其他语言代替，是比较推荐学习的。Go 的性能很高，毫不逊色于 Java，天生适合高并发，代码写得再烂也能跑得飞快，堪称大力出奇迹的典范，在近几年由于赶上了云原生的风口热门了起来，并且在未来几年应该会越来越火，估计不会像是 Ruby 一样昙花一现，Go 的语法非常简单，学起来很快，不妨学一下。

总而言之，如果是面向工资编程，在 JavaScript/Java/Go 里挑一门学一下都很不错。不过需要提一下，虽然 JavaScript 学起来似乎更简单，需求量大，还不用担心被淘汰的问题（毕竟浏览器只能跑 JavaScript，现在浏览器引擎的复杂度已经不比操作系统低了，没有哪家浏览器乐意再多实现一门语言），但前端技术迭代非常快，很难保证你毕业的时候用的 JavaScript 不会和你现在学的天差地别（说实话，现在已经有这个迹象了）。如果求稳定，Java 可能是最好的选择。Go 也很不错，但由于是新技术，迭代也会比较快，不过肯定比 JS 慢多了。

*别听所谓的“前端简单后端复杂，想干得久一点就做后端”这种话。前后端没有高下之分，都是搬砖的，何必呢。前端上手快但很多深入的技术不比后端简单，不要拿前些年形成的偏见看前端。然而后端的确更加稳定，技术变动不大，如果你是个 Github 都不看的人，也不打算学什么新技术，打算老本吃好几年，那后端确实很适合你。*
