合迅科技-实习感悟

本来不想写这篇文章的,但是看到实习报告的总结部分需要写一个收获及体会,还是码一篇文章大致谈谈实习的感悟吧。

学院的实习政策

我是电子科技大学信息与软件工程学院2021级的一名普通本科生。按照学院的培养方案,大三下的这段时间是需要出去实习半年的。在以往,除了正常在企业上班,还可以选择在校内或者校外的实验室工作来抵实习。并且以往的时候,实习是不计入保研成绩的。在这样的情况下,水实习的情况大有人在,以我大二下到大三上所在的实验室为例,不会写代码但是进去充数的人比比皆是。这样的“实习”不是一个让我们学习和进步的选择,反而是在浪费学校和企业的资源和时间。

在这样的背景下,学院今年做出了改革。首次将实习纳入保研评分。实习这门课程有8个学分,比计算机组成原理还多1个学分。因此对于保研线边缘的同学来讲,这极可能成为翻身的绝佳机会,也可能成为压死骆驼的最后一根稻草。今年学院不允许在本校的实验室工作来抵实习,也一定程序上减少了在本校实验室水实习的情况吧,毕竟外校实验室肯定比本校实验室难进。所以绝大多数同学,包括我,都是选择在企业进行实习。然后学院对整个实习指定了各种杂七杂八的评分规则,这些我都无所谓,我把公司和学校的事情做好就完事了。

很重要的一个问题

这样的实习政策本身是没有问题的。让同学们真正到企业去实习,见见世面,学学技术,提升自己。这是完全ok的。但问题就处在我们是第一届实行这个政策的,加上学院的通知非常迟,不管是消息还是文件通知。我从大三学期开始隐隐约约直到实习可能会计入保研,当时是去年9月。然后一直到11月底,没有任何消息。然后很突然的召集年级同学开会,说实习计入保研,并且只能去企业或者校外实验室实习,然后把仓促弄出来的实习政策公布给我们这群小白鼠的事情。

我的天,当时已经12月了。按照至少半年的说法,1月初考完试就马上要去实习,才能保证暑假回来,然后有时间准备9月的实习答辩。哦对,我们实习是需要全员答辩的。就给不到一个月的时间,如何找到适合自己的企业或者实验室呢?难,难如登天。我们宿舍还是提前得知了小道消息(那时候大概也11月了),所有人才勉强找到实习单位的。那大部分的同学呢?别人在复习马原毛概的时候你来一句考完试立马要出去上班,现在的工作尤其是互联网行业的工作,真的是这么好找的吗?其次,学院的确也给了很多和学校合作的企业选择,但是还是那个问题,这么短的时间真的能选出双向匹配的企业吗?这就导致很多同学在今年2月过了年以后都没有实习岗位。有人可能会说,哦,你自己能力不行,没有找到实习是你自己的问题。拜托,现在互联网行业形势这么烂,简历投出去能不能被别人正眼看都不知道,这么短的时间所有人都找到实习是不现实的。

另外,这严重打乱了同学们的规划。以我为例,我去年10月联系了一个计算机学院的导师,互相交流以后想跟着他学习。当时我的分数是保研边缘,我个人的想法就是大三下冲一把竞赛,同时跟着导师学习。当然我还不知道实习会计入保研。然后后面我才突然知道实习计入保研。好好好,实习8个学分,我保研边缘的水平,我敢放?因此只有跟导师说明情况,然后去弄分数,弄排名。不过我现在有蓝桥杯国二,保研这边是问题不大了,也到现场和学长和导师聊过,有希望冲刺进去。不过这只是我个人的个例,我觉得里面有相当大的运气成分,例如蓝桥杯运气比较好,导师的实验室刚好有我感兴趣的方向。如果再来一次,这些事情真的很难能再次做到,这其中背负的心理压力是巨大的。我那段时间都快抑郁了,甚至可能已经抑郁了。这是我个人的例子,那对于大多数同学呢?对于保研的同学,尤其是我这种保研边缘的同学,极可能成为翻身的绝佳机会,也可能成为压死骆驼的最后一根稻草。对于考研的同学,复习的时间大大减少了(以前很多同学是借着实习的名义在实验室复习考研),那必然会更苦、更累。对于就业的同学,这没什么好说的,因为不管在哪种政策下,大概率都是去企业实习,因此他们总是会提前准备。但是大部分的同学是考研、保研的人啊。我个人认为,打乱规划这些都是小事,但是你在某个关键的时间点打乱规划,那就很恶心了。如果这个实习政策提前半年公布,那没有任何问题,这是个非常好的实习政策,但是问题就是太匆忙。给我们的感受就是,我们是小白鼠,这些事情发生的真的太仓促了。

合迅科技

不过,吐槽归吐槽。抱着既来之则安之的想法,我尝试去和我实验室合作的公司上班。公司领导也是非常愉快的同意了,也开始了让我受益匪浅的半年实习经历。

我这半年实习的公司叫成都中科合迅科技有限公司。我对公司整体的业务了解不是很深,但是我知道我们部门的工作基本分为两个板块,交付和研发。交付就是使用Qt,根据客户的需求,很多都是一些军工企业和研究所,去做一些项目。研发就是领导带领我们一起做Lark5产品,主要是LarkSDK的相关工作(LarkSDKLark5中最基础和重要的,其他东西都是基于LarkSDK开发的)。而我参与的就是研发工作,也是非常有意思和有意义的工作。

在进入公司之前,在实验室的时候,我就一直就有疑惑,为什么我们需要做一个自己的国产的C++通用开发框架呢?当时对于本科学生的我而言,我只把它当作是一门提升C/C++代码水平的途径。所以,当我的同学问我,哎,公司费时费力做这个的意义是什么呢?我答不上来。现实情况也的确如此,业界对于跨平台的C++图形开发框架,业界第一反应都是Qt。是啊,我在进入实验室以前都一直以为实验室是在做Qt外包开发,甚至我还专门写了一个扫雷来准备面试(写的不好请见谅)。Qt在这个领域似乎是垄断的存在。并且公司的交付项目都是使用Qt框架开发的,包括另个组在进行的合迅智灵插件框架的开发,也是基于Qt框架做的二次加工。说白了,我们是拿着别人写好的东西去做开发。至于Qt内部是怎么实现的,我们作为用户不用关心,只需要知道这样能解决问题就行。

那么问题来了,这样的工作真的是我想要的吗?我是一个本科在校实习生,我不用过多考虑赚钱的事情。当然,只要我不乱花钱,每个月能存一些钱,那就是好的。其次,既然我是一个本科在校实习生,我离本科毕业还有一年多的时间,并且我之后还要继续读研,甚至读博,我应该做的是提升自己,那我为什么不选择做像Lark5产品的研发呢?学到的知识和技术不管以后对我的深造和就业,都有帮助啊。抱着这样的想法,我加入了Lark5研发组。同时,在这个过程中,我逐渐明白了上面问题的答案。

Qt Framework一样,LarkSDK是一款跨平台C++开发框架。它使得用户无需花费精力在操作系统的特性和底层调用细节,从而更专注于业务需求开发。LarkSDK并非是任何其他框架的套壳产品,这意味着,除了引用一些不得不使用的基础轮子之外,LarkSDK的所有代码都是完全自研的。这就是我们这个产品LarkSDK的概述。更多细节请参见合迅智灵 LarkSDK 用户手册。好,还是那个问题,既然Qt都有成熟的框架了,为什么我们还要费尽心思做一款国产的LarkSDK呢?

为了国产生态。目前,国内在软件开发平台领域的缺失,导致国内软件行业在开发软件时不得不大量使用国外厂商的开发平台,从而遭遇信息安全存在隐患、国产操作系统环境适配性差、维护服务没有支持、版权使用存在风险等重要问题,没有国产软件开发平台支持,软件开发环节效率低、软件开发成果不稳定也成为国内软件行业普遍存在的问题。对标到我们的LarkSDK产品上,虽然Qt是开源的,它的源代码就摆在那,但是它毕竟是老外写的,不受国人完全掌控,当然也没有哪个神仙去一行一行扒Qt的源码看有没有埋雷。有人说,用大模型啊,行啊,那你去用大模型写一个QtBase出来,写一个Linux内核出来。在这样的背景下,我们无法预测未来的某一天会不会出现类似被卡脖子的问题。像华为芯片事件和微软蓝屏事件就是最好的印证。更不用说Qt还有社区版和商用版的区别了。万一某些东西就是只能通过商用版得到,那后续的一切都受制于别人。尤其我们公司还是一个军工企业,这样的问题就更应该得到重视。还是那句话,技术只有掌握在我们自己手中,国家发展的命脉才不会被别人牵着走。我可以不用,但我不能没有。这一点国家已经开始意识到了,例如国产操作系统银河麒麟、华为鸿蒙等等。而我们致力于在基础软件开发平台这一赛道,制作出一款属于我们国人自己的,更懂国产生态的LarkSDK。这条路并不容易,但我们坚信这是一条正确的路,难而正确的路。

实习收获

很幸运,我在实习期间遇到了一位非常好的组长和领导,钟采奕,我一般称呼为钟老师。我们做的是跨平台的C++基础开发框架,自然需要涉及到大量底层的知识,包括但不限于基础事件驱动框架、常用数据结构支持、多线程支持、图形框架支持等等。这些东西单拎出来都是不太容易弄明白的,现在还要合理的把它们组合到框架当中,可想而知难度有多大。钟老师作为我的领导,为人和蔼大方,技术专业过硬,会非常合理的根据需求规划设计和调整进度,并身先士卒,自己负责最困难的部分,遇到问题会和我们一起讨论方案,分享技术细节,最终完成某个需求乃至模块的研发。当然我是程序员,语文不好(高考只有109),语言无法直观的表达我内心的感受,写多了篇幅过长,我只能简单的一句话概括:世间再难遇到这样的领导

在合迅实习了半年,我学到了太多大学课程设计不到的知识和技术。这不是重点,因此我不想在这里赘述,有兴趣可以与我交流。除了学习到技术层面的知识以外,更多是程序员职业素养的一些思考。我总结了三点。

首先是重视设计和思考。由于LarkSDK产品是完全从头开始,独立自研的,我们的目标是对标Qt,甚至是替代乃至超越Qt。不可否认我们参照了行业巨头Qt的很多思路,但是人无完人,强如Qt的设计也存在很多不合理,有缺漏的地方。当然Qt自己也在后续的版本中自己在努力修改,但是Qt毕竟是一个完整的产业链产品,有些东西久了是改不掉的。而LarkSDK作为一个新鲜血液的产品,目前非常轻量。我们有必要,并且是必须在搭建底层地基的时候就考虑好整体的架构和设计,例如如何设计窗口和组件的关系,如何设计跨平台的统一管理调度等。这些功能不仅需要稳定可用,还需要为后续研发的上层功能留出口子。当然这个过程是一个非常复杂、繁琐并且困难的过程。在这个过程中,设计花费的时间远大于真正写代码的时间。但事实证明,这样的策略是行得通的。

其次是多阅读,多记录。我的老板曾经讲过,提升代码水平的最好办法就是阅读代码。在我个人看来,不仅是多阅读代码,更需要多阅读文档,同时多做好记录。单打独斗是成不了气候的,每个人都存在知识的盲区,因此需要不断学习,不断提升自己,当然在当今社会也是为了不被淘汰。同时,最好做好知识的记录,就像初高中在课本上做笔记一样,知识太多,难免会忘记,因此需要做好记录,后续方便复习回顾。我个人一直有写博客的习惯,后续回顾以前知识的时候能很快回想起来,同时这样也能增加心中的成就感,为自己的前进提供动力。在我调研标准库std::stringsso优化的时候,查询了很多博客和技术文档,最终才把具体sso优化的细节,它具体的内存模型是怎样的等问题研究明白。这样清楚以后应用到我们的LarkSDK中,问题自然就迎刃而解了。

最后,也是我觉得最重要的一点,端正态度,脚踏实地。没有解不出来的问题,有的只是半途而废的人。钟老师完美诠释了这一点。他对组员很有信心,愿意给我们安排各种各样的需求工作,培养我们的技术和能力,当然,他自己也以身作则,带头完成项目中最困难的部分。我觉得有这样的领导和前辈,是我的幸运,甚至我认为以后真正工作以后都很难再遇到这样的领导了。同时,从他身上我也看出了,问题并不是不可战胜的,只要不断探索,肯下功夫,并且团队协作,一起努力,问题就一定能迎刃而解。在这个过程中,技术和能力也就自然而然的提升了。

总结

每个人的生活都是充满着矛盾的。小时候我因为不想考试而想快快长大,长大了我不想进入社会而想回到从前。在外面实习了半年,我发现竞争是激烈的,社会是残酷的。我无法知道我旁边的同事是否在第二天就会离职,我也无法知道我是否会在第二天被派去做其他的工作。我无法预知到产品的前景和公司的未来,我只是一个朝九晚六的码农。幸运的是,我的工作内容还算稳定,上面提到的残酷现实都没有发生在我身上。但我无法预知将来,无法知道几年以后,自己会在哪里上班,自己会做什么。校园的确是美好的,它是稚嫩懵懂的孩童进入社会最后的港湾。

这半年时间,说长也长,说短也短。无论如何,它给我的学习和生活带来了新的认知,注定是我人生履历上浓墨重彩的一笔。做好当下吧,朝着新未来出发。

最后,感谢实习期间所有同事和领导的帮助,感谢学校老师的栽培,感谢家人的支持。祝合迅科技越来越好,祝LarkSDK越来越好。

使用搜索:必应百度