phper 进阶困惑

经朋友推荐来到SF 感觉很不错...
回到正题,作为一名phper快一年的时间,这是指开发时间不包括自学时间..
但是慢慢的发现自己处于一个瓶颈中无法走出,提高很慢...
自己目前也能独立使用各种框架进行项目的开发,但这些好像都是属于PHP初级知识范围内的吧??(自己划分的).对于其他的知识 譬如 PHP的cli模式 线程问题.还有一些其他的PHP知识想去深入的了解自己也gg过很多资料,但是还无从下手的感觉,希望SF的大大能够给予解惑 万分感谢
PS 本人非计算机专业 PHP是大学偶然中接触之后有兴趣开始学习的..求各位大大给予建议和帮助.

阅读 9.3k
5 个回答

我觉得这是典型的舒适区问题……你能很好的满足工作需求了,更牛逼的cli,线程,zend之类的工作上项目上用不到(多数项目确实用不到),没有需求/老板之类的外界来push你,于是你感觉很难提高

我的建议有三条,我都各自用过这些方法来冲出舒适区,仅供参考

NightJob

不知道你有没读过《黑客与画家》,这里说的NightJob就是你在工作之余,下班,周末来作的项目。无需考虑盈利,只需要做你最想做的事情,你自己是产品经理负责规划,自己是老板负责挤出工作之余的时间,自己是开发负责找最cool的技术来实现。

我个人的NightJob有很多很多,绝大多数最后都是0用户,自己写不下去了,但每一次从发现灵感,尝试去做,最后做了个半成品,渐渐遇到困难,克服了一些困难的过程都对自己的成长有很大帮助。每次反思“啊那个项目怎么最后就做不下去了”也都很有收获。

OverJob

顺势给第二条建议起了个这么个名字,就是工作之余,想想有啥可以额外做的小工具,mini项目,做出来可以略微提高一点工作效率的。比如我做的事情是

我司内部有一个MySQL缓存中间件,负责在web机器和DB之间做cache,一直没有图形界面的,我花了一些时间(嗯,包括一次周五额外加班通宵),日了一个网页版的图形界面出来,开发的时候不需要搞那些命令,直接开网页,就像PMA那样就可以控制里面的内容了

这样的事情和老板说,他肯定不会批时间给你做,但实际上做出来以后确实是对开发效率有一定提升的。和NightJob一样,因为是你主动自发做的,所以你可以尽情发挥,用擦上边的各种你想熟悉的技术。比起NightJob来说虽然可能选题范围稍微窄一些,事情本身的有趣程度也略逊,但好在做出来以后可以shock到你的老板,可以让你的同事对你刮目相看。

成为水泥

最后,这条建议就是完全关于正经工作的。既然你现在感觉有余力,可以比较好的完成你的份内工作,可以把你的眼光投向四周:你的同事有什么工作是摆不平的,或者做的不够好的?如果这件事你能做的很好,那么找机会花时间去教他,提高他的水平。如果这件事你也不那么擅长,那就去学,变得擅长,可以考虑和他聊聊然后和你的老板聊聊,告诉他们:这事儿我比较能干,把这份事情搞过来自己做,把自己做惯的“简单”一些的任务丢掉一部分(以夯实你学习的成果)

水泥的意思就是首先能填充到缝隙之中,还能慢慢变硬,让大楼让整个团队坚硬无比,也让自己能适应任何需求。

后者对自己的提升比较明显:你丢掉了一些做惯的不有趣的事儿,拿到了新的有挑战的事儿,学到了新的技能,但其实我更喜欢前者,也就是提高同事的水平的机会。这不仅能收获他的好感度,老板的好感度,还能让你自己的基础更扎实(别人学习过程中提出的问题很多时候能正中自己的软肋),一石二鸟,一般人我不告诉他的。

同样是自学的,感觉多数人技术的提高都是碰到问题才解决问题吧。不知道为什么你会碰到线程问题,web 请求瞬间结束,这个语言就是被设计用于此,是单线程语言,甚至没有线程的概念,所谓“多线程”,都是爱好者的小把戏罢了,你需要它常驻内存、处理大量的数据、发起很多的请求,可以用 Python 之类方便点的。再不济就用多线程的库,我不喜欢这么做。技术角度研究它的就去读 zend 引擎源码。
cli sapi 手册上也是讲的非常详细,有些配置信息在命令行模式下不需要,所以不用关注,echo 可以立刻输出等等,其余的忘了。
cli 我用过寥寥几次,都是做个注册机之类的代替长时间手工刷新浏览器,用 PHP 去代替别的语言长时间运行并不是好主意,命令行模式下运行时垃圾回收机制有问题,长时间跑内存吃不销,不该用弱语言。

PHP 太简单了,以至于入门相当快,也跟其它语言类似,基本语法都掌握之后,看看设计模式,既然提到框架就去看其它框架的实践啥的,模仿着写写呗,你能写出来的比只会用的也许薪水就差挺多,看看一些周边的东西,composer 、 git、 pecl、 pear, PHP 用的比较多的数据库 MySQL 会优化了吗,redis 会主从了吗, mongo 咋分片啊、 集合太多锁死咋办啊,这些都是 PHPer 会遇到的问题呢。

还有测试自己的代码(PHPunit 和 那个模拟浏览器的测试框架叫啥来的忘了),以及一些好的工具,给代码生成文档(PHPdoc), 代码风格统一检查(PHP_CodeSniffer), 代码重复(phpcpd) ,复杂程度(PHP_Depend),bug检查(PHPMD或好的ide也能代替),统计(phploc)、以及一款好的IDE真的非常重要,有些记事本教徒四处普及这个编辑器那个编辑器,别被他们忽悠,连个静态方法都追踪不到算什么工具,要的是开发、测试、提示、调试、git、todo、等等各种工程工具完备的、功能完善的IDE(我推荐PHPstorm 或 netbeans)、

重点是多写一写才知道哪里需要完善,因为写着写着,当发现自己反复遇到同样的问题,反复做同样的事时,程序员的天性就出来了,要追求效率、解耦、甚至是漂亮。我刚学 php 两年的时候(是个人站长)去找工作,拿着用别人框架写的自己的站,自诩工程师,可是工作了,大概写到第5年的时候再也不敢这么叫自己了。当我对绝大多数别人求教的东西娓娓道来的时候,猛地瞥见大神们已经端着 C 语言在跟你讨论引擎了,立刻不是一个级别的,现在觉得自己永远都不可能学会PHP了

因为问这样问题的人,工作性质可能不是 PHP 、 html都写的那种。 所以前端部分全部忽略,不过小tip是业余时间可以看看javascript,挺有趣的、

谢邀……这算是知乎病不?得改!

可是俺不知道如何回答这个问题呀,因为俺不懂 PHP。。。不过我能理解你的感受,因为我和你一样不是计算机毕业,比你还惨的是我没念过大学(电大还是肄业,不知道现在还有没有电视大学了?),和你一样的是我第一次接触编程竟然是 PHP!那时候我只会打游戏,听说编写脚本可以在游戏里做一些……事情,你懂得~所以我一头扎进书店,买了第一本封面上带着“脚本”二字的书回去啃了,至于 “PHP” 这几个字,我根本不认得它。

说来好凄凉,你现在还知道自己遇到瓶颈了,我那时候巴巴的读了几页之后感觉完全是在读天书,所谓瓶颈,于我来说压根儿不存在。此后我就放弃了,因为我觉得自己根本不是那块料。

十年之后,我阴差阳错的进了一个项目组,当时我的本职工作完全和编程不沾边,只是因为我做过广告策划,略懂平面设计和印刷方面的知识,所以老板拉我进来给一个项目做做美工指导,并美其名曰“用户体验设计”。在那段日子里,我发现自己能够给出的建议通常都会让开发人员们感觉很为难,经常有人会用看白痴一样的眼神看着我……渐渐的我明白我不懂我的想法在他们的手中能不能实现,或者好不好实现,或者如何去实现。我对自己说:如果你希望你的想法能够实现,你就得学会他们的本领。

于是,HTML -> CSS -> JS -> Ruby...等等等等,这就是我这三年来走过的路。每一天,我遇到问题,Google/翻书/查文档/SO,解决它,做笔记,然后付诸实践,周而复始。到今天,我也能在 SF 上偶尔冒充下大神了——可我真的不是!到现在我也没有遇到过什么瓶颈,倒不是因为自己多牛逼了,而是我知道自己尚未学会和解决的问题排着老长的队在后面等着,哪儿有时间考虑什么瓶颈啊!每一次看到一些大大们的文章或回答,比如我很崇拜的 @依云,我还是会有十几年前如看天书般的敬仰心情,唯一不同的是当初只有沮丧,而如今全是兴奋罢了。

因为我到现在还是不懂 PHP,所以我无法回答你具体的东西,我能给出的唯一建议就是:开拓你的视野,发现你的无知,然后勇敢的去和它拼命吧!再具体一点,你需要给自己两个目标:一个是长远的固定的目标,比如说“我要做一个搞垮 Facebook/Twitter 的新社交网站”(前提是你真心喜欢做这个,而不是吹牛逼,否则就是一个笑话);另外一个则是短期的目标,也就是为了实现那个长远的目标所要经历的每一步中离你最近的那个,只需要稍稍努力就可以达成的那个。

或许你需要为了那个长远的目标画一副路线图,描绘出你要完成的每一个短期的目标,并把它们串起来,然后根据这些短期目标来制定学习和研究的方向与具体计划。用不了多久你就会发现这幅路线图就是你冲破各种障碍、瓶颈、困难的指南,而且用不了多久你就会认识到今天你的瓶颈根本就不算什么。每个人心中都会有一副蓝图,PHP,甚至是编程,也只不过是其中的一块而已,我们需要走出这个框框,我们应该明白“瓶颈”其实根本就不存在,唯一存在的那个障碍叫“满足”。

希望对你有帮助,也希望你早日冲破现在的“瓶颈”。

我和你一样,非计算机专业,做销售4年后从php培训开始。

简单说:想成长离不开这些东西
数据结构+算法+设计模式(可以从大话数据结构和设计模式这两本书开始)
结合设计模式看些框架设计,
结合数据结构和算法看一些缓存场景应用,数据库优化设计。
操作系统原理(操作系统精髓与设计原理这本书可以看,另外清华大学的公开课有计算机的,推荐学堂在线可以看看)
另外,有闲暇可以报名一个软件设计师,设计的知识比较广泛,可以和以上的知识做到串联。
最后,如果想长远发展,自考个计算机专业本科。会更有竞争力。最少多个面试机会。
慢慢也许会发现。。。
TMD瓶颈更大了。。。。。。

推荐问题
宣传栏