前段时间招聘服务器端研发,面到了一个人,忽然感想挺多,所以就写在这里。
这个同学怎么说呢?他自己可能感觉自己很有想法,很与众不同。
举几个例子:
比如,觉得他所在公司的一个框架的版本太低,官网都更新到v13了,他们还在用v7。想要推动公司内升级,他们技术老大又不肯。所以他觉得公司没有创新精神,死气沉沉。
又比如,研究过redis、mongodb或者其他一些开源框架,就觉得想要应用到公司内部来。但是推了半天又推不动。所以又开始觉得公司不够开放。
又比如,炫耀自己喜欢逛github、stackoverflow,还用rabbitmq写了一个分布式消息处理框架,但是问到承载量,性能瓶颈等等,又完全回答不上来。
又比如,我问了几个网络编程的细节问题,比如 epoll的水平和边缘触发、TIME_WAIT的原因与处理,结果一问三不知。
类似种种。
我之所以拿这个事情,单独写一篇文章来讨论,就是因为我知道,有一批人,一定会走到这个阶段。
因为现在的他,就是当年在腾讯时的自己。
当年的自己也是学了点python,用django写了个网站,逛了github,结果就像发现了新大陆一般,觉得自己牛逼了,别的同学都太out了,连python脚本都不会用,看,同样的功能,用python开发速度比c++快十倍!
所以当时公司很多的工具我都尝试用python来写,其实我现在很感激当时的leader让我能够有机会用python写一点小东西,而不是完全扼杀掉。
因为我现在明白,即时那些小东西,也足以对整个团队日后的维护产生不少的影响了。
ok,说回这个事情本身,我们针对上面的例子来说吧。
很多事情,说到底就是一个ROI的问题,即这么大的成本到底值不值得。
比如对于上面的版本升级,首先我们要弄明白为什么我们要升级?现在是遇到了什么问题?是否一定要通过升级版本来解决?如果不升级是否能通过补丁解决这些问题?
ok,如果这些问题问完了,最终的结论就是必须升级,那么再去评估升级会带来多少的成本。
如果成本可控,那就需要出一个升级方案,升级涉及到哪些模块的修改?时间规划是怎样的?怎样保证不影响外网服务?等等。
如果还想做的更完美一些,那么你可以抽非工作时间,做一个升级过的demo给上司看,让他知道这个升级是你可以掌控的。
如果做到了这个程度,只要你和你上司的关系不是特别差的话,基本就会放手让你去做这个事情了。如果他有意培养你的管理和推动能力,这相当于给你自己找了一个很好的机会。
当然,过程中不要忘记及时反馈,做老板最讨厌的事情就是失控。老板可以什么都不懂,但是你要让他知道进度。
好,这个事情说完了,我们再来说对技术的盲目崇拜的问题。
其实redis、mongodb这些第三方开源库做的确实是非常好,但是如果你也仅是停留在会用的程度上,那你的水平也就仅仅止步于此了。真正内部的,底层的,才是那些万变不离其宗的东西。比如为什么redis可以做到10w/s的访问?网络层是怎么实现的?存储是怎么实现的?
而另一方面,就是对某一门语言的过度推崇,当我们有了一定的阅历,到了一定的年纪,我们就应该明白,没有什么东西是100%完美的。
就拿公司目前来说,我们的服务器框架使用的是c++和python,为什么用c++?因为连接层的gateway server要求性能非常高,所以我们使用c++和epoll来完成。那为什么又用python?因为业务层代码使用python开发会更快,并且业务层代码的瓶颈不在语言本身,而在于架构设计。
延伸开来说,当你看到一份很老又丑陋的代码,忍不住想要重构时,请保持敬畏。一是因为,它起码以这种姿态稳定的运行在外网,而另一方面,重构后的代码是否更好也要打一个问号。
写到这里,我发现,自己在这几年的创业时间里,很多的思想都在改变。说是屁股决定脑袋也好,说是人生阅历的增长也好,总之确实是不一样了。
很多事情没有所谓的对与错,就是一个度的问题。比如说框架的代码需要演进,但是什么时候只进行量变,什么时候就不得不考虑质变?质变的时间点又该怎么选择?太早了,有过度设计之嫌。太晚了,可能会出现撑不住而影响业务。
又比如,不会再去说: "你昨天才说XXX,怎么今天就变成YYY了?",因为很多事情的决定取决于 时势 二字,今天和昨天,时 和 势 都可能不一样了,只要最终的变化是相对当时合理的,那么就应该拥抱变化。
好了,先到这里,这次噼里啪啦敲了不少,大家有什么想法欢迎和我一起探讨。
fancy on #
被面试的这位同事大概没有自己负责过项目,当他自己踩过坑之后自然就明白这些道理了
Reply
依云 on #
我们公司又是 Redis 又是 MongoDB 竟然还有 RabbitMQ……RabbitMQ 明明可以合并到 Redis 的嘛,MongoDB 和 MySQL 的功能还可以合并到 PostgreSQL 9.4+ 233
当然他们代码都写了,又没有遇到什么问题,我才不会去推新东西呢。
承载量、性能瓶颈这些指标得有机器去测。只要不是太明显的,自己拿个人电脑去测根本没意思嘛。(我去压 Redis 结果把网络占满了啊哈哈哈~)
Reply
ZefanXie on #
RabbitMQ 和 Redis 解决不同问题, RabbitMQ合并到Redis你是指用Redis中的list实现队列吧? Redis的list实现可靠的消息传递还需要做很多额外的工作,而RabbitMQ已经帮你做好大部分工作了。
Reply
依云 on #
确实,不过这里的现状是这两种队列都有程序在用……
Reply
猎头麦 on #
我这上海也在招php(q 1735832445),用的也几乎都是开源的东西,但是现在其实行情并不好,机会太多了,题主别太挑了。。
Reply
徐陈 on #
技术需要灵魂。人对了才行,不对就是人到位了又能咋样?但我并不否定人的成长性。
Reply
猎头麦 on #
人对了?嗯。。。这个其实,听上去挺模棱两可的,我能理解为,软硬件都达标?
Reply
BeginMan on #
喜欢你的博客,唯一不爽的一点就是字体太小了,得趴在电脑上看。
Reply
Dante on #
嗯,好像不止一个人说过。。我调大一些
Reply
Dante on #
改成15px,原来13px,感觉如何?
Reply
BeginMan on #
飞一般的感觉。博主太迅速了 <img src="http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/d0/z2_org.gif" />
Reply
pandaychen on #
说的很有道理。刨根问底,知其然知其所以然,现在一些人太浮躁了。
Reply
金峰 on #
就像题主说的,每个人都会经历这个阶段。
Reply
adamfei on #
4年前,使用vim开发时时常进来学习!后来,由于博客丢失,这几年一直没进来,时隔几年进来,顿时感觉博主果然风格变化了好多,越来越多的思想,看来时间还真的是让人在改变!
Reply
Dante on #
是的,大家都在努力成为更好的自己:)
Reply
xiantongma on #
文章写得不错, 使用新工具 和使用新方法 都是有成本的, 比如 UVM , 画波形工具,用自己的FPGA板子会造成后续维护困难。
Reply
peter on #
阿管当年的确是很包容的,感谢阿管
Reply
Dante on #
是啊,跟过的领导直接影响着一个人的成长
Reply
xx on #
ok ok的 好像是你的口头禅
Reply
hi on #
您好,很高兴在茫茫人海与您相识,首先跟您道生谢谢,虽然在您的博客停留不到一小时,拜读了您的文章后,收获良多,比如您说的开源库很好,不能停留在用的基础上,学会他的原理,学精通,内部的底层的都能运用自如,注意细节问题,有什么好想法心里也要有相应的方案。
Reply
hi on #
您好,很高兴在茫茫人海与您相识,首先跟您道声谢谢,虽然在您的博客停留不到一小时,拜读了您的文章后,隐约又感悟了点什么,比如您说的很多东西不能停留在用的基础上,学会他的原理,学精通,内部的底层的都能运用自如,有什么问题向老板建议心里有想法和解决方案,您讲的那些开发知识不是很懂,我也只能算作是初入门的小白喽,出于热爱,愿有一天能和您和诸位一样,能够对的上话,成为同事或朋友,努力成为更好的自己。
Reply