首页
Preview

我如何在没有技术学位或工作经验的情况下找到了全栈开发人员的工作

六个月前,我成为了一家初创公司的全栈Web开发人员。我没有相关工作经验,没有技术学位,甚至没有一年的活跃编码经验。然而,我成功地获得了我梦寐以求的工作,并且今天可以第一次说我喜欢我的工作。这是我如何做到的——详细版。

第一部分:接受青年危机

大约三年前,我处于一场激烈的青年危机中。我从商学院毕业后,获得了一份有吸引力的投资银行工作,然后在几个月后就辞职了,因为我意识到我讨厌这一切。

完全迷失了方向,我一个人去旅行了几个月,试图“找到自己”。尽管我以为我找到了,但实际上并没有。不过这确实帮助我弄清了一些事情。

第一件事是,我根本无法继续追求金融职业。我根本看不到任何未来的情景会让我快乐。

第二件事是,背包旅行和冲浪虽然很棒,但无法帮助我找到我正在寻找的“使命”。唯一合理的事情似乎是经典的试错方法。

所以当我回家后,我决定尝试一些我认为可能既能让我快乐,又能提供一些像样的生活的事情。于是试错就开始了。

首先,我想认真尝试写作。所以我开始为一家在线商业杂志兼职写作和编辑。这是相当不错的。在一个快节奏的编辑办公室里工作三天,写关于任何商业、金融、科技或可持续发展相关的内容。

同时,我在旅行中听到了很多关于自由职业者生活的事情,所以我想尝试一下。所以我成立了自己的公司,很快就接到了一些商业分析项目。成为自己的老板当然非常令人兴奋,而且能够从任何地方工作对我来说完全是新鲜的。

我这样做了大约八个月,兼任作家/编辑和自由业务分析师。但最终我开始失去对杂志工作的兴趣。

任何处理数字内容的理智人都知道,点击量文化是以创意和质量为代价的。换句话说,当你内容的主要激励是点击时,所有必要的夸张词汇来获取那些点击的超级级别很快就会消磨掉最初的创意抱负。此外,我无法摆脱作为作家/编辑时,我总是离我报道的行动太远的感觉。

所以我辞职了。按照我与自己的试错协议,这是可以的。但是,因为我实际上已经投入了八个月的写作,所以这仍然感觉很糟糕。但是就像一个聪明的人可能会说或可能不会说的那样:当一扇门关闭时,另一扇门会打开。

而且我还有一件事要检查清单上的事情。

第二部分:改变我一生的午餐

生活很奇怪,有时它会把最大的、最改变生命的灵感藏在你最不可能想到的地方。对我来说,当我第一次体验到编码的“吸引力”时,它确实是这样的。

尽管辞去杂志的工作感觉像是一个失败,但这次经历证明并不是完全没有意义。在写了那么多关于科技创业公司和企业家激动人心的生活之后,我决定也尝试一下那种生活方式。

经过大约一个月的研究和求职,我设法在当时(据说)最有前途的北欧金融科技公司之一找到了一份工作。在短短几年内,它已经成长为欧洲最大的股权众筹平台之一。

我并没有真正申请任何特定的工作机会。但是由于我真的相信公司的使命,并对他们的成功印象深刻,我宁愿与他们的首席财务官取得联系告诉他这一点。我们见了几次面,突然间我就在那里工作了,担任了一些相当模糊的业务发展角色。

虽然我希望能够参与战略和分析项目,但最终我做的是模糊的业务开发工作:销售。这也是为什么这份工作最终也没有成功。

但是,还有更多的事情。

就像杂志的最后一份工作经历一样,这份工作也证明并不是毫无意义。事实上,如果没有它,我可能今天不会成为一名开发人员。因为那是我遇到Sandra的地方。

她是产品团队的前端开发人员,坐在我们当时挤在一起的小联合办公室的另一端。

从技术上讲,我们是同事,但是任何在功能失调的技术公司工作过的人都会知道,销售团队到产品团队的距离通常会感觉像是相隔几个星系。

管理层刚刚决定将整个开发团队外包给乌克兰的远程团队,这也没有帮助。这意味着Sandra和所有其他开发人员将被解雇,并且在两个月的通知期内或多或少只是在工作。

尽管存在这种距离,但有一天Sandra和我一起吃午饭。这基本上是我与专业开发人员进行的第一次真正的对话,我认为它是出于真正的好奇心和加速的存在危机,这很快就把午餐变成了一次面试。

我们的午餐最终对我产生了完全改变生活的体验。具体来说,有三个启示使之成为如此。

  • 我震惊地发现,她在Web开发方面没有“真正的”教育,对我来说,这等于没有学位。她所知道的一切都是从MOOC平台(大规模在线开放课程)中学到的,如freeCodeCamp和Codecademy。
  • 她告诉我她有金融背景,就像我一样。事实上,她曾经担任业务控制员多年,直到最近才加入了与我相同的初创公司,只是作为前端实习生加入了几个月。
  • 当她向我展示她用六个月的编码经验构建的投资组合页面时,我简直不敢相信。太不可思议了。

那顿午餐为我打开了一个可能性的世界。 Sandra的故事让我更加渴望。数周来,我一直在研究人们成为开发人员的不同途径。我参观了各种论坛和文章,其中许多都在Medium上找到。

例如,Stackoverflow的年度开发者调查(10万名受访者)指出,仅有一半的专业开发人员拥有学士学位,而在这一半中,整整三分之一的人专业与计算机科学和软件工程完全无关。

我读得越多,就越意识到我的教育定义是多么狭窄。如果你不需要计算机科学学位来进入像软件工程这样复杂的领域,那么你需要学术学位做什么呢?虽然当时我可能无法看到它,但现在我清楚地看到了学术体系是多么的破碎。

它是为工业时代的工人设计的,你将专门从事一种工艺,然后将这些技能用于你的余生。当然,它不是为今天的知识社会设计的,其中世界历史的所有信息永远不超过几次点击,事物变化如此之快,以至于教育实际上必须成为终身过程,而不是一次性的学习-使用-永久体验。

但这是一个足够大的话题,可以单独写一篇文章。Sandra那次午餐的重要之处在于它点燃了我内心的火焰,激励我摆脱我当前的半吊子商业生涯。

虽然我一直羡慕我周围的程序员,甚至曾经参加过Python 101的暑期课程,但我从未考虑过它是我的可行职业道路。至少不是不回到大学3-5年。

因此,如果你正在阅读此文章,Sandra,谢谢你!如果我能够像你激励我一样激励一个人,那么我认为撰写此文章的努力已经得到了千倍的回报。

第三部分:花费我6000美元的文字

接下来的几个月,我在像CodecademyfreeCodeCamp这样的在线平台上花费了数百个小时。我甚至订阅了付费平台Code School

我不确定自己真正的目标是什么。让我开始的是对我不断失望的职业生涯的绝望。但是让我继续下去的是我发现编码练习是多么有趣和有益的奖励。

我甚至无法告诉你编码从休闲项目变成了死亡严肃的“我将成为专业开发人员”的时间点。但这可能是在这里左右。我正准备从freeCodeCamp获得我的前端证书,接下来发生了我人生中下一个改变命运的事件。

在辞去我的商业开发人员工作后,我决定逃离瑞典冬天的冰冻孤寂,前往中美洲旅行。我认为如果我要花数百个小时独自教自己编码,我可能会在温暖,便宜且不沮丧的地方做到这一点。

我在萨尔瓦多的一个旅馆里用笔记本电脑编码时,我收到了我的朋友Marie的短信。

“我得到了这份工作!”上面写着。

Marie也在学习如何编码。我想起了她几个月前告诉我她去了这个代码学校的事情。一个“编码训练营”。

当时我基本上嘲笑了她-那么。你将支付5000美元进行为期12周的课程?你不会获得任何大学学分吗?而且你放弃了顶尖MBA的机会来做这个?听起来合法。

然而,她在那里。四个月后,Marie正式成为Accenture数字代理之一的初级后端开发人员。我为她感到非常高兴,但当然也非常嫉妒。

我停下手头的工作,进行了一些计算。如果我能保持目前的速度,平均每天编码6个小时,每周大约5天,那么我将每周完成30个小时。因此,要完成freeCodeCamp的完整1200小时计划,至少需要再花费8个月的时间。如果我能保持这个速度的话。但是我肯定做不到,因为我的钱已经用完了,我不得不回到瑞典并很快找到一份新工作。

我为自己没有从一开始走Marie的路线而感到遗憾,而是花了4个月的时间背包旅行,我为此进行了一些计算。好吧,已经发生的事情无法改变,我想到自己。我仍然必须接受编码训练营是达到可雇用水平的最佳选择。

回到谷歌研究。

在某种程度上,我感觉自己又回到了和Sandra吃午餐的地方。只是这一次,我用一双新鲜的眼睛看着整个编码训练营现象。知道Marie的故事,我知道并非所有编码训练营都是太好以至于不可能的骗局,而实际上是打入这个行业的可行方式。

稍后,Stackoverflow的年度开发者调查再次向我保证,88.1%的编码训练营校友在完成训练营后一年内已被雇用。

由于SwitchupCoursereport,我很快就发现了Le Wagon,这是法国编码训练营初创公司的成功案例,全球拥有15多个地点,并在两个排名中均排名前五名(撰写时实际上是两个排名中的#1,拥有27个位置!)。在将它与其他选项(如Hack Reactor,Ironhack,General Assembly和NYCDA)进行比较之后,有几个主要的原因使我更喜欢Le Wagon:

  • 相对较低的价格(当时为6,000美元)。
  • 专注于创业和产品开发。
  • 全球范围和社区。

然而,我仍然对该计划有一些疑虑。

  • 后端语言Ruby和MVC框架Rails的选择。虽然这似乎是其他公认的编码训练营中很常见的,但我读到的几乎每篇文章都建议Javascript真的很热门,是雇主所追求的技能。例如,我的朋友Marie的编码训练营教授基于Node.js和Express.js的后端技术,这两种技术都是基于Javascript的。一些常见的争论似乎是Ruby是学习的好语言,但Node和Express是雇主非常看重的技能。Ruby真的是值得投资的马吗?
  • 9周的课程时间似乎有点短。大多数竞争对手的项目似乎至少为12周,这已经似乎太短了,无法成为一个受雇的Web开发人员。
  • Le Wagon在完成编码训练营后没有提供实际的求职援助。许多竞争对手提供就业保障或看似可靠的职业服务功能。

我将在下一节的结尾分别解决这三个疑虑。

然而,尽管我有疑虑,我仍然认为这是我的最佳选择,这就是为什么我决定申请他们在巴塞罗那的学校。几天后,当地的学校经理Gus与我进行了一次Skype面试。

在萨尔瓦多懒散的冲浪城镇El Tunco的一个烂Wi-Fi咖啡馆里,我们进行了简短的聊天。但这比我预期的要更不正式。我觉得我们建立了联系,这让我更想被录取。然后,不到24小时,我收到了我一直在等待的电子邮件。Gus告诉我,他很高兴让我参加下一个班,并且我下一步要做的就是支付1,200美元的押金来保留我的位置。

那基本上是我当时剩下的所有钱,它应该支付我在萨尔瓦多的最后几周,包括最终回家的旅行。但是,如果我能够坚持更紧的预算,并预订早于预期的回家航班,我知道我可以做到。

因此,在短暂的犹豫后,回忆起我对Le Wagon仍然持有的担忧,我凭直觉行动,将押金转给了Gus。之后,我记得感到有点尴尬。我真的刚刚承诺支付近6,000美元的9周编码课程吗?作为一个从未为教育支付一分钱的瑞典人,这种情况感到非常奇怪。

然而,这种奇怪的感觉很快就变成了兴奋。至少现在我知道我不必在不久的将来回到金融、销售或在线媒体工作。同一天,我开始安排到编码训练营之前的时间。

在剩下的三个月里,我必须想办法赚取剩余的4,800美元的费用。再加上租金和生活费用。哎呀。

我联系了之前咨询过的一家公司,幸运的是,他们有一个完美的商业分析项目即将启动。由于他们最初不接受少于4个月的合同,我不得不说服他们我可以在两个月内完成工作。不知何故,它起作用了。

呼!就在一周前,我还是一个没有想过回家的旅行者。现在,我将在不到两周的时间内开始我在斯德哥尔摩的新工作,并搬到巴塞罗那。确实有令人兴奋的事情即将到来。

第4部分:巴塞罗那的编码训练营

快进三个月。现在是2017年5月1日,我正在教室里听我的第一堂Le Wagon讲座。

周围是来自世界各地的25个人。来自德国的Kilian,来自委内瑞拉的Daniel,来自法国的Francesca,来自意大利的Arbi,来自美国的Courtney等等。有些人没有任何编码经验,有些人有一点,还有一些人已经完成了计算机科学学位的一半。

我们在听当地学校经理Gus和Ruby教师Ruben解释前方的计划结构时,我们都会学习到,课程安排非常系统化。在接下来的9周中,我们将花费大致相等的时间在6个不同的模块上,每个模块都处理自己的主题,最后花费两周的时间规划和开发我们自己的Web应用程序。

在整个第一周中,我记得对课程内容感到相当自信。毕竟,在freeCodeCamp上花费了数百个小时后,每日编码挑战的难度似乎有点低。

尽管Ruby对我来说仍然很新,但基础知识似乎与Javascript和Python基本相同。听讲座并做练习来了解变量、数组、哈希、基本函数和迭代感觉相当重复。所以我有点傲慢,想知道我是否真的能从这个编码训练营中获得任何东西。然而,不到一周,所有这些都会改变。我从班上的头号学生变成了实际上需要努力跟上的学生。

在我不知不觉中,我们从基础知识转向了面向对象编程、MVC架构和数据库,有很多天我觉得我甚至没有理解前一天的概念,就已经期望进入下一个主题了。

所以我必须提高到更高的档次。每天在教室里呆10个小时对我来说是不够的。我养成了每天晚上额外工作几个小时,并花费大部分周末重复过去一周最棘手的事情的习惯。不能像前几周那样享受巴塞罗那的感觉有点糟糕,但我已经把所有的积蓄投入到编码训练营中,这是一个很大的动力。

另一个令人沮丧的事情是我们学习的东西的分散性质。感觉我们得到了一百个拼图块,但没有说明如何将它们组合在一起。了解如何编写基本的Ruby、HTML、CSS、Javascript和SQL确实很有用,但这些知识如何帮助我组合实际的应用程序呢?然后,我有了一个重要的领悟时刻。

那是第六周,我们终于到了 Ruby on Rails 模块。转眼间,我看着 Chrome 浏览器窗口,看到了“耶!你在使用 Rails!”这句话。老师说这是我的第一个 Web 应用。

任何新的 Rails 项目的默认主页。

什么?我只是在终端里运行了几个简单的命令,然后在浏览器里输入 http://localhost:3000/ 就看到了这个。我看到的到底是什么?

直到我在文本编辑器中打开了应用目录,我才真正理解了它。Rails 将所有的东西都展示得如此简单明了。

一个文件夹用于 HTML,一个用于 CSS 和 Javascript,一个用于控制器,一个用于模型。一个文件用于路由。还有一个文件,用于美好的模式,将整个数据库映射得如同一张简单的购物清单一样。

当我终于理解了所有这些部分在 MVC 框架中如何实际地拼合在一起时,每天晚上和周末都在编码变得毫不费力。相反,我经常会为了睡觉而苦苦挣扎,无法将手中的笔记本电脑放下。

我一直处于进步中,每天都有巨大的新发现。这让我沉醉其中,感觉很难用言语来形容。

  • 我实际上可以在 erb 文件中混合使用 HTML 和 Ruby 吗?
  • 我可以在相关的 html.erb 文件中从控制器中访问实例变量吗?
  • 我可以使用 Gems 这个东西导入其他人编写的代码吗?
  • 我可以在 assets/javascript 目录中编写任意数量的原生 JavaScript 吗?
  • 我可以在终端中使用 Rails 控制台,对整个数据库进行任何我想要的操作吗?

这就像是一个永无止境的,让人非常满意的领悟时刻。就像你突然意识到原力实际上是与你同在的一样,每一次获得新知识都让你更接近成为一名完全的绝地武士。即使现在,九个月后,我仍然觉得自己处于同样的状态,而且我开始觉得这实际上可能是一种永久性的感觉。这将是多么美好啊。

不管怎样,编程营的速度并没有放缓,很快我们就到了最后两周,需要自己构建应用程序。两周后,会有一个大的 Demo Day,每个小组都要在摄像机和众多观众面前展示他们的应用程序。

很有压力。

出乎我们的意料,计划是迄今为止耗时最长的部分。虽然在过去的几周里我们做了很多准备工作——提出应用程序的想法,组建小组,使用 Sketch 设计特性——但是在编码几天之后,我们意识到我们的想法过于宏大。

最初的应用程序想法有点像“面向专业人士的 Happn”。更具体地说,让用户创建用于其他用户参加和签到的网络活动页面。你可能会认为,“这就是 Meetup 嘛。” 但是我们的想法有一个转折点:只有当你身处活动现场时,才能签到参加活动。因此,“面向专业人士的 Happn”。

在活动中签到后,用户将能够通过 LinkedIn 的 API 收集的数据查看其他签到用户的专业资料,并连接和与与其兴趣相投的人聊天,从而不会错过潜在的伟大联系。

这是我们最初的 MVP(最小可行产品),我们决定将其称为 Unify。非常肉麻和模仿硅谷,我知道。但是为了辩护,我们有更好的事情要做,而不是考虑更好的名字。

比如,关于实际的特性进行头脑风暴。但是我们头脑风暴得有点太多了,添加和删除特性,最终得到了一个完全不同的应用程序,

  • 在剩下的十天内不可能准备好演示,
  • 并不像我们最初的想法那么具有颠覆性。

因此,我们不得不将特性缩小到 MVP,并最终几乎得到了与 Le Wagon 经理 Gus 从一开始就建议我们使用的完全相同的产品。

我们当时认为这是浪费时间。但是这个过程至少教会了我一些关于产品开发的重要事情:

  • 如果做得好,它应该更多地关于规划,而不是实际编码。
  • 清理旧代码错误比彻底规划和从一开始做正确的事情要耗费更多的时间。
  • MVP 总是比你从一开始想象的要小。

十天后,经过超过 100 小时的编码、设计、争论、测试、数据库迁移和数据库回滚,我们竟然奇迹般地到达了 Demo Day,并且对我们的应用程序感到非常满意。当然,它远非完美,但所有主要特性都按照我们想要的方式工作。

然而,在演示前的几个小时,我们几乎都快心脏病发作了。

谷歌的地理定位 API 并没有按照我们的请求正常响应,因此我们无法签到参加演示的活动。我们尝试了一切。切换计算机和用户。删除和创建新的事件。更改事件街道地址。但什么都没用。

我们三个人试图保持冷静,不要惊慌。这可能只是一个地理定位功能负责人会轻松解决的错误。

但是他迟到了,所以我们试着打电话给他。

没有回应。

我们又打了电话。

还是没有回应。

然后我们惊慌了。

在最后一刻,多亏了我们的一位出色的教学助理 Antoine,我们设法找到了这个错误。原来,我们不小心将距离范围设置得太低,这就是为什么应用程序无法确认我们实际上处于活动位置。我们只是将半径增加了几公里,提交并将更改推送到我们的生产服务器。然后——应用程序完美地工作了。演示也一样。

总的来说,我在Le Wagon的经历非常棒。我可能从未在如此短的时间内学到这么多。回想起来,实际上很难相信,我们大多数人只用了9周的开发经验就能开发出功能齐全的Web应用程序。

但不要自欺欺人,这个训练营不会替你完成工作。要从中获得任何收获,你必须全力以赴。我亲眼看到许多人因为以下原因而落后或甚至退出:

  • 没有正确的难度预期,
  • 没有充分准备,或者
  • 忙于其他事情而无法跟上。

最后,我认为许多新手犯的一个错误是认为计算机科学学位可以代替自学或训练营,成为Web和/或移动开发人员的手段。根据我的经验,这是不准确的。

即使你正在攻读计算机科学学位,你仍然需要填补大量的实际知识空白才能提高生产力。我亲眼看到了在我的训练营同学中,有2到3年计算机科学学习经验的人也有这种情况。这是因为学术模式已经过时了,跟不上真实世界软件开发的极快速度。

从我的角度来看,如果目标是成为开发人员,自学或训练营在某个时候都是必要的。因此,计算机科学学位应该被视为一种补充而不是替代品。

而(好的)训练营可以比自学更快地让你成为开发人员的原因,是以下几点的结合:

  • 一个全面但简明的课程,
  • 一个无缝的在线平台,带有教程和练习,最重要的是;
  • 当你遇到问题时,有人提供即时支持。

为了总结这一部分,我想用我获得的见解来解决我在承诺参加训练营之前所担心的三个问题。

1. 学习Ruby on Rails而不是基于JavaScript的技术栈

如果你现在处于加入Rails训练营之前的我当时的位置,被淹没在涌向互联网的所有JavaScript热度中,你可能会问自己Ruby是否过时,Rails是否过时。如果是这种情况,我的简短答案是不。

然而,长答案是这样的。

我现在工作的公司有一个高流量的Web应用程序,后端使用Rails构建,前端使用Ember.js框架。我已经全职在这个应用程序上工作了大约六个月,需要我用JavaScript编写的代码和Ruby编写的代码一样多,这让我对这些技术之间的差异和相似之处有了一些见解。

当涉及到客户端HTML/CSS渲染(或“视图”)时,Rails用户体验甚至无法与大型JavaScript框架相比。这一点我必须承认。

例如,考虑一篇文章或博客文章的基本评论部分。作为用户,你希望你提交的任何评论都会立即出现在屏幕上。

在现代JavaScript框架中,这只是将新数据(评论)推入客户端数据存储并确保评论列表更新其状态以显示新评论的问题。这样,你无需等待新记录被全部发送到后端,存储在数据库中,然后再由客户端请求。相反,新评论会立即出现在你的屏幕上。

在你的Rails HTML代码中没有任何JavaScript的情况下,用户必须刷新页面才能查看文章中的任何新评论。这是可怕的用户体验。为了避免这种情况,你可以选择几种不同的路径。

在JS框架时代之前,主要解决方案是在HTML上添加一些非常不规范的AJAX逻辑,随着应用程序的增长,这些逻辑通常变得非常难以维护。另一个最近提供给Rails的选项是使用类似Action Cable的pubsub(发布-订阅)websocket解决方案。例如,这就是我们在训练营中构建的应用程序中用于聊天的方法。问题在于,没有包装JavaScript框架,websocket逻辑很容易变得不必要复杂,也难以维护。

然而,幸运的是,今天我们有了更好的选择,可以使用JavaScript框架解决这些类型的问题。由于客户端在我看来是Rails的最薄弱环节,这也是我认为Rails不应被丢弃作为Laravel或MERN堆栈等选项的主要论据。只需在顶部加上一个清晰的JavaScript框架,如React或Ember,就可以了。

我个人喜欢我们在Rails和Ember之间的集成以及它们如何相互补充。他们的意见性本质,坚实的轨迹记录,远见卓识的领导和巨大的贡献者社区使它们稳定,值得信赖,并适合像我们这样的初级开发人员。

如果你仍然对Ruby作为你的第一个后端语言持怀疑态度,我想提醒你,六个月前我对JavaScript几乎一无所知(除了一些基本的vanilla JS,React和jQuery语法),今天我在日常工作中无缝地使用和过渡这两种语言和框架。并喜欢每一分钟(比喻)。

因此,无论你选择什么作为你的第一门语言,都不用担心-你始终可以在工作中学习第二门语言 😎

2. 9周的时间是否太短了?

关于我担心训练营的持续时间-仅仅9周-可能太短,无法学到有价值的东西,Le wagon也帮助我打破了这个神话。回想起来,我实际上更喜欢9周,而不是其他大多数训练营提供的12周。

原因是训练营本身实际上并没有使你达到就业水平。至少对我来说不是。相反,它为我提供了所有必要工具的坚实介绍,我需要达到生产水平,并学习如何将它们组合在一起。因此,即使他们给了我三个星期,这只意味着多介绍了一打工具。我之后仍需要深入学习这些工具。而那个清单已经足够长了。直到我完成了这个训练营并且自己开发了一些应用之后,几周后我才真正理解了这些工具的使用方法。因此,如果你已经决定参加训练营,但是在选择时比较几个训练营的时长差异,我的建议是从等式中删除这个变量。因为如果你像我一样,你仍然需要自己重新学习每一个工具。

回头看,Le Wagon 的工具集确实非常准确。在我目前的工作中,我每天都在使用这些工具,比如Postgres、Git、GitHub、Sidekiq、Pundit、Heroku和Cloudinary。我唯一希望我的老师们花更多时间讲解的两个方面是如何使用像React这样的JavaScript框架以及如何使用Rspec等技术编写测试。因为后来自己学习这两个技能对于我获得第一份开发人员工作来说非常关键。

3. 工作保证和/或职业服务是否对我有帮助?

如我之前提到的,许多训练营都有“就业或退款”政策。许多训练营也有职业服务机构,帮助你联系潜在雇主并为你的应聘和面试提供指导。

虽然这对很多人来说可能听起来是个不错的交易,但我实际上认为这对我并没有什么影响。但是,我有足够的时间,在训练营之后的两个月里花费了大约500个小时编程,我在简历上拥有精英学校的学位,并且有很多应聘和面试的经验。如果这些条件不适用于你,那么在选择训练营时,也许这是一个需要考虑的因素。

第5部分:构建作品集

在去年夏天的最后一个月,训练营结束了。但我才刚刚开始。

在训练营中开发Unify应用并将其推向完成线给了我很多动力,我决心要充分利用这股势头。

我还有一些钱在银行里,巴塞罗那的公寓租约还有几周。城里我认识的人基本上都要离开了。所以我没有理由不继续专注于编程。我下意识地为自己建立了一些新的常规和习惯:

  • 我会每天编程,直到达到我的目标,也就是获得第一份开发人员工作。也就是说,从星期一到星期日,白天黑夜都在编程。
  • 我会将我编写的每一行代码都推送到Github,这是潜在雇主检查你的代码技能和野心的最佳场所。即使我觉得我没有产生值得提交的东西,我也会这样做,只是为了建立起那些让全世界看到的绿色提交历史。

我在https://github.com/charliejeppsson的Github提交历史。

换句话说,我成为开发人员的动力比以往任何时候都要强,我知道如果没有任何学术或职业成就可以展示,我可能永远都不会被邀请参加工作面试,除非我有一个强大的作品集。因此,这就是我接下来要做的事情。

在Demo Day之后的第二天,我开始构建我的第一个自己的Rails应用程序(动力如此强大!)。我有点自大,认为第一个应用程序会花费几周时间完成,因为我已经用Unify应用程序经历了一遍这一切。但我错了。

我花了将近两个月的时间才完成它。在训练营的最后两周中,有很多过程非常快,我没有完全理解它们。我卡在了各种问题上,从令人尴尬的简单问题到有点高级的问题。仅仅配置一个日期时间选择器需要在Stackoverflow上花费几天的时间。更不用说使用Action Cable和WebSockets的聊天功能,我花了大约两个星期的时间才弄清楚它。

但是投入的时间是非常值得的。这个应用程序实际上非常不错:它是我可以为人们演示并感到自豪的东西。虽然有许多绝望的时刻,但我学到了很多。事实上,经历所有这些烦恼让我相信这个训练营可能是一个不错的选择。

如果现在我熟悉所有东西,编写这些东西已经如此困难,那么如果我在第一次做这些事情时没有助教、平台和课程,那么它不会有多么困难呢?在八月底的某个时候,我完成了这个应用程序。当时我回到了斯德哥尔摩的家里,住在我父亲的公寓里,身无分文,感到相当可悲。我尽力利用自怜来不断加强我的编码努力。而这个努力取得了不错的效果。

很快,我开始编写实际的投资组合网站。而这一次,我决定保持简单。所以我制作了一个非常简约的静态网页,可以在上面收集我做过的东西。完成后,我的计划是开始申请工作。但有一件事让我感到不安。记得我之前说过,在加入Le Wagon之前,我对Ruby on Rails有些犹豫吗?好吧,虽然我实际上已经喜欢上了Ruby的简洁和使用Rails的简单性,但我仍然觉得自己在某个地方走了捷径。

在我的投资组合页面上的“技能”部分,你可以找到Ruby、Rails、SQL、Postgres、HTML/CSS、jQuery、Bootstrap、Sketch、Git和Heroku。还有JavaScript。

就是最后一个让我感到不安。感觉像是在撒谎。

如果现在开始申请工作,我可能可以成为一个相当不错的Rails开发人员。但是如果所有的批评者都是正确的,Rails实际上已经过时和即将消亡怎么办?如果我找到了梦寐以求的工作,却发现他们使用了高级的JS技术怎么办?对于自由代码营的200小时和Le Wagon的2-3天jQuery+1天React.js的学习,我将毫无机会。

我大脑中的傲慢部分又对我说:“这里有个主意:如果我也学习MEAN堆栈呢?” MEAN是指MongoDB、Express.js、Angular.js和Node.js,这在某种程度上就像Rails对Ruby的JavaScript等价物。根据LinkedIn和Glassdoor的搜索结果,这意味着我可以将我有资格申请的开发人员工作数量翻倍左右。

我记得加斯(Gus),这个训练营的经理,曾告诉我学习它大约需要一个月的时间。这有多难呢?我想我可以在两周内做到。

这就是我最终陷入了所谓的教程沼泽的原因。

于是我再次求助于我的老朋友Google,以研究学习策略。但几个小时过去了,我仍然找不到适合我MEAN堆栈101需求的在线课程。它们似乎都在专注于一部分,这绝对是深入理解框架的正确方法。但是由于我想在两周内学到尽可能多的东西,只够我能够添加一个新项目到我的投资组合,我没有时间。

那时我发现了完全不同的开发教育维度:YouTube教程。有很多这样的教程。对于我能想到的每一种技术或堆栈,我都可以找到至少五个不错的教程。

最终,我找到了Traversy Media频道和教程系列MEAN堆栈前后端。每个视频20分钟,共10个视频,向你展示如何构建具有用户注册和登录验证的基本RESTful Web应用程序。完美。

Traversy Media - MEAN Stack Front to Back

我立即开始在我的笔记本电脑上编写每个视频。不可思议的是,在短短几天的时间里,我就完成了。我实际上是用完全陌生的技术编写了一个完全功能的Web应用程序。用于后端的Node,用于管理数据库的Mongo,用于前端的Angular,用于将所有内容绑定在一起的Express。

这真的这么容易吗?我现在知道这些东西吗?虽然我很高兴这比我想象的要容易得多,但一种太好以至于不真实的寒颤沿着我的脊椎流淌。

好吧,既然我提前完成了进度,为什么不进一步开发这个应用程序呢?我的想法是将其转变为Medium的克隆版本,只需启用基本的博客文章CRUD操作(创建、读取、更新、删除),就像我们在用Rails做的一个项目中所做的那样。

不过我没有走得很远。我想我只需要添加一些新路由、模型、控制器和视图就可以了。问题是,我仍然在以“Rails的方式”思考,其中“约定优于配置”使得这种功能非常容易和快速地构建。

正如我之前读过和听到的那样,MEAN堆栈遵循相反的口号:“配置优于约定”,这意味着通过放弃一些“魔法”自动化,你可以获得一个更灵活的框架。比如说,直接从盒子里获取与一个特定名称相连的控制器动作和视图名称。当你是一个初学者时,这是一种真正甜美的魔法。

所以,第一次意识到遵循“配置优于约定”的编码方式有多难,这是一个很大的打击。因为它证明了我对整个教程过程过于美好的直觉是正确的。但直到我开始编写非指导的代码,没有Brad Traversy的安慰指导,我才意识到这一点。

所以当时我深陷于对我来说是MEAN堆栈的大泥坑中。这个应用程序还远远不能添加到我的投资组合页面上。它几乎没有任何功能。只有用户可以注册、登录和查看一些静态的Bootstrap设计。

另一个选择是继续通过试错来努力。与训练营不同,我已经太早地摆脱了我的训练轮子,并且可能需要花几个星期在Stackoverflow上才能完成我计划中的应用程序。我没有几周的时间。我本应该昨天就开始申请工作了。具有讽刺意味的是,我发现走出自己设下的教程泥潭的唯一方法,是通过跟随更多的教程,继续深入研究。幸运的是,我在同一个YouTube频道上找到了一位相当不错的教程讲师,他的教程非常好,于是我决定将其作为我的救命稻草。

Travery Media - 构建一个 Angular 2 Spotify 应用

于是,这个原本是 Medium 克隆的网络应用,最终变成了一个利用 Spotify 搜索API的音乐发现应用。

尽管非常辛苦,但在决定尝试学习 MEAN 技术栈两周后,我实际上部署了一个不错的网络应用。这是我的目标。当然,这有点像作弊,但我想,只要我能演示它,并在面试中解释所有部分,无论我是否跟随了教程,都不会有人在意。

突然间,我的作品集里有了三个应用程序,并且我可以将一些新技术添加到我的技能库中。最终,是时候进入我作为开发者的下一个阶段了:找工作。而且,现在马上就是时候了。

第6部分:申请工作

总体而言,我花了大约4周的时间,提交了30个申请,参加了10个面试,得到了3个工作机会,才找到了最适合我的工作。讽刺的是,实际上我加入的是我申请的第一家公司。当然,我可能会称其为巧合,但我认为这更多是因为在开始发送应聘申请之前,我进行了全面的筛选过程的结果。

我必须承认,我认为我在快速找到工作的过程中,运气起了一定作用。但是,就其价值而言,我认为我所遵循的流程教会了我一些关于如何为第一份开发工作寻找职位和公司的有用经验。

我做的第一件事是为有趣的工作设立了一个短列表的电子表格(请记住,我原本是一名无聊的经济学家)。然后,我花了几天的时间在LinkedIn、Glassdoor和Stackoverflow的职位看板上搜寻基于关键词(如Web、开发、软件、前端、后端、Ruby、Rails、Javascript、Angular、Node和Postgres)的职位。

并不出奇地,仅在斯德哥尔摩地区就有数百个工作职位。这些公司的范围从初创企业到数字机构、媒体公司、云服务提供商、游戏开发商,无所不包。

在过去的几个月里,我已经成功地确定了我想从我的下一个雇主那里获得什么。

如果我可以选择任何我想要的工作,我的优先事项大致如下:

  • 我将在整个技术栈上编码,这意味着我将像UX/UI一样做数据库和架构方面的工作,并主要使用JavaScript。React的所有炒作可能与后者有很大关系。正如我之前告诉过你的,就我所知,Rails基本上正在消亡,而JavaScript是未来。
  • 我的学习曲线将非常陡峭,以至于我必须日夜编码才能跟上。所有这些都是为了在最短的时间内尽可能地变得优秀。
  • 我的同事将聪明、有雄心、幽默,而且最好同时拥有这些品质。
  • 公司将是一家高速增长的初创企业,具有有意义的使命和与区块链、人工智能和/或可持续性相关的产品,或者是一家拥有这些项目的顶尖数字机构。
  • 我将得到公正的薪酬。

就是这样。对于一名新手来说,这些要求相当高。但请注意,高薪不是标准之一(在拥有6个月的专业经验后也不是)。也许我在说显而易见的事情,但如果你从完全不同的领域转型到纯开发角色,我认为知道你之前的薪资并不重要。

例如,我知道我在金融行业的市场价值约为每月5000美元。但是意识到软件开发是一种根本不同的手艺,我将我的目标定在了每月3700美元,但愿意接受尽低至每月3000美元(这显然比瑞典平均工资约4000美元低得多)。

考虑到上述所有标准,我一个一个地查看招聘广告,将我喜欢的添加到我的短列表中,而将我不喜欢的丢弃。过了一会儿,我注意到了一些模式:

首先,大多数公司在纸面上需要的技术技能和经验要比我能提供的多得多。这并不令人惊讶。通过自己的研究和完成的训练营,我了解到“初级开发人员”职位正在消失。

许多公司认为在高级开发人员的时间上耗费时间指导新手的成本太高了。这就是为什么他们更喜欢雇用高级开发人员,他们的需求非常高,但供应非常低。

这里的一个大悖论当然是,如果没有人致力于培养和教导初级开发人员,我们如何能够弥补市场上高级开发人员的短缺呢?尽管如此,意识到这是当今行业的工作方式,我也意识到,我必须申请我没有资格的职位。

其次,我发现,越热门、越大的公司越有可能包括一些与计算机科学相关的学位和专业发展经验的要求。我认为,当然,一个不错的作品集和求职信可能会让你与需要“Rails 忍者”或“React 超级巨星”而不是像我这样的新手的公司获得面试。

但是,如果招聘广告明确要求3年以上的专业JavaScript经验和计算机科学相关领域的硕士学位,那么我得到面试的机会可能非常渺茫。

第三,几乎每个招聘广告都提到了React。尽管在网上存在着对它的所有炒作,但它的需求仍然非常之高。

如此之高,以至于我决定每天花几个小时构建一个小型的React网络应用,前端使用React.js,后端使用Rails,以便将其添加到我的作品集和简历中。

为此,我主要使用了Le Wagon训练营中的一堂React课程的笔记,但是如果你有兴趣学习它,你不会难以找到免费的指南,特别是freeCodeCamp的指南。除了我可以在简历上写上React这个技能,这个经历最大的好处就是让我习惯了使用组件来构建Web应用(与Rails使用控制器和视图不同),并且熟练掌握了props和state的使用。

很可能你迟早需要和某种JavaScript框架交朋友,无论是React、Angular、Vue、Ember还是其他无数的JavaScript框架,这些概念都会派上用场。

有了以上这些新的见解,我可以开发和完善我已经拥有的标准来决定是否将某个职位添加到我的短名单中。很快我就列出了50个工作机会的清单,然后开始真正地开始投递申请。作为一个曾经在数百家公司申请和面试过的人,这似乎是迄今为止最容易的部分。

这可能与我是那种给所有人都写一封通用求职信的人有关。我知道你在想什么:你曾经和你的所有导师/老师/招聘人员谈论过这个问题。但是,这只是一份求职申请。不是你最好朋友的婚礼演讲。

很可能招聘人员不会花超过一分钟的时间去看它。所以,你提到公司赢得的奖项,或者去年YoY的增长,或者你对他们文化比竞争对手X更好的完全推测性的观点都无关紧要。

重要的是,你能够以一种引人注目、数据驱动、语法无误的方式在文本中表达你值得他们花费一小时的时间与你见面的原因。如果你想看看我的,就写信给我,我会把它发给你!我得到了一些非常令人满意的反馈,只是这么说...

接下来我做的事情是更新我的简历和LinkedIn个人资料。在这里,我无法强调关键字的重要性。确保你所知道的(或想要假装知道的)所有技术名称都包含在两个中。这样,你就更有可能出现在搜索结果中(同样,在这里,只要问我,我就会把我的简历发给你)。

在发送了所有的申请之后,大约过了一个星期,我没有听到任何公司的回音。实际上,这是我需要休息的好时机。我花了一些时间重新联系我忽略了几个月的朋友和家人,赶上了我的新热情。

然后我开始收到回复。

第七部分:面试

第一个回复来自一个非常年轻的初创公司。它基本上只有两个人,一个前银行家的CEO和一个资深开发者CTO。邮件是从CTO那里发来的,他邀请我参加我的第一次开发者面试。

我知道正面回应总是在拒绝之前,所以我试图保持冷静,不要太激动。

但是,仅仅是这个人,一个有着10年以上经验的资深开发人员,看过我的LinkedIn个人资料、求职信、简历,以及最重要的,我的Github个人资料上的作品和代码,仍然认为我能为他们写出好的代码,这让我感到非常自豪。

尽管我认为该公司实际上并不符合我所有的标准(主要是由于小团队和薪水前景不佳),但我立即回复并接受了邀请。

尽管我到目前为止做了很多努力,但我没有花太多时间准备技术面试。但从我听到和读到的,这本来应该是一种艺术,许多人会花数月的时间准备。

往往情况下,由于缺乏基本计算机科学理论的知识,曾经参加过编程营和自学的码农在技术面试中会失败。就像计算机科学专业的毕业生经常因为缺乏使用现代技术构建应用程序的经验而失败一样。

但由于我时间和金钱都不够,我想这也是我必须通过实践学习的东西。我不能再拖延面试阶段了。就像我在学习金融类型的面试时经常遇到挫折一样,我知道这些挫折对我最终找到如何赢得面试至关重要。为什么技术面试会有所不同呢?

所以我接受了邀请,几天后我走进了他们办公室的大堂。他们在接待台等着我。

这个地方很破旧。如果你看过《办公室》,你会觉得自己刚刚走进了Dunder Mifflin纸业公司的办公室。他们告诉我这曾经是一个大型审计公司的办公室,现在被改造成一个便宜的临时联合办公空间,直到计划的翻新完成。我们走进了一个会议室,坐在了一个大木桌旁。

他们开始告诉我很多关于他们自己和公司的事情。他们刚刚发布了一个新的Medium类应用程序的测试版,用于知名的生活方式作家,并从他们的种子轮中筹集了一些朋友和家人的钱。但他们仍然处于预发布阶段,绝对没有收入。

在大约一个小时感觉更像是销售推广而不是面试之后,CEO离开了,我被告知CTO和我将继续技术面试。我的心跳了一下。从我读到的所有技术面试的东西来看,我期望他们会向我提出各种各样的脑筋急转弯、编码挑战和关于复杂数据结构的问题。

但没有一个。相反,CTO开始问我所有这些非常开放性的问题。

比如我喜欢什么技术和框架。如果我能选择学习任何新技术,它会是什么。我对ES6(2015年JavaScript更新,引入了许多新的酷东西,如箭头函数、Promise和常量)的新语法有什么看法。

我们进行了愉快的谈话,大约持续了另外半个小时。但随后出现了重大的反弹,当CTO决定把所有的牌都放在桌子上时。他告诉我,由于财务紧张,他们现在只能提供一个为期6个月的实习机会,薪酬只是象征性的(实际上几乎没有薪酬)。但如果实习表现好的话,他们非常愿意提供股权和不错的薪酬。

“如果公司那时还存在的话。”我差点就这么说出口。

虽然他们当场给我提供了一个实习机会,我很受宠若惊,但我立刻意识到这不是我在寻找的公司和产品。尽管如此,我没有立刻拒绝他们。我想,一份工作还是一份工作,以后在与其他公司谈判时还可以派上用场。

虽然我对工作和技术面试没有什么收获感到失望,但我仍然收到了一份工作邀请,这为我接下来的面试增加了很大的自信。

第二个回复是来自一家稍微大一点的初创公司,名为Teamtailor。他们是一家总部位于斯德哥尔摩的公司,旨在将招聘和雇主品牌行业数字化,该行业目前由相当非技术性的招聘顾问和人力资源经理主导。

这不是一个坏主意。虽然以“招聘”和“人力资源”为开头的招聘广告有9天会让我望而却步,但这家公司的某些地方吸引了我。

通过我相当详细的调查,我发现他们成立了大约4年,有30名员工,业务覆盖4到5个国家,有600个客户(企业),收入增长率超过100%,并且利润还有所增加。这一切都不错。

更重要的是,他们的Instagram帐户显示了他们的办公室:斯德哥尔摩最好的区域Södermalm中间的一家布鲁克林式的古老红砖啤酒工厂。

这一切都指向他们处于公司生命周期的最佳状态。年轻到足以让你感觉自己正在一起旅行,有非正式的文化和很多的自主和成长的空间。但仍然足够老,可以在学习新东西时依靠一些结构。

无论如何,还是CTO给我写信了。经过几次来回消息后,我们约定了几天后在他们的办公室进行第一次面试。他告诉我,他和另一位联合创始人将与我会面。

甚至在与他们见面之前,我对整件事情的感觉就非常好。这很糟糕。至少在我的头脑中是这样。因为现在我进入了面试,可能比他们想要我的还要想要他们。爬上古老的啤酒工厂的楼梯后,我终于到达了他们的办公室门口,并进入了一个相当特殊的场景。

首先,一个大的粉色海报就在我面前,白色粗体字母在尖叫:“Teamtailor是欧洲最热门的100家初创公司之一-Wired Magazine。”在我的左边是一个起居室,有一群20多岁的人在一个巨大的屏幕上玩FIFA。在我面前是一个更大的房间,我最靠近的桌子上坐满了开发人员,他们在大屏幕上轻松地开发着。到处都是从Sonos扬声器中脉动出来的轻柔的嘻哈节拍声。

就在那一刻,我对他们作为一家人力资源公司的任何偏见都消失了。这个地方真是太棒了。该死。

你可以说很多关于典型的硅谷模仿办公室的坏话。但在我看来,即使这种办公室是最差的,它仍然比典型的企业对应物好一千倍。所以对我来说,这是天堂。但这对我试图在面试中保持冷静来说是真的糟糕。

一个高高瘦瘦戴着棒球帽的家伙冲我微笑,并从他的椅子上站起来迎接我。他就是CTO。我们走进一个玻璃墙和绿色人造草覆盖的会议室。另一位联合创始人加入了我们,我们开始了面试。

与我的上一次面试不同的是,他们开始告诉我我所处的流程。这次初步会议的目的主要是更好地了解我。如果我进入下一步,那么第二步将是技术面试。我听到这个消息非常的宽慰。我真的很有冒名顶替的感觉。

第一个问题或多或少是经典的“为什么想成为开发人员?”他们告诉我,最重要的是,他们的眼睛被我的求职信和简历吸引住了。找到商业化思维的开发人员很少,找到具有商业开发和金融经验的商业学位开发人员甚至更少。那么,为什么我决定离开原来的职业追求这个完全不同的职业呢?

从面试经验中,我了解到,在这些情况下,诚实几乎总是最好的方法。所以我基本上告诉了他们我在这篇文章开头告诉你的内容,我讨厌销售,喜欢技术,并想转向创意方面。

从这个时候开始,谈话就有了自己的生命。有一次,我告诉他们,如果我知道现在所知道的事情,我可能会选择学习计算机科学而不是商业。出乎我的意料,CTO对这个评论感到惊讶。他笑了笑,问我为什么。

我犹豫了。我意识到这是我说的那些我认为他们想听到的话之一。他放了我一马,并告诉我,他也是一个自学成才的开发人员。他在大学里唯一学的一门课程是电影研究。我有点震惊。但这还不是全部。

事实上,公司的10名开发人员中没有一个人拥有真正的计算机科学学位。其中一些人参加了为期一年或两年的一些私人Web开发课程,但大多数人实际上都是自学成才的。

从这个家伙那里听到这个消息让我非常高兴。他刚刚证实了我前同事桑德拉一年前告诉我的一件事情——你不需要学位就可以成为一名优秀的开发人员。太好了。

谈话进行得非常顺利,直到最后几分钟,他们问我关于我的作品集的事情。只有其中一人看过它,他甚至说他只是“扫了一眼”。我被面试的进展吸引住了,告诉他们我很乐意演示我的应用程序。他们的脸立刻亮了起来,坐直了身子,点头示意我继续。我即将意识到我犯了一个大错误。

唯一一个几乎足够好展示给这些人看的应用是我在 Bootcamp 后连续一个月制作的那个,但我至少一个月没有碰过它了。我把 MacBook 连接到面前的大屏幕上,在浏览器中输入了 URL。

第一个尴尬的是它实际上需要 20 秒才能加载主页。我喉咙干燥,试图解释我正在使用 Heroku 的免费版,这意味着每当与域名相关联的服务器没有收到请求超过一个小时时,它就会进入“休眠模式”,从中唤醒需要很长时间。我最不想让他们认为我的应用很慢。

当它实际上加载后,我花了一些时间解释产品背后的理念。它基本上是一个创建虚拟队列的服务,允许像航空公司、银行和医院这样的组织在线上设置队列,而不是在它们的实体位置。

然后是第二个尴尬的事情。当我尝试使用 Facebook 认证登录我的帐户时失败了。我太晚才意识到原因是在获取新 SSL 证书后我没有更新 Facebook API 设置中的 URL。所以 Facebook 期望从 http:// 域接收请求,而我的来自 https:// 域。初学者的错误。

我最终设法手动登录,没有出现任何问题演示了一些主要功能。但是最尴尬的事情发生了。我似乎无法让应用程序的重要组成部分工作:聊天。当我点击聊天链接时,我进入了聊天页面,但看不到任何我可以聊天的虚拟用户。

然后我基本上放弃了。这是我真的不应该做的。因为仅仅几个小时后,我会意识到聊天完全正常。我的用户帐户只是没有注册任何队列,这就是为什么我无法看到任何用户进行聊天的原因。

我们道别,他们告诉我他们会保持联系。我离开面试感到愤怒和失望。为什么我没有为演示做更好的准备?直到最后一部分一切都进行得如此顺利。

尽管如此,不到一个小时,戴维就再次写信给我。他告诉我我已经进入了下一步的过程。我简直不敢相信,也不能更开心。但当然,也有点害怕接受我的第一个真正的技术面试。

然而,最终,这次第二次面试也不像我在网上读到的所有恐怖故事那样。在邀请电子邮件中,首席技术官告诉我,我将与他们的两名高级开发人员会面,他们只是想让我更全面地展示我的一个应用程序以及其背后的代码。

主要目的是了解我对后端框架(Rails)的掌握程度以及我能够快速学习前端框架 Ember.js(此时我甚至没有听说过它)的能力。

我立即知道演示应用程序必须是我使用 Rails 和 React.js 构建的应用程序。有两个原因:

  • 它是基于 Rails 集成了 JavaScript 框架构建的(就像他们的堆栈一样),
  • 我在不到两周的时间里学会了我使用的所有 React 知识,这将给他们一个很好的感觉,即我可以多快地学会 Ember。

这个案例是一个完美的例子,说明当你构建你的作品集时,实际上不要把所有鸡蛋放在一个篮子里,而是尝试几种不同的堆栈,这样实际上会产生回报。

很快大日子来了,我又回到了他们的办公室,来到了另一个他们的假草地会议室。我开始展示应用程序的 UI 流程。

我浏览到 t he web app 上,很快工作标题“AppHunt”以大胆醒目的紫色字母显示在屏幕上。它有点像 Product Hunt,但更像一个专门为应用程序而设的市场。因此,任何用户都可以浏览主页上的应用程序进行销售和购买。如果他们创建了帐户并登录,他们还可以搜索和过滤应用程序项,对其进行评分,并在评论字段中写入内容。就是这样。

但对我来说,幸运的是,它足够了。两个高级开发人员显然非常喜欢我向他们展示的东西,他们向首席技术官竖起了大拇指。他们后来告诉我他们特别喜欢的一些事情:

  • 实时功能,例如即时更改评论、搜索结果和评分,表明我知道如何使用状态和属性,这在任何 JavaScript 框架中都至关重要。
  • 我使用 JBuilder 对前端和后端之间的 JSON 请求进行序列化。
  • 我使用 Elasticsearch 进行搜索功能。
  • 他们喜欢设计,我在开始编码之前自己用 Sketch 制作了草图。
  • CSS 代码没有很好地进行上下文样式或嵌套。相反,他们发现其中很多都可以在整个应用程序中重复使用,这很好。但他们告诉我,如果我也遵循所谓的 BEM CSS 命名约定,那么他们会更印象深刻。

直到第二次面试几周后,首席技术官才与我联系并提供职位。在来回讨论后,我们达成了一个试用期为 6 个月的协议,月薪为 3,300 美元,当我达到生产水平时,将增加到我的目标 3,700 美元。

我当场接受了并于下周开始了我的新工作。✌️

RIP Michael Scott ❤️在整个 Teamtailor 过程中,我还面试了其他 4 家公司。最值得一提的是瑞典金融科技现象 iZettle,这是一个包含几种不同金融产品的综合体,但他们的无线刷卡终端可能是他们最出名的产品。

由于这个成功的初创公司正在接近独角兽估值,我会发现他们对经验和技能水平的要求明显高于我此前面试的较小型初创公司。我在更为严格的招聘过程(5轮面试!)和更难的面试问题中看到了这一点。

我能够得到面试的主要原因,我想很大程度上是由于一个朋友的推荐和我所毕业的商学院的名字。所以我可以说我有点靠关系混进去了。但是,我显然没有为他们做好准备。

就像其他公司一样,第一轮面试都是虚浮的软技能。但是这一次更多是“人力资源”方面的问题。你为什么想成为开发人员?你喜欢使用哪些技术?你的优点和缺点是什么?等等。很简单。

然而,第二轮面试将成为一次相当痛苦的经历。一切都是从我坐在一个会议室里和两个网页开发人员聊天开始的。我们重复了整个“相互了解”的谈话,我变得相当自在和自信。然后我遭到了人生中最大的打击。

突然间,对面的那个家伙递给我一张巨大的白色A3纸和一支笔。他告诉我,他们想让我画出以下场景涉及的数据流和过程的草图:

“一个小商家拥有iZettle账户并使用他们的刷卡终端。在他/她自己的客户使用终端进行购买后,他/她想要登录Web应用程序和/或移动应用程序查看交易。”

这真的让我措手不及,但我犹豫地点了点头,接受了这个挑战。然后那个人说了些什么:“我们出去喝杯咖啡,5分钟左右我们会回来让你解释你的想法。”

5分钟!这是个笑话吗?我真的无法判断。当他们离开时,我认真考虑了一下,这是不是一些恶作剧问题,我应该意识到这个任务太大了,无法在这么短的时间内做好。但是时间已经不多了,这是一个太大的风险。所以我决定试试。

回过头来,我意识到这是一个系统设计问题,意味着他们想让我基本上只是将Web应用程序和移动应用程序如何向某些API发出请求并将它们连接到服务器和数据库(如果你想提高你的系统设计技能,我真的建议这个YouTube频道)。

但我什么也没做。在我的恐慌状态下,我跳过了几个步骤,开始试图勾勒用户帐户的数据库模型,包括表、列和外键(我假设他们使用关系型数据库)。当我完成这个任务时,我只剩下大约30秒的时间来勾勒体系结构的其他组件。我如此紧张,以至于我开始质疑API和服务器的实际角色。这不是一个好兆头。

5分钟过去了,两个开发人员回来了,看到的是一个几乎不值得5岁孩子画的草图。我基本上只画了三个圆。一个在左边,代表数据库,另外两个在右边,代表Web和移动应用程序客户端。

当然,我惨败了面试。这也是我没有进入第三轮面试的原因。但是,他们很容易地让我失望,告诉我他们喜欢我,让我在有一两年经验后再申请。

整个经历让我感到失望,因为我认为我没有机会展示他们我的实际技能。虽然我有点明白,在纸上说明系统架构的价值,但我真的认为,在实际练习中展示你的技能,例如编码挑战或应用程序演示,会更有价值。但是,每个失败都有一个教训,对吧?

总之,在我寻找工作的4个星期中,我参加了6家公司的11次面试,其中3家给了我offer。尽管有几次受挫,但这真的是一次令人惊喜的经历。如果让我命名一个最大的回报(除了得到我的梦想offer),那就是我变得可以自如地与开发人员谈论软件。如果你像我一样遭受冒名顶替综合症的困扰(查一下,这是个东西),那么没有比这更好的治疗方法了。

另一个关键的经验教训是,在我的11次面试中,只有一次需要实际的理论计算机科学知识。没有关于复杂数据结构的问题,没有狡猾的脑筋急转弯。只有一个系统架构问题。其余的100%集中在实际或软技能上。因此,除非你申请Google或Facebook等华丽的软件工程职位,否则我绝对建议集中精力学习实际技能,稍后再学习理论知识。

最后,我想强调的是,我不认识我最终被雇佣的公司中的任何人。我知道有很多内容声称,强大的个人网络是获得第一份开发工作的最重要因素。尽管这在统计上可能是正确的,但是没有推荐人的冷静应聘绝对不是浪费时间。

第8部分:我今天在做什么

写这篇文章时,我已经在Teamtailor工作了六个月。时间过得比我想象中快得多。我几乎没有注意到这里通常是漫长、黑暗和冰冷的冬季,这是一种需要忍受的折磨。我是一个团队中的一员,团队共有12个人,除了一个设计师外,其他人都是全栈Rails和JavaScript开发人员。有些人有10年以上的经验,有些人只有几年,但只有两个人拥有真正的学术技术学位,其余的人都是自学成才。

我的日常工作是在我们的Rails/Ember平台上进行开发,每天都试图让应用程序比早上发现时更好。产品本身是一个招聘网络应用程序,可以让公司轻松地建立和管理自己的招聘网站,完全不需要任何编程技能。

https://career.teamtailor.com

这个职业网站背后的应用程序有两个主要维度:

  • 它让用户处理用于吸引人才的雇主品牌,包括职位发布、社交媒体内容、博客、图片、视频和gif等。
  • 它提供了一系列工具来处理流量和申请人——例如跟踪候选人、聊天、发送电子邮件和短信、使用测试评估候选人、设置自动触发器以在候选人从一个阶段移动到另一个阶段时执行某些操作,以及在所有主要职位委员会上推广工作广告等。

我们是如何工作的

在我们的产品团队中,我们尽最大努力遵循ScrumKanban和结对编程的敏捷原则。实际上,对我们来说,这意味着我们按照循环进行工作,将新功能的实现分解为每次运行6周的项目。每个项目都由两个开发人员组成,负责在这6周内推出新功能。这些开发人员不断部署他们的工作,基于预定义的Trello面板中的每个计划功能的更小任务。

当然,我们不仅仅是构建新东西。我们也维护应用程序。在这个维护的核心中,我认为有一个相当不寻常的例程:**“技术当班”职责。**这意味着每个开发人员轮流担任一个星期的位置,协助我们的用户和支持人员使用Intercom

如果你现在认为这听起来很烦人和令人沮丧,那就是这样。直到我们决定每个技术当班人员在支持任务期间暂停他们的其他项目,一切才发生了改变。当我不再觉得在Intercom上花费的每一分钟都是从我的项目和期限中窃取的时间时,我真的开始享受它了。

想想看——当你花时间倾听时,你就会意识到,你基本上拥有一支志愿的质量保证测试人员军队,随时准备就绪,为产品的实际UX和用户痛点提供即时反馈。考虑到这一点,可以说,我从我的技术当班周中学到的东西和我从任何其他项目或bug中学到的东西一样多。

最后,在每个6周的循环之间,我们需要两周时间来共同努力消除我们Trello bug面板上的所有错误。我们还利用这两周时间开发我们自己想在应用程序中看到的新功能。每个开发人员都有机会在我们每8周举行的共享提案会议中提出这些想法,这对于那些不仅想通过新的酷增量来解决难题代码问题,而且还想通过增加到现有产品中的新功能来解决业务问题的人来说,这真的很有帮助。

我到目前为止所做的事情

尽管应用程序包含了许多功能和技术,最初对我来说完全是陌生的,但我在第二周就被扔到了中心位置。入职过程——即我有一位资深开发人员向我展示绳索——只持续了五天。在第一周之后,理论上,我应该是更加自主的。

这意味着我应该理解平台的架构、开发工具包、团队的工作流程、我们的样式指南、如何为用户和同事提供技术支持以及其他开发、测试、调试、审查和部署代码的内部常规。换句话说,对于一个刚刚从bootcamp毕业的人来说,这是很多新的东西。

如果你现在因为认为我在一周内学会了所有这些而惊慌失措,那就放松一下。我肯定没有。直到几个月后,我才开始对大多数事情感到舒适。随着时间的推移,其他人会注意到,并且会信任我越来越多的责任。从那时起,我参与了一些我曾经做过的最令人兴奋和具有挑战性的项目。

我的候选人档案,灰色框中包含一些获取的社交媒体URL。

第一个严肃的项目是更新我们用于获取在我们应用程序上注册的用户信息的方法,只需要一个电子邮件。我们已经与第三方API集成了这个功能,我们会请求获取数据,例如全名和社交媒体资料和头像图片的URL。

然而,由于我们发现获取的数据经常是不正确的,产品团队已经决定切换到另一个提供商。由于它将让我接触到应用程序的几个关键区域和数据流,所以这是我接下来的完美步骤。

要实现它,我必须从客户端层的最前端获取电子邮件,然后了解数据如何从Ember前端通过适配器和序列化器传输到Rails后端,并最终存储在数据库中。

一个关于如何使用召唤行动按钮的示例。

我第二个自己的功能是开发我们称之为“召唤行动按钮”的功能,这意味着我们允许我们的用户在我们的编辑工具中向他们的职业网站添加自定义按钮。例如,我们希望让他们重定向到某个职位开放的页面、某个部门或完全外部的 URL。这实际上比我预期的要容易得多。大多数后端架构已经就位,所以我所要做的就是创建几个新的 Ember 组件并将它们添加到职业网站编辑器中的其他选项中。

我们新的自动化候选人测试功能的模态表单。

我工作的第三个功能是使我们的用户能够与外部评估提供商集成,这意味着他们将能够将候选人发送到像 Hackerrank 这样的测试平台。当他们完成测试后,结果将通过我们和提供商 API 之间的集成自动发送。这是一个大项目,所以我主要是担任资深开发人员的助手(我们团队的 Ember 大师)负责该项目。尽管如此,它教会了我很多关于如何正确设置 API 集成和使用触发器自动化工作流程的知识。

在 Ember.js 中重写的“员工”部分的页面之一。

我的第四个项目到目前为止是最大的,好的和不好的是我最终几乎是独自完成的。整个应用最初是用 Rails 构建的,大多数视图已经逐个使用 JavaScript 和 Ember 重写。只有我们应用的主要部分之一仍然只有 Rails 视图。这是所谓的“员工”部分,基本上是创建、编辑和删除用户帐户的主要目的地。所以我的 Ember 翻译必须是完美无瑕的,这让我非常紧张。由于此时我已经加入团队约三个月了,我觉得是时候停止像讨厌的实习生一样行事,开始更独立地工作。这意味着我尽可能少地打扰其他人,问尽可能少的问题。这样做的好处是我对自己完全独立地解决现实世界软件问题的能力充满信心。然而,不好的是这使我非常缓慢,花了整整 6 周才完成了超过 2000 行新代码的完全重写。

最终,这实际上甚至证明了我没有得到 CTO 和我同意的加薪的主要原因,因为我没有达到与团队其他成员相同的生产水平。尽管当时这很糟糕,但我现在意识到他的立场是完全公正的,并且这教给了我一个重要的教训。在敏捷软件开发的世界中,独行侠是不行的。团队合作是找到生产工作流的重要组成部分。

第五个项目是迄今为止最后一个,我们实际上刚刚发布了它。这是我们的新功能,用于处理新兴的欧洲数据隐私法规(GDPR)。对于我们来说,这意味着构建工具,使我们的客户的候选人可以从我们的数据库中删除其个人数据,并且也可以让我们的客户请求候选人允许存储和继续存储其数据。

听起来相当简单吧?但实际上并不是。我认为主要原因是我们不能专注于应用的单个目标。相反,该功能要求我们在各个地方添加东西。一个地方的通知,另一个地方的警告标志,第三个地方的搜索过滤器和批量操作,以及各种新的电子邮件发送操作。

自我加入团队以来,我第一次被与我共同创始人的资深开发人员配对。因此,我觉得向他展示自己自第一周起六个月来所学到的知识是非常重要的。我的试用期即将结束,他们很快就会做出决定,看我是否足够好以保留在团队中。通过这个“简单”的项目,我认为证明这将是易如反掌的。

然而,奇怪的是,我认为复杂性使我们的双人编程会议变得更好了。在设计每个架构块时,有太多的用户场景需要考虑,因此我们被迫讨论、扭曲和转动每个新的代码块。这是我第一次不仅要考虑 UI/UX 维度,还要考虑广泛的法律考虑因素,如果我们没有正确实现它,可能会给我们的用户带来很多麻烦。

所以我们一起编程很多,这非常棒。当我编码时,他提供了很多好的反馈,大多数都使我的代码更加简洁。但与那个第一周的入职不同,我实际上也能够对他的代码提供反馈,提出建议并提出问题,这确实使他的代码变得更好了。

当你处于像我过去一年那样的激烈开发状态时,我认为很难量化你的技能在任何给定时刻的提高程度。因此,能够给这个有着 15 年编码经验的人提供建设性反馈,真的为我打下了基础。

顺便说一下,我最近才意识到我的试用期雇佣合同被延长了。从现在开始,我是一名常规全职员工,薪水与我六个月前最初要求的相同 😃🎉。

我在工作中 😎。

第 9 部分:成为开发人员是我所做过的最好的事情

你可能已经明白了,我热爱编码。

我喜欢通过定量问题解决不断推动我的智力极限。

我喜欢它为我提供了一个创造性表达的出口,无论是从 UI 到系统架构。

我喜欢它为每个现实世界的问题提供了成千上万的不同解决方案。我喜欢编程不仅容忍我的完美主义,而且实际上要求完美主义者在其中存在,并惩罚他们的缺席。

我喜欢它把我置于珍视真诚和透明度胜过闲聊和礼貌的人群中。

我喜欢,在我内向的日子里,它让我戴上耳机,卷起袖子,深入另一个维度一段时间。

我喜欢它总是有新的东西让我学习,它要求我成为一个终身学习者,与许多其他停滞不前的职业不同。

但最重要的是,我喜欢编程让我感到未来是无限的。

几周后我就要27岁了,我不知道未来会带给我什么。三年后,我可能仍然像现在一样,在同一家公司写代码。我可能是一个领导开发者。我可能是一个产品所有者或经理。或者我可能完全不同。

从阳光明媚的天堂远程自由职业。在某些颠覆性的区块链上开发去中心化的应用程序。设计机器学习模型来应对全球变暖。为探险到火星的探险队编写宇宙飞船算法。或者构建自己的产品。

在我开始编程之前,以上所有情况都似乎完全疯狂。

在最好的情况下,我的以前的金融工作让我有一点满足感,那就是做了一份充满上升趋势KPI曲线的厚厚的PowerPoint演示文稿。而我当时能想到的最好的未来情景是,在某个上市公司投入十年的时间,在某个投资银行、私募股权公司或管理咨询公司工作100小时一周,在那些关心金钱和声望胜过尝试做些有意义的事情的人中度过自己的日子。这让我感到害怕。

今天,没有一个可能的未来情景能让我感到害怕。仅仅这一点就让我确定,我在过去三年中蜿蜒的旅程有了目的。

虽然我投入了如此多的时间和精力走了一条没有出路的职业道路,但我知道我很幸运,在23岁时就已经意识到了这一点,并有奢侈品去停下来,环顾四周,追求我更有激情的事情。

所以无论好坏,我想这是我所有经历的总和,把我带到了今天的位置。在这个位置上,我成功地找到了很少有人能找到的东西——一份我热爱的工作。对此,我比言语更感激。

恭喜你!既然你已经读完了这篇非常长的文章,那么你一定和我一样疯狂。我撰写这篇文章的初衷有两个:处理我过去三年的失败和成功,并激励其他人走上类似的道路。我认为第一个目的已经完成了。所以如果你有任何问题或反馈,请务必与我联系!可以在下面的评论中留言,或发送邮件至charlie.jeppsson1@gmail.com

译自:https://medium.com/free-code-camp/how-i-landed-a-full-stack-developer-job-without-a-tech-degree-or-work-experience-6add97be2051

版权声明:本文内容由TeHub注册用户自发贡献,版权归原作者所有,TeHub社区不拥有其著作权,亦不承担相应法律责任。 如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

点赞(0)
收藏(0)
一个人玩
先找到想要的,然后出发

评论(0)

添加评论