PHP会被淘汰吗?
经常会有一些朋友会问我,学php有前途吗?PHP未来会不会被淘汰?PHP能做什么事情么?java后者.Net能做的PHP都能做么?学习什么技术最 好呢?对于一个初学者来说,这些问题确实都是很重要的,毕竟这关系到未来自身的发展。其实要探讨PHP,不能够狭隘地站在PHP本身的角度去理解问题,而 要从整个计算机语言的发展史,技术体系的演变以及商业模式的变化对于技术走向的影响来分析。在这里我就写一篇文章,和大家分享一下我这些年来对于技术体 系,技术发展,技术与商业之间关系的理解。
计算机技术体系纷繁复杂,从大的方面讲,主要分为硬件和软件两大块。硬件又分为芯片级和板卡级。芯片级企业主要是设计制造电路板上那一块块黑色小块,他们 叫做集成电路。像大名鼎鼎的英特尔,高通,德州仪器,Nvidia,AMD等等都属于芯片级的巨头企业。板卡级企业主要是设计电路板,然后从芯片企业采购 芯片安装到电路板上。华硕,微星,富士康等等台企都有板卡业务。软件产业可以分为系统软件和应用软件,目前世界上主流的操作系统主要有 Windows,linux, Unix, MacOS, BSD等等。在不同的操作系统环境下,应用软件的开发也有不同的方式。从应用软件的功能区 分,可以分成客户端应用软件和服务器端应用软件。从产业链来说,硬件产业处于软件产业上游。一般来说,硬件产业更强调规模,属于资金密集型的行业,而软件 产业相对更注重创意。
回到我们要探讨的重点——编程语言。一般来说,对于web开发和普通的客户端软件开发,我们都是在应用软件的层面编程。在客户端软件的开发中,目前 Windows平台下主要的开发体系是基于.Net的架构,当然这个领域曾经是MFC, delphi, vb的天下。除此以 外,Java, ruby, python,lua等语言配合Qt, tk等UI组件库也可以开发跨Windows, Linux, MacOS等多平台 的应用程序。当然,随着iOS, Android等移动操作系统和平板电脑的兴起,客户端软件开发正在呈现出百花齐放的态势。在服务器端软件的开发中,目 前呈现的是三组鼎立的态势,三足分别是JavaEE体系,微软.Net体系和LAMP体系。
JavaEE体系曾经统治企业级软件开发长达数十年之久,十年间英才辈出,但是Java语言本身却越来越显示出臃肿和分裂的态势。直至Java界神一样的 人物Rod Johnson携它天才的SPRing框架与不朽名著《Expert J2ee development without EJB》横空出 世,Java界的纷争才被SSH(Spring+strunts+hibernate)暂时统一。但是使用Java依然是个昂贵的选择,复杂的需求设计, 缓慢的项目进度,昂贵的应用服务器和昂贵的编码人员使得Java成为了一种庙堂之上的语言。而版本的分裂也使所谓的跨平台特性成为了一句空话。Java的 特性使得它并不适合业务随着市场快速变化的互联网企业,而更适合相对稳定的大型业务,如银行,保险,零售,制造业等大型企业的业务系统开发。
.Net体系是微软公司为了对抗Java而设计的一整套企业级开发架构,包括了客户端和服务器端的开发框架。并且彻底抛弃了原来的MFC。在很多方 面,.Net体系都和JavaEE有着相似之处。从我的经验来看,对于高手而言,.Net体系的开发效率是明显高于JavaEE的。但是.Net体系对于 初学者来说仍然有很高的门槛,很多新手做出来的项目都是bug多到惨不忍睹。同时不能跨平台,必须使用正版的微软操作系统和数据库软件,Windows系 统作为服务器的不稳定性和管理的复杂性,都在一定程度上阻碍了.Net体系在服务器端开发的普及。
LAMP体系是以linux, apache, MySQL,php为基础的web开发体系。当然也可以用 python, perl, ruby, javascript等语言来代替php。其实,从更广泛的定义来说,LAMP中的P应该定义为 PRogramming Language更合适一些。因为任何语言其实都可以在LAMP体系下运转的很好。由于生产力方面的巨大差距,在性能不是首要考 虑因素的条件下,动态语言替代静态语言已经是一个不可扭转的趋势。特别是在互联网开发方面,由于特别强调业务的灵活性和快速上线,快速更新,传统的 JavaEE已经不太适合互联网开发的模式。而在架构的可伸缩性(Scalability)和可扩展性(Extensibility)上,.NET体系又 明显不如LAMP体系灵活多变。据我所知,在使用.NET开发的大型网站系统中,出现性能问题的情况要远多于LAMP架构的网站。并且目前世界上规模较大 的互联网公司的业务,也基本都是部署在LINUX/UNIX平台上的。可以说,LAMP体系是综合了系统的稳定性+架构的可扩展性(LINUX操作系 统),动态语言的高开发效率与开源数据库MySQL等的综合优势,形成了非常强的平台优势。这种优势从未来的发展趋势来看只会越来越强大。不管PHP如何 发展,LAMP体系本身的强大在可以预见的未来是不可能被颠覆的。
动态语言取代静态语言已经是大势所趋,Ruby的优雅,JS的灵活我都非常喜欢。但是如果是开发一个商业互联网或者移动互联网项目,在后台语言上我还是会 毫不犹豫的选择使用PHP。也许你可以认为这是一种个人偏好,但是至少对我来说,PHP是一种可信的(believable),已被验证的 (trusted)以及可以掌控的(controlable)技术。我从来不喜欢介入任何语言之争,我是为了实现梦想才进入互联网领域,而不是为了编写代 码。当然从现实角度上来说,PHP招人相对容易一些,成本也低一些,这些都是做公司不可忽视的因素。我有时会听到一些伪精英程序员用如下一些理由攻击 PHP:性能较差,代码丑陋,不适合大型项目,面向对象不完整等等。在我的使用经验中,除了多线程和密集计算,PHP在其他方面的表现都非常良好。而在 web开发中,这两个特性都不是非常重要,而且通常可以与其他语言配合使用来解决。性能较差,不适合大型项目这点,看看facebook, 新浪微 博,Qzone这样规模的应用都在使用php,我想这种说法已经不攻自破了。代码丑陋?我想着这更是一种无稽之谈。也许PHP不能像ruby一样优雅,但 它至少可以写得很规范并且很易读。如果你拿discuz这种史前代码的编码水平去衡量现代的开发方式,那显然是不合适的。
对于一个非计算机专业的朋友,想要进入互联网行业,不管是工作还是淘金,那PHP一定是首选,简单,快速,高效,直接。互联网那些事儿,只要你不是想做一 个搜索引擎,PHP基本上都可以解决(当然百度也在大量使用PHP)。如果你是一个创业者,那PHP更是首选。创业绝对不能去琢磨技术,越稳妥,越简单, 速度越快越好。曾经我看到论坛里面一片帖子,说的是一个创业型公司进行技术选型,前端选择XX框架,中间件选择XX组件,缓存用XX,数据库如何分布式, 如何用NoSQL等等,架构和淘宝网相似云云。这样做的结局是必然的,各种失败等着你。在互联网行业,我已经亲眼目睹了很多次,一款用一年时间开发的产品 在一个月之内被放弃,如果亲历其中,你就知道这是一种多么痛苦的体验。在互联网行业,没有什么比时间更重要,比激情更重要了,而激情是最经不起时间消磨 的。快一点,再快一点,而PHP正是快的利器。
有些时候我总是会在浏览论坛的时候发现一些所谓的资深程序员攻击PHP。以我不带恶意的思想揣测,也许他们觉得一种廉价的技术正在取代他们所掌握的所谓企 业级的高端技术,这使他们感到不舒服,仅此而已吧。其实世界并不在乎你用了什么语言,而在乎你创造了什么成就。如果没有PHP,也许扎克博格就没法这么快 写出facebook的第一版,而就是那一个通宵写出的程序,奠定了一个世界上最伟大公司的基础。也许你会觉得我这么说有点夸张,但是如果你看过《蝴蝶效 应》这部电影,你就应该明白,互联网也有非常强的蝴蝶效应,初始位置的一点点偏差和节奏紊乱对于全局有着不可估量的影响,而幸运的是,这一切与语言无关。
虽然我身处IT业,但是我从来没有认为我必须靠写程序为生(我不是富二代)。曾经我的理想是成为一名作家,后来是摇滚乐手,后来是电影导演,但是后来我知 道了facebook,这深深的影响了我,让我知道了原来这个世界上还有一种比我以前的所有梦想更快地去改变世界的方式(我来自小城镇,在大学以前几乎没 有接触过电脑)。后来我在互联网上交了女朋友,后来又分手。但是我从来没有放弃过对互联网的执着。其实我并不喜欢那些沉默的技术人员的圈子,在我眼里互联 网应该是充满梦想的,就和摇滚乐,和电影一样。我所以我放弃了所谓的大公司的工作。我经常会在家里琢磨两个小时源代码,然后去外面转一圈或者去酒吧喝一 杯。这样的生活很快乐,技术只是我手里的一把剑,可以做各种各样的事情。就像好照片不是必须要用徕卡才能拍,卡片机也可以,好音乐不是必须用斯坦威才可以 弹,雅马哈也可以。我喜欢摆弄各种新奇的工具,但是当我决定要创作一件作品的时候,我总是会选择最合适的那一个工具。仅此而已。