我是济南一所大学的一名计算机专业应届毕业生,自2022年春天开始至毕业,我一直在上海某研究院的远程实习生,我的岗位类别是:RISC-V 操作系统构建。
非技术圈的朋友可能比较难理解我的工作内容,来打个比方,比如我们要做一道西红柿炒蛋,虽然菜谱在网上都是公开的,但我们还是要自己买来原材料按照步骤进行加工,才能产出一道成品的菜肴。开源软件也类似,源代码都是开源社区贡献的,但是社区却没有提供编译好的可执行程序。
我的工作就是从社区下载一些开源库(一种特殊的软件)的源码,再根据我的专业知识以及源码说明,把源码编译、打包成可供用户下载即用的可执行程序或安装包。
作为远程实习生,又是纯粹和数字资料打交道,我的工作是相对自由的。
我的工作单位是研究院,本身的学术色彩就比较浓,所在组的管理模式也是课题组形式。每周一的规划组会上会确定这周大体的工作内容是什么,做一个简略一些的规划,而作为实习生,我具体的任务则会在组会后由我的“小老板”向我下达详细安排。在确定具体任务后,我就可以自行选定时间地点来完成任务。我一般会按照我的课表安排和个人事务的规划来统筹地选定每周的某几天来作为“工作日”,偶尔比较忙的时候可能一天工作几个小时然后几天凑出一天来也说不定。
我的学校在济南市,在一个“典型的”工作日安排中,我会在七点之前起床、洗漱,之后在学校食堂吃个早餐就打车去一家想去的星巴克。一家去腻了就换另一家。八九点钟的时候店里也一般不会有太多人,我会选一个靠近角落的位置坐下,再等我的咖啡冲好,打开电脑,就可以开始干活了。
我需要跟很多外国工程师讨论沟通,达成共识。他们都是在开源社区中具有卓越技术积累和工程能力的大牛,对软件开发有着深入理解,见解往往也很独到。和他们争论,我更大程度上是在学习,学习一些优秀的工程师特质。
有次某个用户提出了一个需求,希望我们能够添加一个特定的冷门功能,但这个功能涉及到一些新的依赖项。这个时候一些老外担心这些依赖项会增加软件包的复杂性,同时还可能会导致运行环境的不稳定。
我试图以我的思路来论述这个需求应该如何规划:为什么我们应该采纳这个功能,并解释了如何通过适当的测试和文档支持来减轻增加依赖项的风险。其他同事也提出了一些实际的案例和场景,来补充说明新功能的重要性以及它可能带来潜在好处。有一部分人对我们的观点提出了支持,然而,为数更多的外国工程师坚持认为,作为基础软件包,保持简洁和稳定性是尤为重要的。而且两拨人还专门针对我所表达的“软件的功能性是最应该被重视的”的观念进行了一番友好和富有成效的大讨论。
大家就在邮件列表里吵了好几天,不过最后彼此之间也终于达成了一个妥协:采纳这个功能,但在添加新的依赖项之前,要进行更多的测试和验证,并提供详细的文档来帮助用户理解和处理潜在的兼容性问题。
说实话这种争论在列表里比比皆是,来自不同国家地区的工程师们通过邮件来表达彼此不同的思维方式和工作观念。对于我这样一个计算机萌新来说,他们的经验和洞察力真的让我受益匪浅。
正式的工作其实在下午才真正开始。
“典型”流程就是边看需要封装的源代码边读配套文档,了解清楚代码的依赖和构建配置,之后就丢去服务器上编译,有时候在源码里发现一些小问题(往往是文档的错别字)也会顺手去修正一下。编译这个活是比较吃时间的,咖啡店提供了一个相对安静和专注的空间,有时候旁边还会有对着电脑写文档的白领,我就和她们一起加班。
偶尔,我发现有些编译过程会有点问题,比如某个依赖缺失或者编译性能离谱地差,大部分时候我都可以独立搞定,但总有一些边边角角的问题我解决不了。
印象很深刻的一次,当时我打包一个大型项目中的某个小模块,本来是一个砍瓜切菜的小任务,但那天编译却一直都不过,而且是很奇怪的代码未定义错误。我回溯了最近一段时间的提交记录,没发现有和这个错误相关的信息。我又试图通过代码报错的本身入手,发现报错的未定义结构并不来源于项目本身,而是来源于项目调用的一个子模块A。
我顺藤摸瓜,发现该子模块的最新版本对接口做了改动,导致项目无法编译通过。于是我只好对模块A做降级处理。但是,诡异的是,模块A降级之后,又一个模块B开始报错。升级A后B就安分了,但A又不过,这让我大呼不解。到这个时候,我已经在这个问题上花费了两个多小时,身心俱疲。
最终我寻求了老师和同学的帮助,拉了个在线会议。三个人屏幕共享查日志,一番搜寻,最终确定问题在于模块B看模块A更新了接口后自己也进行了对应更新,而现在我降级了模块A,新版本的模块B自然接口和穿越的A不匹配了。
每周有三四天是我的“工作日”,周末的汇报组会上,我再按照自己提前准备好的汇报材料来展示一下我的工作进展,重点分享一下我在工作过程中遇到的困难和解决方案,之后“小老板”和组里同学再给出彼此的反馈意见,一周的工作到这里就算是正式结束了。
远程工作可以很方便地与其他同事联系,共同解决问题,而且这种方式非常高效,在解决问题上和在办公室相比也几乎没什么差别。我的工位也不固定,周围坐一起的人也不确定,偶尔周末在图书馆会遇到一些高中生做高考题,也有的时候会遇到一些拿一堆报表材料来星巴克加班的中年职场人,更多的则还是在星巴克遇到带着电脑来写文字材料的白领。不同的人,会给我带来不同的工作体验,我有时候出神,看着身边也在电脑前敲敲打打的人,也是在看着另外一个可能是来自未来的自己。
不过,当时的我终归还是个学生,工作地点也是课题组不是项目组,属于是还没有完全走出象牙塔的状态。同学们对我这样参与“远程实习”的实习生反应也多有不同,有的同学会觉得工作还不着急,在学校好好备战考研之类的会更好,毕竟学生时代就这短短几年;有的同学就认为,本身计算机专业的实践性质就比较强,学术界和工业界的割裂现象也确实存在,所以早些统筹个人时间来进入工业界探索一下业界的实际样貌也是很好的一件事;还有同学会觉得实习有工资,虽然不多但对学生来说很够花了,谈恋爱或者出去玩什么的都会宽裕不少,所以一直努力寻找这样的实习机会。对“工作”,几乎有多少个不同的学生就会有多少种不同的态度。
我个人则更为偏向上面提到的第二类同学的观点。从我了解到的有限的业内动态上,也可以看出,计算机行业也确实是一个活力四射的行业,各种新鲜事物层出不穷,我这个“远程实习”的工作形式就是在疫情中大范围普及开来的,之后又逐渐渗透到其他行业中,反过来又通过在线会议平台等方式反哺了业内。
在这么一个注重变化、注重拥抱变化、注重敏感地拥抱变化的行业里,早了解些、多了解些业内状态还是挺适合我这类重视实践的学生的。在我个人的人生规划中,“尝试新鲜事物”也早就是一个优先级很高的人生指导理念了。
毕业后,我在一家做计算机硬件的公司做CPU 前端设计工程师,我那将近一年半的实习经历,为我到正式工作提供了基础:实习的工作算是“拧螺丝”,多了些技术背景,为现在的工作提供了专业技能上的支持。
本文来自微信公众号:边码故事(ID:tech-kk),作者:张国辉