PHP能拯救你的创业公司吗?
大约两个月前,Alexander Katrompas在 Medium 上发表了一篇题为《Java 会扼杀你的创业公司,PHP 会拯救它》的文章。我当时已经在那篇文章的评论区发表了一篇简短的回应,但我觉得有必要再详细阐述一下。
再说一遍,如果说我有什么可以称得上专家的领域,那大概就是 PHP 了。虽然我现在不太喜欢 PHP,也很少写 PHP 代码了,但我仍然非常了解它。
论点
简单回顾一下,亚历山大的论点概括如下:
- 许多大型项目最初都是用 PHP 编写的,排名前 1000 万的网站中有超过 80% 使用 PHP。
- PHP程序员比Java程序员更多,而且价格更低。(仅限网页开发)
- PHP 性能卓越,并且还在不断改进,在实践中很容易与编译型语言相媲美。
- PHP应用程序的上市时间远少于Java EE应用程序。
- PHP 不是一种“脚本”语言(无论那是什么意思),它是一种功能齐全、面向对象的 Web 强大工具。
- PHP 7.x 相较于之前的版本有了巨大的改进,而 8.0 版本有望超越所有人的预期。
- 框架种类繁多且功能强大。Symfony 和 Laravel 的强大实力、流行度和主导地位毋庸置疑。
- WordPress(基于 PHP)是目前占据主导地位的内容管理系统,市场份额接近 60%。排名前五的内容管理系统也都是基于 PHP 的。
- PHP 就是为 Web 而生的。无需额外的服务器、处理器、任何技巧或变通方法。它与您的 Web 服务器完美融合。
- 目前主流的开源电子商务系统大多是用 PHP 编写的。(例如 WooCommerce、Magento、OpenCart、PrestaShop、ZenCart、Drupal、Joomla、OsCommerce 等等……)
我对这些论点的评论
正如标题和上面的列表所示,Alexander 将 PHP 与 Java EE 进行了比较。我对 Java EE 了解甚少,但我可以告诉你,对于大多数初创公司而言,PHP 已不再是最佳选择。
需要澄清的是,有几点我强烈反对。我的观点是:
- PHP 是一种脚本语言。它的确有一些不错的面向对象特性,但这与它作为脚本语言的身份无关。它的影响体现在以下几个方面:首先,并非所有代码都会在请求处理时加载到内存中(这是好事);其次,所有错误都将是运行时错误(这是坏事);最后,代码会根据需要进行解释执行,而不是全部编译成字节码或其他中间语言。附注: Alexander 在那里也提到了“函数式编程”,但我希望那只是复制粘贴时的错误。
- PHP 7 是朝着正确方向迈出的一步,但它不够勇敢,没有真正清理 API,我怀疑 PHP 8 也不会。
- PHP 是为 Web 开发的,但它需要额外的服务器、处理器、各种技巧和窍门。它与你的 Web 服务器完全不兼容,如果你曾与大型 PHP 项目的运维团队有过深入的接触,你就会知道这有多么令人头疼。这并非 PHP 特有的问题,只是为了澄清一下。我猜 Alexander 指的是 PHP 的 Apache 扩展,但我过去十年都没见过它实际运行,你最好也别去碰它……
- PHP 作为 API 后端速度足够快。但如果你需要处理复杂任务(例如数据库、加密货币挖矿等)并追求极致性能,那么它可能就不够用了。
不过,经过这些修正,我认为问题在于列表中缺少什么,而不是列表中包含什么。
首先,如果你的创业公司是卖人字拖的,那就尽管安装Magento,然后开始运营吧。等你真正开始赚钱,感受到运行一个过度设计却又僵化的系统带来的痛苦时,你仍然可以把它换成更灵活的系统。(比如Zalando)
但是,如果你想打造一个真正的从零到一的创业公司,你需要一个能够赋予你敏捷性的系统:
- 学习能力强。
- 快速制作原型。
- 硬化过程很简单。
- 支持快速安全的重构。
此外,我认为这些东西对于初创公司来说是锦上添花,但对于成熟公司来说却是绝对必不可少的:
- 可维护的
- 安全的
最后,对于最成功的创业公司和大型企业来说,还有两项锦上添花的条件:
- 令人兴奋
- 值得信赖
快速制作原型
现在我觉得亚历山大过于注重原型设计了,而PHP在这方面确实很出色。虽然不是最好的,但也相当不错,可能比出了名的冗长Java要好得多。
需要澄清的是,Java 以代码冗长而闻名,但我也不会说 PHP 简洁。这并非批评,只是陈述事实。(相比之下,Python 和 Ruby 的代码往往比同等的 PHP 代码短得多,也更容易阅读。)
硬化过程很简单
说到加固代码,你唯一真正的选择就是增加测试,因为类型系统本身就很难让人信赖。你可以通过确保所有地方都使用类型(至少需要 PHP 7.1 才能真正做到这一点)并严格检查每个文件来加固自己的代码,但这很麻烦,容易出错,而且很难让所有依赖项都提供类似的安全性。此外,如果你最终使用了任何流行的框架(Symfony、Laravel、Zend 等),那就没办法了,因为它们仍然支持 PHP 5.x(更正:它们最近要求 PHP 7,但并不强制执行严格的类型检查)。事实上,99.9% 的 PHP 团队都会选择使用这些工具,因为他们熟悉这些工具,而且它们的生态系统规模庞大。
如果只能在 PHP 和 Java 之间选择,我确信 Java 会轻松胜出。它仍然存在“价值十亿美元的错误”,但至少如果你在一个文件中更改了 API 却忘记在另一个文件中更新,编译器会发出警告。而 PHP 则不然,你只能寄希望于测试或代码审查能发现问题(前提是你有这些机制)。(剧透一下! 大多数创业公司都没有代码审查,因为你知道,这很费时费力。)
支持快速安全的重构
说到快速安全的重构,PHP 几乎是最差的,所以 Java 轻松胜出,这主要归功于它的类型安全以及编译器默认能够检查整个应用程序。当然,Java 可能远非最佳选择,因为一些函数式或受函数式编程启发的语言在这方面做得更好,但我认为它已经相当不错了。
学习能力强
这是初创公司必备要素部分的最后一点,但在某些情况下却至关重要。Alexander 通过声称雇佣 PHP 开发人员和 Java 开发人员更便宜来回避这个问题。虽然这或许没错,但这种差异可能远不及选择错误的语言而导致日后不得不重写所有代码。没错,作为一家初创公司,你可能想要削减 20% 的 IT 薪资支出,但你应该明白这是在玩火。我个人宁愿冒着提前 2-10% 耗尽资金的风险,也不愿冒着在早期做出错误选择后遭受多年痛苦的风险。
所以,如果我们同意你可以随时引入已经熟悉你的技术栈的人这个前提,那么亚历山大可能是对的,但这点差别不应该决定你的创业成败。
不过,我个人更倾向于使用一种使用人数较少但学习起来非常容易的语言。这样一来,你就能吸引到最优秀的领域专家,从而创造巨大的价值,而且你永远不用担心本地人才短缺,因为任何工程师都能在几周内上手工作,高效完成任务。
现在,我几乎可以肯定PHP和Java都很糟糕,而且糟糕得令人发指。这两种语言都试图满足所有人的需求,塞进各种各样的特性,但它们的生态系统却极其庞大,需要数年甚至数十年的时间才能完全掌握,而且需要阅读大量的资料才能确保理解最佳实践和需要避免的问题。更不用说网上肯定充斥着大量关于这两种语言的糟糕建议……总之,对于初学者来说,无论学习Java还是PHP,寻找好的答案都绝对是一场噩梦。
相比之下,许多新兴语言力求简洁明了。Go 就是最明显的例子,但 Elm 和 Rust 即使引入了一些起初难以理解的概念,也能简化很多事情。
这些新语言的生态系统也更加简洁,以 Go 为例,你用到的绝大多数东西都在标准库中,这些标准库经过了谷歌级别的测试,质量绝对值得信赖。Go 社区也秉承着Unix 的理念,这意味着流行的工具往往专注于做好一件事。PHP 显然并非如此,我怀疑 Java EE 是否也如此,尽管我无法对此做出确切判断。
注:我之前已经暗示过,但为了更清楚地说明:如果你能利用众多开源的 PHP 应用,节省的成本远不止 2-10%,而且意义重大。最明显的例子就是电子商务,但还有其他一些例子。就电子商务而言,你应该直接使用现成的服务、市场平台,或者基于Magento、Thelia或Sylius构建。Prestashop 或许也有一些应用场景,但如果有人向我推荐 WooCommerce、OpenCart、ZenCart、Drupal、Joomla 或 OsCommerce 来做电子商务,我会立刻逃之夭夭。
可维护的
我的职业生涯大部分时间都在处理庞大的(超过100万行代码)遗留应用程序,试图清理前任们留下的烂摊子。大部分的痛点都来自于过度设计的面向对象编程(OOP)怪物。正因如此,我格外欣赏Go和Rust的简洁性,而PHP和Java在我看来都相形见绌。
我也很喜欢函数式语言提供的额外安全性,但它们会影响语言的学习速度,因此在评估它们的“学习速度”和“趣味性”时,你必须考虑到这一点。
安全的
在这方面,我确实缺乏足够的知识来正确评价Java,但PHP的口碑确实很差。我感觉Java的表现会更好一些,但我还是不想深入讨论这个话题,因为有很多比PHP更好的语言。事实上,我认为PHP是最差的语言之一。
令人兴奋
当然,这一点并非所有初创公司都必须考虑,但如果你正在考虑一些技术难度很高的项目,那么你应该努力吸引你所在领域最优秀的人才。这些人能够学习一门新语言,但他们不会学习你给他们的任何语言。不是因为他们学不会,而是因为他们不想学。
遗憾的是,PHP 是最不受人尊敬的语言之一,这意味着最优秀的软件工程师可能从未学过 PHP,而且可能也不愿意学习它。
Java 的情况略好一些,因为过去二十年里获得计算机科学学位的人几乎都学过 Java,而且很多人甚至一直坚持学习或从事 Java 相关工作。另一方面,如今对于 Java 社区之外的人来说,它并不是最热门的学习语言。
不过,从好的方面来看,目前还有其他发展势头强劲的 JVM 语言(主要是 Scala 和 Kotlin),它们声称可以轻松访问任何用 Java 编写的代码,所以我认为这可能是一个稳妥的发展方向。
我承认这不是一个我无法全面评估的话题,但我感觉 Java 仍然胜出。
值得信赖
对于 Java EE 来说,这简直是轻而易举的胜利。如果你想上市或者把产品卖给财富 500 强企业,你的产品组合里就必须包含微软(C#)、SAP 和 Java EE 这三项技术。据我所知,这几乎就是全部了。
结论
所以我觉得 PHP 轻松拿下了一分,还有一分可能拿下。我承认,在很多情况下,我并不一定具备足够的 Java 知识来评估两者,但在这些情况下,PHP 的表现相当糟糕,这让我不得不相信,Java 是启动全新项目的更佳技术。
这并不意味着 PHP 会毁了你的创业公司,而 Java 就能拯救它。这篇文章的重点在于,你应该了解自己选择的后果,明白自己承担的风险,然后选择能让你睡得更安稳的方案。
- 如果你的目标仅仅是削减 2-10% 的 IT 支出,那么 PHP(或 NodeJs)是一个合理的选择。
- 如果您需要尽快上线博客或电子商务网站,那么 PHP 可能是您的最佳选择,但您应该有充分的理由不使用现有的服务。
- 如果你想把产品卖给财富 500 强公司,那么 Java 可能仍然是达成交易的关键,尽管其他 JVM 或 .NET 语言也可能适用。
- 如果想避免将来不得不重写所有代码的情况,那就使用静态类型编译型语言。我推荐 Go,不过听说 Kotlin 也是个不错的选择。
- 如果你不需要主流云服务提供商的一流支持,但运行时错误可能会危及你的公司,那么可以考虑使用 Rust 或 Haskell。
最后,如果你真的想要一个简单的答案来回答“PHP 能拯救你的创业公司吗?”这个问题,我的答案是:不能。除非你是在现有的 PHP 应用之上进行开发。PHP 会扼杀你的创业公司吗?可能不会,但它很可能会降低公司的敏捷性。
文章来源:https://dev.to/peteraba/will-php-save-your-startup-4b30