社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

GitHub上最励志的计算机自学教程

人工智能与大数据技术 • 3 年前 • 243 次点击  

本文经AI新媒体量子位(ID:QbitAI)授权转载,转载请联系出处
十三 贾浩楠 发自 凹非寺

谷歌工程师条件:名校出身、CS专业背景、博士学位加持,技术过硬?

国外一个叫John Washam的小哥告诉你:不用,自学8个月也可以!

John Washam励志要成为一名谷歌软件工程师,但没有CS专业背景的他,只能通过自己的努力来达成理想。

于是,8个月的时间里,小哥花了数千小时阅读书籍、编写代码、观看CS技术讲座,一路披荆斩棘、打怪升级。

最终,虽然没有去谷歌,但他人到中年,还顺利成为了一名亚马逊AWS的技术专家,年薪百万。

更加难能可贵的是,小哥还将自学经验编写成了一份教程,在GitHub上线以来,已收获近10万星的好评。

正如他所说:

即便没有面上(?)梦寐以求的谷歌,但是教程,也可以用来好好充实一下自己。

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面试注意事项

面试的第一步当然是要有一份好的简历,这样才能为你争取到宝贵的面试机会。知名科技博主Steve Yagge给出了10个贴士,帮你做出一份还不错的简历。

这位Steve曾经在亚马逊、Google都工作过,Washam的这个项目就大量地引用了他的技术博客内容。

在面试时,你可能会遇到这20个问题,每个问题准备 2-3 种回答。准备点故事,而不要只是摆一些你完成的事情的数据。

面试官在也会问你还有哪些问题,不要说自己没有什么要问题,可以试试问一些此类问题:

当然,进入Google也不意味着结束,你还要新的学习过程。

Washam还有一份附加内容,包括Emacs和Vim、Unix命令行工具、密码学。这些内容虽然不会直接用到,但是会大大提高你的效率。

一个Web前端的新征程

其实严格来讲,John并不是一个编程小白。

从高中起,John就开始学习编程,学的是BASIC语言,这还在是上世纪90年代。

大学毕业拿到经济学学位后,他先是在军队服役两年,驻扎韩国。

退役后他留在韩国教英语,突然发现自己离开CS领域的这几年间,太多的新技术新工具出现,自己的知识结构出现了断层,无法支撑起一个程序员的职业生涯了。

于是他利用一切业余时间,艰苦地学习Perl、HTML、CSS(当时这还是新东西)、JavaScript和SQL。

终于在2001年,John正式成为了一个网页开发程序员,开始了19年的码农生涯。

截止2017年,John的职业生涯可谓十分成功:在大小公司都有过任职、组建管理过项目团队、经营壮大过初创公司,自己还亲自创办了3家软件公司,其中2家至今还在健康运营。

按照John自己的话说,这十几年的工作经历,将他锻炼成了一个合格的程序员、一个优秀的产品经理、一个CEO、一个市场销售。

但是他的目标不止于此。他的梦想是在谷歌任职软件工程师,在充满智慧和创造力的团队里提高自己。

最初他认为凭自己的工作经验可以轻松获得职位,但拿到了谷歌面试题他才发现自己欠缺太多。

一个优秀的软件工程师应该精通数据结构和算法、汇编语言、内存设计等,还要综合考虑代码和程序结构对机器在应用场景下的影响。

于是他以这份谷歌试题为指导,开始了编程自学。

并且在github上建立了「9894项目」,因为谷歌建立与1998年9月4日。

后来这个项目改名为现在的「coding interview university」。

CS自学三点注意事项

John结合自己的学习经历,给出了三点自学编程的建议。

一、早问早计划,不要想当然

John最大的教训是自己花了太多时间学习根本用不上的东西,比如他曾经用了3周时间阅读了1000多页C++的资料,但是最后面试和工作中用的却是Python。

这是John的算法学习资料,最后证明走了冤枉路

原因是他担心面试时可能会被问到。

这个例子不是说C++没必要学。

而是强调你要提前收集信息做出计划,在不同的项目上分配合理的学习时间,提高效率。切忌「我觉得……」

二、视频比看书效率更高

观看视频的学习效率自然要比自己啃书快。

找到好的教学视频,意味着你有更多的时间实际演练编程题目。

三、反复温习十分重要

不断反复是形成记忆的关键,正如我们在上文提到的,John推荐使用记忆卡。

他自己制作了1792个电子记忆卡。一有空闲时间就掏出来温习,比如超市排队时、公交车上等等。

对于一个卡片的的问题,回答正确还不够,John会在一段时间内多次回答正确才会标记为「已掌握」。

最终这位小哥没有去谷歌,而是接到了亚马逊的offer,现在他在亚马逊做软件工程师。

但是他自己说之前的学习经历并不是无用功,现在他已经全面掌握了软件工程的基本技能,无惧工作中的任何挑战,并且实现自我飞跃的那一天越来越近。

而且John小哥的经历,也不局限于程序员本身,多于更多人而言,也有值得参考之处。

他认定了一个目标,然后制定计划、勤奋付出,最后天道酬勤获得回报。

John可能也是一个「一万小时定律」的拥趸,但就算按照他每天12小时、坚持8个月(每月31天),他从一个网站前端到AWS技术专家,历时也不过2976小时——远未到1万小时。

但就是这样目标坚定的8个月,John从入门到获得大厂认可,百万年薪加持。

外媒调查亚马逊软件工程师平均年薪超过百万人民币

这是我们在GitHub看到最励志的故事,也是我们希望让更多人看到的原因,并且由衷希望更多人因为这样的经历和分享,创造属于自己的故事。

坊间笑谈太多的“从入门到放弃”,但也有人“从入门到百万年薪”。

生命不息,奋斗不止,Keep walking~

传送门:

GitHub项目地址:
https://github.com/jwasham/coding-interview-university

电子记忆卡项目地址:
https://github.com/jwasham/computer-science-flash-cards

参考链接

个人博客:
https://www.freecodecamp.org/news/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13/

相关推荐:架构师精选

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/107889
 
243 次点击