状态不错。许多从业者都面临职业转型的问题。而软件开发在很长一段时间内都将是前景最为光明的职业之一,是很多人转行的首选。但是没有基础就不容易转行。万一为了打基础放弃现在的工作专心深造,最后还是找不到工作怎么办?成功从化学工程师转型为软件工程师的AustinTackaberry或许能给你启发。在这篇文章中,他详细介绍了他如何在工作和自学的同时找到一份软件工程师的工作。每当我开始阅读成功故事时,我都会立即查找作者的背景,希望它对我有用。但我从来没有发现那些人的背景与我的背景相符,所以我的也可能与你的不相符。无论如何,我希望我的故事能激励其他人,并作为有用的数据点添加到您的成功案例数据集中。完全披露在高中(9年前)我参加了VBA课程。我在新生工程课上(7年前)学习了一些C、Python、Mathlab和Labview。我毕业于一所非常优秀的大学,获得了化学工程学位,而且我的GPA也不错(3年前)。自从离开学校(高中或大学)以来,我一直没有编码,直到我去年决定学习它。大学毕业后,我在一家炼油厂找到了一份工艺工程师的工作。我在那里工作,直到我转向软件工程。我为什么转行我喜欢解决技术问题,但我知道在某个时候我无论如何都要进入商业/创业世界。一直有读MBA的念头,但每次看到顶尖商学院的报价,立马就没兴趣了。2017年5月27日,我再次搜索MBA,但不知何故我看到了有关软件工程的内容。这东西看起来对我有用。软件工程师需求量大,薪水丰厚,是进入不需要太多启动资金的初创企业世界的完美行业。您需要了解计算机,您的机会(几乎)是无限的。在这里你只需要有一个idea,开始开发,然后展示给用户,然后用一点钱去迭代。进入门槛也很低,这是其他任何行业都达不到的。在化学工程中,基本上你需要有一个运营工厂,或者如果你有一个新产品的想法,需要很多钱来设计一个工厂。我听说过有人辞掉工作去参加训练营的故事,但我在网上阅读的越多,我就越意识到如果我专注和专注,我可以自学。你可能会建议,如果你不去训练营,你不会失去那里的网络和职业建议吗?是的,但我很幸运,因为我住在湾区,所以我可以去一些回忆并在那里建立自己的关系。而且,最坏的情况是我发现我自己学不会。如果是这样的话,我辞去工作参加集训也不迟。目标你需要有目标。特别是如果你想在全职工作的同时自学。如果你不给自己额外的压力,你的学业就会被耽误。所以你需要给自己施加内部压力。您的目标应该简单且可量化。你应该做你的研究并提出合理的目标。我的目标是:在1年内找到一份薪水与我相同或更高的软件工程工作。计划一旦你有了目标,你就需要一个计划来帮助你实现它。这个时候,你需要尽可能多地学习别人的成功故事。当然,他们中的任何一个都不会与您处于相同的情况,但是您可以从每个人身上学到一些东西。我使用Redditsubredditlearnprogramming、FreeCodeCamp论坛和Medium等资源来开发我的程序(并不断修改它)。2017年5月27日,我决定开始我的编程学习之旅。下定决心后,可以说是一头扎了进去。我决定每周工作时间不超过40小时,这样我就有时间在下班后和周末写代码。你很幸运,因为我已经详细记录了我的整个学习过程。经过多次迭代,我的计划最终是这样的:参加计算机科学入门课程,以获得对核心计算机科学概念的扎实的基本理解。关注freeCodeCamp,直到我可以在复合级别开发全栈Web应用程序。通过重构清理代码、添加测试并专注于高级概念。为开源做贡献准备面试我的计划开始时非常简单。当时我觉得我应该按照谷歌的技术指导方针,所以我参加了他们推荐的入门课程,UdacityCS101。第0个月-UdacityCS101,HarvardCS50做出这个重大决定让我充满活力。我迫不及待地想在下班回家后立即开始编码,并且不想在睡觉前停下来。然后整个周末都是这样。UdacityCS101跟踪完成百分比,这对我来说是一个很大的动力。每天编程后,我都会跟踪我们的完成百分比。在10天内我完成了前75%。最后25%专注于递归,这对我来说有点难。总而言之,我最终在20天内完成了UdacityCS101。当我在学习UdacityCS101时,我也开始经常去Reddit的learnprogrammingsubreddit。我在上面了解到,对于希望转行的自学成才的开发人员来说,积极上网非常重要。我决定在Twitter、Reddit、StackOverflow、Medium和Quora上用我的全名创建新帐户,以获得在线影响力。此外,我决定停止查看Instagram、Facebook和Reddit的非编程子版块,以避免分心。我唯一一次查看手机是查看与编程相关的新闻和帖子。这是关键,因为它确保我可以找到最好的学习路径和学习资源。这就是我在edX上发现哈佛CS50的方式。起初我满足于只参加入门课程,但似乎每个人都在推荐哈佛CS50,所以我决定再试一次这门课程。其他学校的计算机科学专业的学生也参加了这门课程,并表示他们在哈佛学习CS50的知识比他们在自己大学学习1或2年的计算机科学知识要多。普遍的共识是,这门课程很难但值得。到第0月底,我已经完成了前5节课和家庭作业。第1个月-哈佛CS50、Linux、首次聚会、freeCodeCamp大约在一个月的一半时间我终于完成了CS50。关于学习CS50的心得我不想多说,因为我已经在这篇文章中详细讲过我的心得了。总而言之:这是一门很棒的课程,我强烈推荐它。DavidMalan是一位出色的讲师,有很多资源可以帮助您通过课程。您从C开始,转到Python,最后完成Web开发。安排的很紧,涉及的素材也很多,但我觉得还是很值得的。在CS50之后,我决定将我的XPS15配置为双启动Windows和Ubuntu。这是一个令人沮丧的周末。我把隔板弄乱了,笔记本几乎成了砖头。我几乎想扔掉那台笔记本电脑,然后买一台新的。我慢慢放弃了Windows,最终主要使用Ubuntu作为平台。我想强迫自己习惯一种在某种程度上有效的命令行方法,但它还有很长的路要走。为了保证自己每天写代码的专注度和节奏,我开始了写代码的100天之路。跟踪您的进度很重要。如果你每天都取得进步,即使看起来并不多,但随着时间的推移,你会回顾并意识到你已经走了多远,这会激励你继续前进。知道我的网络会成就我或毁掉我,我鼓起勇气参加了我生命中的第一次编码聚会。我以前从未参加过任何聚会,更不用说编码聚会了。所以我一路紧张,开车到那里停好车,进了门,差点掉头就走回家。这是该小组的第一次会议,这很有帮助。我很快意识到我没有理由紧张。没有人认识任何人,没有人在这里下结论,每个人都渴望学习。而这只是派对狂潮的开始。我最终在9个月内参加了50多个派对。很高兴我很早就开始参加派对了。大多数人只是在找工作时才开始出现,但到那时已经太晚了。早点入场的原因有很多。这里只是一些:培养关系需要很长时间。早开始意味着你以后找工作的时候,保证有一段可以依靠的关系。与陌生人讨论编程时准备面试的好方法。您可以学习新的框架并访问前人的学习资源。这些都会影响你以后的学习计划。在我的编码之旅的这一点上,有一点不确定性。在这一点上,我需要决定我想成为什么样的软件开发人员。最后,我选择了web开发,因为它看起来需求量很大,而且网上的资源也很多。弄清楚这一点后,我需要弄清楚下一步该怎么做。有人建议在这个阶段我应该考虑我想开发什么样的网络应用程序并继续前进。有些人向我推荐了TheOdinProject或freeCodeCamp。那个为我每周参加聚会做策划的人了解Ruby,并且想用Ruby做项目。我决定投身于奥丁计划,这也是原因之一。然后2天后我决定再次放弃这个想法。这是走自学路线的缺点之一。前一分钟你认为自己找到了前进的方向,第二天你又怀疑自己是否走在正确的轨道上。我了解到Ruby正在失宠,并通过搜索比较Ruby和JavaScript的工作证实了这一点,所以我最终决定开始freeCodeCamp。freeCodeCamp令人沮丧的事情之一是他们提出了项目想法,所以参加训练营的每个人都在做同一个项目。然而,我最初担心的是我想从众多候选人中脱颖而出。然而,我最终爱上了freeCodeCamp,现在我强烈推荐你学习它。想了解更多关于freeCodeCamp的经验和建议,可以参考我的这篇文章。第2个月-YDKJS、freeCodeCampFrontend、React我开始阅读《你不懂JavaScript(YDKJS)》是因为每个人都推荐它作为freeCodeCamp的补充。我被迫重读了几章,因为它太紧凑了,但它非常适合学习词法作用域、闭包、保留以及您听到并想学习但从未尝试过的有关JavaScript的所有其他内容,因为它太难了。我完成了freeCodeCamp的前端部分。它的清单格式和预计完成时间对我有很大帮助,激励我尽快完成。我迫不及待地想进入下一章学习React。然而,这也意味着我的项目是极简主义的。除了尽我所能实现用户故事外,我什么都不做。事后看来,也许我应该专注于让项目更具吸引力。也许这会让我对CSS有更多的了解。接下来就是学习React,忙得快喘不过气来了。我听说过很多关于React的信息,并准备好成为其中的一员。但是,由于当时的许可问题,我有点犹豫。我真的很高兴这不再是问题。学习React对我来说很困难。当时我还没有找到任何好的教程(但现在它们似乎无处不在)。我试着阅读文档并遵循Facebook的西洋双陆棋教程,但我不太明白它是如何做到的。有人告诉我它不适合我,这意味着我对JavaScript的理解不够好。所以我回去读了《你不懂JavaScript》,但同样,它对我来说太高级了。第三个月——freeCodeCampReact,CodeClub,开始freeCodeCamp后端学习最后,我决定做freeCodeCampReact项目来实践一下,看看效果如何。生成的代码很丑陋,但它确实帮助我更好地理解React。我参加的每周聚会决定用JavaScript而不是Ruby做完整堆栈的项目,他们还决定第一个项目是聚会组的网站,CodeClub.Social。使用React和MeetupAPI,我开发了一张卡片,允许用户通过我们的网站注册接下来的3场聚会活动。这对我来说有点困难,因为我不得不从freeCodeCamp休息一下才能做到这一点,但这是一个我不能错过的机会。我很高兴能和一小群人一起做项目。这也帮助我学习了Git和Github。月底前开始在freeCodeCamp学习后端开发。第4个月——完成freeCodeCamp后端学习和Yeggle开发。我完成了freeCodeCamp的所有API项目,但是我开始退出freeCodeCamp去做ImageSearchAbstractionLayer项目。我迫不及待地想开发一个全栈的web应用程序,所以当我看到这个项目的名字时,我立即对自己的项目有了一个想法。我正在尝试制作一个节点应用程序,在数据库中存储随机imgurURL,然后制作一个前端,为这些随机图像输出用户指定的数字。每个人都是对的:当您从事自己提出的项目时,您会更努力地工作并且会更成功。当我完成这个项目时,我感到一种自豪感。它丑陋而笨拙,但最重要的是它有效。在freeCodeCamp的学习过程中,我也了解了哪些项目是我能力范围内的。我以前经常去跑步,跑步的时候偶尔会有一些想法,回到家就写下来。这样当我准备好时我就有了一个项目列表。最后,我终于准备好与用户分享我有用且完善的全栈网络应用程序并将其包含在我的产品组合中。我已经准备好了,等不及了。寻找新餐厅时,我总是打开Yelp阅读其他人的评论,然后打开地图阅读其他人的评论。如果我制作一个应用程序来比较两者呢?所以我制作了Yeggle,它使用Node/Express/React,加上谷歌地图和YelpAPI。有几个我认为我无法克服的障碍,但最终我设法克服了它,我为这个应用程序感到非常自豪。然后我把它发到Reddit上,但没人注意。这让我有点失望,但我并没有被这种情绪所淹没。第5个月-StockIT这个月我没有做什么,因为我去日本和泰国度假了2周!但是我开始并完成了下一个项目。我一直在阅读关于自学成才的开发人员找到工作有多难的信息,所以我认为我必须做一些独特的事情。我记得有一个游戏,当道琼斯股票图表开始发挥作用时,你有机会买入和卖出,目标是跑赢市场。该游戏的目的是向您展示击败市场有多么困难。我的想法是做一个类似的游戏,但你的对手不是市场,而是机器学习算法。所以我创建了StockIT。我在Pandas和ScikitLearn上学习了一些涵盖各种机器学习技术的视频教程。我希望做一些很酷的深度学习技术,但我意识到这需要大量的数据集和时间,这是我负担不起的。相反,我采用了一个简单的线性回归模型。我认为这将是最困难的部分,但事实并非如此。让D3与React一起工作就是这样。两个库都想控制DOM。还有其他库有助于将两者结合在一起,但我认为引入新库会使项目膨胀。我最终使用D3生成SVG并使用React处理DOM,一切看起来还不错。我又在Reddit上分享了,这次大家都很喜欢!事实证明,就像VC一样,Reddit上的人都对机器学习很着迷。来自Reddit用户的喜爱极大地增强了我的信心。每个人都玩我的游戏并且喜欢它!第6个月-jobSort(),找工作在StockIT之后,我正在进行我的下一个个人项目。我想做一个工作委员会,从StackOverflow、Github和HackerNews等面向技术的小型工作列表网站汇总工作机会。为了增加它的独特性,我决定把用户的技术需求对位置和需求程度进行排序。例如,假设我正在寻找一份需要JavaScript、React和/或Python知识的工作,招聘人员非常渴望JavaScript和React,而不是Python。这种需求可以量化为JavaScript是3分,React也是3分,Python是1分,这样就可以对列表进行排序了。我在做这个项目的时候,遇到了各种各样的阻碍,被迫在画面中调整了几次路线,但最终还是做出了自己满意的产品。我最终的技术堆栈是React/Node/Express/MySQL。我将项目发布到cscareerquestionssubredditsubreddit,获得了650次浏览,但因为他们不允许个人项目而被撤下。“最终”的成品就到这里了,如果你对我的折腾过程和重构感兴趣,也可以看看我的这篇文章。出于我自己的原因,jobSort()占用了我一个月的大部分时间。最后我和第一次见面时认识的朋友喝了咖啡,他建议我现在可以申请工作。我一直看到有人说他们等了太久才申请。而且,每次我看到一个帖子问什么时候申请工作,最喜欢的答案总是“现在”。我最初的想法是按照自己的结构化计划完成个人项目组合,提升自己的实力,然后为开源项目做一些贡献,最后准备面试,然后求职。这位朋友说服我放弃那个项目并开始申请。所以这个月我做了一份材料和简历。我下个月开始申请。第7个月-测试、求职这个月我的重点是我自己的项目和申请工作。我也想学习测试和Redux。我向CodeClub.Social添加了弹性框以使其响应。我改进了jobSort()的移动用户体验。我在jobSort()中添加了测试,我使用的是mocha/chai/enzyme,它很难设置,但很容易上手,但很难达到100%的覆盖率。到月底,我已经申请了63份工作。我认为这是一种自我评估。我的作品集/简历够好吗?如果是这样,我需要做什么来准备面试?我最初是通过HackerNews:WhoisHiring和Indeed申请的。在HackerNews上,我使用jobSort()来确定要申请的工作。在Indeed上,哦,我尝试了非软件公司,看看我是否也可以获得邀请或面试机会。起初,我申请得很快,几乎没有对简历/求职信进行个性化处理。然后,我决定要个性化我的求职信和简历,并尝试向公司的某个人发送电子邮件。这种方法,明显比天女散花的修炼要好。那个月我接到了5个电话——2个来自招聘公司,3个来自软件公司,包括:.com公司的DevOps/测试角色,合同工作B轮的视频分析该公司是一家相当大且成功的初创公司最近被一家大公司收购。我被两个HR筛选了,但是都没有让我做现场面试。当然,我对这三个调用还是比较满意的,从中也学到了很多东西。网络上的每个人都提到初级开发人员不希望从一开始就知道那么多,他们只需要充满热情和兴奋地学习。所以我认为这很简单。我对学习充满热情和兴奋。但我从这些电话中了解到,没有人在寻找初级开发人员。他们希望您从第一天起就知道该做什么。这些电话告诉我需要:从第一天起就足够好,为另一方带来价值足够自信,让他们相信我可以从第一天起就为他们增加价值第8个月-NightShift、Redux、开源、on-现场面试从这个月开始,除了全职工作外,我还上夜班——每天12小时,每周6天,从下午5点到凌晨5点。我知道这个月我做不了那么多,但我有一个目标,我想实现它,这样我就可以休息一个月。我用Redux重构了jobSort(),令人惊讶的是它并不像我想象的那么难。我听了很多关于它的播客并阅读了关于它的博客,但在我开始使用它之前,这些理论都没有多大帮助。我真的很喜欢Redux的数据流处理。现在看到人们抱怨Redux很有趣。我认为我没有资格发表意见,但我确实喜欢reducer模式。这个月,我的计划是做开源。我的计划是做出我的第一个开源贡献,这将是对一个不错的库的一个很好的贡献。我要为React写点东西!每个人都说这个代码库很难阅读,更不用说贡献了。但我需要脱颖而出,我需要独一无二。我知道我的贡献不会很大,但我还是想做。我将从阅读所有文档开始,然后继续阅读代码库。查看每一期,每篇新闻稿。完整阅读React文档是一个很好的练习,我很高兴我做到了。但我很快意识到,为React做贡献的问题在于没有多少“好的第一手问题”,因为问题很快就会被抢购一空。有一次我在聚会上,AnthonyNg建议我试试Downshift,这是一个由KentC.Dodds开发的自动完成库。这改变了游戏规则。这东西正好适合我玩。正确的难度,正确的问题数量,没有太多的合作者,超级乐于助人的维护者,整洁且经过良好测试的代码。除此之外,它是我在jobSort()应用程序中遇到的一些问题的完美解决方案。大约在月中,我收到了一封来自我上个月申请的公司的电子邮件。他们进行了第一轮电话筛选,然后是技术电话筛选。他们正在寻找的技术正是我所学的——React、Redux和D3。我主要谈论我的项目以及我为什么做出某些决定。之后,他们就派我去现场面试。这是我第一次现场面试!我根本没有准备面试,所以我的期望值很低,我也没指望得到那份工作,但我会获得宝贵的面试经验。因为我还在上夜班,每天只能睡3个小时。幸运的是,技术部分不是白板,而是1小时的结对编程。这是一个相当简单的挑战,但我非常紧张。一开始,我关心的是确保我在不查找的情况下理解所有内容。当我意识到我无法完成挑战时,我立即意识到我需要停止担心面试官会怎么看我,所以我去谷歌/StackOverflow寻找答案。我最终没有完成它,期待自己的悲惨结局。现在我认为我的结对编程失败了,我反而放松了面试的其余部分。最后,我昂着头离开了面试。最坏的情况是我也获得了宝贵的面试经验,最好的情况是我得到了第一份工作。第9个月-工作机会从我决定转行并学习更多编程知识的第一天起,9个月零7天后,我终于得到了第一份工作机会。我很自信,因为我在第一次面试时就得到了录取通知书,但与此同时,如果我不接受这份工作,我将不得不担心这是否是我在几个月内获得的唯一录取通知书。该怎么办?我最终接受了那份工作,并对我的决定感到满意。我希望能够通过编写代码来赚钱!建议到目前为止,我基本上已经分享了我的故事和一些建议。如果您正在阅读本文,您可能正在考虑转行或为此学习编码。希望以下建议能帮助你制定计划或坚持目前的计划,最终达到你的目标。找到激励您的因素并将其用于您的优势。对我来说,这就是清单、过程文档以及与不同编程社区的交互。如果你没有动力去实现你的目标,那么其他一切都不重要,因为你无法实现它们。设定目标并实现它们。我会说你应该有月度目标,更好的是,每日目标。每月目标是为了确保您在朝着主要目标迈进的正确轨道上,而每日目标是为了确保您每天都在进步。对我有用的一个策略是在前一天晚上为第二天设定目标。这样你就不会整天都在做无用的事情,并且感觉自己正在取得进步。这迫使您将每天的??成就与每天的目标进行比较。尽早参加聚会活动,不要等到您准备好后再参加。正如我之前提到的,参加派对可能会让人害怕。但通常每个人都很好,愿意提供帮助。你可能会发现有些人没有兴趣和你讨论,但那是少数,没有人喜欢当法官。此外,每个人都喜欢提供建议(就像我现在所做的那样)。尽早为开源做出贡献,不要等到你觉得准备好了。当你第一次开始编程时,Github似乎是一个你永远不想去的可怕地方。但实际上那里非常欢迎初学者,也是学习好的代码和让别人审查你的代码的好地方。如果你还不相信,不妨看看我的这篇文章?。尽早申请工作,不要等到您认为自己准备好了。这对我来说很难,因为我认为我与众不同。我认为我不需要去市场试水看看会发生什么。我以为我已经知道什么时候可以申请了。现在我告诉你。你永远不知道什么时候可以申请。所以你现在可以实际申请了。当然,你不应该在连for循环语句都没有学过的情况下发疯去申请300家公司。但是你应该知道的是,了解你应该学习什么的最好方法是申请工作和测试市场。好了,现在轮到你玩了,我们来写代码吧!
