编程学习道阻且艰,大厂仿佛遥不可及?我总结了一套学习架构,阅读之后,你将不再迷茫,全力迸发。
我相信大多数学习编程的同学都有着对大公司的憧憬。技术、声望、薪资、福利,这些都足以成为吸引你进入大厂的理由。
但是,如何进入大厂呢?
对于很多同学来说,通往大厂的道路并不明朗,不知道是否有希望,也不知道怎么努力,感觉遥不可及。
其实,我身边有很多成功拿到大厂 offer 的同学,他们并不都是大家想象中的 985 名校硕士、竞赛金牌、开源大佬、编程神童。相反,我看到了很多背景一般却凭实力冲进大厂的同学,而且他们在工作中的表现非常出彩!
通过和这些同学的交流,我发现他们在编程学习和求职方法上有一些共性,再结合自己的真实经历,我总结了一套较通用的编程学习和求职架构。
无论你现在处于编程学习的哪个阶段,又或者只是对编程有兴趣,下面的内容都会对你有一定帮助。让你看到更清晰的未来,并为之而努力。
首先,要明确一点,编程学习没有捷径!必须明晰目标、拉长战线、掌握技巧、持续学习、做足准备,才能立于不败之地。
下图是我总结的编程学习架构:
如图,我将编程学习分为 7 个部分。为什么叫做 “学习架构” 而不是 “学习路线” 呢?因为在编程学习中,有些事情不是严格按照顺序去做,而是在我们整个学习过程中都要长期坚持的。
下面详细解释一下这套编程学习架构的 7 个部分。
1. 初入茅庐,海纳百川
刚开始学习编程时,难免会感到迷茫,如果你初入大学,会发现身边大多数的同学选择加入了学生会、各种社团来丰富校园生活,而不是一门心思去学习。其实这个阶段,并不需要太过关心和考虑以后找工作的问题,要做的事情就是学好大学的一些通识课程,保证成绩不能太差。不要提成绩无用论,除了学校之外,高的绩点也是简历的牌面,如果能取得前几名的好成绩,是绝对的加分项!
对于计算机专业的同学,刚开始并不会接触到很深入的知识,也很少有机会去开发一个完整的作品。基本都是学习 C
、C++
等编程语言,因为涉及和能够学习到的知识相对丰富。但是,想要学好编程,课本上的知识是远远不够的,一定要自学!
自学什么呢?
其实刚开始的时候大家并不知道自己擅长什么、真正喜欢什么、以后想做什么、从事哪方面的工作,因此,可以 “海纳百川”,多了解和尝试各种编程语言、技术框架、专业知识等。比如在课堂教的编程语言之外,去自主学习下 Web 网站开发或者 Python
。
怎么自主学习呢?看书?
过去几十年,我们的学习几乎一直依赖书本。但是如今,互联网上资源非常丰富,为我们自学编程提供了很大的方便。可以选择看纸质书、电子书,但是一定不要直接去啃那些很复杂的理论书籍,而是选择一些轻松有趣、相对简单、案例丰富的书籍。除了看书之外,可以选择 W3Cschool
、实验楼、FreeCodeCamp
等在线学习网站,边学边敲代码练习。还可以去 B 站上搜索一些视频教程,可能要比啃书学习要轻松得多!
但是,无论你选择何种方式去学习,一定要边学边练习,不必局限于一些习题或书中的代码片段,可以试着发挥自己的创意,去编写一些简单的网站或者实用的小工具,相信你会收获成就感,逐渐对编程产生兴趣。
这个阶段,除非你有非常明确的学习方向,否则没有必要对某一门技术过于执着,毕竟计算机领域很多技术和知识点是相通的,前期先多学习一些简单易懂的知识,会让编程学习轻松有趣一些。
2. 兴趣使然,纵横交贯
上一个阶段重在培养我们对编程学习的兴趣,当你学习了一些编程知识和编程语言后,你已经对很多零碎的知识产生了印象,后面学习新知识也会比之前更加容易和迅速。
这个阶段是你编程能力开始突飞猛进的时候。由于时间和精力有限,你要做的是从你已经学到的知识库中挑选出相对感兴趣的部分,比如某一门编程语言(比如 Java
),或者是某一个领域(比如 NLP
)。然后对这部分知识进行相对深层次的学习,可以去读一本经典的书籍,了解这门技术的特性,甚至是阅读相关源码。
在重点深入学习一门技术的同时,还需要继续保持开放,接触更多的新知识,而不是深陷其中、无法自拔。计算机的很多知识是相互关联的,如果多学习一些不同方面的知识,我们更容易将那些零碎的知识点串联成网,从而开拓思维,得到更大的收益。
但是,算法、数据结构、计算机网络等知识点比较特殊,即使没有兴趣,也要认真地去学习!因为它们可以培养你的思维,提升你的程序设计能力,对于程序员来说太重要了。毕竟大多编程语言都是相通的,语言只是工具,思想才是武器。
听起来可能比较抽象,但在实际面试和工作中往往这些零碎的小知识会发挥巨大的作用。比如,面试互联网大公司时,基本每一轮面试都会考察几道算法题目;面试后台开发岗位,也一定会问到计算机网络、操作系统的知识。在工作中,我们也经常会用到一些算法的思想来解决问题,比如滑动窗口、时间轮、布隆过滤器等。
这个阶段,我推荐大家选择主流的技术和框架进行深层次的学习,比如 Java
语言的 SSM
和 SpringBoot
框架。主流的技术教程多、文档多、遇到问题更容易解决,而且通常容易上手,能做出一些个人作品,增加兴趣和成就感。
3. 有的放矢,十年磨剑
如果你已经对某个编程语言或知识领域产生了浓厚的兴趣,或者已经能够得心应手地开发个人作品,那么恭喜你进入到下一个阶段。
本阶段要做的是确定自己的职业方向,做到有的放矢。
为什么没有在一开始就让大家明确目标呢?因为确定目标的时机很重要,过早或过晚都不好。很多人在上大学前可能对某一个职业特别憧憬,整天嚷嚷着自己一定要成为自己想成为的人,但是直到你真正接触这个职业或者其相关的知识一段时间,你可能才意识到自己并不适合。比如我小时候想当律师,整天看 CCTV 12
,也啃了几本法律书籍,但是后来自己记性差了,而且发现自己对编程的兴趣更大,因此也放弃了之前的目标。庆幸的是,我不是在大学期间才放弃律师这个职业,没有耽误到我学习编程知识。大学时间短暂,没有太多的时间给我们去迷茫和折返。
既然已经有了喜欢的编程技术和领域,确定职业目标就相对简单了。每个人有不同的选择,建议先从自己的兴趣出发,选择和自己的兴趣和所学技能相匹配的岗位。同时,也要考虑到目前的市场需求,最好看一些数据和调研,不要选择冷门职业。还有一些其他纳入考虑的点,比如薪资、工作时长、地点等等。确定职业后,还可以进一步地去选择公司。建议给自己定一个最高的目标,比如进入互联网大厂,要相信自己,只有饥饿的狼才能吃到美味的饭。
确定好职业目标后,就要根据职业,堆积打磨自己的技术栈。这是一个十年磨剑的过程,重在坚持。
首先要确认你的目标岗位需要哪些相关的技术,推荐直接到大互联网公司的招聘官网来看对某岗位的技术要求,比如 Java
开发可以看阿里和美团官网、C++
看腾讯官网、Golang
或 PHP
看字节跳动官网。
知道要重点学习哪些技术后,要制定一个明确的计划,将大的目标拆解为依次去学习每项小的技术,可以参考网上的一些学习路线,按照主次对技术知识进行排序,并规定好学习每个技术花费的时间,从而有一个整体预期,少走弯路。而不是杂乱无章地去学习,主次不分。
比如 Java
后台开发岗位一般会要求 Java
基础编程、Java
并发编程、数据库、计算机网络、操作系统、设计模式等,相应的技术栈可以是:Java
、MySQL
、SSM
框架、Redis
、Linux
等等。确定技术栈后,要按照计划,对每一项技术进行全面且系统的学习,推荐阅读一些经典书籍,比如 Java
可以看《 Java 核心技术卷 1 》、《 Java 编程思想 》等。
如果要进大公司,编程学习就不能仅仅止步于 “会用”,而是要懂得 “巧用”、“精用”,甚至能够对知识点进行复刻和创造。比如学习 MySQL
要去了解其底层的数据结构和调优策略,学习 Spring
框架时要熟悉其底层的设计模式和依赖注入的原理等。更重要的是,不能纸上谈兵,要有能力去灵活运用学到的知识来开发一个项目,企业需要的是能解决实际问题的人才。
学完这些知识后,你就可以踏实地在简历上写 “熟练运用 xxx 技术” 啦!
4. 学以致用,宁静致远
不止针对计算机技术类岗位,互联网公司的很多其他岗位,比如产品、运营、策划,都要求学生有较强的实践能力。但是学校的课本知识多少有些过时和应试教育,大多停留在理论层面,实践创新部分还是要靠学生自我驱动。如果不懂得自学和实践,真到找工作的时候,简历上没有项目经验,空空如也,是极大的劣势。
在学习技术的过程中,一定要边学边练,否则可能当你用心看完一本书后,打开电脑发现自己一行代码都写不出来,再回过头来翻书找代码,就浪费了不少的时间。
刚开始动手写代码时,如果没有什么创意,不知从何开始,可以按照网上的视频教程做一个简单的 Demo(小样),并且将这些 Demo 好好保存。后面学到新的知识后,可以选择自己现有的 Demo 进行改造和包装,比如添加新的功能、优化性能等等,尽量做出完整的作品,并用这些作品去完成课程设计作业、参加作品类竞赛、申报科创项目、申请软件著作权、专利等等。如果某个作品做的非常好,甚至可以考虑将其正式上线,说不定就发家致富了呢?
积累了作品,你的简历就多了 “项目经历”、“竞赛奖项” 等内容,而这些内容,是面试官非常看重的。
在正式找工作前,建议大家先去找一份和目标岗位相关的实习。曾经看过一份校园招聘数据,数据表明,入职头条的员工中 50% 都曾经在头条实习,而网易员工中有超 70% 的同学都有实习经历。
实习就像正式员工跳槽一样,不是非要一步登天。第一段实习经历没必要有太高的要求,但是最好要和自己的职业目标相契合,能够感受真实的企业环境、学习到很多的工作经验、在团队中实践自己的技术知识。不用担心自己水平不够,无法通过面试。其实在参加面试的过程中,能够更快、更针对性地发现自己的不足,并且在面试后进行复盘和总结,能够得到更快速的成长。
怎么去找第一份实习呢?其实现在有很多帮助大学生找实习的正规平台,比如牛客网、实习僧 APP、找学长学姐内推、或者直接在企业招聘官网投递简历等。
宁静致远 是我个人很喜欢的一种境界,大家在找实习或者正式求职时难免会受到外界环境的影响。比如小李拿到了世界 500 强的 offer、年薪百万,或者小王成天抱怨找工作难、竞争激烈。然而这些夸耀或负面情绪和我们又有什么关系呢?就像考场里做卷子,提前交卷的一定考得最好么?谁知道最后你的分数会不会比他高呢?
我们应该关联上下文去看待各种人事、情况和情绪,确实有很多拿到好的 offer 的同学,他们也许比你聪明,也许比你有背景,但更多的是他们曾经付出了更多的努力,舍弃了很多休闲娱乐的时间。找工作难、无法通过面试、产生负面情绪也一定是有原因导致的,企业中的面试官不会都戴有色眼镜看人,可能还是我们没有足够多的付出或者有一些失误,又或者其他人比我们更努力、更幸运。我们要做的是和优秀的同学多交流,发现他们身上的闪光点,分析他们成功的原因,向他们学习经验和方法。多和优秀的人交流,自己也会变得优秀。同时,我们要吸取每一次失败的经验教训,记录下来,多多自省。然后更重要的是,保持宁静,按照自己的规划,一步一步往前走就好。
5. 锋芒毕露,放手一搏
如果你已经按照上述的阶段努力过,不仅有了一定的技术知识储备、还有项目经验,或者是一段实习经历,那么恭喜,你已经具备了一定硬实力!下面你要做的就是利用一些软技巧,在求职时,将你的优势与亮点锋芒毕露。
首先,整理一份完美的简历。简历是一个人求职的门面,即使你的口头表达能力有多优秀,见不到面试官也就毫无用处,因此要尽可能地在简历上展示自己。
编程技术类的求职简历通常包括几个部分:
- 个人简介:包括基本信息、照片、学校、成绩等。
- 个人技能:列举你熟悉的技术知识,也就是你的技术栈。
- 竞赛奖项:列举你曾经参加的竞赛和获得的奖项。
- 项目经历:列举你做过的项目,比如课程设计、学习作品、竞赛作品、实习项目等。
- 科研学术:列举你的学术研究和科研成果。
- 实习经历:介绍你的实习情况,在哪实习、做过什么、带来什么成果。
其实,编写简历是有很多技巧的,下面列举一些常用技巧:
- 简历必须一页,排版整洁,保持清爽,且色调不宜过暗或过亮,可以使用淡蓝色 。
- 要分析自己的个人优势,对各板块排序,把亮点放上面 。
- 简历上的文字内容精炼,用词尽量专业,拒绝口语化,你的简历终究是要给专业的面试官看的,不用担心他看不懂。
- 项目、实习经历介绍中,可用 STAR 分析(场景、任务、行动、成果)来梳理自己的核心工作,其中,成果最重要,最好列举明确的数据,比如使用 xx 技术将项目的并发量提升了 30%。每个项目的介绍不宜过长,给面试官提问的空间。
- 利用简历去引导面试官。很多面试官都会从简历中挑选他感兴趣的项目或技术去展开提问,因此必须足够熟悉写到简历中的项目和技术,并提前想好对策。比如项目中用了哪些技术,为什么用,有什么亮点,怎么去优化等。
- 写完简历后,自己通读几遍并找专业的 HR 来进行点评,还可以多阅读借鉴他人的简历。
- 针对不同的岗位和岗位描述,准备不同的简历,在部分细节和内容上调整。比如投递产品和运营岗,你的项目和实习介绍就要分别侧重这两种不同的职位。
- 内容允许适度夸大,但绝对不能欺骗!这个小技巧尤其适用于没有特别多的项目的同学,但也要注意不要被面试官戳破哦。
准备好简历后,要多多练习自我介绍。自我介绍的重点是通过讲述自己的校园经历、学习过程、竞赛、实习、研究等来突出你的学习能力、沟通能力及解决问题的能力。其他的部分,如个人性格,用几个成语带过就好,属于正确的废话。自我介绍快结束时一定要提及自己最擅长的方向、项目或技术,很多面试官都会从自我介绍展开提问。
面试是应聘者和面试官之间的博弈,一场完美的面试是由你来引导面试官,让他对你产生兴趣、产生信赖,而不是被他牵着鼻子走。至于你是第一次来面试还是老油条,从自我介绍就可知一二了。
面试过程中,在不过分夸大的前提下,大胆展示自己吧!很多面试官都喜欢爱思考、善于交流、有发散思维、有执行力的同学。
编程技术岗位的面试通常会要求写算法题,所以一定要每天坚持刷几个小时左右的算法,这里推荐 LeetCode 算法刷题平台,以树、链表、动态规划、栈、队列、深度优先搜索、广度优先搜索等知识为主。如果是线下面试,面试官可能会给你一张白纸,让你在上面写出算法代码;如果是线上面试,可能会使用一些在线面试平台,要求程序能够正确执行,难度会更大。但是无论何种形式,都不要慌,由于时间有限,一定要理解题意,想清楚在写,字迹公正、缩进得当。即使做不出来,也要试探性地向面试官说出自己的想法,通常面试官会给出友好的提示。
还有一点非常重要!要记得提前关注自己目标公司的招聘时间,多数互联网公司虽说 “金九银十” ,但是很多公司的提前批从 7-8 月份就开始面试和录用了,因此必须提早准备,合理安排日程。建议大家争取下大公司暑期实习的 offer,有机会直接转正,拿到转正 offer 后再去其他公司面试说话都自信了很多。
最后,不要过度自信,也不要盲目悲观。要多投递一些企业,多一个机会、多一个选择总是好的。不要觉得麻烦,毕竟都已经努力那么久了,放手一搏吧!
6. 归纳总结,方法唯上
归纳总结不仅仅是在学习编程或者求职中,是我们一生都要去坚持的好习惯。学到了知识,要总结;完成了项目,要总结;参加了竞赛,要总结;每天的实习工作,要总结。只要是你做过的有意义的事,无论成功或失败,都值得总结。
有的同学会认为总结和写文档一样,没有必要浪费时间。但实际上,总结并不是草草写一下就完事了,而是要针对某件事,从零开始全面复盘,回顾目标、回顾工作、提问自己 5why
(为什么要这样做,而不是那样做?等等)、针对优缺点进行分析、思考如何改进完善等。
通过归纳总结,可以减少重复错误、优化工作、发散思维,最终提炼出一套适合自己的学习工作方法论。有了高效系统的方法,也能帮助你在今后的工作中快速适应和晋升。
写完总结后,必须进行存储,推荐使用云盘,比如腾讯微云、阿里云盘、OneDrive、印象笔记等,方便自己去查阅和回顾。学了知识不总结,或者写了总结不存储,就像是小熊掰棒子,徒做无用功。
此外,总结不止是给自己看的,也同样能帮助到他人。尤其对于公司来说,技术方案和工作总结有着巨大的意义。几乎所有企业,大到公司,小到个人,都会维护自己的知识库,沉淀技术和业务的同时,也方便给新人提供参考和指导。
值得一提的是,很多同学抱怨自己的工作过于重复,无法成长。我觉得工作必然会重复,但重复不代表无法成长,如何从工作中提炼共性、多提出想法来改进现状,才是值得考虑和关注的。
7. 春风化雨,颗粒归仓
如今,我们生活在一个万物互联的时代,各种编程网课、培训资料、项目实战、开放源码、线上直播课等,为我们营造了春风化雨的学习环境,我们应该充分利用这些资源,分类收藏,颗粒归仓。
但有时资源过多,也会对我们造成困扰。因此,我们要有选择地使用资源,看的多了,自然能分辨好坏;要注重信息时效性,比如学习新框架时,尽量不要看出版超过 1 年的书籍。
此外,除了这些静态资源。我们还可以在线上线下,多认识一些优秀的前辈和小伙伴们,和大家一起学习讨论,甚至可以合作参加比赛,开发一些作品。毕竟一个人坚持会很孤单,如果在编程学习的路上,和一些小伙伴一起前行,到时收获的就不止有编程能力的提升,还有更重要的友谊。
总结
其实学习编程和求职的过程就像是做了一次大数据推荐。
起初,你面前有太多的编程知识和技术,眼花缭乱,不禁感到迷茫。然后通过一段时间的学习和摸索,你对编程产生了一定的兴趣,开始挑选几个相对感兴趣的技术去学习,过滤掉了一些不感兴趣的技术。随着你学的知识越来越多,你的喜好也逐渐明朗,你开始为自己确定求职目标,确定了主要学习编程语言和技术方向。而后你需要日复一日坚持学习编程,并通过项目实战、参加竞赛、找实习等方式提升自己的编程实践能力。最后放手一搏,将自己的技术展现给面试官,并成功地通过面试,找到自己心仪的工作。
整个过程中,你的每个行为其实都会影响最后的面试结果,从而决定你的就业去向。究竟面试官能不能从海量人选中锁定你呢?
学习编程和求职的道路并不平坦,我们会无数次因为写不出程序而发愁、因为一个小的漏洞而熬夜、因为面试失败而否定自己;但是同样会因为程序的成功执行而欣喜、因为漏洞的修复而欢呼、因为通过面试而自豪。
你现在做的每个努力,都有意义。