▎本文系译文,我的软件开发入行经历非常有趣 —— 我一开始其实是厨师。

我在高中时就喜欢烹饪和烘焙,用不同食材的搭配去做出美味的食物,就像个科学怪人。我的家乡在爱尔兰,我的第一份工作也在那里,这是我第一次真正在厨房为人们提供食物,当然还有数不清的盘子要洗。

一位前辈教了我如何制作香蕉太妃派,又简单又美味,让我感到惊喜。当时,我开始在在家中制作些小点心赚取外快。

那时候我从学校搬了出来,在搬到新住处后,我在工作的餐厅和城区的家之间往返很不便。于是我决定在餐厅做兼职,另外找一份咖啡店的工作。

同时打两份工有时会让人疲惫不堪,我还要兼职烘焙,希望开家小面包店。那段时间我很辛苦,要在餐厅上早班,然后在咖啡店上晚班。在我回家的路上,我的朋友会帮忙做一些吃的,他正在学做饭,时不时问我手边的食材可以做些什么。

我当时绞尽脑汁地在想,比起发短信或者打电话,或许我可以直接做一款 app,当我的朋友输入食材名称,就能自动跳出来相应的食谱。这能有多难呢~

于是我就开始学习如何构建一款 app。

从厨师到开发者

那是 2014 年夏天,我很快意识到自己甚至不知道从何入手。我应该学习哪种语言?我应该在哪个平台上操作?Web 还是移动端?什么是前端和后端?天呐!

我随大流报了个 Code Academy(编程学院),开始学习 Web 开发,以及开发者的思维模式。这为我打开了一个新世界!(好吧,可能并没有什么特别的,但是你应该明白我的意思。)

胡乱摸索和尝试构建静态网站,让我们对移动 app 及其构建方式感到疑惑。我参加了一个 Udemy 在线教程学习 Java,并在 Android 上进行操作。一开始真的很难,让屏幕显示「Hello World」是让我颇有成就感。

但是我非常想学习如何编码,所以奋力前行。

完成 Java 课程后,我构建了自己的第一个 app,并将其上架到 Play Store。(虽然它并不是给我朋友使用的应用,哈哈!)

我感觉还有很多东西可以学习,不想只停留在移动设备上。我的脑海里浮现出各种各样的问题,比如「我如何连接到其他设备?」「什么是服务器?它们的功能是什么?」「什么是云……为什么称之为『云』?」等等。

所有这些问题都可以通过 Google 找到答案。因此,我给自己设下了一个任务,学习有关服务器的知识以及如何针对服务器编写代码。我开始采用 PHP 构建简单的后端应用,从移动测试应用、Web 窗体和 curl 命令获取数据。

这个时候我开始感觉自己入错行了。我学习和构建的东西越多,我对烹饪的兴趣就越少。

我想成为一名开发者。我想创造出与众不同且具有创新性的事物。但是我没有计算机科学专业的学位,也没有全日制学位(我大二就辍学了)。但是我确实想成为一名开发者。

我花钱参加了 Java 认证,希望自己的简历能被看重。尽管第一次失败了,但是第二次通过了。我非常开心,这可能是我成为一名真正开发者的敲门砖!

开始求职

我把这份认证放入自己的简历中,然后发到了招聘网站。但是一无所获……「我们需要的是一个有学位的人」「一个有经验的人」「一个有硕士学位的人」。我开始认为自己没什么「竞争力」。虽然我感到有些沮丧,觉得自己没有学位、也没有钱去取得学位,所以永远无法找到工作,但我决定在 Udemy 上学习更多的课程。

我把从 Udemy 学到的东西一股脑儿都写到简历中。我为自己的努力感到骄傲,为什么不把它们放在简历里呢?功夫不负有心人,我接到了爱尔兰一家 IT 咨询公司的面试。我的梦想成真了!

我怀着激动和忐忑的心情进入了另一个世界。我希望做好这份工作,我总是主动要求多做些事情,并参与更多的项目。我负责将 PHP 应用从本地迁移到云。某种程度上算是学习!这些应用必须更新为 PHP7,我们需要实现 DevOps,而我首先需要了解 AWS。

我买了一本叫做《The Phoenix Project》的书来了解 DevOps,还买了 ACloudGuru 的 Developer Associate 课程来学习 AWS。我爱上了云和 DevOps。它们太有意思了!在花了很多时间来学习所有与工具有关的知识后,项目变得容易很多,并最终取得了成功。我们不仅成功迁移了应用,还创建一个框架,框架中规定了相关的步骤,便于我们以后遵循这些流程来进行迁移。

就这样,我们建立起了一支创新团队。我们希望通过提出创新的想法来让办公室更智能。我负责收集智能桌台预订服务构想所需的堆栈:这是我们办公室的一个实时数据馈送,它将向员工展示带客户进来的最佳时间、员工自己进来的最佳时间,或者他们是否应该待在家里并避开通勤。

构建后端时,我发现我们需要花费大量时间来为数据更改和使用流创建侦听器。我们计划使用 云函数并通过 API 网关与它们连接。所以我开始寻找可以节省时间的框架。

而 Serverless Framework恰好派上用场!

向无服务器开发过渡

我对 Serverless Framework 一见倾心。我只需把精力集中在代码上,就可让应用快速投入运行 —— 在人们使用的同时,我们可以不断开发和实现自己的构思。

我反复观看了 YouTube 频道 FooBar 提供的所有内容;我强烈推荐大家采用 Serverless Framework。我掌握了 Marcia 介绍的所有知识,并且发现自己在构建需要的内容时越来越轻松。

最后,我构建出了下面这个简单的小型架构:

使用 Serverless Framework,我为用户创建了一个完整的流程来申请桌台并实时查看变更:办公室内/外的工作人员和可用的桌台。实现所有这些功能的同时还能完全控制我们的数据,拥有一个几乎可以免运维的可扩展模型,并且无需操心底层结构,只需专注于为人们提供出色的功能。

现状如何?

我花了 4 年的时间从零开始新职业。无数漫长的夜晚,我都在 Code Academy 中探索,学习 OOP 概念,为考试做准备并且创造东西,当我看到它们在自己的手机里运行,感觉非常酷,也非常有趣。

我过去 5 个月一直在学习 Serverless Framework,现在正计划将 Serverless Framework 投入到工作中,这项服务可帮助客户构建和迁移其应用。并且,我还使用无服务器作为平台来建立聊天机器人副业!

我度过了非常充实的 4 年!从为别人做饭、为活动准备蛋糕到沉迷咖啡,我从未想到自己能创造像 Serverless 聊天软件和太阳系知识学习 app 这样的东西。

也许有一天我会完成自己的食谱生成 app

我是如何在四年时间里,从厨师转行为 Serverless 应用开发者的更多相关文章

  1. 解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)

    解剖SQLSERVER 第四篇  OrcaMDF里对dates类型数据的解析(译) http://improve.dk/parsing-dates-in-orcamdf/ 在SQLSERVER里面有几 ...

  2. SpringMVC的Action在同一时间里只允许同一个浏览器的单次进入?

    最近用SpringMVC写了一个很简单的测试程序,代码如下: @Controller public class LongTimeTaskController { @RequestMapping(val ...

  3. Uber 四年时间增长近 40 倍,背后架构揭秘

    据报道,Uber 仅在过去4年的时间里,业务就激增了 38 倍.Uber 首席系统架构师 Matt Ranney 在一个非常有趣和详细的访谈<可扩展的 Uber 实时市场平台>中告诉我们 ...

  4. m_Orchestrate learning system---二十四、thinkphp里面的ajax如何使用

    m_Orchestrate learning system---二十四.thinkphp里面的ajax如何使用 一.总结 一句话总结:其实ajax非常简单:前台要做的事情就是发送ajax请求过来,后台 ...

  5. 为QNetworkAccessManager添加超时提醒(自己记录一段时间里的下载字节数,用定时器去定期检测,从而判断是否超时)

    在做更新,在测试异常的时候,在下载过程中,发现如果直接系统禁用了网络,会报错误,可以捕获.但是如果是第三方软件限制程序联网,问题来了. 程序会一直在那里等待,没有异常,也不发送QNetworkAcce ...

  6. 如何在不到12天的时间里将网站权重优化到1(纯白帽SEO方法)

    之前操作了一个IDC网站,不到1个月的时间把网站的权重从0做到了1,本来想写篇文章分享相关的操作经验.后来因为网站整体规划的原因,IDC网站需要关闭一段时间做备案的更新,排名肯定就会掉了,然后怕大家看 ...

  7. Flink流处理(四)- 时间语义

    4. 时间语义(Time Semantics) 这章我们会介绍时间语义,以及在流中,对于时间的各种不同的概念的描述.同时我们也会讨论一个流处理器在事件乱序的情况下,如何能提供精准的结果,以及如何使用流 ...

  8. 时间工具类之“ JDK1.8中 LocalDate、LocalTime、LocalDateTime、LocalDateTimeUtil四个时间工具类”

    一.使用的原因 在JDK8发布的时候,推出了LocalDate.LocalTime.LocalDateTime这个三个时间处理类,以此来弥补之前的日期时间类的不足,简化日期时间的操作. 在Java8之 ...

  9. Swift开发第四篇——柯里化

    本篇分为两部分: 一.柯里化的基本使用 二.柯里化的使用场景 一.柯里化的基本使用 柯里化(Currying):也就是把接受多个参数的方法变换成接受第一个参数的方法,并且返回接受余下的参数并且返回结果 ...

随机推荐

  1. MySQL的DDL和DML

    SQL语句:结构化查询语句,使用SQL与数据库“沟通”,完成相应的数据库操作. 语句分类 DDL(Data Definition Languages)语句:即数据库定义语句,用来创建数据库中的表.索引 ...

  2. zTree & ckeditor &ValidateCode.jar 使用个人心得总结

    zTree:依靠 jQuery 实现的多功能 “树插件”. 使用时只需要将下载的压缩包接用,复制里边的css 和 js 到指定目录即可. 如图所示: 在zTree的官网可以找到各种类型树的示例: 地址 ...

  3. 题解 P2622 【关灯问题II】

    题目 感觉大佬们的代码在读入上的处理比本蒟蒻优秀多了,于是,一个AFO蒟蒻弱弱地提出一下自己的看法 [分析] 首先,对于 \(n\) 那么小,肯定是状压啦 对于读入,本蒟蒻开了两个数组来储存每个按钮的 ...

  4. 康冕峰IT技术总结博客CSDN索引

    计算1-x内的质数, 结果保存在mysql中. Java 程序员面试笔试宝典 4.1基础知识https://blog.csdn.net/qq_40993412/article/details/1040 ...

  5. Codeforces Round #620 (Div. 2)D dilworld定理

    题:https://codeforces.com/contest/1304/problem/D 题意:给定长度为n-1的只含’>'和‘<’的字符串,让你构造出俩个排列,俩个排列相邻的数字之 ...

  6. github新建一个单页

    比如可以在github上打开的网页是这种网址形式的:https://01xunsicheng.github.io/yumeihua/ 1.登录后首页找到 New repository 2.新建一个文件 ...

  7. Django2.0——Form组件简单总结

    Django提供了一个Form组件来配和前端的表单进行使用,Form有两个强大的功能,分别是生成HTML代码和验证数据的合法性.通常我们不会用其第一个功能,因为前端的设计可以做出更加精美且多样的表单页 ...

  8. 洛谷 P1341 无序字母对(欧拉回路)

    题目传送门 解题思路: 一道欧拉回路的模板题,详细定理见大佬博客,任意门 AC代码: #include<cstdio> #include<iostream> using nam ...

  9. LinuxC++开发记录(g++)

    g++使用 1. 编译过程 预处理(-E) 编译(-S) 汇编(-c) 链接 1.1 预处理(-E) 为了直观的了解预处理,理解预处理做了哪些工作,不说那么多,直接上代码,创建main.h与main. ...

  10. EL表达式和JSTL(一)

    一. 初始JavaBean 在软件开发时,有些数据时经常要用到的,为了方便进行移植,Sun公司提出了一种JavaBean技术,使用JavaBean对这些数据进行封装,做到一次编写,到处开发. Java ...