在这篇文章里,我想分享自己如何在 9 个月内一边做着全职工作,一边自学编程,从一名小白成长为年薪六位数软件工程师。
每当阅读别人的成功故事时,我的第一反应都是查看作者的背景,希望他们的经历和故事也发生在自己身上。可是我并没有发现和我背景一样的作者。所以,很可能我的经历和故事也不会发生在你的身上。

尽管如此,我还是希望我的故事能够对你有所启发,成为你通往成功之路的一个有价值的参考。

概述

9 年前,我在高中学习了 Visual Basic for Applications(VBA)课程。7 年前,在刚接触工程课程的时候,我学习了 C、Python、Matlab 和 Labview。3 年前,我大学毕业,获得了化学工程学位,成绩还不错。所以,在去年我决定学编程之前,除了高中和大学里的课程以外,我没有接触过任何编程。

大学毕业后,我在一家炼油厂找到了一份工艺工程师的工作。在我转行从事软件开发之前,一直在那里工作。

我为什么想转行

我喜欢解决技术问题,但我知道自己将来某个时间会涉足商业或创业。我一直有读 MBA 的想法,不过这个想法一直都因为名牌大学高额学费被搁置。

2017 年 5 月 27 日,我再次在 Google 上搜索 MBA 时,不知怎的,偶然发现了软件工程。这似乎是一个完美的契机。

市场对软件工程师的需求越来越大,这个岗位的工资也很高。而且以软件工程师为起点,不需要大量启动资金就可以进入创业领域。你所需要的只是一台电脑,并且你的机会可以说是无限的。

在任何其他工程学科中,你无法做到:只要有一个想法,就开始构建,向用户展示,迭代需要的资金少,准入门槛低。以化学工程为例,如果你想打造一个新产品,那么你肯定需要有一家在运行的工厂,或筹集大量资金来开设工厂。

我听说有人辞掉工作去参加编程培训班,但是随着我在网上了解更多,我意识到如果一个人态度坚定而且专注,那么完全可以自学成才。

你可能会说,培训班可以提供找工作的人脉和职业建议。但我很幸运,因为我住在湾区,我可以时常参加技术聚会,通过这样的方式拓展人脉。

另外,最坏的情况也不过是我自学失败,然后辞职去参加培训班。

目标 

首先你需要一个目标,特别是如果你想在全职工作的同时学习编程,没有任何外部压力的推动,学习计划就可能一拖再拖。所以你需要创造内部压力,定一个简单且可以量化的目标。

我做了充分的调研,定了一个合理的目标:在一年内拿下一份软件开发的工作,薪水和我现在的工作一样或更高。

计划

有了目标之后,你需要制定一个计划来实现目标。你可以大量阅读别人自学编程成功的故事。每个人的情况都与你的不同,但你可以从每个人那里获得一些建议。在制定计划时,我用到的资源包括:

  • learnprogramming subreddit
  • freeCodeCamp 论坛
  • Medium

2017 年 5 月 27 日这一天,我决定开始学习编程,并一头扎了进去。那天我决定每周在工作上花费的时间不超过 40 小时,这样下班后和周末我才有时间编程。我很好地记录了自己的学习进展,所以现在才能分享给你们。

经过反复修改,我的最终计划如下:

  • 学习计算机科学的入门课程,深入了解计算机科学的核心概念
  • 在 freeCodeCamp 学习,构建全栈 Web 应用程序,制作自己的作品集
  • 重构代码,添加测试,专注于高级概念
  • 为开源项目做贡献
  • 准备面试

刚开始时,我的计划很简单。当时,我觉得应该遵照 Google 的技术指南,所以我开始学习他们推荐的入门课程,Udacity CS101。

第 0 个月:Udacity CS101,Harvard CS50

做出这个重大决定后,我顿时感觉充满干劲。每天下班一到家我就开始编程,直到上床睡觉。而且整个周末都在编程。Udacity CS101 可以显示出课程的完成百分比,这给了我很大的动力。每天在编程后我都会记录完成的百分比。我在 10 天内完成了第一个 75%。最后的 25% 讲解的是递归,对我来说有点难。我一共花了 20 天才完成 Udacity CS101。

在学习 Udacity CS101 的时候,我开始大量阅读 learnprogramming subreddit。我读到,对于希望通过自学转行成为程序员的人来说,积极在线非常重要。所以我决定用我的全名创建新的 Twitter、Reddit、Stack Overflow、Medium 和 Quora 帐户,时常在线上活跃。

此外,我决定停止浏览分散注意力的媒体,比如 Instagram,Facebook 和与编程无关的 subreddits。我只会查看手机上与编程相关的新闻和帖子。这对于确保我找到最佳学习路径和学习资源至关重要。正因为如此,我才在 edX 上发现了 Harvard CS50 课程。

原本我只想上一个入门课程,但是似乎每个人都推荐 Harvard CS50,所以我决定深入研究。其他学校计算机科学系的学生也参加了这门课程,而且他们表示在 CS50 学到的知识比在大学计算机科学系一年或两年学到的东西更多。大家普遍认为,虽然这门课程很难,但很值得学习。到第 0 个月结束时,我完成了前 5 个讲座和作业。

第 1 个月:Harvard CS50,Linux,第一次聚会,freeCodeCamp 

我花了半个月完成 CS50,我就不在这篇文章里详细写这部分体验了,你们感兴趣的话可以看我的另一篇文章。

简而言之,这是一个很棒的课程,我强烈推荐。David Malan 是一位优秀的讲师,有大量的资源可以帮助你学习。你从 C 开始学习,然后学习 Python,直到完成 Web 开发。课程内容非常多,而且还有很多材料,但我认为非常值得一看。

在学习完 CS50 之后,我决定在我的 XPS 15 上安装Windows 和 Ubuntu。那个周末让我非常沮丧。我弄乱了分区,差点把笔记本电脑搞废掉。我恨不得把它扔了,换一个新的。

我慢慢地不再使用 Windows,只使用 Ubuntu。我想强迫自己适应命令行,而且感觉进展还不错,但我还有很长的路要走。

我开始了 100 天编程挑战,让自己每天都保持专注持续编程。记录你的进度非常重要。如果每天你都在学习,虽然每天的进步似乎并不多,但是在一个月或几个月后蓦然回头,你会发现自己已经取得了相当大的进步,这可以鼓励你继续前进。

我知道人脉可能帮助我,也可能干扰我,所以我鼓起勇气去参加我的第一次编程聚会。我从来没有参加过任何聚会,更不用说编程聚会了。当我开车到那里,停车,走到门口时,我非常紧张,几乎想转身回家。

还好那是那个群体的第一次聚会。我很快意识到没有理由紧张,大家互相都不认识,没有人会对你评头论足,每个人都渴望学习。我在之后的 9 个月内参加了 50 多次聚会。我很高兴自己很早就开始参加聚会。大多数人在寻找工作时才开始参加聚会,但那时已经太晚了。需要尽早开始参加聚会的理由有很多,比如:

  • 发展人际关系需要很长时间,早点开始参加聚会,这样你可以认识一些人,在你以后找工作的时候给你推荐机会
  • 与陌生人谈论编程是准备面试的好方法
  • 你可以从前辈那里学习新的框架、工具和学习资源,这可能会影响到你未来的学习计划

那时候,我开始思考自己想做哪方面的开发工作。

最后,我选择了 Web 开发,因为这个领域的需求量似乎很大,而且有很多在线资源。在确定了方向之后,我需要弄清楚下一步该做什么。有些人建议在这个阶段应该考虑想要构建的 Web 应用程序,然后开始动手。有人推荐了 Odin Project 和 freeCodeCamp。

组织每周聚会的那个人很熟悉 Ruby,想用 Ruby 做项目。这是我决定全力投入 Odin Project 的一个重要原因。

两天后,我放弃了这个想法。

这是走自学路线的缺点之一,前一分钟你以为自己知道应该走哪条路,但第二天你开始怀疑这是否是正确的决定。

我看到有文章说 Ruby 已经失宠了,然后我搜索 Ruby 和 JavaScript 的招聘信息,证实了这一点,所以最后我开始在 freeCodeCamp 学习。但 freeCodeCamp 有一件让我感到困扰的事情:他们提供了项目的想法,所以每个学员都在做同样的项目。起初这让我很担心,因为我想从招聘人员中脱颖而出。但是,最终我爱上了 freeCodeCamp,现在我强烈推荐。有关 freeCodeCamp 的经验和建议的更多详细信息,请查看我的这篇文章。

第 2 个月:YDKJS,freeCodeCamp 前端,React

随后,我开始阅读《You Don’t Know JS》,因为每个人都建议将它作为 freeCodeCamp 的补充。这本书的内容非常多,有几个部分我不得不反复阅读。如果你想掌握作用域、闭包、Promise 等等所有 JavaScript 中你听说过的,想学的,却太难的概念的话,这本书是最佳选择。

我完成了 freeCodeCamp 的前端课程,在这个过程中,任务清单和时间表起了很大作用。我迫不及待地想开始学习 React。但是,我做的那些项目只有最简陋的样式,所以,我花了很大力气实现了用户故事中定义的需求,就没有下文了。

事后看来,也许我应该专注于让项目更具吸引力。也许,这会帮助我更深入地学习 CSS。

下一步是学习 React,我已经迫不及待了。

我听说过很多关于 React 的消息,已经准备好迎接挑战了。但是,当时考虑到版权问题,我有点犹豫不决。很高兴现在这已不再是问题。学习 React 对我来说很难,当时我并没有很好的教程(现在当然有很多了)。

我尝试阅读文档,以及 Facebook 的 Tic-Tac-Toe 教程,但我没能完全了解里面的内容。有人说如果我无法理解 React 的话,那么意味着我对 JavaScript 的了解不够深入。所以我又回去阅读《You Don’t Know JS》,但这本书对我来说还是太难。

第 3 个月:freeCodeCamp React,CodeClub,开始在 freeCodeCamp 上学习后台开发

最终,我决定通过 freeCodeCamp 上的 React 项目来学习。

我每周参加的那个聚会的成员决定用 JavaScript 全栈来取代 Ruby 构建项目。他们决定第一个项目是为我们的聚会小组建立一个网站,CodeClub.Social。

我的工作是用 React 和 Meetup API 开发界面,允许用户在我们的网站上注册接下来的三次聚会。对我来说,暂停 freeCodeCamp 的学习来做这项工作,有点困难,但我不能放弃这个机会。我很高兴与一小群人一起开展一个项目。在此过程中我还学习了 Git 和 GitHub。

在这个月底,我开始在 freeCodeCamp 上学习后台开发。

第 4 个月:完成 freeCodeCamp 的后台开发课程,Yeggle

我完成了 freeCodeCamp 所有的 API 项目,但是在 Image Search Abstraction Layer 项目的时候,我有了自己的想法。

我迫不及待地想创建全栈 Web 应用程序,所以当我看到这个项目的标题时,我想做另一个项目。我可以创建一个节点应用程序,将随机图片的 URL 存储在数据库中,然后创建一个前端,输出用户指定数量的随机图片。有句话说的没错:当你根据自己的想法做一个属于自己的项目时,你会更加努力工作并取得更大的成功。

开始做这个项目之后,我为自己感到骄傲。虽然我做的东西丑陋而笨重,但至少可以正常工作。

在 freeCodeCamp 学习的时候,我了解了在自己的能力范围内可以做什么样的项目。那个时候我经常跑步,在跑步时我会思考,有什么新的想法就等回家后写下来。所以,慢慢的我就有了一份项目创意清单。

我终于准备好开始制作属于自己的,实用而且精美的全栈 Web 应用程序了,而且我可以与用户分享这些应用,并把它们放到作品集里。我已经准备好开始了。

在搜索餐厅时,我总是会打开 Yelp 查看评论,然后再打开 Maps 查看评论。如果我创建一个应用程序,可以将两者并排做比较,怎么样呢?

所以我做了 Yeggle。我使用了 Node / Express / React 以及 Google Maps 和 Yelp API。中间我遇到了一些我以为自己无法克服的障碍,但最终还是完成了,我为我的应用程序感到非常自豪。然后我把它发布到 Reddit,结果却没有人关注。这有点令人失望,但我没有因此而气馁。

最后: 可以! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流群(里面有各种软件测试资源和技术讨论)

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
 

 

 

 

更多推荐

业余时间零基础自学编程,9 个月后我成为一名软件工程师