我在小公司工作过,也曾在大公司工作过,也曾在大公司长期担任小公司的顾问,现在还在工作大公司。对于个人成长,大公司能给你哪些小公司难以给的机会?这就是本文要讨论的话题。技术人员在大公司不得不面对的问题个人成长,大致有两种方法,最好的就是主动学习,现在互联网这么开放,IT行业的知识,只要你想学,几乎没有查不到的资料。基本上稍微靠谱一点的技术人才都有主动学习的素质。但是,这种学习方式,不管是看书,看博客,还是上网课……都有一个非常明显的缺点,就是对问题缺乏直觉的体验,几年前看过《Java Concurrency In Practice》,我整个吞了下去。表面上看懂了,其实根本不懂。最近遇到一道典型的并发题,又翻出那本书,忍不住一口气看了几十页,太过胃口了!因此,第二种学习方法往往更为重要,即:面对问题和解决问题。这是一种基于经验的成长,比基于纯粹理性的记忆和理解要深刻得多。那么,大公司需要面对的问题有哪些?小公司不需要面对吗?我总结了三个基本问题:大公司服务的用户量级和小公司不在一个档次。大公司需要考虑如何保持数十万程序员的生产力。大公司处理的业务通常非常复杂。当然,以上几点并不总是正确的。比如现在一些小公司服务其他用户,需要面对类似的技术问题。但总的来说,这些都是大公司需要面对的问题,小公司前期不需要面对。以上三个问题其实就是Scalability的问题。具体推荐大家去阅读《The Art of Scalability》的详细解说。要解决以上三个问题,技术人员需要具备什么样的能力?这三个问题要求你学习什么?第一个问题,如果你面对的是***和***用户,是大家讨论最多的。具体技术会涉及到:无状态应用、负载均衡、分布式缓存、分布式队列、高性能Web服务器、数据分库分表……在大公司,不一定轮到你去开发分布式缓存都有,但只要你留心,就能很快明白什么情况下应该使用分布式缓存。性能会提升多少,效率提升的空间有多大等等。这个是大家面试时喜欢问的问题。如果您以前没有做过,您会认为它很酷而且很棒。体验过之后,就是这样的感觉。关键是你遇到过问题,用过这些技术。解决了。第二个问题,一个几百人的研发部门如何管理,纯管理岗位的管理者讨论的比较多。普通程序员,面对跨团队、跨部门沟通带来的消耗,10个程序员大概会有11个骂娘;但是,问题总是客观存在的,我在目前的日常工作中也遇到过类似的问题。我也问过Facebook的工程师,他们坦言,相比Facebook早期,他们现在的研发效率确实慢了很多。保持自己的工作效率并不是一个特别困难的问题;保持2-3人的小团队高效工作并不难,只要大家有相似的兴趣和目标;一个10人左右的团队需要智慧管理作者花了很多时间去了解每个人的想法并进行协调。当然,愚蠢的管理者只会开很多无意义的会议来获得存在感,传达来自上面的压力。当团队规模扩大时,带领数百人团队的中层管理人员需要帮助一线管理人员,这超出了我的经验。我想说的是,管理也是技术,不一定比编程难,但也不一定比编程容易。除了管理能力,维持大型团队的研发效率还需要规范和工具的支持。使用一致的基础设施(如版本控制、测试环境、发布流程、通信协议),规范大家的代码组织结构,提取共性技术服务,防止重复造轮子……这些都是非常具体、非常现实的技术问题。如果一个小公司有几万行代码来提升整体技术,找个牛逼的程序员就可以了,但是大公司用几十万、几百万行代码来提升技术,就没什么英雄可言了程序员可以处理它。这类问题需要有前瞻性的架构和善于沟通的架构师。虽然过程中难免要跟人摔跤、开会,但做好也是一件很有成就感的事情。第三个问题是大公司不得不面对更大的业务复杂性。可能是大公司的产品经理太多了,大家都想折腾点东西出来,所以各种功能性的特性也在不断的增加和变化。这时候技术人员就得了解各种业务的含义了。我们都知道,如果实现与业务意义不匹配,最终的代码就会变成没人维护的怪胎。所以,优秀的技术人员能够很好的找准业务边界,把小怪兽关在自己的笼子里,不让它们聚在一起,天翻地覆。再好的技术人员,也能让产品经理信服,“这样做是不对的”。对此,我推荐?。大公司的通病我并不是说大公司的任何程序员都会面临以上三个问题。事实上,刚加入公司的新人程序员一般只处理业务范围不大的、挑战不大的任务。但是,只要你有兴趣,不断提升自己的能力,还是有很大的机会去面对和处理这些问题的,因为公司的管理者都希望有人站出来帮助他们解决问题。但是,大公司或多或少都有一些通病。首先,人是多余的,文山识海。有很多人不停地开会写邮件,但他们就是不工作,你也没有心情工作。吐槽归吐槽,我还是会好好想想为什么会这样。首先,沟通是必要的。两三个人打招呼上班就够了。如果超过十个人工作,他们需要开会。要做的事情多了,会议自然也就多了。此外,许多人不具备基本的会议主持技能。很容易变成垃圾会议。其次,公司做大了,自然会有一些军人,说话大方得体,但没见他付诸行动,更没见他撸起袖子亲自动手。更麻烦的是,这些人一般都是比较高层的。观点。我能做的就是远离他们。二是视野狭隘。如果一个程序员刚毕业就来到一家大公司,恰好这家大公司的业务和技术这几年突飞猛进,他的眼界很容易受到限制,他会觉得自己的公司在国内乃至世界上都是最好的。他的盲目,更可能是被中国通俗的报喜不忧文化中的环境固化了。所以一不小心,有些人的技术眼光就变得很狭隘了。我在内部推广Git的时候,最怀疑的人是一些工作时间长的高级工程师。另外,我个人的大头是目标不一致。在跨团队和跨部门沟通时,您很容易发现自己在和鸭子说话。可能A团队关心技术架构,B团队关心业务指标,然后你再上一层楼,在部门层面决定先做什么。一段时间后,你发现A部门关心的是业务指标,B部门关心的是基础设施建设。你要再上一层楼,但是那个层级离你很远……所以你会发现很多大公司很多人做事很大程度。靠个人影响,不是正规流程。如果说我以前做过一些成功的事情,平时对大家比较热情,那么当我做某事的时候,就会有人暂时??放下目标来帮助你。”。总结之前,我想再提一点。毕竟大公司都是藏龙卧虎的地方,各个领域都有比较资深的人。如果公司文化鼓励分享,那么你很容易找到有机会请别人喝杯咖啡,聊聊。做任何选择,如果不考虑失去什么,只考虑得到什么,那是典型的幼稚。因此,在选择大公司或公司时小公司,你不仅要明白你期望得到什么,更要正视你将失去什么。我说了这么多,基本上就是告诉你,有些东西你肯定会失去,有些东西你努力了可能会得到。
