Skip to content

从放弃保研到字节暑期实习上岸:聊聊同济软件工程科班三年带给我了什么

写在最前

本文所讨论的内容范围局限在计算机相关专业,其他专业不一定适用于本文的观点,具体问题应具体分析,辩证看待。

去年 10 月,在飞往巴黎的航班上,我想着如果这次 iGEM 竞赛能够斩获国际金奖,保研之路就会顺畅许多,甚至有机会冲击外校保研的资格。现在坐在飞回上海的航班上,手中握着字节跳动的暑期实习 offer,不禁感慨万千。高考结束时那个觉得自己应该本科、硕士、博士一路读下去的我,应该怎么也想不到现在却选择了本科直接就业。

飞往巴黎|摄于 MU553 航班|2024-10-22
飞往巴黎|摄于 MU553 航班|2024-10-22

保研还是就业?正是软件工程经济学 Slides 上的一个问题“Is school always best?”这是一个 case by case 的问题。两条道路没有好坏之分,关键在于哪种选择更适合你、你更喜欢什么,以及你想过什么样的生活

大二时参与了一个小科研项目,初衷确实是为了积累科研成果发表论文,但实际投入后才发现自己对科研缺乏热情,阅读文献的过程尤其煎熬。我想,能把读论文当作日常生活、把实验室当乐园的人,大概就是天生的“科研圣体”吧。项目最后顺利结题,但实际没有什么产出,说起来还感觉有点对不起我的导师。比起科研的过程,我更享受代码交付项目落地时的“即时反馈感”。我很庆幸自己能够及早发现我适合与不适合的领域,以及真正向往的生活状态。

互联网行业的岗位主要分为算法岗和开发岗两类。就算法岗而言,本科生往往只能从事基础的数据处理工作,也就是“数据民工”,研究生学历是最低门槛。算法岗位极度看重论文成果,而研一需要应付课程,研二就要准备暑期实习,哪有那么多的时间去沉淀科研素养?要在短短一年半内产出一篇优质的论文谈何容易?在做出选择之前,我问了我认识的所有硕士在读、硕士毕业和博士在读的同学,他们的看法也都基本相似:若在研二未能发表一篇优质的论文,就只能转向开发岗,那研究生阶段的学习对开发工作而言也就失去了意义。

至于开发岗,除非研究生学历能带来显著的竞争优势(比如清北复交),否则读研的价值确实有限。在求职面试的过程中,很多面试官问我:“以你的成绩完全可以保研,为什么选择直接就业?”在交流过后他们的反馈也都几乎一致:读研对工程能力的提升确实有限,甚至毫无帮助。面试官最看重的不是你在课程考试中拿了多少 A,而是你是否有扎实的工程实践能力和解决问题的思维。当然,也有人选择“曲线救国”——寻找不怎么限制个人时间、允许长期实习并且不怎么 push 的导师,通过三年实习积累经验,毕业拿到大厂 offer 是理所当然的一件事。

之前我的想法较为偏激,认为导师就应该为学生的就业负责,我简单地将导师不放实习等同于不近人情,认为他们身处象牙塔而忽视了当下激烈的就业竞争压力。经过与学校几位导师的交流,我也改变了这一看法。导师和学生本就处在不同的立场和需求维度上:学生需要实习经验,导师需要科研成果。这本质上不是谁对谁错的问题,而是一个需要相互理解的双向选择过程。研究生阶段本质上是一个学术培养的过程。如果学生本身对科研缺乏热情,仅仅为了学历或逃避就业压力而读研,不仅会给自己造成痛苦,也会给导师带来麻烦。所以我觉得,除非真正热爱学术研究,否则实在不必勉强自己走上读研这条路。

嘉定校区图书馆|摄于中央大道|2025-06-19
嘉定校区图书馆|摄于中央大道|2025-06-19

大三上学期备战期末考试特别煎熬,尤其对计算机视觉提不起兴趣。当时和女朋友开玩笑:看看计算机视觉最后能拿什么成绩,如果拿优就去读研,拿良就去就业,结果真的拿了良哈哈哈。这也算是天意吧,当然了就算计算机视觉拿了优,我也会选择本科直接就业。张林老师人很好,不仅是软件学院的科研扛把子,答辩也特别温柔,特别感谢张林老师在我一个学期什么都没学的情况下,还能给我一个良的成绩。

今年年初终于下定决心直接本科就业,主要精力都投入在备战暑期实习上。暑期实习是大厂秋招的重要敲门砖,没有暑期实习大厂秋招应该会困难无比。我从二月底开始刷 LeetCode,三月中旬开始攻克八股文,简历前后修改了数十版,期间还顺手在上海考了个驾照。感谢自己在大二认真学习,得益于我的编程基础良好、数据结构与算法功底扎实、项目经历丰富,所以没有在手撕算法和项目经历上花什么精力。

3 月 31 日投出我的第一份简历,之后陆续向江浙沪地区投递了共 40 个岗位。经过 7 次一轮技术面、3 次二轮技术面、2 次三轮技术面和 2 次 HR 面,历时两个多月,最终收获了字节跳动抖音电商部门的暑期实习 offer。整个求职过程中面试只挂过两次:一次是美团核心本地商业基础业务研发部门的岗位,因为 base 地在北京太远了,当晚就返回人才库了;另一次是腾讯 WXG 事业群微信搜索团队,面试强度特别大(一面 90 分钟,上来手撕三道 C++ 算法题,两道 medium 难度,一道 hard 难度,之后对操作系统、计算机网络、MySQL、Redis、分布式、并发、Linux 进行了高强度提问,感觉自己把 JavaGuide 全都给面试官讲了一遍。二面60分钟,上来手撕两道 C++ 算法题,一道 medium 难度,一道 hard 难度,之后对项目及其业务逻辑进行了深入追问),第二天一早二面挂,毕竟是全国互联网行业 T0 级别的部门,被刷也在情理之中。

字节跳动 2026 校园招聘录用意向书
字节跳动 2026 校园招聘录用意向书

准备实习和面试的过程让我思考:我在同济大学软件工程专业三年的科班学习,究竟给我带来了什么?从企业需求角度来看,学校似乎只给了我一个还不错的 985 学历,除此之外,几乎没有任何帮助。我的软件开发知识体系,几乎都是靠我自己的学习与实践所构建。

我非常感谢沈坚老师在高级语言程序设计和面向对象程序设计课程中为我打下的 C/C++ 编程基础。现在很多学弟学妹吐槽沈坚老师及其课程,甚至上升到人身攻击,我对此不做评价,只能说高程是我在同济大学收获最大的一门课,沈坚老师也是一位负责任的好老师。科研权重远高于教学的高校教师评价体系我在此不作讨论。至于数据结构与算法、操作系统、计算机网络这些计算机核心课程,最大的问题是理论与实践严重脱节。我曾与某企业 HR 讨论过这个问题,他认为本科生缺少经验很正常,也不要求本科生有多少经验,但以操作系统这门课程为例,学完之后至少应该能用任何编程语言编写并发代码——我想我有过相关的实践经历吗?很少甚至几乎没有。在我看来,计算机网络是软件开发中最重要的课程,因为现代应用都基于 Web 架构,但课程内容完全停留在理论层面。如果能动手实现 WebServer 或者手写 TCP/UDP 协议栈,不比死记硬背报文格式更有价值吗?你说实践,是指计算机网络实验吗?上过的同学都知道这门课在干什么。

我理解培养方案是专家们反复论证的成果,其价值不应被全盘否定,但在现行教育体制下确实存在诸多问题。最典型的例子就是大类分流制度带来的课程安排混乱。面向对象程序设计、离散数学、数据结构这些本应循序渐进的专业核心课,却硬生生地被压缩在同一学期完成。这种“先盖二楼再打地基”的荒唐安排就这样发生了。更令人无奈的是课程评价体系的异化。在大多数课程中,决定成绩高低的往往不是代码质量或技术深度,而是报告排版是否精美、页数是否超过了别的同学。即使是一个简单的约瑟夫环问题,也不得不堆砌出 20 页的报告来应付考核。这种本末倒置的评价标准,让很多同学(当然也包括我)不得不把宝贵的时间耗费在形式主义的“卷报告”上(这也培养了一群包装技术高超但毫无工程能力的同学,和他们合作简直就是灾难)。而今年新入学的 1400 人“信息巨类”,更是将这个体系的弊端放大到了极致。如此庞大的规模,注定让个性化培养成为奢望。所有学生不得不在大一阶段耗费整整一年时间,在低效的课程中蹉跎时光,却依然无法学到自己真正想学的课程。这种“一刀切”的培养模式,实在令人扼腕叹息。

让软件学院的辅导员们(强调,不是任课教师)一直引以为豪的一点是项目组队式考核,但这种课程项目组队“造火箭”的模式真的适合所有人吗?我认为只有在小组中承担大部分工作甚至是全部工作的人才能真正获得能力上的提升。大学三年里,我几乎担任了所有课程项目的组长,在技术选型、系统架构、编程能力等方面得到了十足的进步。真心希望大家在团队合作中不要遇到那些无比自信却贡献为负的“神人”(哪怕你贡献为零但能提供情绪价值我也不会说什么了)。

软件学院的课程分为考试课和考查课。在激烈的保研竞争下,专注考试课成为性价比最高的选择——毕竟成绩往往只取决于期末一考。而考查课多以小组项目的形式考核,即便全程划水也能轻松获得不错的成绩。这也解释了为什么部分人绩点极高但是工程能力极差。像我这样认真对待每个项目并做到我能力范围内的最好,纯粹是出于对技术的热爱。有时我的项目完成度远超课程要求,反而显得格格不入。

大二暑期操作系统课程设计:基于 Rust 语言和 Intel IA-32(x86)架构开发的多任务操作系统
大二暑期操作系统课程设计:基于 Rust 语言和 Intel IA-32(x86)架构开发的多任务操作系统

很多学弟学妹吐槽软件学院的课程项目,觉得课程项目“造火箭”的难度太大。但平心而论,达到课程考核要求的“造火箭”项目也就仅仅是“玩具”,在面试官眼里其实都是“垃圾”。但这并不是说课程项目对工程能力的提升毫无用处,毕竟如果课程项目都做不好何谈企业级开发呢?在数据结构课程设计中我实现了 C++ STL 的常见数据结构;在程序设计范式课程中我用 Cocos2d-x(一个老旧的游戏开发引擎)开发了一个类似金铲铲之战的游戏,这个项目让我首次接触网络编程并与开源社区产生交集;在用户交互技术课程中我学习了 Dart 语言和 Flutter 框架;在操作系统课程设计中我用 Rust 语言编写了一个简单的 OS 内核,实现了基础的进程管理、内存管理、文件系统和一个可交互的简单 Shell;在数据库课程设计中我学习了 C# 语言、Web 开发基础、ASP.NET 框架和 Vue.js 框架,并熟悉了 Linux 开发环境及配套工具链;在区块链导论课程中我学习了 Go 语言和 Gin 框架;在软件工程课程设计中我学习了 Java 语言和 Spring Boot 框架;在移动应用开发课程中我学习了 Swift 语言和 SwiftUI 框架。正是这些项目逐步培养起了我的全栈开发能力,我是感谢软件学院项目式教学的,因为我确实是极少一部分能从小组项目中真正获益的学生。我看到有些学弟学妹今年程序设计范式课程中用 Cocos2d-x 开发的类似星露谷游戏,比我当时做的项目要好很多,而且在网络编程的解决上也更符合当下的工程实践,就觉得软件学院的课程项目对大家的技术提升还是有帮助的。

说到数据库课程设计,不得不提袁时金。作为同济大学最厉害的老师,没有之一,她所有的成就都是靠自己的努力得来。她是我见过最自信的老师,我真的非常羡慕她从不内耗的性格。我什么时候也能做到从不内耗?字节跳动的面试一贯是压力面,感谢袁时金在数据库课程设计项目答辩上的尖锐质疑和莫名其妙毫无逻辑的指责,让我即使是面对全国互联网行业最压力的面试,也能三轮技术面全部顺利通过。我真的很感谢袁时金打碎了我对大学老师的滤镜,让我知道原来大学老师的水平也就如此,称之为老师属实侮辱共和国的教师团队。

同济大学嘉定校区|摄于嘉定校区图书馆|2025-05-06
同济大学嘉定校区|摄于嘉定校区图书馆|2025-05-06

这篇文章固然有对学校一些问题的吐槽,但同济大学依然给了我非常好的大学体验,满足了我对大学生活的所有想象。我在同济遇见了我的女朋友,同济的食堂吃得很幸福,每年樱花大道绽放的樱花很美,在同舟河上划龙舟很酷,仲英社和学协的大家非常有趣,通达馆为我提供了良好的通宵达旦场所,学长学姐们都毫无保留地帮助我、指引我,我也在同济遇到了一群既负责又幽默的老师和非常优秀的同学(点名 iGEM 的大家真的太优秀啦!)。之前总觉得在同济大学上不下去了,想逃离这里,但现在准备去实习,自己的大学生活其实也接近尾声了,反而更想在同济的校园里多漫步一会儿。

行文至此,发现这篇文章有些意识流,想到哪儿写到哪儿,权当是对准备暑期实习过程的一次梳理和总结。感谢屏幕前的你读完我 4500 多字的碎碎念。接下来就要开启实习生活了,希望自己能顺利适应职场环境,在字节跳动 Landing 的过程一切顺利。也祝愿无论是正在备战暑期实习、或者是准备保研夏令营、还是在准备出国留学的我的朋友们,亦或是尚在学习追求更好成绩的学弟学妹们,都能找到最适合自己的人生道路。我们终将上岸,我们也必将上岸。

最后用一句话总结这篇文章吧:人生的选择没有标准答案,但每一个决定都应源自清醒的自我认知——而非对路径依赖的恐惧,或对群体共识的盲从

日落|摄于上海新江湾广场 T4 栋|2025-09-15
日落|摄于上海新江湾广场 T4 栋|2025-09-15