2年工作经验进 初创公司
I get this question a lot — from candidates in interviews, from folks I mentor and from budding new engineers. So I am writing this down so I can refer back to this when I need to. My perspective is heavily shaped by my own personal experiences of working at a big company and a startup. If your experiences differ from mine, you should write about it :)
我从面试中的候选人,我所指导的人以及新兴的工程师那里得到了很多问题。 因此,我将其写下来,以便在需要时可以参考。 我在大公司和初创公司工作的个人经验极大地影响了我的观点。 如果您的经历与我的不同,则应该写出来:)
I’ll start with a heavily biased take which may seem like a non-answer:
我将从一个偏颇的观点开始,这似乎是一个无法回答的问题:
Every engineer should work at a big company AND a startup early in their career.
每个工程师都应该在职业生涯的早期在一家大公司和一家初创公司工作。
(There are some caveats to this where there maybe some special teams at big companies which operate more like startups. So, in those cases you can technically get that experience in a “big company”)
(对此有一些警告,在大公司中可能有一些特殊的团队,其运作方式更像是初创公司。因此,在那种情况下,您可以从技术上在“大公司”中获得经验)
Why do I believe this?
为什么我相信这一点?
Working at a startup and a big company represent two extremes with respect to culture, processes, people etc. As an engineer, it is really important to develop a strong understanding of what works in a given environment and more importantly why it works. For example, here are some questions that engineers will need to answer over the course of their career:
在一家初创公司和一家大公司工作代表着文化,流程,人员等方面的两个极端。作为工程师,深入了解在给定环境中什么有效以及更重要的原因非常重要。 例如,以下是工程师在职业生涯中需要回答的一些问题:
Is this the right architecture?
这是正确的架构吗?
How much time should we spend building feature X?
我们应该花多少时间来构建特征X?
How much technical debt is acceptable?
可以接受多少技术债务?
Having a diverse set of experiences can shape your thought process, give you more tools, better understanding of trade-offs and overall help you get better at figuring out the right answer for the current situation. (The more senior you are, the more you are expected to deal with such open-ended questions)
拥有多种经验可以塑造您的思维过程,为您提供更多工具,更好地权衡取舍,并全面帮助您更好地找到适合当前情况的正确答案。 (您年纪越大,您应对此类开放式问题的期望就越高)
Now, let’s try and understand some of the major differences between working at a big company and a startup as an engineer. (As with any attempt to generalize, there will always be exceptions that don’t fit the rule)
现在,让我们尝试了解在大公司工作与作为工程师的创业公司之间的一些主要区别。 (与一般化的尝试一样,总会有不符合规则的例外情况)
Here are some things that you can gain from big companies:
您可以从大公司那里获得一些好处:
You will learn solid fundamentals and best practices in software development. For a big company, mistakes can be very costly and hence there is a lot more focus on investing in developer education. This can mean good onboarding materials, high quality code reviews, access to a lot of senior engineers and plenty of talks around the company to share best practices. Just by spending a couple of years at a big company, the average developer can be expected to pick up a lot of things that will shape their approach to software development since they are starting from scratch.
您将学习软件开发的扎实基础知识和最佳实践。 对于大公司而言,错误的代价可能会非常高昂,因此更多地将重点放在投资于开发人员教育上。 这可能意味着良好的入职材料,高质量的代码审查,可以与许多高级工程师接触以及在公司范围内可以共享最佳做法的大量讨论。 仅仅通过在一家大公司工作几年,就可以期望普通的开发人员从头开始就掌握很多可以改变他们的软件开发方法的东西。
You will learn to think about scale in everything that you do. For an engineer fresh out of college/bootcamp, whose biggest project was building an app used by 10 people, it can be pretty intimidating to see the scale at which big companies operate. When you are surrounded by conversations like “Can this service handle 5000 requests per sec?”, you are suddenly operating in a different environment where you have to multiply big numbers to understand if something will break :) This gives engineers a great introduction on system constraints and building robust systems that operate within those constraints. Knowing how to handle scaling problems helps you build a better understanding of the systems and tools you work with and the mindset shift that happens when you need to dive deep is something that comes handy in all situations.
您将学习在所做的所有事情中考虑规模。 对于刚从大学/训练营刚毕业的工程师来说,其最大的项目是构建一个可供10个人使用的应用程序,因此,看到大公司的经营规模可能会令人感到恐惧。 当您被“该服务每秒能处理5000个请求吗?”之类的对话所包围时,您突然在另一个环境中工作,您必须乘以较大的数字才能了解是否会出现问题:)这为工程师提供了系统的绝佳介绍。约束条件,并建立在这些约束条件下运行的强大系统。 知道如何处理扩展问题有助于您更好地了解所使用的系统和工具,以及在需要深入研究时发生的思维转变,这在所有情况下都非常有用。
You will learn the power of good abstractions. After I left a big company and moved to a smaller one, the things I missed the most were the things I took for granted every day. At the big company, we used to have a service that handles metrics and having seen how much harder it was to achieve similar level of monitoring at the smaller company, I realized the power of solving common problems using good abstractions. It does help that big companies have teams dedicated to solving common pain points that smaller companies just cannot afford to. Seeing good abstractions in action that operate at scale, you gain an appreciation for what makes them good, usable and performant. In addition, you also notice how good processes can be codified into such abstractions. For example, a build and deployment tool will allow you to configure what steps need to be performed in what order for every code push. (Having done manual deployments for several years, this was such a life-saver!)
您将学习良好抽象的力量。 当我离开一家大公司而搬到一家较小的公司之后,我最想念的就是每天理所当然的事情。 在大公司,我们曾经有一个处理指标的服务,并且看到在小公司实现相似级别的监视要付出多大的努力,我才意识到使用好的抽象解决常见问题的能力。 这确实有助于大公司拥有专门解决小公司无法承受的常见痛点的团队。 看到在规模上有效运作的良好抽象,您会对使它们良好,可用和高效的表现有所赞赏。 此外,您还注意到如何将好的过程编码为此类抽象。 例如,构建和部署工具将允许您配置每个代码推送需要按什么顺序执行的步骤。 (已经进行了几年的手动部署,这真是节省了生命!)
Now, let’s talk about what startups can teach you:
现在,让我们谈谈创业公司可以教您什么:
You will grow faster in an environment of uncertainty. Startups by definition don’t have a lot of certainty when it comes to their future — will we grow quickly enough? will our bets pay off ? will our existing customers stick around? will our competitors threaten our survival? This uncertainty permeates the whole culture and the engineering organization reflects this mindset in how they approach their day-to-day. For example, you as an engineer maybe building a new product with no idea how much usage this product will get and whether this will be around in 6 months. So, you will likely make some technical trade-offs to build and validate this product quickly without worrying about whether this will scale to all users over a longer time frame. There is a lot of judgement involved on what corners to cut and what constitutes a MVP (“Minimum Viable Product”). Getting comfortable with such levels of uncertainty, trying a lot of things in a short period of time and having a mindset of making/learning from mistakes along the way can accelerate the growth of engineers significantly faster than is possible in a bigger company.
在不确定的环境中,您将更快地成长。 从定义上讲,初创企业对未来的不确定性很大,我们会足够快地成长吗? 我们的赌注能赢吗? 我们现有的客户会留下来吗? 我们的竞争对手会威胁我们的生存吗? 这种不确定性渗透到整个文化中,工程组织反映了他们在日常工作中的思维方式。 例如,作为工程师,您可能在构建新产品时不知道该产品将获得多少使用量以及是否会在6个月内出现。 因此,您可能会做出一些技术折衷,以快速构建和验证该产品,而不必担心它是否会在更长的时间内扩展到所有用户。 关于要切掉哪些角和什么构成MVP(“最小可行产品”),需要做出很多判断。 适应这样的不确定性水平,在短时间内尝试许多事情以及一路走来从错误中学习/学习的心态,可以比大公司更快地加快工程师的成长。
You will build more breadth than depth. In big companies, teams are structured to have a lot of focus and specialization is incredibly valuable. As a result, the team you end up on will have a huge impact on what things you end up learning. For example, I was on a team that managed a lot of data pipelines and backend workflows to monitor user actions on AWS. So for around 3 years, that was what being an engineer was all about in my mind. From the perspective of my team, I was doing what was expected of an engineer and doing it reasonably well. But it took some side projects and conversations with friends to realize that there was a lot that I was not exposed to. Now when I compare that to my current experience at a smaller company, I am exposed to a lot more things on a regular basis — technologies, problems (product and technical). To be clear, I am not an expert at any of the new things that I have come across but I know enough to be dangerous ;) Being a generalist has also helped me get a more complete understanding of all the things that an engineer can potentially do and I can now decide what I want to focus on :)
您将建立比深度更大的广度。 在大公司中,团队的结构具有很多重点,专业化非常宝贵。 因此,您最终要加入的团队将对您最终学习的内容产生巨大影响。 例如,我在一个团队中管理大量数据管道和后端工作流,以监视AWS上的用户操作。 因此,在大约3年的时间里,这就是工程师的全部想法。 从团队的角度来看,我正在做工程师所期望的工作,并且做得相当好。 但是花了一些辅助项目并与朋友交谈才意识到我没有接触过很多东西。 现在,当我将其与我在一家较小的公司中的经验进行比较时,我会定期接触到很多东西—技术,问题(产品和技术)。 明确地说,我不是遇到任何新事物的专家,但我知道这很危险;)作为一名通才,还帮助我对工程师可以潜在地掌握的所有事物有了更全面的了解。然后,我现在可以决定我要关注的重点:)
You will pick up a lot of valuable non-engineering skills. Since startups are small, there is always more work to be done than the number of people available. It is also quite likely that there are certain things that need to be done but there are no people with the required skill sets available to do them. For example, product startups with less than 20 people typically don’t have a dedicated Product Manager and the responsibilities fall on some senior engineers who are interested to do that. So at startups there is always a lot of flexibility in what things engineers can take on and it is a lot less rigid compared to big companies which have more well-defined roles and responsibilities. Personally, I have picked up a lot of valuable skills like running meetings, keeping projects on track, learning to communicate effectively with non-engineers and dealing with ambiguity. This has also helped me get a taste of what it would be like if I decided to switch from engineering to a different role (say PM) and how much I would enjoy it :)
您将学到很多宝贵的非工程技能。 由于初创企业规模较小,因此总要做的工作要比可用人数多。 也很有可能需要完成某些事情,但是没有人具备所需的技能才能做到。 例如,少于20人的产品初创公司通常没有专门的产品经理,而职责则由一些对此感兴趣的高级工程师负责。 因此,在初创企业中,工程师可以做的事情总是具有很大的灵活性,与角色和职责明确的大公司相比,它的僵化程度要低得多。 就个人而言,我掌握了很多宝贵的技能,例如召开会议,确保项目按计划进行,学习与非工程师进行有效沟通以及处理歧义。 这也帮助我体会到,如果我决定从工程学职位转到其他职位(例如PM),将会是什么样子,以及我会喜欢多少呢:)
Hopefully, if you have finished reading this far you would have realized that there is no right or wrong answer when it comes to picking between a big company and a startup. You will learn a lot no matter where you go as long you have the right mindset. So, it comes down to a question of what areas you want to grow in right now and deciding whether a startup/big company is better equipped to support your goals. Good luck! :)
希望,如果您已读完本文,您将意识到在大公司与初创公司之间进行选择时,没有正确或错误的答案。 只要您有正确的心态,无论去哪里都将学到很多东西。 因此,这取决于您现在想在哪些领域发展,并决定一家初创公司/大公司是否更有能力支持您的目标。 祝好运! :)
翻译自: https://medium.com/swlh/as-an-engineer-should-i-work-at-a-big-company-or-a-startup-91538ae96dd1
2年工作经验进 初创公司