三省吾身

3-26 2,559

前段时间招聘服务器端研发,面到了一个人,忽然感想挺多,所以就写在这里。

这个同学怎么说呢?他自己可能感觉自己很有想法,很与众不同。
举几个例子:
比如,觉得他所在公司的一个框架的版本太低,官网都更新到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了?”,因为很多事情的决定取决于 时势 二字,今天和昨天,时 和 势 都可能不一样了,只要最终的变化是相对当时合理的,那么就应该拥抱变化。

好了,先到这里,这次噼里啪啦敲了不少,大家有什么想法欢迎和我一起探讨。

19则回应给“三省吾身”

  1. fancy说道:

    被面试的这位同事大概没有自己负责过项目,当他自己踩过坑之后自然就明白这些道理了

    [回复]

  2. 依云说道:

    我们公司又是 Redis 又是 MongoDB 竟然还有 RabbitMQ……RabbitMQ 明明可以合并到 Redis 的嘛,MongoDB 和 MySQL 的功能还可以合并到 PostgreSQL 9.4+ 233

    当然他们代码都写了,又没有遇到什么问题,我才不会去推新东西呢。

    承载量、性能瓶颈这些指标得有机器去测。只要不是太明显的,自己拿个人电脑去测根本没意思嘛。(我去压 Redis 结果把网络占满了啊哈哈哈~)

    [回复]

    ZefanXie 回复:

    RabbitMQ 和 Redis 解决不同问题, RabbitMQ合并到Redis你是指用Redis中的list实现队列吧? Redis的list实现可靠的消息传递还需要做很多额外的工作,而RabbitMQ已经帮你做好大部分工作了。

    [回复]

    依云 回复:

    确实,不过这里的现状是这两种队列都有程序在用……

    [回复]

  3. 猎头麦说道:

    我这上海也在招php(q 1735832445),用的也几乎都是开源的东西,但是现在其实行情并不好,机会太多了,题主别太挑了。。

    [回复]

    徐陈 回复:

    技术需要灵魂。人对了才行,不对就是人到位了又能咋样?但我并不否定人的成长性。

    [回复]

    猎头麦 回复:

    人对了?嗯。。。这个其实,听上去挺模棱两可的,我能理解为,软硬件都达标?

    [回复]

  4. BeginMan说道:

    喜欢你的博客,唯一不爽的一点就是字体太小了,得趴在电脑上看。

    [回复]

    朱念洋 回复:

    嗯,好像不止一个人说过。。我调大一些

    [回复]

    朱念洋 回复:

    改成15px,原来13px,感觉如何?

    [回复]

    BeginMan 回复:

    飞一般的感觉。博主太迅速了

    [回复]

  5. pandaychen说道:

    说的很有道理。刨根问底,知其然知其所以然,现在一些人太浮躁了。

    [回复]

    金峰 回复:

    就像题主说的,每个人都会经历这个阶段。

    [回复]

  6. adamfei说道:

    4年前,使用vim开发时时常进来学习!后来,由于博客丢失,这几年一直没进来,时隔几年进来,顿时感觉博主果然风格变化了好多,越来越多的思想,看来时间还真的是让人在改变!

    [回复]

    朱念洋 回复:

    是的,大家都在努力成为更好的自己:)

    [回复]

  7. xiantongma说道:

    文章写得不错, 使用新工具 和使用新方法 都是有成本的, 比如 UVM , 画波形工具,用自己的FPGA板子会造成后续维护困难。

    [回复]

  8. peter说道:

    阿管当年的确是很包容的,感谢阿管

    [回复]

    朱念洋 回复:

    是啊,跟过的领导直接影响着一个人的成长

    [回复]

  9. xx说道:

    ok ok的 好像是你的口头禅

    [回复]

发表评论