当前位置: 首页 > 科技观察

GitHub励志计算机自学教程:8个月,从中年Web前端到亚马逊年薪百万的软件工程师

时间:2023-03-13 14:06:04 科技观察

谷歌工程师要求:名校背景,CS专业背景,博士祝福,优秀的技术?国外一个叫JohnWasham的小哥告诉你:不用,你可以自学8个月!JohnWasham立志成为一名谷歌软件工程师,但没有CS背景的他只能通过自己的努力实现自己的理想。于是,在8个月的时间里,小弟花了上千小时看书、写代码、看CS技术讲座,一路打怪升级。最后虽然没去谷歌,但人到中年成了亚马逊AWS的技术专家,年薪百万。更难能可贵的是,小哥还将自己的自学心得整理成教程,在GitHub上线后获得了近10万的star。正如他所说:即使你没有你梦寐以求的谷歌(?),但教程也可以用来充实自己。PS:有中文版教程~~GitHub超10万星自学合集。什么样的编程教程能如此火爆?弟弟最初的目标是“进”谷歌,于是每天自学8-12小时,坚持了8个多月。边雪也整理了这个自学项目。但在完成学习计划后,他最终被亚马逊录取为软件工程师。Washam说,无论你面试的是哪家软件公司,这里的项目都可以让你做好准备,包括亚马逊、Facebook、谷歌和微软等科技巨头。接下来,让我们跟随Washam的脚步,来了解一下这本访谈书吧。选择一种语言和必要的知识资源首先要做的是选择一种语言。Google通常使用C++、Java、Python,有时也使用JavaScript和Ruby。其背后还有一些SQL、HTML等技术没有一一列举。然后开始学习计算机硬件知识:然后补充计算机科学的基础数学知识,如算法复杂度/Big-O/渐近分析法、数据结构、树、排序、图论等。还有递归、动态规划、组合学和概率、NP&NP完全和近似算法、缓存、线程和进程、系统设计、可伸缩性、数据处理。看到这么多的知识点,是不是有点眼花缭乱?Washam告诉你一个小技巧。因为你不可能一次记住所有的知识点。所以需要把要复习的知识点做成flashcard(抽认卡):普通的,有代码的,类似于背单词。每张卡都会有不同的格式设计。抽认卡的源码在项目首页有,可以根据自己的学习特点制作。Washam还保留了一套ASCII代码表、OSI堆栈、Big-O符号和更多备忘单,供他在业余时间研究。每编程半小时休息一下,复习一下你的抽认卡。当然,论文的阅读也是必不可少的,尤其是谷歌发表的一些基础技术论文。书籍推荐一些关于算法和C++编程的。Google面试考量的第一步当然是要有一份好的简历,这样才能为你争取到宝贵的面试机会。知名科技博主SteveYagge给出10个小贴士,助你打造一份体面的简历。这位史蒂夫曾在亚马逊和谷歌工作过,Washam的项目大量引用了他的技术博客内容。面试的时候,你可能会遇到这20个问题,每个问题准备2-3个答案。准备一个故事,而不仅仅是关于你已经完成的事情的数据。面试官也会问你有什么问题。不要说你没有任何问题。你可以试着问一些这样的问题:当然,进入谷歌并不意味着结束,你还需要一个新的学习过程。Washam还有一个附加组件,涵盖Emacs和Vim、Unix命令行工具和密码学。这些内容虽然不会直接使用,但是会大大提高你的效率。严格来说,约翰不是编程新手。从高中开始,John就开始学习编程,学习BASIC语言,那时候还是90年代。从大学获得经济学学位毕业后,他首先在军队服役两年,驻扎在韩国。退休后留在韩国教英语,突然发现离开CS领域的这几年,出现了太多新的技术和工具,他的知识结构已经崩塌,无法支撑一个程序员的职业。于是,他把所有业余时间都花在了苦心学习Perl、HTML、CSS(当时还是新生事物)、JavaScript、SQL上。终于在2001年,John正式成为一名Web开发程序员,开始了长达19年的码农生涯。截至2017年,John的职业生涯可谓是非常成功:服务于大大小小的公司,建立和管理过项目团队,管理和拓展过初创公司。他还亲自创办了3家软件公司,其中2家至今仍在稳健运营。用John自己的话说,这十年的工作经历,让他成为了一名合格的程序员、一名优秀的产品经理、一名CEO、一名营销业务员。但他的目标不止于此。他的梦想是在谷歌做一名软件工程师,在一个充满智慧和创造力的团队中提升自己。一开始,他以为凭着工作经验可以轻而易举地得到一个职位,但是当他拿到谷歌的面试题时,才发现自己缺的太多了。一个优秀的软件工程师应该精通数据结构和算法、汇编语言、内存设计等,还应该综合考虑应用场景中代码和程序结构对机器的影响。于是他以这道谷歌试题为向导,开始了自学编程。而在github上建立了“9894项目”,因为谷歌成立于1998年9月4日,后来该项目更名为现在的“编码面试大学”。CS自学的三个注意事项John结合自己的学习经历,给出了三个自学编程的建议。1.早询问早计划,不要想当然。约翰最大的教训是他花了太多时间学习他根本不会用的东西。比如他曾经花了3周的时间阅读了1000多页的C++资料,但最后还是面试和工作了。它在Python中使用。△这是John的算法学习资料,原来是怕面试被问到走错了路。这个例子并不代表C++没必要学。相反,它强调你需要提前收集信息来制定计划,在不同的项目上合理分配学习时间,提高效率。不要说“我认为……”。2、看视频比看书更有效率。看视频的学习效率自然比自己看书要快。找到好的教学视频意味着您有更多时间实际练习编程主题。3、反复复习很重要不断重复是形成记忆的关键。正如我们上面提到的,约翰建议使用存储卡。他自己制作了1792张电子存储卡。一有空就拿出来复习,比如超市排队的时候,公交车上等等。对于一道卡片题,仅仅回答正确是不够的,约翰会在一段时间内正确回答几次后标记为“掌握”。最后这位小哥没有去谷歌,而是拿到了亚马逊的offer,现在在亚马逊做软件工程师。但他自己也表示,之前的学习经历并非一无是处,现在已经完全掌握了软件工程的基本技能,不惧怕工作中的任何挑战,距离实现自我飞跃的那一天越来越近了。而John哥的经验也不仅仅局限于程序员自己,同样值得更多人借鉴。他确定了目标,然后制定了计划,努力工作,终于得到了回报。John可能也是“10000小时法则”的狂热爱好者,但即使坚持8个月(一个月31天)每天12小时,他从做网站前端到做AWS只用了2976小时技术专家——远达不到10000小时。但就是这样一个坚定的目标,8个月的时间,约翰从入门到被大厂认可,并坐拥百万年薪。△外媒调查,亚马逊软件工程师平均年薪超过百万人民币。这是我们在GitHub上看到的最励志的故事,也是我们想让更多人看到的原因。我们真诚地希望更多的人会因此而分享这段经历。创造你自己的故事。“从入门到放弃”的笑话太多,但也有人“从入门到百万年薪”。生命不息,奋斗不息,Keepwalking~传送门:GitHub项目地址:https://github.com/jwasham/coding-interview-university电子记忆卡项目地址:https://github.com/jwasham/computer-science-抽认卡

猜你喜欢