PHPer 为什么被认为是草根?

——  一个值得  PHPer  思考的问题

作者:Hosander
来自:PHPChina.com
前言:以下文字并没有非常多的技术词汇,所以只要对 PHP 感兴趣的人都可以看看。

从  PHP  诞生之日起,  PHP  就开始在  Web  应用方面为广大的程序员服务。同时,作为针对
Web  开发量身定制的脚本语言,  PHP  一直秉承简单、开源的思想,这也使得  PHP  得以快速的发
展,并且大力地推动  Web2 . 0  的出现与发展。但是,长期以来,  PHPer  (  PHP      Programmers  )
被认为是处于草根阶层的程序员,被认为是技术含量少,层次低的程序员。这点在国内尤其突出。

记得一个技术主管说过这样一个事情。他给一个程序员分配了  PHP  的开发任务,没想到那个
程序员居然说:“我是学  Java  出身的,你让我去写  PHP  ,你这不是在贬低我吗?”。这件事情给我
印象很深、触动也很大。虽然这不能代表大部分程序员的看法,但是这么认为的人应该不少。还有
人说,现在如果是大型的政府项目,PHP  是肯定不会被列入考虑的范围之内的。

那么为什么  PHPer  会被认为是草根阶层,是因为它很简单,人人都可以学会,所以没什么难度
吗?我以前也是这么认为。PHP  入门很快,处理文件,数据,远程连接,网络编程都非常方便,官
方也有这样的说法:PHP  学习的成本很低,所以你容易去使用它。这个想法也是普遍的,甚至大部
分的  PHPer  自己都这样认为。

说到这里,我想大家就会想到我为什么要写这些文字。一年多的  PHP  推广工作让我了解到许
许多多的使用  PHP  的公司的大概情况,在这些过程中我慢慢体会到其中的根本原因。这里我说是
根本原因虽然是个人的看法,但是我觉得事实就是如此。

那么为什么  PHPer  会被看成草根阶层,根本原因是  PHPer  所作的事情(通过代码实现)的绝
大部分都是表现层的东西,这个熟悉  PHP  的人都知道。当然也会有  PHPer 说他用  MVC  结构编写
的某某框架具备的如何如何的功能。但是这些还是表现层。所以只会处理表现层的程序员就被看成
草根阶层了。事实上也是如此,因为这种情况下  PHP  确实很难构造大型的应用。

这就找到原因了,不是的。为什么  PHPer  总是在负责表现层的东西呢。答案是底层的数据处理
(  Web  应用就是数据存储和查找)我们一般不去触及!好,那么说到这里有些人可能已经想到了,
那不就是数据库吗!对,就是数据库!让  PHPer  一直当草根的元凶就是数据库。为什么?

因为目前流行的  web  架构中,前端是负载均衡系统,中间是  web  服务器,后面是数据库服务
器。所以,大部分  PHPer  工作在  Web  服务器层面。因为数据库已经很好地为我们组织数据了。所
以  PHP  中没有太多的算法,而且大家潜意识下也觉得不需要,更何况会影响性能与维护。

这种情况下,PHPer  就成为了数据库使用者,他总是在操作数据库。而不是在做程序。一个最
简单的  PHP  脚本就是,连接数据库,把数据取出来,然后用命令输出到浏览器。整个过程不超过  10
行代码。给人的感觉就是太简单了。没有任何技术含量。为什么,因为数据处理部分都已经被数据
库做完了。尤其是  MySQL  的使用!  MySQL  是免费的,所以大多数程序员可以自由地使用它,另
外  MySQL  的速度够快了,所以做个  PHP  应用程序非常的简单。这就相当于给你枪以后你觉得没
有必要学习武功一样。当然,我不是说枪没有武功好。而是说,枪的出现,小孩都可以轻松便捷地
杀人了。

http://www.phpchina.com                                                                                                                                      ·PHPer·    40   视点
我们再详细说说为什么是数据库!这里我说一个例子。我去过北京一家非常著名的网站,当时
我们还有一个比较资深的  PHP  程序员在那说些系统架构的事情。我记得当时那个程序员问大家一
个数据结构中的算法问题的时候,全场没有一个人能答得出来(包括我)。然后那个程序员就开始给
大家讲些很基础的数据结构的东西了。让我一下子回想到大学时候学的数据结构课。而这些基础的
数据排序、查找、传递的问题在其他高级语言(比如  C  )是非常普遍的。但是在  PHP  没有!PHPchina .
com  的论坛也有个板块叫  PHP  的数据结构和算法。这个板块的帖子也是寥寥无几。

仔细回想下,目前网络上大家讨论的最多的是两个方面的问题。一个是  PHP  的类的使用(处
理过程的封装),还有一个是开发框架问题。但是我们仔细分析的话,发现这些所谓的  PHP  中比较
复杂的概念里面没有数据处理!为什么,有数据库!用一个  Adodb  或者  PHP5  的  PDO  就可以搞
定了!真的搞定了吗?不是,这些无非是在连接数据库,没有数据处理!所以  PHPer  似乎就没有什
么可以拿出台面上的东西。

再说一个具体的代码问题,无级分类。这个概念我想大家都不会陌生了吧。我见过两种处理方
式。第一个是地道的  PHPer  的处理方式,也是目前比较流行的。就是用数据库来处理。而且字段很
少,只需要加个父类的字段并加以判断就行了。而且这个方法很实用。效率也高!但是这个不是数
据处理的范畴了,而是数据库的查找!

第二个是  C  程序员用  PHP  写出来的,他把所有的分类信息都从数据库取出来,然后用数据结
构算法进行排列分布,然后输出。

这里我们不对这两种方式的效率进行对比,我想大家都有各自的想法。但是我想说明一个问题,
就是这两种做法的本质的区别。  PHPer  习惯性地用数据库来处理,而且有很巧的处理方式,效率也
很高!这种方式就是数据库查询。而第二种方法是比较有特点的。他认为数据库就是存放数据的地
方,具体的逻辑处理还要靠自己的逻辑。

因此,结论是第二种方法的使用者觉得自己强些,因为数据的逻辑是他组织的!并且觉得  PHPer
的那种做法无非就是会查询数据库罢了。所以他认为  PHPer  是草根级的,只懂得操作数据库和排列
页面(  smarty  搞搞那种)。

说到这里,我想大家都已经回忆了不少自己平时用  PHP  做开发的经历了吧,是否发现大家确
实都在操作数据库呢。

那么我们来讨论下这个问题。数据库不好吗?为什么我一直用数据库处理数据都没有问题。我
要说的是我们所理解的数据库是有问题的,而且有很大的问题!当然这里我并不是说不能用数据库,
也不是在贬低数据库的性能。而是,我们没有充分认识到数据库所起到的作用。

我的想法源起于这样一个事情,有一次一个网站的技术总监问我,为什么他们的网站那么慢,
要怎么办。当时,我的  MSN  里  Zend  总部的工程师正好在线,我就问他  PHP  响应比较慢了,怎
么办?他当时直接告诉我,数据库问题!肯定是数据库没有优化设计好。所以,我没有给那个技术
总监确切的答案了,因为他们的数据库设计我们是不能涉及的。所以就给了大概的数据库优化的建
议。这样的事情屡次发生,我就开始怀疑,为什么  Zend  总部的工程师每次都跟我说是数据库的问
题呢,难道我们不能从  PHP  层面来解决这个问题吗?答案是不能!因为  PHP  目前的运行速度已经
是很快了,通过  Zend  的性能分析也能看到一个用户的点击,PHP  的运行时间只有  10  %不到,那
PHP  在干吗?它在等。等数据库的查询结果。这个方面在目前的  PHP  产品中有了很大的提高,那
就是  Caching  和网页静态化两个方案。  Caching  可能大家会比较陌生,但是网页静态化现在连  PHP
产品的用户都非常清楚了。速度快、容易被搜索到等等,好处不言而喻。开玩笑地说,现在网站的
主页实现网页静态化只需要硬盘足够大。至于  Caching  就比较复杂些,也是大多数  PHPer  感到头
疼的地方。甚至于有些人会用  C  来实现。因为  Caching  中的数据有效期验证、查找、提取、更新
等等都是比较难处理。当然,也有人会用数据库来处理  Caching  问题。

所以,当访问量激增的时候,  PHP  架构的网站会出现的很多问题都因数据库而起。数据库的
http://www.phpchina.com                                                                                                                                      ·PHPer·    41   
同步问题还不算什么。关键是数据库的响应速度会有指数级的降低。这个问题我在  10  月  23  号
LAMP  发布会的时候问过  MySQL  的副总裁。他当时也没有给我比较完美的答案(这也我的意料之
中),因为数据库总会有瓶颈的!

这里有个题外话,LAMP  大会的时候我跟  Yahoo  的一个技术高管聊的时候,我问他  Yahoo  在
选择  MySQL  还是  Oracle  的时候是怎么考虑,他的答案令我非常惊讶。他说大部分的时候我们是
会用  MySQL  的,因为它的性能已经达到我们的要求。但是什么时候我们会选用  Oracle  呢,就是
当我们需要存储收费用户的数据的时候。我就问为什么,难道  Oracle  比  MySQL  稳定吗?他说,
这个倒没有特别考虑。关键是如果使用  Oracle  的话,当出现问题的时候我们可以找到负责人,
Oracle  会负责事故的处理,但是如果用  MySQL  的话,我们找谁去?

所以,我们对数据库的看法应该纠正过来,就是说数据库不是万能的。如果有实力的话自己开
发数据库。听说  Google  就是那样的。

那么我们怎么看待数据库呢?我个人的理解是数据库只是用来降低开发成本的手段。因为采用
数据库以后我们不需要考虑数据的存储,尤其是排序和查找。但是这会带来什么问题呢?就是当业
务膨胀的时候,数据库就成为瓶颈了!这个时候问题就会非常棘手!因为这个是底层的数据处理。
牵一发而动全身。

所以我认为正确的观点是,数据库是一个数据备份机!怎么理解,我们只需要保证数据的存储
有效性就行了。而这本来就是数据库的核心功能,只不过因为数据库的方便的排序等功能让大家把
过多的处理都交给数据库来操作了。一个用户的点击  PHP  就把一大堆的任务交给数据库,然后把
结果排列下给用户就完事了。这对数据库是不公平的!也是因此大家开始抱怨数据库的性能了。

针对这个观点,我们再举个例子,有一次我去拜访一个大型的网络公司(基本上国内只要上过
互联网的都知道),他们使用  PHP  很少,但是我了解到他们其它业务是怎么使用数据库。他们自豪
地跟我介绍说他们在数据库的外围有个第二数据库(我这里起名叫第二数据库)。为什么叫第二数据
库呢,原来它是一个缓存系统。那么开发工程师怎么去这个缓存系统获取数据呢?那个技术总监自
豪地说,他们这个缓存系统由  SQL  查询语句!我当时很惊讶,但是后来想想确实需要这个。因为
当你的缓存系统达到一定量级的时候从缓存获取数据都非常复杂,干脆写个  SQL  查询语句让缓存
系统分析、处理并返回数据。而且他们告诉我,在他们那里,就算是用  PHP  的话也是让  PHP  去那
个缓存系统读取数据。

所以说,如果你能处理好这样的问题的话,把数据存放在数据库,然后数据库只起到备份的作
用。然后你用自己的中间层来处理分析数据,效果是  90 %以上的用户请求不访问数据库。有人就会
说了,这不就类似连接池的东西吗?是的!因为数据库的瓶颈是无法解决的,我们只能在  Web  服
务器和数据库中间加个中间层来做缓冲。

可能大家会说了,切,这个我们早就知道了!那好,这里我要说的是它引发的两点思考:
第一、  有些语言已经有连接池技术的基础上,那些程序员可以方便地使用连接池而构建大型
应用。那么如果他们认为  PHPer  只会是用数据库,那么我们是不是可以说他们只
会是用连接池呢?连接池和数据库在这个概念上有何区别?
第二、  当  PHPer  开始构建自己的缓存系统的时候,他是不是突破了  PHPer  只会是用数据库
的层次?因为他参与了数据逻辑的处理工作。那么他还是草根吗?

最后,新一代的  PHPer  是草根吗?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值