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

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

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

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

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

我当时绞尽脑汁地在想,比起发短信或者打电话,或许我可以直接做一款 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. 开始linux课程预习工作

    预习的过程,就是在老师讲课之前,自己学习的过程.重点,难点,疑点,不等老师先讲,自己先趟一遍,老师在讲的时候,相信会吸收的更好一些.

  2. JS-表单非空验证

    JavaScript 表单验证 JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证. 实例:1.用户名的非空验证代码如下: <head> <m ...

  3. 利用zed相机为rtabmap_ros录制rosbag包及其使用

    1,录制rosbag包 rosbag record /zed_node/rgb/image_rect_color /zed_node/rgb/camera_info /zed_node/depth/d ...

  4. Mdb文件工具类,UCanAccess使用,Access数据库操作

    ================================ ©Copyright 蕃薯耀 2020-01-09 https://www.cnblogs.com/fanshuyao/ 使用Ocbc ...

  5. POJ-2492 A Bug's Life(种类并查集)

    http://poj.org/problem?id=2492 题意: 给出一个T代表几组数据,给出一个n一个m,代表人的编号由1~n,m条命令,每条命令由两个数值组成,代表这两个人性别不同,问所有命令 ...

  6. vue的选项卡功能

    选项卡:点击不同的按钮会显示不同的内容 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  7. E - Apple Tree POJ - 2486

    E - Apple Tree POJ - 2486 Wshxzt is a lovely girl. She likes apple very much. One day HX takes her t ...

  8. ssh 账号密码登录设置

    找到/etc/ssh/sshd_config文件中的 PasswordAuthentication no 改为PasswordAuthentication yes 并保存. 重启ssh服务:sudo ...

  9. POJ 1258:Agri-Net Prim最小生成树模板题

    Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 45050   Accepted: 18479 Descri ...

  10. GUI(Graphical User Interface)

    译:用户和图形界面 GUI与程序交互的不同方式,包含3基本要素:输入,处理和输出. 常用GUI框架包括以下几种: wxPython Kivy Flexx PyQt Tkinter Pywin32 Py ...