这篇写得好棒,尤其是对技术的斟酌取舍的态度。看来我还是太浮躁了QAQ


在 2014年1月3日 下午3:32,Zhitong He <hez...@gmail.com>写道:

> 谢谢你的建议,其实我认为这是一个态度问题,详细说说:
>
>
> 优秀的程序员都是自傲的:
>
>
> 作为毕业就已经很熟练linux系统开发的我来说(以前大学折腾了4年的Gentoo),也曾经觉得自己就不应该从事边边角角的功能开发(如因政策风险已经砍掉的大功能,或者很少人用的群发助手),而应该有更底层的研发工作适合我,要不怎么对得起自己研究过的GFS/MapReduce/Dynamo等论文,比如我得搞另一个heroku或者阿里云。
>
> 后来我发现,正是这些边边角角的东西,让我从分散的角落熟悉了整个微信后台系统,也让精力过剩的我有更多的思考时间。
>
> 也开始发现,虽然快速的业务支撑开发与人力的不对称(或者公司基因),我们短时间内不会出现惊动业界的论文,但其实这里有许多的优秀实践值得慢慢沉淀,也因此慢慢变得享受起来。(什么?作为Geek你看到twitter的技术很牛逼,国内的都是渣渣是吧。可是它的访问量与业务和微博微信相比低出一大截,更难的问题难道不是更大的挑战?)
>
>
> 虽然现在特性开发做得少,但其实我也在思考手头任务问题之余不断“打杂”,比如主动修改编译错误去推动GCC升级到4.8.2(顺带学习了一些奇怪的C++语法),或者看些据说很恶心的代码(微信的同学,说的就是那坨,丫就接盘重构了吧,哥重构过发语音;啊,dirk,你那漂流瓶龌龊的匹配逻辑我比你还熟)。
>
>
> 我突然知道一个系统架构该是怎么样子的,不再写代码时纠结以前就听说的锁是性能杀手要避免使用,而知道它在每秒几万的访问下根本是多虑;也不再想着一个服务器要把HTTP做到内核态才够厉害,而知道简单恰到好处的设计就能够减少一堆不必要的调用量。
>
> 我也因此知道了,这个世界不是完美的,所以我们才有余地让它变得更好。
>
>
> 优秀的程序员容易文人相轻,爱比较哪家公司技术牛逼,哪个语言用着更好:
>
> 我曾经觉得为什么微信后台这么土,居然用C++来做网站,这不是至少有Django/Flask么,就算不NodeJS怎么也得用受尽鄙视的PHP吧。
>
> 昨天也有人问我微信有没有用Erlang,据说whatsapp一个box能够跑上多少connection,当时没空回复,我在这里一并说说。
>
> 作为Erlang爱好者,我觉得一定读过了Armstrong的PHD论文(后台新人必读),链接:
> http://www.erlang.org/download/armstrong_thesis_2003.pdf
>
> 首先其实这里关键不是有多少connection,而是这个box能够做些什么。
>
> 在最前端,腾讯有深圳架构平台部的统一接入层TGW,内核定制,可以在三层和七层做网络转发,性能高于LVS,节省了许多IP资源。
>
>
> 在真正的微信接入层,即长连接服务器,微信内置了几个基础操作(如心跳、增量同步的序列号比较、通知),也起了对后端垂直划分且变更频繁的逻辑服务器的访问及负载均衡、容灾等作用。
>
>
> 然后关于编程语言,之前路过平时不怎么上的内部论坛回复过一个没人关注的帖子(问题是我们为什么不用外面红红火火的golang),这里转载一下:
>
> 现在能用 golang 的话,几年前就能用 erlang 了。
> 我还希望能用 Haskell/Clojure 呢,Clojure 这不刚出了包含 channel 等用于异步通信的 core.async 么
>
> 1. 不是每个同学都是新技术积极分子,其次许多新的东西不过是旧事务的包装。
>
> 从编程语言学习的角度来说, golang 的 channel,是 Hoare 的 CSP 中提出的,它的其它特性也没有任何新的惊喜。
> 每天刷新Hackew News可以开阔视野,了解业界动态,但只有平时的学习才能让自己成为其中写评论或文章的人。
>
> 2. golang 并不会提升我们的开发效率。
>
> 腾讯的 C++ 基础相当完善,完整的基础库与公共组件,大部分开发时间都在写逻辑,换用 golang 也避免不了。
> 如果换用 golang 的话,我们需要从头开始为它定制一套组件,需要新增但不限于日志、监控与统计代码RPC框架,
> 并且需要花较长的时间来验证它的稳定性,以及解决新遇到的莫名其妙的bug,引用更多 golang 相关的可能不稳定的工具。
> 新增一个编程语言,如果它不能充分利用我们已有的资源,或者带来突破性的改良,反而带来额外的损失,那有什么意义呢。
> 这也是 scala 等建立在 jvm 平台的 java.next 语言能大行其道的原因,它们能够利用已有的各种 java 库。
> 一个可能引入的例子是lua,可以结合已有的代码,对自动化测试脚本的编写方便不少。
>
>
> 另外我们是一个团队在开发,采用大家熟悉的工具,怎么快怎么来,才是互联网的不破之道。抢占先机之后再来慢慢填坑,比方说facebook,他们使用了php进行网站开发,现在搞hiphop、HHVM对php的效率进行提升。twitter最开始使用ruby,pinterest使用python,或者微信沿用C++,不是因为某个人,而是因为当时的团队。
>
> 3. 最重要的是维护问题
>
>
> 大家并不是在做个人的项目,有兴趣的时候写一写,提交到github之后不了了知。新增的每个模块都需要后续的维护,公共的基础库、统一的RPC框架,对于开发和维护人员都是非常有益的。
>
>
> 对于开发人员,在同一个开发环境,一致的编码风格,读其他人的代码理解其功能是非常轻松的事,至少什么都不用配置就能运行起来,理解代码逻辑也不会被中间穿插的所有人用法一致的调试或上报代码扰乱思维。如果你是《黑客与画家》中描述的lisp程序员,享受毫无约束的乐趣,就知道维护别人的代码会极其头痛,因为宏太强大,每个人思维各异。
>
>
> 对于运维人员,基于同一个RPC框架建立一套相应的运维工具,包括自动化部署工具,itil上的监控等,是轻松实现的事情。服务器上如果跑着五花八门的程序,难以理清它们的逻辑,是很难运营的。
>
> 4. 工作中无法使用,并不能阻止我们去学习
>
>
> 这个不多说了,我在腾讯最忙的部门之一也能抽时间学习,或者偶尔路过一下KM写个回帖后闪人,你呢。我也是编程语言爱好者,如果楼主有兴趣的话,我建议卤煮跨过在reddit或者cnbeta看到一门新包装的语言觉得很兴奋的阶段,转而读读这类五年前的精彩文章:
> http://my.oschina.net/digerl/blog/34702
>
>
> 转载到以上截止。
>
>
> 其实我们所做的一切都是为了解决问题,求知若渴,虚怀若愚,这才是最重要的。
>
> 欢迎加入微信,舞台有了,空间有了,决定未来的,是你自己。
>
>
> 继续转载到我平时不怎么用的微博 http://weibo.com/0xffffull ,欢迎扩散。
>
>
>
> 2014/1/2 Zhitong He <hez...@gmail.com>
>
>> 大家早上好,~_~
>>
>>
>> 为什么选择微信团队?
>>
>>
>> 产品:微信是移动互联网时代的伟大产品之一,拥有超过六亿的用户。这意味着微信是一个巨大的舞台,我们所作出每一个改动,都能够瞬间影响到千万的用户,带来极大的成就感。当然,海量的用户只是起点,我们以将微信打造成连结人与世界的I/O中心为目标,不断超越自己。在打磨微信的过程中,发生了许多有趣的事情(例如:小龙非常讲究自然与逻辑,要求设计必须有合理的缘由。简单的对讲机在内部曾经有过四个版本的设计与实现迭代,从以古典对讲机为原型的第一版到最后被采纳的大按钮版本,都经过了许多的思考。其中对于当前的大按钮版本,小龙有过一个问题是为什么按钮的中间是六个圆而不是四个圆?对啊,为什么四个圆看起来就不够六个圆舒服呢?大家想了很久得到一个满意的解释,因为猪有六个奶头…)。如果你是一个对产品有兴趣的技术人,这个极具个性的团队是最好的选择。
>>
>>
>> 成长空间:如果你渴望成长,这里是数一数二的学习平台,它值得你投入大量时间。在基础设施上,你可以学习:一个高性能的RPC框架如何实现,什么才是RPC框架中的最重要的部分;我们如何实现可靠的监控与报警系统,帮助快速发现与解决异常问题;我们如何对服务进行单元化管理,做到柔性可用等等。在业务上,你可以学习:如何实现超过一亿长连接的pub/sub接入系统,如何实现只需三台存储便能支撑数亿用户的序列号分配器,如何实现稳定的亿级苹果push推送机制,如何实现日启动数亿次的摇一摇与解决附近的人位置计算问题等等。如果你爱编程爱学习爱折腾,欢迎把对编程的热爱带到工作中来。一个人的水平,是他接触最多的几个人的平均水平,微信团队邀请你一起快速成长。
>>
>>
>> 巨大的挑战:如果你已经是个牛人,为何不来接受更多的挑战呢?来看看这些是否适合你:为了提高网络服务的支撑能力且降低编码难度,我们通过swapcontext+对read/write等一些系统调用进行hook的方式,在C++上实现了类gevent的monkey
>> patch的协程库,从而能够以同步方式编写非阻塞的高性能服务,也顺利迁移了旧代码。为了满足数据存储的高性能与自动化容灾需求,我们设计了基于简化版paxos的高一致性KV存储。为了保证微信基础消息的高可用性,我们建立了多个完整的微信IDC,并实现了IDC内部机房级的本地容灾与整个IDC的异地容灾。为了逻辑清晰可维护,我们将业务服务化大量使用了RPC框架,当业务稳定为了减少网络调用我们反服务化……
>> 更多的挑战等待着你的加入。
>>
>>     福利:微信的办工地点在广州TIT创意园,拥有媲美Google/Facebook的一流工作环境,请查看
>> http://tech.qq.com/a/20131119/000765.htm。待遇也是极好的,薪酬属于高压线不可谈论,但前年年会人均一台Macbook
>> Air,去年人均一部iPhone5+iPad Mini有木有。
>>
>>
>>
>> 如果对微信的产品与技术感兴趣:
>>
>>   不知作者是怎么得到内部信息的,但近乎完全真实的解构,不排除是公关部软文
>>     http://www.huxiu.com/search/?s=%E8%A7%A3%E6%9E%84%E5%BE%AE%E4%BF%A1
>>
>>   知乎上有许多关于微信产品的话题
>>     http://www.zhihu.com/topic/19554470/top-answers
>>     http://www.zhihu.com/question/19924411
>>     http://www.zhihu.com/question/20377314
>>
>>   2012年有过一次微信后台对外的技术讲座
>>     http://djt.qq.com/article/view/201
>>     http://timyang.net/architecture/notes-weixin/
>>
>>   更多期待你的加入
>>
>>
>> 职位要求
>>
>>   官方招聘要求
>>
>> http://hr.tencent.com/position_detail.php?id=12740&keywords=&tid=0&lid=2196
>>
>>   实际要求,简而言之就是会写代码
>>     能够使用C/C++编程语言
>>     熟悉基础数据结构,如链表,二叉树等
>>     熟悉操作系统与网络编程,如TCP协议,多进程多线程模型,常见的进程间通信方式等等
>>
>>   加分项(面试中不要求考查)
>>     linux系统编程基础,如看过APUE/UNP
>>     参与过或阅读过代码的开源项目
>>     分布式领域的工作经验
>>     其它编程语言经验,如python/erlang各种
>>
>>
>>
>> 面试建议
>>
>>
>>
>>  
>> 我们的面试过程主要有三部分:通常是问一些操作系统与网络的基础知识,做一两道简单的编程题目,以查看应聘者的代码编写能力,还有考查做过的项目,最终判断是否具备培养潜力。
>>
>>    根据我的经验,做好下面这些准备,就可以轻松拿到微信的offer
>>      1. 编程题目比较简单,以致于你可能诧异,其实这里的关键是写代码时注意编码规范,变量命名,函数抽取,适当的注释。
>>      2. 提前回忆在简历上的项目的各个细节,从而能够清晰的描述出来。
>>      3. 尝试更进一层思考与解答面试官针对项目提出的问题,而不仅简单描述自己是如何忽略不管或人工暴力解决的。
>> 其实这时候面试官并不是在乎你做过的项目,而是觉得你有潜力,只是缺了一个录取的理由。
>>
>>
>>
>> 如果你在寻找一个更好的机会,更舒适的工作环境,做更有趣的事情,欢迎发简历到我的邮箱:
>> dream[at]qq.com 或者 hezhit[at]gmail.com
>>
>> 支持年前面试先拿到offer,春节后再到岗,刚好领完年终奖后过来。当然,如果你此时没有计划,但有长远的想法,请记下本贴随时找我内推。
>>
>>
>> 如果你是腾讯的内部同事,欢迎转岗:RTX 给我 zhitonghe
>>
>> 如果你还没毕业,可以参考这个帖子锻炼自己:
>> http://bbs.sysu.edu.cn/bbscon?board=Programming&file=M.1372080310.A
>>
>>
>>
>> 加入微信吧,一个人自个再牛逼的日子,也比不上拥有共同目标的大家一起傻逼奋斗的岁月。// 脑补近期微信免费表情:神经蛙与欢乐马的钢管跳
>>
>>
>>
>> --
>> Zhitong He
>> http://weibo.com/0xffffull
>>
>>
>
>
> --
> Zhitong He
> Sun Yat-sen University
>
> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的“广州 GNU/Linux 用户组”论坛。
> 要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 gzlug+unsubscr...@googlegroups.com。
> 要向此网上论坛发帖,请发送电子邮件至 gzlug@googlegroups.com。
> 通过以下网址访问此论坛:http://groups.google.com/group/gzlug。
> 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
>



-- 
Liutos Love Linux LaTeX Lisp Ling

我的GitHub主页:https://github.com/Liutos

-- 
您收到此邮件是因为您订阅了 Google 网上论坛的“广州 GNU/Linux 用户组”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 gzlug+unsubscr...@googlegroups.com。
要向此网上论坛发帖,请发送电子邮件至 gzlug@googlegroups.com。
通过以下网址访问此论坛:http://groups.google.com/group/gzlug。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。

回复