技术人员在大公司能学到什么

标签: 总结 Scalability 思考 | 发表时间:2015-07-26 17:57 | 作者:juvenxu
出处:http://www.juvenxu.com

我在小公司待过、也在大公司待过、还作为小公司的咨询顾问在大公司待过很长一段时间,目前还在大公司待。对于个人成长,大公司能给你哪些小公司很难给的机会?这是本文想讨论的主题。

技术人员在大公司要面对的问题

个人成长,方法大致是两种,第一是主动学,现在互联网这么开放,IT行业中的知识,只要你想学,几乎没有找不到的资料。基本上,稍微靠谱点的技术人才,都具备主动学习的素质,然而这种学习方式,无论是看书、读博客、上在线课程…… 都有个非常明显的缺点,就是缺乏对问题的直观体验,几年前我看《Java Concurrency In Practice》,囫囵吞枣,表面上懂了,实际上压根没理解。近期当我面对一个比较典型的并发问题的时候,再翻出那本书,忍不住一口气读了几十页,因为实在是太对胃口了!所以第二种学习方法往往更为重要,那就是:面对问题,解决问题,这是一种基于体验的成长,比基于纯理性的记忆理解,深刻得多。

所以, 有哪些问题,大公司需要面对?小公司不需要面对?我总结下基本是三个问题:

  1. 大公司服务的用户数量级相比小公司不在一个层次。
  2. 大公司需要考虑如何保持数百数千程序员高效工作。
  3. 大公司处理的业务往往非常之复杂。

当然上述几点并不总是正确的,比如现在会有一些小公司服务千万级别的用户,也需要面临类似的技术问题。但大体上就是这些问题,大公司必要面对,小公司在早期是不需要面对的。

上述三个问题实际上是 Scalability 的问题,具体我推荐大家看 《The Art of Scalability》的详细阐述。解决上述三个问题,需要技术人员具备怎样的能力?

三个问题要求你学什么?

第一个问题,如果面对百万级、千万级的用户,是被大家讨论最多的,具体的技术会涉及到:无状态应用、负载均衡、分布式缓存、分布式队列、高性能Web服务器、数据分库分表…… 在大公司,也许根本轮不到你去开发分布式缓存,但只要你留点心,就能很快理解在什么情况下该用分布式缓存,它能带来多少性能提升,命中率还有多少提升空间,等等。这一块,是大家面试的时候比较喜欢问题的,没做过的,都觉得很酷很牛逼的样子,经历过了,感觉其实也就那样,关键是你遇到问题了,并且用这些技术解决了。

第二个问题,如何管理数百人的研发部门,更多的是被很多纯管理职位的经理在讨论。普通程序员,面对由于跨团队跨部门沟通所带来的消耗,10个程序员估计会有11个骂娘;然而问题始终是客观存在的,我现在的日常工作一直遇到类似的问题,我也问过 Facebook 的工程师,人家也坦然承认,较之与 Facebook 早期,他们现在研发的效率也的确慢了很多。

保持自己工作高效,并不是个特别困难的问题;保持2-3人小团队工作高效,也不难,只要大家志趣相投、目标一致基本就可以了;10人左右的团队,就需要聪明的管理者花许多时间去理解大家的想法并协调。当然,愚蠢的管理者只会开一大堆无意义的会,刷点存在感,传达点上面给的压力。团队规模再扩大,带领上百人团队的中层管理者,他就需要去帮助一线管理者了,这个超出我的经验了。我想说的是,管理也是技术,不比编程更难,但也不见得比编程简单。

除了管理能力外,保持大规模团队的研发效率,还需要规范和工具支撑。使用一致的基础设施(如版本控制、测试环境、发布流程、沟通协议),规范化大家的代码组织结构,抽取共有的技术服务,防止重复造轮子…… 这些都是非常具体、非常现实的技术问题。小公司几万行的代码做整体技术升级,找个牛逼的程序员就能搞定了,大公司几十万、几百万的代码做技术升级,没有任何一个英雄主义程序员能搞定,解决这类问题需要有前瞻性的架构,需要有善于沟通的架构师。虽然过程中难免会需要和人扯皮开会,但做好了也是极富有成就感的事情。

第三个问题,在大公司要面对更大的业务复杂度。也许是大公司产品经理太多了,大家都想折腾点东西出来,所以各种功能特性不停加不停变。这时候技术人员就不得不去理解各种业务的含义,我们都知道,如果实现和业务意义不吻合,最终的代码就会变成一个无人可维护的怪胎,因此优秀的技术人员就能很好识别业务边界,把小怪兽关在各自的笼子里,防止他们聚在一起搞得天翻地覆。再优秀的技术人员,就能说服产品经理,“这么干是不对的”。这方面我推荐 《Domain Driven Design》

大公司的普遍弊端

我并不是说任何一个大公司的程序员都会去面对上面三个问题,事实上刚入职的新人程序员一般只会处理很小业务范围内的没有太大挑战的任务。不过只要你有兴趣并持续提高自己能力,还是有很大机会去面对并处理这些问题的,因为公司的管理者终究是期望有人站出来帮他们排忧解难的。不过大公司或多或少都有一些普遍的问题。

首先是 人浮于事、文山会海。有很多人不停开会、不停写邮件,就是不干活,搞的你也没好心情干活。吐槽归吐槽,我还是会仔细想想为什么这样。首先,沟通是必要的,两三个人干活打个招呼就行了,十多人干活就需要开会,事情多了,会也自然多,再加上很多人其实没有基本的主持会议技能,那很容易搞成垃圾会议。其次,公司大了自然会有一些兵油子,每句话说出来都大方得体,但就没见他把事情落地,更别提自己挽起袖子干了,比较麻烦的是这些人普遍层级还相对高点。我能做的,就是离他们远点。

其次是 目光狭隘。如果一个程序员刚毕业就来到大公司,而且恰好这几年这家大公司业务和技术突飞猛进,那他的眼光就容易受限,觉得自己的公司全国甚至全世界最牛逼,再加上我们中国人普遍存在的报喜不报忧文化,他的这种盲目就更容易被环境所固化了。于是一不小心,一些人的技术视野就变得很窄,我在内部推广Git的时候,持疑惑最大的也就是一些工作年限较长的资深工程师。

还有,我个人比较头大的是, 目标不一致。跨团队、跨部门沟通的时候,你很容易发现自己在鸡同鸭讲。可能团队A关心技术架构,团队B关心业务指标,然后你上升一层,在部门层面做个决策先做什么后做什么。一会你又发现,部门A关心业务指标、部门B关心基础建设,你又得上升一层,可那一层离你好远…… 所以你会发现很多大公司很多人做事很大程度上是在靠个人影响力,而不是正规的流程。如果我曾经做过些成功的事情,我平时对大家也比较热心,那我做一些事情的时候,一些人会把自己的目标暂时放一边,来帮你一把,这就是俗称的“刷脸”。

总结

总结之前,有一点我要额外提一下,大公司毕竟是藏龙卧虎的地方,各个领域都有比较资深的人存在,如果公司文化鼓励分享,那你就很容易找机会请人家喝杯咖啡,聊聊。

做任何选择,如果你不考虑失去什么,只考虑得到什么,那就是典型的幼稚。因此选择大公司还是小公司,你不仅得明白你期望收获什么,还得坦然面对要失去的东西。我说这么多,基本就是告诉你,有些东西你肯定会失去,还有一些东西,如果你努力,你可能会得到。

相关 [技术人员 大公] 推荐:

技术人员在大公司能学到什么

- - Juven Xu
我在小公司待过、也在大公司待过、还作为小公司的咨询顾问在大公司待过很长一段时间,目前还在大公司待. 对于个人成长,大公司能给你哪些小公司很难给的机会. 技术人员在大公司要面对的问题. 个人成长,方法大致是两种,第一是主动学,现在互联网这么开放,IT行业中的知识,只要你想学,几乎没有找不到的资料. 基本上,稍微靠谱点的技术人才,都具备主动学习的素质,然而这种学习方式,无论是看书、读博客、上在线课程…… 都有个非常明显的缺点,就是缺乏对问题的直观体验,几年前我看《Java Concurrency In Practice》,囫囵吞枣,表面上懂了,实际上压根没理解.

技术人员的眼界

- blankyao - Solrex Shuffling
意识到眼界的重要性,最初是在大学时学长的交流会上. 南大数学系有一个传统,每年总有那么两三次组织高年级的同学开经验交流会. 这些交流会可能有明确主题,例如留学或是找工作,也可能没有明确主题. 幼稚如我,在大一阶段拒绝参加任何形式的社团或者活动,认为踏踏实实做好眼前的事情足矣,闲暇时间基本花费在小说上.

技术人员创业的短板

- Ryan - DBA Notes
越来越多的做技术的朋友开始加入互联网创业的大军. 这几年来,的确见到过不少技术人员创业的成功典范,但没见到没听到过的创业不成功的案例应该更多,所以,先别受那些成功故事的蛊惑,从那些失败的项目或是创业人身上吸收经验和教训更让人受益. 作为一个技术出身的创业者,其长处当然是技术,对自己如何运用技术做出自己心目中的理想产品有把握和信心.

技术人员能力模型

- 丹枫 - 啃饼随笔
上周和harvey讨论了一份技术人员能力模型,是用于技术人员自身对照并引导自己进步的一个模型,并不是用于评估他人的模型. 感觉harvey总结的不错,挺靠谱的,凭回忆记录一下,希望对你也有用. 模型分为四块:coding、设计、项目管理和扩展. coding是基础,所有的技术人员都必须拥有这个能力.

技术人员的发展之路

- - 酷 壳 – CoolShell
2012年的时候写过一篇叫《 程序算法与人生选择》的文章,我用算法来类比如何做选择,说白了就是怎么去计算,但是并没有讲程序员可以发展的方向 有哪些. 所以,就算是有这些所谓的方法论,我们可能对自己的发展还是会很纠结和无所事从,尤其是人到了30岁,这种彷徨和迷惑越来越重. 虽然我之前也写过一篇《 编程年龄和编程技能》的文章,但是还是有很多做技术的人对于自己能否在年纪大时还能去做技术感到没有信心.

技术人员如何"正确"的浪费时间?

- Angela - DBA Notes
苹果产品用户要浪费时间,你就应该这样做:买个有锁的 iPhone ,每天刷几百次威锋网等待越狱或解锁,看到新 App 就安装,程序提示更新立刻升级;有新的固件(哪怕是 β 版)就压制不住升级的欲望;每次 WWDC 提前几个礼拜就关注,坚持看完所有 Keynote 和文章,然后到 Twitter 或是微博发表评论,再在微博上收听苹果产品有关的 ID....

两则.NET高级技术人员的招聘信息

- Xu Ning - 老赵点滴 - 追求编程之美
几小时前我在微博上发布了一条消息,表示我即将加入一家外企,而且完全是大家耳熟能详的IT公司之一,而且这个公司会让大家感到“意外”. 于是大伙有猜微软的,也有猜Google,Apple,Oracle,HP等等,当然也有猜对的童鞋. 在此公布答案,它便是传说中的IBM公司,我将在那里继续我的.NET程序员之旅.

如何管理飞扬跋扈的技术人员

- - 创业邦
  在互联网项目当中,相信每一个项目经理或者制作人,最头疼的就是技术部的管理. 因为技术工作看起来是那么的棘手,一般人难以理解,而且技术人员大多数都似乎情商不高. 管理人员既不能轻易了解技术工作的内涵,技术人员也觉得很难和管理人员沟通. 特别是技术工作,难以在不同人之间交接,很多技术人员都声称无法继续别人做过的项目.

[原]【原创】技术人员如何去面试?

- - heiyeluren的blog(黑夜路人的开源世界)
作者:heiyeluren. 微信: heiyeluren2012  (欢迎关注微信获取更多技术相关资讯). 微博: http://weibo.com/heiyeluren. 博客: http://blog.csdn.net/heiyeshuwu. 又到了每年3月-5月的离职跳槽高峰期,不论什么level的程序员们都开始纷纷去考虑勾兑猎头跳槽投递简历应聘面试等等关乎自己工作事业等重大问题的忙碌上面了.

清高与小我:谈技术人员的优越感(三、四)

- - 博客园_新闻
技术人员容易出现小我而忽视团队. 一家公司需要保持正常运转,就需要营利. 不管这家公司采取一个什么样的手段,营利都是最终极要达成的结果. 哪怕你的公司再有伟大的梦想,或者再采取其他以免费为噱头的手段,你也是需要有利润来保证至少机构运行的成本. 不管是否直接奔向利润,但是利润都是一个必不可少的结果. 公益性机构的情况不太了解,也就不在讨论范围内.