我相信大多数学习编程的同学都有着对大公司的憧憬。技术、声望、薪资、福利,这些都足以成为吸引你进入大厂的理由。 但是,如何进入大厂呢? 对于很多同学来说,通往大厂的道路并不明朗,不知道是否有希望,也不知道怎么努力,感觉遥不可及。 其实,我身边有很多成功拿到大厂 offer 的同学,他们并不都是大家想象中的 985 名校硕士、竞赛金牌、开源大佬、编程神童。相反,我看到了很多背景一般却凭实力冲进大厂的同学,而且他们在工作中的表现非常出彩! 通过和这些同学的交流,我发现他们在编程学习和求职方法上有一些共性,再结合自己的真实经历,我总结了一套 较通用的编程学习和求职架构。 无论你现在处于编程学习的哪个阶段,又或者只是对编程有兴趣,下面的内容都会对你有一定帮助。让你看到更清晰的未来,并为之而努力。 首先,要明确一点,编程学习没有捷径!必须明晰目标、拉长战线、掌握技巧、持续学习、做足准备,才能立于不败之地。 下图是我总结的编程学习架构: 编程学习架构 如图,我将编程学习分为 7 个部分。为什么叫做 “学习架构” 而不是 “学习路线” 呢?因为在编程学习中,有些事情不是严格按照顺序去做,而是在我们整个学习过程中都要长期坚持的。 下面详细解释一下这套编程学习架构的 7 个部分。 1. 初入茅庐,海纳百川 刚开始学习编程时,难免会感到迷茫,如果你初入大学,会发现身边大多数的同学选择加入了学生会、各种社团来丰富校园生活,而不是一门心思去学习。其实这个阶段,并不需要太过关心和考虑以后找工作的问题,要做的事情就是学好大学的一些通识课程,保证成绩不能太差。不要提成绩无用论,除了学校之外,高的绩点也是简历的牌面,如果能取得前几名的好成绩,是绝对的加分项! 对于计算机专业的同学,刚开始并不会接触到很深入的知识,也很少有机会去开发一个完整的作品。基本都是学习 C、 C++ 等编程语言,因为涉及和能够学习到的知识相对丰富。但是,想要学好编程,课本上的知识是远远不够的,一定要 自学! 自学什么呢? 其实刚开始的时候大家并不知道自己擅长什么、真正喜欢什么、以后想做什么、从事哪方面的工作,因此,可以 “海纳百川”,多了解和尝试各种编程语言、技术框架、专业知识等。比如在课堂教的编程语言之外,去自主学习下 Web 网站开发或者 Python。 怎么自主学习呢?看书? 过去几十年,我们的学习几乎一直依赖书本。但是如今,互联网上资源非常丰富,为我们自学编程提供了很大的方便。可以选择看纸质书、电子书,但是一定不要直接去啃那些很复杂的理论书籍,而是选择一些轻松有趣、相对简单、案例丰富的书籍。除了看书之外,可以选择 W3Cschool、实验楼、 FreeCodeCamp 等在线学习网站,边学边敲代码练习。还可以去 B 站上搜索一些视频教程,可能要比啃书学习要轻松得多! W3Cschool 在线编程入门实战 但是,无论你选择何种方式去学习, 一定要边学边练习,不必局限于一些习题或书中的代码片段,可以试着发挥自己的创意,去编写一些简单的网站或者实用的小工具,相信你会收获成就感,逐渐对编程产生兴趣。 这个阶段,除非你有非常明确的学习方向,否则没有必要对某一门技术过于执着,毕竟计算机领域很多技术和知识点是相通的,前期先多学习一些简单易懂的知识,会让编程学习轻松有趣一些。 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…