「AI威胁论」是一种预防措施还是危言耸听?目前我们还不知道,但可以肯定的是,随着这些新的互联网技术的兴起,传统行业将会转型,一些传统的工作岗位将会被取代。那么,作为一个传统行业的从业者,应该如何跟风,完成自己的转型呢?本文中,化工过程工程师奥斯汀·塔克贝利将介绍他是如何从一个毫无经验的新手,通过自学,在9个月的全职工作中成长为年薪6位数的软件工程师的。
图片来源:Unsplash,摄影师:Artem Sapegin
每当读到成功人士的故事,我总会去查作者的背景,希望他们的背景和我的相符。我从来没有找到和我一样背景的人,可能我的情况和你不一样。
尽管如此,我希望我的故事能启发你,并为你的成功提供有价值的参考。
向…介绍自己
九年前,我在高中参加了应用程序的Visual Basic课程。七年前刚接触工科的时候,学的是C,Python,Matlab,Labview。三年前,我在一所大学拿到了化学工程学位,成绩不错。除了读高中和大学,直到去年我决定学编程才接触到什么编程。
大学毕业后,我在一家炼油厂找到了一份工艺工程师的工作。我在那里工作,直到我转到软件工程。
我为什么要转行
我喜欢解决技术问题,但我知道我以后想涉足商业或者创业。一直有读MBA的想法,但每当看到名牌大学学费贵,兴趣就会减弱。
2017年5月27日,当我再次在谷歌上搜索MBA时,不知怎的,我偶然发现了软件工程。这似乎是一个绝佳的机会。
软件工程师的需求越来越大,工资也很高。而且是一个很完善的行业,不需要大量的启动资金就可以进入创业领域。你需要的只是一台电脑,你的机会几乎是无限的。
在任何其他工程学科中,你都不能建立一个想法,向用户展示它,并在少量资金的支持下简单地迭代它。化工方面,如果你有一个新产品的想法,肯定需要一个工厂或者大量的资金来设计工厂。
我听说有些人辞职去参加培训班,但是随着我在网上的深入了解,我意识到,如果你坚定,专注,就可以自学。
你可能会说,培训课程可以提供求职网络和职业建议。这可能是真的,但我很幸运,因为我住在湾区,参加过几次聚会,从而建立了这样一个网络。
另外,在最坏的情况下,我意识到自己应付不了,于是辞职去参加培训班。
目标
图片来源:Unsplash,摄影师:罗伯特·贝克
首先,你需要一个目标。尤其是想边全职工作边学习的话。如果你没有任何外部压力,你需要创造内部压力才能坚持学习。你的目标要简单,量化。为了设定一个合理的目标,你需要做好功课。我的目标如下:
一年内找个软件工程的工作,工资和我现在的工资持平或者更高。
计划
图片来源:Unsplash,摄影师:格伦卡斯滕斯-彼得斯
一旦你有了目标,你需要一个计划来帮助你实现它。这个时候,你需要尽可能多地阅读成功人士的故事。每个人的情况和你不一样,但你可以从每个人那里得到一些建议。制定计划时,我使用的资源包括:
learnprogramming subreddit:https://www.reddit.com/r/learnprogrammingfreeCodeCamp 论坛:https://www.freecodecamp.org/forum/Medium:https://medium.com/2017年5月27日,我决定开始学习编程,并一头扎了进去。那天我决定每周工作时间不超过40小时,这样下班后和周末就有时间编程了。幸运的是,我很好地记录了我的进步。
经过反复修改,我的最终计划如下:
参加计算机科学的入门课程,深入了解计算机科学的核心概念;关注 freeCodeCamp,直到我可以凭借自己的力量,组合多种技术构建全栈的 Web 应用程序;重构并清理代码,添加测试,专注于高级概念;向开源贡献代码;准备面试。一开始,我的计划很简单。当时我觉得应该按照谷歌的技术指南来,就开始学习他们推荐的入门课程,Udacity CS101。
第0个月:乌达城CS101,哈佛CS50
做了这个重要的决定后,我突然觉得精力充沛。我每天一下班回家就开始编程,直到睡觉。而且整个周末都在编程。Udacity CS101可以显示课程的完成百分比,这是我很大的动力。每天编程后,我记录完成的百分比。10天就完成了前75%。最后25%讲递归,对我来说有点难。总之,我花了20天完成了乌达城CS101。
在学习Udacity CS101的时候,开始看了很多Learn Programming Sub Reddit。我看文章说,对于那些想通过自学成为程序员的人来说,主动上网非常重要。所以我决定用我的全名创建新的Twitter、Reddit、Stack Overflow、Medium和Quora账户,这样我就可以保持在线。
另外,我决定不再看那些让人分心的媒体,比如Instagram,Facebook,还有与编程无关的子圈子。我只会在手机上查看与编程相关的新闻和帖子。这对于保证我找到最好的学习路径和学习资源非常重要。所以我在edX上找到了哈佛CS50。
本来只想上一门入门课,但是好像大家都推荐哈佛CS50,所以我决定再深入学习。其他学校计算机系的同学也参加了这个课程,他们说在CS50学的东西比大学计算机系学的多一两年。大家普遍认为这门课虽然难,但值得学习。到第0个月底,我已经完成了前5堂课和作业。
第一个月:哈佛CS50,Linux,第一党,freeCodeCamp
这个月中旬我完成了CS50。CS50的经历我就不多评论了,因为我写过一篇关于我的经历的帖子。
总之这是一门很棒的课程,我强烈推荐。大卫·马兰是一名优秀的讲师,他有很多资源可以帮助你学习。你从C开始学,然后学Python直到完成Web开发。课程内容和资料很多,但我觉得值得一看。
学完CS50,我决定在我的XPS 15上搭建两个系统:Windows和Ubuntu。那个周末让我很郁闷。我弄乱了我的隔板,差点毁了我的笔记本电脑。我迫不及待地想扔掉它,换一个新的。
我慢慢让自己出了Windows,最后只用Ubuntu。我想强迫自己去适应命令行,我觉得进度不错,但是还有很长的路要走。
我开始了一个100天的计划,以确保我每天都保持专注和编程。记录自己的进步很重要。因为你每天都在进步,虽然看起来每天都没有太大的进步,但是当你一个月或者几个月后回头看的时候,你会发现你其实已经取得了相当大的进步,这可以激励你继续前进。
我知道网络可以成就我,但也可能让我失望,于是我鼓起勇气参加了我的第一次编程晚会。我从来没去过什么晚会,更别说编程晚会了。当我开车到那里,停下来走到门口的时候,我很紧张,几乎想转身回家。
幸运的是,这是那个团体的第一次聚会。我很快意识到没有理由紧张。大家都不认识,没人会评价你,大家都渴望学习。那是聚会的开始。在接下来的九个月里,我参加了50多个聚会。
我很高兴我很早就开始参加聚会了。大多数人在找工作的时候就开始参加聚会,但是已经太晚了。为什么有必要尽早开始参加聚会有很多原因。例如:
发展关系需要很长时间。提前开始意味着你可以找到为日后找工作做担保的人;与陌生人谈论编程是准备面试的好方法;你可以从前辈那里学习新的框架,工具和学习资源。这可能会影响到你未来的学习计划。当时在学习编程的过程中,有一些不确定因素。这是关于我什么时候需要决定我想成为什么样的软件开发人员。
最后选择了网络开发,因为这个领域好像需求量很大,网上资源也很多。确定方向后,我需要想清楚下一步该怎么做。有人建议,我们应该考虑这个阶段要构建的Web应用,然后开始。推荐奥丁项目和freeCodeCamp。
组织每周聚会的人对Ruby比较熟悉,想用Ruby做项目。这是我决定投身奥丁计划的一个重要原因。
两天后,我放弃了这个想法。
这是走自学路线的弊端之一。前一分钟你认为你知道该走哪条路,但第二天你开始怀疑这是否是正确的决定。
有一篇文章说Ruby失宠了,我通过搜索Ruby和Java的招聘信息也证实了这一点,于是我终于开始在freeCodeCamp学习。但是自由代码营有一件事让我很困扰:他们为项目提供想法,所以每个学生都在做同一个项目。起初,我很担心,因为我想在招聘人员中脱颖而出。不过最后还是爱上了freeCodeCamp,现在强烈推荐。关于freeCodeCamp的经验和建议,详见我的文章。
第2个月:YDKJS,自由代码营前端,反应
然后,我开始看《你不知道JS》,因为大家都建议作为freeCodeCamp的补充。有几个部分我要反复看,因为这本书内容很多,但是如果你想掌握词法范围、闭包、Promise以及所有你听过但太难学的Java中的概念,这本书是最好的选择。
我完成了freeCodeCamp的前端课程。我创建的清单和预计的完成时间帮助我快速完成了这些课程。迫不及待的开始学习React。然而,这也意味着我的项目只有最简单的风格。我花了很多精力来满足用户故事中定义的需求,仅此而已。
事后看来,也许我应该把重点放在让项目更有吸引力上。也许,这将有助于我更深入地学习CSS。
下一步是学习React。我已经准备好搬家了。
我听过很多关于React的事情,我已经准备好迎接挑战了。不过考虑到当时的版权问题,我有点犹豫。我很高兴听到这不再是一个问题。学习反应对我来说很难。当时没有好的教程。
我试着看了文档和Facebook的井字游戏教程,但是我没有完全理解其中的内容。据说如果我看不懂React,说明我对Java不够了解。于是我回去读了《你不知道JS》,但是这本书对我来说还是太难了。
第三个月:freeCodeCamp React,CodeClub,开始在freeCodeCamp上学习后台开发
最终,我决定通过自由代码营的反应项目来学习反应。那段代码很难听,但是真的让我更懂React。
在我参加的每周聚会上,他们决定用一个完整的Java堆栈来代替Ruby构建项目,他们决定第一个项目是为我们的聚会小组建立一个网站codeclub . social。
我的工作是用React和Meetup API开发接口,让用户可以在我们的网站上注册接下来的三方。停止学习freeCodeCamp做这份工作对我来说有点难,但我不能放弃这个机会。我很高兴和一小群人一起做一个项目。在这个过程中,我还学习了Git和GitHub。
这个月底之前,我开始在freeCodeCamp学习后台开发。
第四个月:完成Yeggle freeCodeCamp的后台开发课程
我已经完成了freeCodeCamp中所有的API项目,但是我发现freeCodeCamp的图像搜索抽象层这个项目有点偏离我的目标。
我迫不及待地想创建一个完整的网络应用程序,所以当我看到这个项目的标题时,我有了自己的想法。我可以创建一个节点应用,在数据库中存储随机图像的URL,然后创建一个前端输出用户指定数量的随机图像。有一句话是真的:当你按照自己的想法做一个自己的项目时,你会更加努力,取得更大的成功。
开始工作后,我为自己感到骄傲。虽然我做的又丑又重,但至少能正常工作。
当我在自由代码营学习的时候,我知道了在我的能力范围内我可以做什么样的项目。那时候我经常跑步,跑步的时候会思考,一旦有了新的想法,回家就等着写下来。所以,当我准备好的时候,我有一个项目想法的列表。
我终于准备好开始制作自己实用精致的全栈Web应用了,可以和用户分享这些应用,创建我的作品集。我准备好开始了。
有一次我在找新餐厅的时候,发现我总是打开Yelp查看评论,然后打开地图查看他们的评论。如果我创建一个应用程序,并并排比较两者,会怎么样?
于是我做了yeggle。我用的是Node/Express/React和谷歌地图以及Yelp API。中间遇到了一些我以为无法克服的障碍,但最终还是完成了。我为我的申请感到非常自豪。然后我发到了Reddit,但是没人关注。这有点令人失望,但我并不因此气馁。
第五个月:储存
这个月没什么进展,因为去了日本泰国两个星期!
但我确实开始并完成了我的下一个项目。一直在看自考开发者找工作有多难,所以觉得需要做点独特的。我记得有一个游戏,根据道琼斯股票的走势图,你有买入的机会,也有卖出的机会,目标是战胜市场。游戏的目的是让你知道打败市场有多难。
我的想法是做一个类似的游戏,但是不是市场,而且是违背机器学习算法的。于是我创建了stock it。
看了关于熊猫和Scikit Learn的视频教程,讲解了机器学习的很多技巧。本来想做一些很酷的深度学习技巧,但是意识到需要大量的数据集,而且花费的时间比我预想的要多。
所以,我做了一个简单的线性回归模型。我原以为这部分工作会很难,但事实并非如此。在React中结合D3和jive是最难的部分。两个库都想控制DOM。有一些库可以帮助融合两者,但是我觉得这些库太臃肿了。最后我用D3生成SVG,用React处理DOM,非常顺利。
我在Reddit分享这个应用的时候,大家都很喜欢!
事实证明,redditor和VC一样,是一个机器学习的世界。我所有来自Reddit的爱都大大增强了我的信心。有人在玩我的游戏,乐在其中!
第六个月:工作排序,准备找工作
StockIT之后,我开始了下一个项目。我想创建一个作品发布平台,里面会显示以科技为主的作品列表网站,比如Stack Overflow,GitHub,Hacker News。为了突出这款产品的独特性,我决定根据用户想要的技术以及他们对每种技术的需求进行排名。
例如,假设我想做的工作是了解Java、React和/或Python。很想用Java和React,但是不在乎Python。然后我可以把Java设置为3,React设置为3,Python设置为1,然后列表会相应排序。
在这个项目中,我遇到了各种各样的困难,不得不几次改变课程,但我最终得到了一个非常满意的产品。我用的最后一个技术栈是React/Node/Express/MySQL。我把这个项目发布到了https://www.reddit.com/r/cscareerquestions的CSCareerQuestions子网站,获得了650次浏览。.
点击这里查看这个“最终”产品。如果你有兴趣了解我的困难和重建,可以查看我的帖子。
因为我的问题,jobSort占用了这个月的大部分时间。最后和第一次聚会认识的一个朋友喝了咖啡。他建议我现在就开始申请工作。我看了所有人投诉申请时间太长的地方。另外,每当你看到一个帖子问你什么时候该求职,得到最高赞的评论总是说“现在”。
在我的脑海里,我计划通过结构化的规划,用个人项目构建我的作品集,然后为开源项目贡献代码,然后准备面试,最后开始求职。这个朋友说服我,我应该放弃计划,马上开始求职。所以这个月我做了一个作品集,整理了一下简历。下个月我将开始申请工作。
第7个月:测试和求职
这一个月来,我一直专注于修改项目和求职。我也学过测试和Redux。
我给CodeClub加了flexbox。社会,并实施了回应。我改进了jobSort的移动用户体验。我在jobSort中加入了摩卡/柴/酶等测试,设置困难,使用方便,很难得到100%的覆盖率。
到月底,我已经申请了63份工作。我觉得这是一种自我评价。我的作品集和简历够好吗?如果足够好,我需要做些什么来准备面试?一开始我申请了黑客新闻:他们在招聘。
在《黑客新闻》上,我用jobSort来确定应聘哪个岗位。其实我也试过非软件公司,看能不能电话面试或者其他面试。
刚开始只是快速提交申请,简历和求职信都没有个性化。后来,我决定个性化我的求职信和简历,然后试着给公司的人发电子邮件。这种方法显然比撒网漫天更有效率。
那个月我接到了五个电话——两个来自招聘公司,三个来自软件公司,包括:
某家互联网公司的 DevOps /测试职位的合约员工;B 系列食品分析公司;最近被一家大公司购买的一个相当大的成功创业公司。其中两个我通过了HR面试,但是没能拿到现场面试。这三次电话采访我都很满意,也从中学到了很多。
网上大家都说,从一开始就没人指望初级开发人员知道很多,他们只需要充满热情,对学习保持强烈的兴奋感。所以我觉得很简单。我对学习非常热情和感兴趣。但是,我从这些电话采访中了解到,没有人会雇佣初级开发人员。他们希望你从第一天起就能胜任。
从这些电话采访中,我了解到我需要:
将自己的技术力提高到足够好,能从第一天起就给公司带来价值;要足够自信地说服他们我可以从第一天起就为公司带来价值。第八个月:夜班,Redux,开源,现场面试
这个月全职工作要求我连续40天夜班加班:每周6天,每天12小时,下午5点到凌晨5点。我的天呐。
我知道这个月我做不了太多,但我有一个需要实现的目标,所以我一个月都停不下来。
我用Redux重构了jobSort.tech,出乎意料的没有我想象的那么难。我听过很多关于它的播客,也看过很多博客文章。如果我不一直用,对我来说没有任何意义。
我很喜欢Redux的数据流。现在看到有人抱怨Redux,很有意思。我觉得我没有资格发表意见,但是我真的很喜欢它的设计模式。
这个月应该开始做开源项目了。我打算对开源做出我的第一个贡献,这将是我对一个伟大图书馆的巨大贡献。我打算贡献给React!
大家都说这是一个很难读懂的代码库,更别说贡献了。但我需要脱颖而出。我需要独一无二。我知道我的贡献不会很大,但我仍然希望给它一个机会。
首先,我需要阅读所有文档,然后查看代码库。每一个问题,每一个PR都要关注。从头到尾阅读React文档是一个很好的练习,我很高兴我做到了。但我很快意识到,促成React的问题在于,没有那么多“好的、重要的问题”,一旦出现,就会很快被带走。
有一次参加聚会,安东尼·吴建议我试试《降档》,这是肯特·c·道兹写的自动完成库。这是一个重大的转折点。它非常适合我的项目。难度很合适,有助于解决某些问题,不需要太多配合,维护起来也挺方便,代码本身干净,测试的很好。最重要的是,它为我在jobSort应用程序中遇到的一些问题提供了一个完美的解决方案。
这个月过半,我收到一封上个月申请的公司发来的邮件。他们邀请我参加第一次电话面试,然后是技术电话面试。他们需要的技术正是我学的React,Redux,D3。我主要讲了我的项目和我做一些决定的原因。之后他们邀请我去现场采访。我第一次现场采访!
我根本没有准备好面试,所以我准备丢掉工作,但我会获得宝贵的面试经验。而且上完夜班只睡了三个小时。好在技术部分不是白板测试,而是一个小时的配对编程。这是一个相当直接的挑战,但我很紧张。
一开始我还在担心是不是不用找资料就能回答所有的问题。当我意识到我根本无法完成这个挑战的时候,我觉得我需要停止担心面试官对我的看法,我可以在Google和Stack Overflow上搜索答案。最后还是没能完成挑战,感觉自己失败的很惨。
因为我觉得自己没有通过结对编程,所以在后续的面试中感觉很轻松。最后我昂着头离开了面试。最糟糕的计划是我获得了一些有价值的面试经验,最好的计划是我能赢得第一份工作。
第九个月:找工作
在我决定转行做编程的九个月零七天之后,我得到了我的第一份工作。第一次现场面试后,我收到了工作邀请,所以我很有信心,但同时,如果我不接受这份工作,如果这是我几个月内唯一收到的工作,我该怎么办?于是我终于接受了这份工作,对自己的决定很满意。我终于可以靠编程挣钱了!
建议
到目前为止,我的故事已经分享了,穿插了一些建议。如果你正在读这篇文章,并且正在考虑转行,或者为了转行而学习编程,那么我希望下面的建议可以帮助你制定一个计划,或者坚持你现在的计划,实现你的目标。
找到可以激励你的动力,并将其转变为你的优势。对我来说,这包括检查清单,记录我的进展状况,并与各种编程社区进行互动。如果你没有动力去实现你的目标,那么其他的就都不重要了,因为你无法完成目标。制定目标并达成目标。我认为你应该有每个月的目标,甚至每天的目标。每个月的目标可以确保你在朝着实现主要目标而努力,而每天的目标可以确保你每天都能进步。我的策略是在前一天晚上制定第二天的目标。这样可以避免你做无用功,感觉你在用功,实际上你没有。这种方法可以强迫你比较每天取得的成果与目标。尽快参加聚会。参加聚会可能会让你感到很可怕,就像我上面提到的那样。但是,总的来说,每个人都很友好,愿意提供帮助。你可能会发现有些人不想与你交谈,但他们只是少数,没有人会对你评头论足。另外,每个人都喜欢提供建议(就像现在我在给你提建议一样)。尽快向开源贡献代码。当你第一次开始编程时,GitHub 看起来就像是你永远都不想去的那个可怕的地方。但其实它非常适合初学者,是一个很好的地方,可以看到优秀的代码,而且也可以让自己的代码接受审查。如果你仍然不相信,那么请看看我的帖子《为什么你应该立刻为开源贡献代码》(https://medium.com/@austintackaberry/why-you-should-contribute-to-open-source-software-right-now-bec8bd83cfc0)。尽快开始申请工作。这个对我来说很难,因为我觉得我与众不同。我以为我不需要通过调查市场就能了解应该做些什么。我以为我会知道什么时候准备申请工作。但我现在告诉你,你不知道什么时候开始申请工作。所以你现在就开始吧。但我不是说你还没有学习循环就疯狂地申请 300 家公司。但是你应该知道,了解需要学习的内容的最佳方式就是申请与尝试。好了,我回去写代码!
原文:https://medium . freecodecamp . org/how-I-go-from-new ie-to-software-engineer-in-9-月-which-working-全职-460bd8485847
译者:月亮月亮,编辑:涂敏
"
要求文件。"
◆
◆
1.《linux软件工程师培训 放弃培训班自学编程,9 个月后我成为年薪 6 位数的软件工程师》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《linux软件工程师培训 放弃培训班自学编程,9 个月后我成为年薪 6 位数的软件工程师》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/1668874.html