从金融模式到iOS模型视图控制器:使职业生涯搬到编程

0.
从金融模式到iOS模型视图控制器:使职业生涯搬到编程

Joe Senhou在优步留下了财务角色,成为优步服用的第七位IOS工程师。乔中的两年半,乔反映了他的旅程,为他人提供建议,考虑到将暴跌带入编程。

在加入Uber之前,我从未想过成为一名专业工程师。我在大学里学的是金融。我先是在一家投资银行实习,然后又在一家科技公司实习企业融资。当我大学毕业后确实开始做一名金融分析师时,我很快就成为了Excel Nerd,Ninja和每个办公室的巫师。

最终,我的金融职业生涯把我带到了优步。工作就像一阵旋风,把我投入到会计、新业务启动、财务系统、筹款、预算和战略规划中。像许多新聘用的分析师一样,我学习了SQL来运行我自己的查询:它让我尝到了编写代码的滋味。

经过两年的时间,我觉得就像我停滞不前。我渴望在我的职业生涯中感受到的感觉 - 在一个极度陡峭的学习曲线上的感觉,每天都被必需和激情推动。对我来说,工程听起来像是陡峭的曲线。

在我看来,工程学给了你推动巨大影响的力量。一位优步工程师写了一个新功能,每次用户使用他们的应用程序时都可以节省10秒。这个小小的改变加起来每年为乘客、司机和食客节省了数百年的时间。

如果您从未写过单行代码,请尝试:

  • 在PC上,单击Windows系统下的“开始”菜单中的“命令提示符”项,并粘贴:Echo Hello World
  • 在Mac上,打开终端应用程序并粘贴:printf " Hello world\n "

您只是执行了一行代码!软件只是让计算机做事情的代码行。对我来说,更好的是开发软件,让别人的计算机做一些有用的事情。最好的是建立一个工具,为数百万人带来价值。对我来说,一种绝对幸福的感觉来自于建造实用而又美观的产品。

级别设置

在我们的旧金山办事处努力工作的优步员工。

在我决定过渡到编程后,我认为我已经在全日制工程工作的准备方面相当于编码训练营。我很幸运;我在Uber进入了我的工程访谈:

  • 一所大学介绍计算机科学课程。
  • 八年的财务经验。这包括众所周知的10,000小时的Excel。
  • 在中学一次,我建立了一个网页。(我们都没有?#
  • 熟练掌握中级Python,从各种导师中学到。我使用了一些自学的在线资源,如编纂量Codefights.。我也写了几(糟糕的)脚本以前工作。
  • 熟练掌握中级Java。我帮助我的女朋友课程从三个课程中撰写,并阅读了两个教科书:Java入门Java中的算法和数据结构
  • 我通过以下方式学习iOS和SWIFT(Apple推荐)Stanford iOS Swift Cs193P在我们当地的城市大学旁听夜校。

队列训练音乐

一旦我决定采访工程工作这两个月是我最努力的学习和工作。我会高效地完成我的财务工作,通常在下午4点之前,然后找一个安静的地方学习11个小时(不包括晚餐)。一个舒适安静的地方至关重要。我的选择是优步旧金山总部五楼的一间大会议室。

会议室的灯都关了,大厅的灯光刚好能让我盯着电脑屏幕看11个小时,而不会让我的眼睛疲劳。房间里有一块白板,我用来做练习题的。这个房间离咖啡机和浴室也很近。是的,非常的战略。每个工作日我都会在那个房间里待到凌晨三点。周末的时候,我会再来学习18个小时。

我是如何花时间的?

  • 一半的时候我正在解决技术面试问题。这些算法问题是一个组成的部分工程访谈这有助于确定候选人是否有编写代码的基本知识。我学会了用Python解决大多数问题,包括回文检查、树遍历和链表节点查找。
  • 我花了另一半时间去适应iOS开发。我重新观看了CS193P的视频。我为优步餐饮设计了一个模拟菜单扫描应用程序Tesseract OCR.。回顾过去,这款应用还有很多不足之处。关于我的应用,有趣的是:我并不真正了解网络基础设施,而且应用绝对没有利用后端系统。要“上传”扫描过的菜单,该应用程序只需在电子邮件中对其进行格式化。

关键的外卖

经常有人问我如何进行类似的职业转变。以下是我希望自己在开始编程之旅时就能得到的一些建议:

创建正确的Mindset

从我在Uber Eats的办公桌上望向电脑之外的画面。

首先,当你学习编码时,你应该有一点心态。

明确你的目标很重要(成为一名专业开发人员vs.兼职黑客vs.学习如何编码vs.后端和/或前端工程师)。毕竟,如果你不知道你想去哪里,就很难决定你想要去哪里旅行。

成为专业开发商的道路很长,成为一个真正的良好开发者需要数年。这么多学习!这种技术不断发展,即使你觉得自己在你需要知道的一切时,也有更多的学习。在我的经验中,为一个好的开发人员来说,是什么,主要是能够快速挑选新技术/编程语言。时间通常花了读模糊的文档或现有代码,并尝试破译意图。您可以吸收知识的速度越快,您可以花费输出代码的时间越多。

学习如何代码(即,写一个从头开始完成某事的程序)并不难。您需要了解一些基础知识,例如编写函数和声明变量,但与作为开发人员合作相当不同。这就像建立个人Excel预算和进行专业财务分析之间的区别。您可以花费数百小时构建一个花哨的模型,以便从您的银行帐户,预测收益或突破强制与良好的支出中提取数据的方法,但这种独奏活动与工作相比非常不同一个具有多个数据源的大型团队,文件之间的版本控制和协调。作为开发人员,您必须编写测试,读写文档,与其他人的代码集成,并处理开发时间表。类似地,作为程序员,您必须在语言,代码库和项目之间进行上下文切换。

能够编码!=开发人员。也就是说,学习代码是第一步。

工程比困难更乏味

当户外人认为编程很难时,我解释说,因为他们相信程序员是编译他们头部复杂算法的天才。实际上,现代编程涉及将一堆件合在一起,很像将适配器的正确组合贴合到电源插座中以获得最佳性能。

一系列凌乱系列的电气适配器,代表了工程繁琐的复杂性。

换句话说,我们花费大部分时间找到正确的适配器并附加它。或者我们构建自己的适配器,以容错的方式执行一些简单的功能。工程师将大问题分解为可以通过一系列适配器解决的问题。当某些事情破坏时,它们会换掉或升级适配器。

要使用更复杂的类比,代码就像管道一样。数据是流过管道的水。管道的结构需要偶尔改变一次,因为您有新的厨房或浴室,工程师需要防止泄漏。这意味着创造坚固但不是过度设计的管道。工程师还需要能够通过传感器自动检测泄漏。当某些东西被打破时,您需要能够追踪通过复杂的管道网络来弄清楚存在泄漏或阻塞。这部分工程,通过迷宫追踪问题,是乏味的。如果您需要为您的管道支持新插座,则可以恰好弄清楚从现有系统中分离的位置。

在我看来,良好的工程师能够维护他们在设计中没有部分的系统。它们可以添加新组件,对系统的其余部分产生最小的影响。它们将管道留在更好的条件下,而不是他们在他们身上工作之前。进一步采取这一类比,我认为伟大的工程师可以快速了解整个系统如何运作和可视化他们的变化如何影响系统。

体验肯定有助于。经验允许您快速了解您之前从未观察过的系统以前从未见过的系统。在切割墙壁之前,一个好水管工可以猜测泄漏的原因。同样,并且可能最重要的是,经验允许您了解要朝向的状态。

在职业重置后,您可以找到成功

像泰姬陵一样,花了20年的建造,工程需要时间和精力才能执行良好。

我的第一天是工程师超级吃团队是可怕的。另一位与我拥有相同入门级头衔的工程师此前曾在苹果开发Xcode(我们用来编写iOS应用程序的工具),他的名字出现在Snapchat的致谢名单中,因为他编写了一个非常受欢迎的开源库。我觉得我们的一个实习生比我更像一个工程师。这是他的第五次实习,之前他在一家大型社交网络公司实习过两次。多年来,他一直在编写iOS应用程序,并在应用商店上发布了一款应用程序。刚从学校毕业的学生通常已经编程很多年了——有时从中学就开始了,这意味着他们有八年以上的编程经验,而我只有几个月。的冒名抑菌综合征是真实的。

然而,回顾那些日子,我现在意识到两件事让我更舒适地成为专业人士。首先,团队中的每个成员都有自己的利基。当您加入团队时,您无需了解您的利基。可能有一百个功能,后端系统,工程工具和作为工程师的日常经验所涉及的流程,任何一个人都不可能成为所有人的主人。一系列圆满的团队将在一切中拥有一些专业知识。并且总的来说,您将在您努力的事情中开发专业知识。然后你将成为您域名的通往人员。弗罗多与矮人、精灵和人类组成的多样化团队一起冒险。十一罗汉有一个扒手,康顿,力学,电工,爆炸专家和杂技演员。

其次,我意识到专业程序员需要做的方式不仅仅是写出了伟大的代码。

优步拥有六种能力,为我们的工程师,编写代码只是其中两个的核心。为了成功发货,您需要创建警报和分析,写入文档,设置实验,彻底测试,与其他工程团队合作,与产品和设计团队一起工作,并解决错误。不是一切都是关于编写美好代码。

折旧是令人敬畏的 - 和预期的

在许多方面,我认为计算机编程是职业之一,随着时间的推移,技能最折旧。计算机技术不断发展。iOS和Android发布新模式(即,API),每年弃用旧的模式。事实上,ios只是十一岁了。要学习的不断新的语言,工具,数据库和模式。

围绕工程的生态系统也在发生变化。设计、数据科学和产品管理的最佳实践也在不断发展。如果一个计算机工程师休了7年的假,他将很难立刻变得高效。

对于一个新的程序员,这种快节奏的折旧似乎令人生畏。但它实际上很棒。每个其他工程师都受到相同的折旧。您不需要掌握旧技术才能富有成效。学习某种技术设计背后的动机可能会有所帮助,但是对实际实现的深刻理解通常是不必要的。此外,一些技术是如此新的,没有多少遗留遗留。有许多专业化,例如机器学习或区块链技术的应用,这是一个如此新的技术,即某人在几年之后可以成为专家。

这种折旧具有另一个有趣的推论 - 那些继续学习作为专业工程师的潜力。努力工作在工程中有很多折扣;在十年内,它可能是您工艺品的最高百分之一,而其他行业可能需要三十年。

让我说明我的意思是用假设数字的图表。(我提到我曾经在金融中工作吗?)

上图描绘了Foo和Bar在过去十年中的技能增长情况。他们每个人都有100个技能点(新员工不可能从零开始!)Foo和Bar每个月分别获得20和10个技能点。为了便于解释,他们每200个技能点就会升级到下一个级别。

让我们假设计算机工程以每月2%的速度变化,这意味着三年后,Foo和Bar所拥有的技能点价值大约是以前的一半。这个折旧费需要额外两年才能送到工程师2号。这种贬值也意味着Bar的职业生涯将在从二级工程师过渡到高级工程师的过程中遇到瓶颈。另一方面,Foo一直紧跟最新的技术,并致力于学习这些技术,四年后他就能成为公司的高级工程师,十年后他就有可能成为首席工程师的最高职位。

如果你想开始编码…

这是我和一只蝎子在泰国考山路的合影。拍摄这张照片的时候没有吃蝎子。我们雇了一个小贩用她的蝎子。她是幸福的。

所以,你的灵感吗?以下是其他一些建议和资源,旨在帮助您今天开始编码:

  • 在我的经验中,Python是一种非常好的入门语言,因为许多在线工具,课程和教程。我喜欢Codeacademy.。我甚至建议你在那里做javascript部分。但有数百个其他资源。例如,许多我认识的人经历了艰难地学习Python
  • 不要挂断学习特定语言。只需找到一个帮助您学习的工具或课程,您愿意承诺。经验丰富的开发人员可以通过谷歌曲语法基本上为代码库编写代码。语言本身并不重要,这只是取决于您更容易访问的资源。
  • 有目标,你正在努力成为重要的动机。低压力目标是挑战自己完成大规模开放的在线课程。
  • 如果您对数据科学路线有兴趣,那么两个工具都流行了优步数据科学家熊猫(通常与之结合使用iPython笔记本) 或者闪亮的(由r提供支持)。Pandas提供了一个伟大的十分钟开始指南。
  • 您需要学习命令行函数。没有其他办法了。我们刚刚使用该命令行在本文早些时候打印“Hello World”。我通常推荐这个教程:学习足够的命令行是危险的。(插入rm -rf joke)。在同一个网站上,考虑阅读学习足够多的Git是危险的, 也。
  • 无论您的行业,都尝试将编码整合到您当前的工作中。为您的公司或团队构建网站;创建一个内部仪表板以优化工作流程;甚至使用Python和Pandas与大数据集一起玩。看看您的经理是否会支持您。最终,大多数工程是一个前期投资,导致长期储蓄。编码是关于建立某些东西,这通常是快速学习的组合(因为你了解基本面)并有效地搜索网络。

而且,最重要的是,意识到你已经开始学习了!您刚刚在命令行中写了一行代码。您看到了一种在标准工程命名惯例中使用了两个变量的函数Foo和酒吧。您读取了在成品产品运送所需的编码之外的工作。

也许最重要的是,你决定用思维方式接近挑战,以始终学习。这并不困难。通过乏味的力量。分解成较小的零件。尝试设想整个系统。请记住:您可以通过在找到它们的情况下造成更好的系统来成为一名伟大的工程师。

向前进

Uber Eats团队的成员在户外享受海滩。

我无法选择一个更好的团队在我的职业过渡之后降落。作为一个带优步吃的工程师,我有机会创造数百万客户使用的功能,以及我的开发技能已经巨大地增长。由于在优步赫巴坦期间创建的原型,我是待定专利的作者。我还利用了我的新技能并在我的个人时间期间磨练它们,为App Store创建两个应用程序。

我也可以从其他工程师那里学习贝尼托艾默伊琳娜, 还有这些善民子。但最值得注意的是,我每天都学习法拉斯,伊萨克,仙星和探索团队。事实上,我在优步团队中找到的支持系统是我能够把我对编程的热情转化为我的职业的主要原因之一。

如果你想在一个多元化的团队中磨练自己的发展技能,考虑申请吧职务超级吃!

订阅我们的新闻以跟上优步工程的最新创新。

评论