来oschina这么久了,其实平时也就读的比较多,今天也来写一点儿东西吧。
先说下自己吧,我现在大四,做过腾讯实习生,现在准备到阿里巴巴接受洗脑了。
网上随意百度一下,关于PHP和Java语言孰优孰劣的文章比比皆是,有时候看着这些文章,感觉真心的无聊啊,就像大家在争吵eclipse和netbeans谁谁更好用一样,没什么意义,其实,语言,在我看来,只是一个工具而已,而且精于一门语言之后,另外语言的学习也蛮easy的。
我大一才开始接触编程,按照学校的路子C,C++,Java,汇编都学过。我记得是大一寒假的时候,我高中一个很要好的哥们想创业,他的第一想法就是做一个网站,他找到我,然后,我们就一起开始做网站进行所谓的“创业”了。
下学期一到学校,我就开始疯狂google资料,看到网上有很多开源的网站项目,我也下了很多的源码,可惜,当时能力太有限了,自己不会配置服务器这些,所以后面用dreamweaver做了一个全HTML的网站,后面为了实现登陆,注册这些功能,我到图书馆找了一些书,当时asp,jsp,php的书籍都蛮多的,百度了一下,他们说PHP比较容易上手,所以我就开始学PHP。
PHP的确是容易上手,在windows上面下载一个wamp server,用记事本建立一个文件,再按照书上的代码敲一遍,再打开浏览器,就可以看到结果了。
通过不断的做一些垃圾项目(所谓垃圾项目,就是学校里面做的那种自己都不会用的项目),到大二上学期结束也算有点小成了,那个时候就感觉到学习PHP的劲头不那么足了,感觉到自己提升的空间比较小,成长比较慢了,幸亏当时我自己还在看PHP100的视频教程,在第100讲的视频中,张恩明老师也谈到了这个问题,学习的路线是:自己感觉什么都不会-》自己感觉什么都会-》自己感觉什么都不会,他在视频中鼓励我们去找点项目来做,锻炼一下自己的能力,所以大二下学期就开始在学校外面接一些小公司的项目来做,自己感觉基本上也就是CMS这种。
大二下的时候,自己运气也比较好,刚好当时我们辅导员的同学刚创业,他们公司需要几个廉价的码农,我就去了,虽然去的时间只有短短两个月,但是那次真的让我收获了很多,不仅仅是开始接触PHP的Framework,了解还有版本控制,项目必须要按照规范走,更重要的是了解了团队合作。
从那儿回来之后,紧接着就接到一个项目,管理他们公司店铺,账单,员工等信息的一个系统,这个项目对我的意义比较重大。因为功能比较复杂,我准备建一个团队,团队规模不大,3个人,一个是当时和我一起当廉价码农的同学,他负责部分后端逻辑的处理,另外找了一个女同学做美工,由于工期特别有限,所以我们三个人在经过一天的讨论分出了模块,设计好数据库之后就开始编码了,由于美工的进度要稍慢于我们另外两个,所以界面我们做的比较慢 ,我们测模块的时候都先测功能,后看界面。当主要功能完成之后,我感觉到自己学到的东西真的蛮多,当然也挺累的。
客户看到我们做出来的东西之后,很不满意,为什么,因为界面太丑了,后面我们就得出经验了,不管你后端处理的再好,客户不关心,他关心的只是他看得到的,他只会用它的方式来判定我们这个系统的好坏。
再界面进行了大幅度改动之后,客户终于对界面看的过去了,当看到功能的时候,他突发奇想,又要添加一些额外功能,而这些额外功能和我们当时的设计完全冲突,导致后面大幅度代码不断修改,后面当这个项目最终完工的时候,我们都已经累得趴下了。
之后再接项目的时候,我们就很注重代码的分层了,基本上都是采用MVC这种方式,保证即使客户需求变更也不会导致大幅度代码的修改。
通过大二下和大三上的一年在外面接项目的时间,我前后端都会了,后端逻辑采用PHP,前端展现采用smarty+css+js,在做了一年这种简单的网站之后,突然感觉这些没什么意思了,我可以做,其他人也可以做出来,的确,做网站难度是比较小的,所以我开始往深层次去挖掘。
大三寒假,开始我准备是去学习一下zend framework 和thinkphp,因为这两个都是我觉得很不错的PHP的框架,但是学了两天之后,我突然想,别人都可以写得出来框架,为什么我不写一个呢?
说干就干,我就开始疯狂读thinkphp的源码,开始的时候真心的很痛苦,因为没有写框架的基础,所以碰到了很多问题,但是后面不断不断的,我也写出了一个可以使用的框架Toper,寓意走向顶端的人,这个框架从哪个寒假到现在已经走向了v0.5,为什么我称为v0.5,因为我觉得这和成熟的框架比差距还很多,我仍然需要不断学习。
开始的时候,Toper里面各种乱七八糟的功能都有,但是当我使用toper为学校写了一个网站zzb.scu.edu.cn的时候,我突然感觉到很多功能都没什么用,所以后面重构的时候就把Toper变成了core+extend这种方式,并且核心里面只实现mvc的构架,用户使用的时候可以最小化到只包含core的内容,当用户需要extend的内容的时候,只需要把extend的文件拷贝进来即可,extend的类之间完全独立,core里面db实现了简单的ORM,view实现了taglib等等。
在编写Toper的时候,我突然就感觉到自己的PHP真心弱爆了,沉下心来,开始使用SVN做版本控制,将开发平台从windows转向了fedora,使用phpdocumentor开始编写文档,使用xdebug调试代码,使用phpunit做单元,使用phing做自动化部署,也开始了解PHP的反射,SPL,设计模式,apc缓存,memcached缓存,nosql等等。
之后我开始认真学习JavaEE,C++等等,我学这些语言不是准备拿它来做开发,而是我知道PHP有很多它自己的弱点,我可以把其他语言的优点吸收过来,转而将Toper做的更好,比如我就把Java的过滤器拿过来用在了Toper中,同样,由于前后端天然的不可分离,我开始编写Toper的JS代码,当然,这个才开始。
如果大家对Toper有兴趣,可以通过这个去看看:http://www.qingyueit.com/blog/?p=282
之后,我成为腾讯实习生,被分到北京的OMG,负责腾讯微博开发,虽然只在腾讯呆了短短两个月就回来找工作了,但是在这段时间我真的成长特别大。
在微博的这段时间,我开始疯狂利用内部资源,比如KM平台,看关于系统构架的分享,比如怎么构架1亿PV的网站,要构架这样的网站,可能涉及到这样几点:lvs,数据库的分区分表,多域名,反向代理来缓存静态资源,数据容灾,防攻击等。
由于实习生比较闲,也就顺便看了看PHP的源码,了解了一下PHP的垃圾回收机制,PHP怎么实现动态类型等等。
从腾讯回来之后,由于忙着找工作,所以PHP的学习暂时中止了。
学到现在,我真的觉得我对PHP一无所知,很多东西我都不会,所以,我觉得与其争论语言的好与坏,倒不如踏踏实实把一门语言学好一点,当你一门语言学好之后,其他语言也许并不是那么难以入手。
在这儿,我想给大家出一道题,这道题是我阿里巴巴二面的面试题,看看大家怎么解决:
在微博中,关系链是很重要的,我们可以通过一个QQ号找到他的好友,然后通过好友再找到好友的好友......,那么如果你们在负责腾讯微博,你会怎么通过一个uin(QQ号)找到整个关系链的信息呢?
注:腾讯微博使用的数据库是mysql的集群,微博用户的数据是亿级的
虽然我认为语言只是一个工具,但对我个人来说,我还是喜欢PHP和JS,因为它们都非常的灵活。
我还想说一下,PHP 并不是只能做小型的应用,大型应用也是可以的,其实当一个应用大了之后,语言层面的东西我感觉都不值一提,只要你你构架做的足够好,就像facebook的XXX说的:Languages's don't Scale, Architecture Scale。
PS一下:腾讯朋友网后端数据处理就是用PHP做的,当然,是用c写的PHP的扩展。
在这儿,我推荐一本书,我觉得这本书我看了启发很大:《高可用mysql》