今天在Q群里唠一个新技术(关于phper如何学习swoole)的时候,忽然一群友发一句“脱离业务的技术都是耍流氓”,顿时让我等老鸟无言以对。而后,就是一堆的不明群众复制、刷屏。。。php
幸亏本人反应够快,快速输入下面这段话:html
分享一些工做的经验:不存在脱离业务的技术。全部新技术都是为了解决一些业务痛点,让特定业务更爽。前端
当咱们掌握足够多的技术,在遇到问题时就能够选择适合的技术进行解决。反之,若是没有技术储备,就会手足无措,又或者说选择一些不太恰当的技术进行解决,最终都会走一些弯路、踩一些坑。走弯路、踩坑当然是全部项目都会遇到的一个问题,一我的走弯路、踩坑也许不是什么大问题,但整个项目走弯路,这个最终苦的仍是咱们这些技术人员。java
技术储备相当重要,不管是团队仍是我的。有了足够的技术储备,才能够游刃有余,作到成竹在胸,遇到问题能够快速找到N种解决办法,并评估各个方案的优缺点进行合理选择。
总之一句话:根据业务场景选技术,但前提是对各类技术都有深刻的理解,能熟知其利弊。nginx
下面会围绕这个观点,作一些延伸思考:web
关于这个问题,个人同事 "江边望海" 曾经提到一种关于"技术人员的成长之路"的思路能够拿来借鉴:redis
第一个阶段: 作技术人员的前3年,不断的作业务,作各类各样的业务。
第二个阶段: 3-5年,解决一些异常问题,遇到足够多的问题。总结其规律,找出业务痛点
第三个阶段: 根据痛点、规律制定流程(开发规范、协做方式、设计模式),开发新的解决方案(新技术的诞生)算法
不谋而合,新技术的目标就是为了解决一些痛点,优化工做效率。不管新技术是一种实际的技术,如redis、hadoop等解决现有存储的问题。仍是如MVC、设计模式、OAuth通常只是提供一种思路,不一样语言有不一样的实现。新的技术(思想)只是针对特定痛点的一剂良药,用的得当即可事半功倍,用的不得当便会事倍功半。apache
先说一段题外话:好久之前的一次聊天中,我给客服小妹讲一黑科技:如今有一种技术,能够模拟任何人的手机号给任何人打电话、发短信。编程
而后客服小妹就问,这技术有什么用呀? 能够把本身假装成任意一我的,而后给你打电话,你怕不怕。 而后呢? 这么说吧,假如给你家人发短信,上面显示你的手机号,让汇钱,怕不怕 我家人才没这么笨。。。 那。。。 而后我就各类解释,想让她明白这技术多么牛逼,多么有用。 “好啦,我明白了,我逗你玩的,别太认真,哈哈哈哈” 而后就这样了。。。
技术是很牛逼的技术,只是要想让别人承认这项技术,寻找这项技术所解决的痛点尤其重要。幸亏只是跟同事瞎聊,若是就拿相似这样的方案跟领导讲技术解决方案,说不明白各模块所存在的必要价值,估计就惨了。
好吧,说正事, 如何才能寻找开发中的痛点?
引入新技术可能存在一些问题,这是你们的共识。具体问题包括但不限于如下几点:
曾经听过滴滴架构师李令辉的一次分享《用灵活的架构去适应变化的业务》,明确指出了咱们不引入新的开源技术。这看似有些难以理解,但却有其意义。引入新技术有其优点,也有其弊端。再引用李令辉的一句:
咱们还有野心从新梳理总体业务架构,中国架构师比较不自信,当设计一个新架构的时候,你的领导和同事就会问是否有大公司这么作过,大公司包括了BAT3M。
技术方案当然重要,但有一点更为重要,就是团队的“内研”能力。团队的内部研发能力若是较弱,就算拿最牛逼的技术依然会走弯路。别人的技术方案只是一种工具,内研能力才是决定咱们是否能把这个工具用在正确地方的主要因素。
到达盈利模式后,解决掉技术债务(把欠的东西都还上),这样才能一身轻松的快速前进。积累经验,分析各技术方案在业务中的利弊,发挥其长处、避开其弊端,充分提高业务能力。制定开发规范、优化协做模式,新技术的引入、使用、深刻分析、适用场景分析。当作好这些准备后,我的认为开发效率至少能提高5倍以上。
从新说明一下:新技术不仅是指实际的软件,也能够是一些思路、一些模式。
最后仍是说一说开始的话题:phper有没有必要学习swoole。原本就是想说这个话题的,结果被打断了,好吧,我仍是很执着的。
swoole作为一个新的技术(其实成熟版本已经存在3年以上),与php充分融合,借用php的语法,使用php的cli运行模式就能够测试其所有功能。看似swoole是php的一个扩展方法,实则否则。swoole是一套网络框架,看过其源码就会明白,其中有大量的C代码,实现了并发、网络编程、共享内存操做方面的东西,最终只是以php的扩展方式作为最终呈现。
那么,还有必要学吗?
固然有,php作为一种脚本语言,常规的职责就是藏在nginx/apache的后面接收请求,处理请求并返回给nginx。存在的问题是每接到一个请求就须要初始化一些资源,返回结果后就把资源释放掉。这就决定了php只能作web应用,作服务就略牵强。举个例子来讲,用php提供一个分词服务,分词的服务端须要先加载词典,而后接收用户传入的文本,将其分词并返回。整个过程最耗时的就是加载词典,而php常规的php-fpm模式须要每次加载词典,这无疑是个很大的问题。若是把php前端的nginx去掉,php直接对外提供服务,那么就可让php启动一个进程并一直存在,词典也只须要加载一次。
这看似简单的调整,实则已经改变了php在整个架构中的职责。如swoole官网所写:从新定义PHP。
要如何学?
官网的demo看起来很简单,但刚才已经说了,swoole再也不是单纯的php,是从新定义PHP。常规phper所不了解的网络编程、并发、进程间通讯在这里已是常识问题,不会有单独的文档介绍这些内容,须要本身去补充。若是有java、C/C++的并发编程经验,上手这个会更方便。若是单独去了解一下相关的知识,再来看这个东西,会有一种遇到神器的感受:swoole简化了网络编程的许多方面,可让phper以最快的方式实现一个网络服务器。然而也有一步一个坑的走过来的phper,真是边走边在内心咒骂,怎么这个坑在文档中没有说明,为何这个变量不起做用。具体的坑在另外一篇文档中有说明(入口),这里就再也不调戏swoole了,哈哈。至于swoole能作什么,有人问能作数据采集吗,这里也不作解释,swoole提供了更多的可能。掌握此技能颇有必要(业余时间),无论如今你是否有适用场景。
不是有个段子吗:若是你有一把锤子,看哪都是钉子。但若是你有100种熟练使用的工具呢?
所拥有的见闻(技能),决定了所看到的世界。