学习和使用 PHP 相当于只从正脸观察 PHP,嗯你对它已经一见钟情了,Good,接下来你学习 HTML 和 CSS 相当于陪她逛街、买衣服、看时尚杂志,提升了外在品味,再接着你学习 JavaScript 相当于教她如何做更聪明的女孩,而不只是个好看的花瓶,然而习得 C 语言,才是你时常跟她一起遛弯的那条街边如家酒店 #521 大床房的房卡。骚年,好好努力!
一个用PHP很多年(1999年开始自学)的屌丝给你一些小建议:
(前提是假设你往web方向发展)
1、PHP运行环境可以非常熟练的搭建,环境问题也可以很容易判别。
这个绝对不是用yum ,apt-get可以学会的;数年以来,我都是 make 环境的,不下1000次。环境一般涉及 Nginx、PHP、MySQL、memcached、radis、sphinx 以及 PHP的扩展。可能比较费时间,就把交女朋友、约炮的时间拿来学这个吧。
2、开源的PHP项目多阅读
我用心阅读过比如 discuz、phpwind、Yii 等。时间不够同上。
一般什么模块划分、业务抽象、代码风格、解耦都能在里面看到一些(不是系统性学习,而是潜移默化的影响);如果你够好奇、有刨根问底的精神,会有很大进步。
3、空的时候看看设计模式、软件工程、重构相关的书
有兴趣就看下去,没兴趣就换一本看;全部都没兴趣就换行业。
以上搞定,差不多可以有自己的技术方向了
正好Yii是我最熟悉的php框架,这个问题我想回答下。
你用的CRUD,是用gii生成的吗?操作数据库是用的是ActiveRecord吗?grid用的是zii库的CGridView吗?
这里面其实有很多可以思考的问题,比如
- gii是一个module,它的源码是如何定制components的?它只用一个密码来管理user的权限,它是如何替换掉你用的WebUser的?
- 用ActiveRecord进行CRUD的时候,它和DAO的性能差距有多大?它的性能都损耗在了哪里?如何弥补?它与cache如何结合使用达到最优?
- 用ActiveRecord进行CRUD的时候 ,如何使用after save、after find、after delete这些event以优化代码?再深入一点,event和behavior是如何结合的?
- CGridView的ajax部分是如何写的? CGridView的filter(就是头部下面那一栏的筛选框)在什么情况下才会出现? 深入一点, CGridView的column如何深度定制?
还有一些别的问题,也可以思考
- 你写的js,是如何和Yii结合起来的?是用的Yii::app()->clientScript吗?是用的registerScriptFile或registerScript方法吗?它们又是如何向view插入script标签的?Yii在这块是如何优化的?
- Yii用AssetManager来管理私有的css js文件,这东西用的时候有什么不方便的地方吗?如何优化?
- 再问得大一点,一个request,Yii完整的处理步骤是什么,涉及了多少个class?
抛开Yii,也有很多问题可以思考
- 前台的js效果,是否够用就好?稍微长一点的js代码,是不是也应该考虑一下可维护性?
- 很多js效果,都是重复重复再重复,我们是不是有办法将他们模块化,提高可重用性呢?
- 用jQuery插件的时候,是否会遇到有相互依赖的插件?有没有用js就能处理依赖问题的办法?嗯哼,js loader?哪个loader比较好用?seajs?
- 再问个无聊的问题,js css有没有『时髦』的技术呢?coffee script?less?nodejs?咱有必要玩一玩吗?
好吧,其实我想说的就是,『高级程序员』之类不过就一头衔,有人觉得你是,你就是,但它根本不能作为你技能水平的标杆。
我也不觉得一个程序员有什么一定要掌握的技能,我只知道
『一个个解决每天所能见到所能想到的问题,这本身就是对自己最好的提高』。