怎样正确地选择大学专业？
太长不看版本：其实并不容易。 如果提前规划，用两三年时间，分摊学习成本，其实也不难；但如果是拖到秋招前两个月从零基础开始学并成功上岸，即便是在清华大学也少有这种逆天案例。 又到了喜闻乐见的劝退（转行）话题了，这次是受 @陈健坤 @鱼昆 @集智社群 的邀请，给大家分享一下我周边的工科生转行去大厂当码农的经历。 虽说受政策影响，互联网行业发展停滞，但是维护大厂现有赚钱业务代码仓库的人力需求依旧存在。长期来看，码农的校招岗位数量比金融行业还是要多不少的。 本文的目标受众是 211 及以上学校工科专业的，考虑校招时直接进入大厂的学生，具体原因我会在后面细说。 我自己是清华大学工程物理系本硕，校招进入华为担任软件开发岗，工资受合同限制爱不太方便说。但是我可以钻合同漏洞，聊其他同学拿到的大厂 offer： 甲同学 PKU 数学硕士，2021 届校招，拿到的亚马逊中国的总包 39w（1065 工作强度，外企确实遵守劳动法）； 乙同学 THU 工物系硕士，2021 届校招，拿到的快手 offer，总包 48w（30k×16），这个总包对应的是 995 工作强度的，周末加班有双倍； 丙同学 THU 工物系硕士，2022 届校招，拿到的拼多多 offer，总包（38k×18），这个总包对应的是 11116 工作强度，已经把所有周六的加班费算进去了。 可以看到，整个码农行业，从 1065 工作强度到 11116 工作强度的岗位都有，也并不是网上妖魔化的全员 996 拿命换钱。（其实还有更轻松的岗位，国企软件外包项目的甲方部门，虽然工资不高，但主要工作是催乙方进度和验收项目，工作压力约等于零，压力都在乙方那边。） 在开始聊转行之前，我先引入一个最简单的场景：很多电脑小白都听说过一个经验「软件不要装在 C 盘，要安装在 D 盘上」，那么有没有思考这是为什么呢？有没有质疑过这个经验？现在有三个选项摆在你的面前： A． 不去想，照做就是； B． 问懂电脑的同学； C． 百度，学一下怎么划分磁盘分区。 一般来说，生活中经常选择 A 照做的同学，大部分时候是不适合转行的，因为没有哪一家大学的工科培养方案，是为了让你转行而设计的。转行很多时候并不是个人实力的问题，而是主观能动性的问题。 而 B C 选项，很多心灵鸡汤会夸 C 选项贬低 B 选项，其实你可以一并都选了。小孩子才做选择，成年人选择全都要，找工作时也是一样的。 现在我们就可以看转行的具体内容：如何明确转行目标，如何分解任务，如何保障执行力。 首先要明确一点，不管人多聪明，在缺少足够多有效信息的前提下，都很难做好计划，所以上面场景的 B 选项其实是个好方法，我们把这个方法稍微拓展一下：首先找几个关系好的毕业班的学长学姐，他们面临毕业压力，找工作也很焦虑，必然会去联系认识的已经工作的学长学姐咨询意见。「你学长的学长，也是你的学长」，去蹭一下毕业班学长的人脉，你能直接问到真实的一手信息，包括：你们系毕业生可以转行去哪些行业，真实的工资水平，工作压力和职场 PUA 情况，租房生活成本等等。这里 C 选项的效果反而很差，因为现在知乎脉脉小红书等平台的打造人设的炫富和贩卖焦虑的信息太多了。 接下来是评估自己，哪些是可以弥补的，哪些是很难提升的。 其中比较关键的一个是学校，当前很多大厂 HR 筛简历时会看学历，会参考一个「目标学校名单」发起面试，主要是 985/211 和部分双非计算机强校（杭电等）。而校招转行时，非科班出身的一般会按照「学校降一档」来处理。如果不在这个「目标学校名单」里面，那么还有几种路径：（1）校招进中小厂，数年后用工作经历证明自己，跳槽去大厂；（2）考研/保研提升学校；（3）多实习，多打 ACM 比赛，用实习经历和竞赛获奖来弥补。 校招直接转码进大厂，需要一个能过 HR 简历关的学校（工科建议 211 起步），到了技术面的时候，就是看秋招准备的熟练程度了。 通过前期的信息搜集，现在已经明确了目标：了解目标城市的房价压力，了解目标公司的薪资水平和工作压力，之前有直系学长转行成功的案例可以参考，愿意将码农作为自己校招的一个准备方向，能保证自己投入一定量的时间和精力准备。 确定目标之后就是分解任务： 明确需要做什么，投入多长时间，预期的目标结果是什么。这时候 B 选项和 C 选项的方法都很有用，可以去找计算机系的同学咨询，要一份培养方案过来参考，也可以直接网上搜学习资料。好消息是，网上码农的学习资料浩如烟海，取之不尽，用之不竭。 这时候会发现，工科培养方案和计算机系的培养方案，差距没那么大，里面有着几乎完全一样的数学物理基础内容、思修政治课内容、英语课、文化素质课等等，甚至清华工程物理系和计算机系的培养方案，都被塞入了意义不明的电路原理、电子技术、嵌入式等课程，而两者之间的主要差距其实只有几十学分的专业课。这时候我们再剔除一些水课和进阶课程，剩下的软件能力基础课不过数门：编程语言课（C/C++或 Java）、数据结构、操作系统、网络原理、数据库、软件工程。