「科技巨头」大型科技公司的软件工程揭秘

发表时间: 2021-01-11 22:03

什么是软件工程?

软件工程师(或软件开发人员)开发的程序可以把计算机变成有用的机器,除其他功能外,计算机还可以发送电子邮件、搜索万维网、进行视频通话和运行工业机器人。通过制造软件来告诉计算机该做什么,软件工程师在正在进行的数字革命中扮演着核心角色,这场革命正在改变人类文明,并导致了信息时代的开始。软件工程师受雇于各行各业的组织,但在本文中,我们关注的是那些受雇于大型科技公司,如谷歌、Facebook和苹果。

软件工程师每天都在做什么?

软件工程师运行创建和开发软件的整个过程。这包括编写计算机程序,这些程序是用源代码编写的——一种为计算机设计的特殊语言,告诉它们确切地做什么和怎么做。这需要非常注意细节,并仔细组织许多相互关联的部分。


除了编写代码,软件工程师还做其他事情:他们产生软件想法,他们与涉众一起工作以理解需求,他们测试和维护最终产品,他们协调整个软件开发过程。这些任务就是软件工程师和计算机程序员的区别——计算机程序员往往只写代码

有很多关于软件工程师的描述。下面是我们遇到的两个最有用的方法:

  • 生活中的一天:软件开发人员(Vault)
  • 谷歌软件工程师的一天(Quora)

将软件工程师划分为以下几种常见的方法:

  • 网站开发者,做网站的人。大量的网站都是功能齐全的应用程序(如谷歌,Facebook, Twitter, Gmail),所以很多web开发者都在开发web应用程序,尽管有些人在静态网页上工作。更多关于web开发人员所做的事情。
  • 应用程序开发人员,开发诸如Skype或Microsoft Office等应用程序。这些应用程序可以在各种平台上运行,例如台式电脑、笔记本电脑、移动电话或平板电脑。
  • 系统开发人员,开发运行应用程序的操作系统。

职业生涯的关键阶段是什么?

这是一个软件开发人员职业阶段的图表,粗略估计了平均工资范围。3 .请记住,这些都是平均值,你有可能赚得更多,特别是在像谷歌这样的大型科技公司。


您通常从初级开发人员开始,编写简单的脚本,并对软件开发生命周期有初步的了解。你通常要在这个职位上呆三年左右。

如果你成功了,你可以成为高级开发人员。作为高级开发人员,您编写复杂的应用程序,并对整个应用程序生命周期有深刻的理解。你可以在职业生涯的大部分时间里一直担任这个职位,尽管随着年龄的增长,与年轻人才竞争变得越来越困难。在这一点上,你有能力离开,成为一家初创公司的技术创始人或CTO。

如果您是一名高级开发人员,想要在避免管理的同时进步,那么您可以成为一名架构师,这是技术职业阶梯上的最高层次。架构师设计由高级和初级开发人员组成的团队实现的复杂系统。你可以在整个职业生涯中一直担任这个角色——软件工程的不同寻常之处在于,你可以拥有一个高级职位,而不必做管理工作,许多人认为这是软件工程师职业轨迹的一个独特好处。

如果你是一名高级开发人员,并且你不介意做一些管理工作,那么你就可以成为一名首席开发人员。领导开发人员协调初级和高级开发人员的工作,但通常不会雇用或解雇开发人员。

在架构师和主要开发人员之后,还有中级经理角色,这提供了进入高级管理的潜力。我们在本文中不讨论这些后期阶段,但你可以在这里阅读更多。

你应该做吗软件工程师?

你绝对应该考虑软件工程如果你尝试了编程和你喜欢它,如果你想要打开的可能性在技术工作角色在未来,如果你不喜欢长时间工作中常见的法律、金融或咨询,如果你是通过收入贡献给吸引,如果你想获得自由和远程工作的选择。

作为软件工程师,我能有所作为吗?

软件工程师做出改变的主要方式是制作对社会有用的软件,赚取报酬,或者做灵活的工作,让你可以一边从事高影响力的项目。

制作对社会有用的软件

软件已经对社会产生了变革性的影响,而且很可能会继续这样做,因此它是一个需要参与的重要领域。作为一名软件工程师,你的直接影响主要来自帮助推进你所工作的组织的目标。因此,你工作的直接影响主要取决于你在哪里工作,以及你雇主的目标在多大程度上有助于产生社会价值。

有些软件公司确实产生了大量的社会价值,比如谷歌和维基百科,但要估计它们产生的社会价值的数量仍然很难(参见我们对谷歌的研究)。即使不考虑那些目标与创造社会价值直接相关的组织,提高许多组织的效率可能仍然是实质上的净正,这是由于不断增加的普遍人类赋权的“流动效应”。

把高影响力的项目作为副业

软件工程工作在许多方面都提供了出色的灵活性:

  • 弹性工作时间很常见,有些地方甚至每周工作4天、32小时(例如Treehouse全年都是这样,Basecamp从5月到10月都是这样)。
  • 有很多工作可以让你远程工作。例如,这个初创公司远程工作的聚合器。
  • 自由职业者和合同工都很常见,这样你可以在想工作的时候承担项目,想休息的时候休息。

这种灵活性具有巨大的价值。就直接影响而言,是指:

  • 你可以利用工作之余的时间去做其他高影响力的项目,甚至可以搬到一个你想志愿参与项目的地方。
  • 你可以远程工作来降低你的生活成本,增加你的捐赠收入,或者减少你的工作时间来腾出更多的时间做业余项目。很多软件工程师现在住在泰国的清迈,那里的生活成本只有我们的四分之一。阅读我们关于远程和自由职业者工作的文章,了解更多细节。

这会让你处于一个更好的位置,从而在以后的职业生涯中有所作为吗?

职业资本

作为一名软件工程师,你学到的技能之所以有用,有以下几个原因:

  • 编程可能进入一个有前途的工作范围包括数据科学(有训练营的培训软件工程科学数据),技术创业(作为技术创始人或早期的员工在启动时),进行大型科技公司,金融,例如在定量对冲基金或投资银行和学术界编程正越来越多地被使用。
  • 编程在许多非技术企业和政府部门的工作中也很有用,因为这些工作需要使用web开发、数据分析或其他自动化的元素
  • 展望未来,随着经济进一步进入信息时代,软件工程技能很可能在更广泛的行业中变得有用。
  • 作为一名高级软件工程师,你还需要学习项目管理,这是一项非常有用的可转移技能。
  • 你获得了一个灵活的选择,可以作为自由职业者或承包商赚钱,你可以远程和兼职。这对于测试新项目和志愿活动,以及赚钱增加储蓄、投资培训或满足其他未预见到的财务需求都是很有用的。

总的来说,你获得了很多你所缺乏的技能,这给了你很大的议价能力和各种不同风险回报和生活方式的选择。

就声望和地位而言,精英毕业生在科技行业工作正变得越来越普遍(例如,更多的哈佛mba毕业生正在进入科技行业),如今科技行业的工作声望与金融和咨询行业相当。

这也意味着,你在科技公司工作时接触到的人脉越来越多地由富有和有影响力的人组成。此外,科技行业高度集中了有进取心、想做好事的人——著名的例子包括比尔·盖茨(Bill Gates)、达斯汀·莫斯科维茨(Dustin Moskovitz)和埃隆·马斯克(Elon Musk)。如果你是旧金山湾区的一名软件工程师,那么你也在一个有效的利他主义社区的主要中心。

探索的价值

通过在线编程课程、训练营和实习来测试你是否适合软件工程,这是一个相对快速和廉价的方法,因此这是一个探索价值的好选择。接下来我们将介绍如何测试它。

你会做得出色吗?你会喜欢吗?

准入要求

许多有艺术背景的人认为他们不能成为软件工程师,但这是不正确的。虽然很多软件工程师学的是计算机科学,但这并不是必需的,而且很多入门级的工作并不要求计算机相关学位,甚至也不要求有定量学位。软件工程比许多人认为的更容易进入并且做得更好的另一个原因是它不需要高等数学——大多数软件工程师从来不需要使用微积分。我们已经看到很多拥有人文和社会科学学位的人通过自学或参加训练营获得了比之前工作高50-100%的初级软件工程师工作。

对于成功的预测

从与软件工程师交谈和在线调查建议来看,成功工程师最常提到的特点是非常关注细节,当事情不能立即奏效时不会沮丧,愿意尝试许多不同的解决方案并产生假设,好奇和好奇。20学术文献中提出的一些成功的预测因素有:

  • 一般智力(迈尔,戴克,维尔伯格,1989)
  • 自我预测的成功、态度、热情和一般的学术动机(Roddan 2002;Rountree, Rountree, & Robins, 2002)
  • 空间推理和数学能力(Wilson & Shrock 2001)
  • 音乐能力,逻辑推理能力,之前的学术背景(Boyle, Carter, & Clark 2002)

然而,总的来说,我们对编程成功的一般预测因素知之甚少,所以确定自己是否有机会成功的最好方法就是尝试一下。

对其进行测试

要想知道自己是否擅长一份工作,是否喜欢这份工作,最准确的方法就是去尝试。我们建议您采取以下步骤来测试它是否适合您。

步骤1:尝试编写代码

编程是软件工程的一个重要组成部分,所以进行尝试是很重要的。在不到20分钟的时间里,在没有任何编程背景的情况下,你可以根据这篇文章的说明,编写一个每两个小时提醒你休息一下的程序。然后,您可以在Udacity上学习计算机科学入门课程,该课程教您计算机科学基础知识和Python编程语言。这会让你了解自己有多喜欢编程,以及其中涉及的各种技能。但是请记住,许多人并不喜欢一开始就编程,尤其是在他们可以编写自己认为有用的程序之前。您可能还想查看这个程序员能力矩阵,以了解不同级别的编程所涉及的内容。

第二步:做一个项目

接下来和其他人一起做一个项目。这让你找出是什么样子写代码在一个团队中使用大型代码库,你可以要求他人反馈的编码能力和你接触的一些软件工程的非编程元素,如生成的想法来满足用户需求。特别是,为开源项目做贡献可以让您使用非常大的现有代码库。

步骤3:与软件工程师交谈

为了了解更多关于你是否适合软件工程的信息,我们建议与你网络中的软件工程师交谈,最好是与你相似的人,并询问他们:

  • 什么样的人往往做得好?
  • 他们对自己的工作有多满意?
  • 他们的同事怎么样?

第四步:参加实习或训练营

一旦你完成了以上步骤,想要进一步测试你的职业生涯,你可以尝试实习或训练营。

工作满意度

与我们交谈过的许多软件工程师都说,这项工作很吸引人,经常提到与编程有关的谜题和问题,并且能够进入一种流状态。消极的一面是,与我们交谈过的一些人认为他们的工作没有意义,许多人说与大型现有代码库一起工作和修复漏洞是工作中不太令人愉快的部分。请阅读我们对软件工程师的五次访谈,了解更多细节。

工作与生活的平衡通常比高薪或同等薪酬的工作更好。一项调查显示,软件工程师每天工作8.6个小时,而高薪职位和初创公司的工作时间可能要长21个小时。如上所述,一些科技公司每周工作4天、32小时(例如Treehouse一年到头都是这样,Basecamp从5月到10月都是这样)。

就总体工作条件而言,科技公司是先进的,通常有灵活的工作时间、便利的津贴、远程工作和结果驱动的文化。这个行业最好的公司,比如谷歌,都是循证管理的领导者,被广泛认为是世界上最好的工作场所之一

远程工作开放了地点的灵活性,这对提高你的生活质量非常好:你可以搬到你喜欢的气候和城市,你可以通过搬到生活成本较低的地方来增加你的可支配收入,你可以离家人和朋友近。你也可以在需要的时候以自由职业者或承包商的身份找工作。

它与其他选择相比如何?

一些被普遍认为可以替代软件工程的方案是:

  • 学术研究——通过对重要问题进行研究,有更大的直接影响空间,通过建立一个公共平台,有更高的倡导潜力,通常提供更多的知识满足。另一方面,软件工程要比学术界好得多,它更容易找到工作,你可以更快更清晰地得到工作反馈。关于在学术界和软件工程之间进行选择的一个有趣的案例研究是,哈佛大学的一位终身教授离开学术界到谷歌工作。
  • 量化金融——在量化交易和对冲基金中有很多角色需要用到编程技能,以及机器学习和建模技能。我们怀疑,虽然工作的直接价值可能较低,而且竞争水平较高,但收入更高。在保持选择的余地方面,如果你在技术公司做软件工程和在定量金融中做角色之间进行选择,我们的印象是,从一个金融角色到一个软件工程角色可能比其他方式更容易。想要比较在大型科技公司、初创公司和量化对冲基金工作的情况,请访问Quora。
  • 创办一家初创公司或以早期员工的身份加入——如果你成功了,有可能获得更高的收入,但压力更大,工作时间更长,比从事软件工程工作更难离开。通常给出的建议是,只有当你有强烈的动力去开发你非常热爱的产品时,你才应该创业。更多关于选择是否创业的信息,请参阅达斯汀·莫斯科维茨和马特·克利福德的这篇文章。

如果你想做,你应该怎么做?

学习编程

首先,你需要学习编程。有三种方法可以做到这一点:

  • 自己学习。我们知道很多人在不到一年的时间里自学获得了初级软件工程师的工作。网上有很多很棒的计算机科学入门和编程课程。哪一个是最好的主要取决于你的品味和学习风格,所以我们建议你尝试一些,选择你最喜欢的一个。一些值得尝试的热门课程包括:Udacity的《计算机科学导论》(Introduction to Computer Science)、麻省理工学院(MIT)的《计算机科学与编程导论》(Introduction to Computer Science and Programming),以及斯坦福大学(Stanford)的《编程方法论》(Programming Methodology)。
  • 参加编程训练营。编程训练营的重点是在几个月内让那些对编程知之甚少的人获得尽可能高的薪水。如果你没有太多的背景,这是一个很好的入门路线,尽管有些人认为长期前景不太好,因为你缺乏对计算机科学的深刻理解。课程报告是选择训练营的很好的指南。要小心避免低质量的训练营。想要了解更多关于App Academy的信息,请阅读我们对其中一位导师的采访。
  • 在大学学习计算机科学(或其他涉及大量编程的学科)。这将给你一个更好的理论计算的理解(可以用于得到最高薪和智力上有趣的工作),一个好的网络,一些声望,更好的理解低级语言如c .拥有计算机科学学位也使得我们得到一个工作签证如果你不是来自美国。

找到第一份工作

一旦你知道如何编程,你就会想要你的第一份工作。这里有一个关于如何做到这一点的深入指南。

大公司有毕业生计划。对于小一点的公司,你必须通过你的人际网络直接接触。

一旦你去面试,你可能会被要求在特定的时间内在家完成技术挑战。有些公司会问你有关算法的问题。它可能有助于研究算法,并研究最流行的面试指南,破解编码面试。一旦你得到了一份工作,通常最好是协商一个更好的交易。

进一步的阅读

如果你只读一篇文章,那就读一些我希望在我学习编程时有人告诉过我的内容。

其他有用的链接:

  • 在不同类型的公司做网页开发人员是什么感觉。
  • 关于学习哪种编程语言的信息图表
  • 对不同类型的web开发人员的解释
  • 如何成为一名前端Web开发人员
  • 软件开发人员的日常工作:应用程序开发人员、系统开发人员和web开发人员。
  • 堆栈交换:你最糟糕的软件开发日是怎样的?
  • 软件工程是什么样的?
  • 我们所有关于软件工程的文章

全网同号,本文由【超级工程师】编译。

本文:http://jiagoushi.pro/node/1459

专栏
基于容器和微服务应用的架构设计
作者:超级架构师
5币
192人已购
查看

(此处已添加圈子卡片,请到今日头条客户端查看)