富士通南大实习五月记

来源:互联网 发布:windows系统下载. 编辑:程序博客网 时间:2024/04/30 08:20

四月份的时候看周围一个个人都在找实习,每天看书的我也静极思动了,投了一个月简历没任何消息,连个笔试通知都没有。。。那时候一心想去华为,华为的实习招聘却一直不开始。同学帮我内推到富士通,四月中的时候去面试的,还记得是张老大跟李大姐面的我,问题的题差不多快忘记了,有道字符串的程序要写。面的比较简单吧,接下来就谈工作时间,那时候说好的是工作五个月,9月20号辞职。

确定拿到实习offer后我拖了一个星期,期盼华为南研所能招实习。。。后来就不想等了,便工作去了。那时候最囧的是我竟然没谈工资。。。第一次面试没经验啊,只好按最低工资拿了。工作一个星期后,我直接找课长要求涨工资了。起因是我知道旁边南大的实习生进来就是160/天,我自觉自己的实力不算差,为什么要比其他人低40呢。纠结了一下午应该怎么开口,事实上说了要求后课长立马就同意了。。。让我想得好多说辞都没用了,跟一拳打在棉花上一样(不得不说课长是个很干脆的人,很会拿捏分寸)。

刚开始的一个月实习非常累,我很想快点进入状态,不想在开会时做一个懵懂的听众,每天都强迫自己灌输项目的各种概念(项目代号叫AROMA,很优雅)。就算是下班后,我还会在网上搜项目相关的知识点。AROMA是做一个嵌入式的平台,项目主要工作是对以前的硬件和软件升级,只要是移植。我对linux驱动开发非常感兴趣,项目刚好也是这个方向,那时候工作非常起劲~在工作十几天后就度过新人的OJT,提前参与了项目的研发。

还记得自己独立写第一份代码的激动,花了两天时间才搞定各种问题。进行代码review之后又改的面目全非。让我这科班生终于见识到了正规的代码编写:代码风格要求非常严格(写出来确实很好看),结构清晰(你必须要解释给所有人听),这些东西都是在课堂上学不到的。对于品质的要求再后来的几个月中一直在震撼我。每次开学习会都可以学到很多东西,技术反而是次要的,关键是眼界。比如说项目推进方法,AROMA有两个大的升级,平台从X1升级到X2,平台从2.6内核升级到3.0内核,我是没任何思路的,让我做肯定是一步搞定~经过讨论的推进步骤是分两大步:先进行系统升级改进,再针对硬件平台开发。我觉得软件工程是在课本上学不来的,只能在实际开发中自己慢慢体会慢慢领悟。

时间过了很快,在六月份的时候,我已经慢慢进入状态,对项目有了大致的印象,不像之前那么累了。在六月楚参加了华为的实习招聘,那次面试感觉相当好,面试官说可以给我安排我感兴趣的部门实习,可那时候项目正在紧要阶段,我也实在不好意思去辞职。六月中的时候李大姐要去日本进修了,组里一起去腐败为她送行,表示就是一直吃一直吃,不用喝酒,哈哈。这种风气很好,我讨厌喝酒。。。还有一件重要的事,我开始加班了,有一个daemon需要追加功能,原计划是继续修修补补,课长看不下去了,表示要重构,于是时间便紧了,计划是加班两个星期搞定。从此开始了我苦逼的加班生涯。。。

刚开始加班,心中满是兴奋(不得不感慨,年轻就是好啊)。学到的确实很多,还记得晚上讨论数据结构与代码流程,课长、组长各种争吵。。。写代码给我一种很单纯的愉悦感,我很享受写代码的时间。晚上下班后,走在路边,陪着我的是一支烟和月亮,很有高中下晚自习的感觉。跟有经验的人一起共事可以学到很多东西,很多对别人理所当然的事在我看来都是惊奇的。

6、7月份加班很多,测试很痛苦,现在回过头来看,还是有很多值得总结的。在9月份的项目分析上,aroma的bug数过多,而且有几个bug无法解决。测试与修复bug的过程很痛苦,经常几天没有任何进展。我觉得是对项目认识不够深,尽管主要开发人员项目经验足够丰富,但驱动开发技术要求较高,恰恰都没这方面的技术经验,主要就是技术储备不足。一个人的技术缺陷是无法自我察觉出来的,觉得自己的程序实现的足够完美,但在高手看来立马就是破绽百出了!在编码阶段无法认识到实现的缺陷,且对技术基础原理认识不足,计划再完美也没用,六月份编码阶段一切按照工程计划按部就班,可以说非常完美,无需加班,任务全部完成,例如在驱动移植中,只管将2.6内核中的新增功能代码添加到3.0内核中,用winmerge就可以搞定了,然后功能测试通过,这驱动就算移植成功了。没人关心base版代码的设计与功能,限于自身的学识,是意识不到其重要性,于是就无需浪费时间学习。软件工程中有句话:当一群菜鸟(大家都没有驱动开发的经验的菜鸟)能按照预定计划进行开发而无问题时,往往就是有大麻烦的时候。这句话很快应验了:在7、8月份的测试中,修复bug非常困难,我们发现需要通读所有的驱动代码,理解原代码的调理顺序,而不仅仅是自己新增功能的代码。为了弥补6月舒适工作而产生的“技术债务”,只能在测试中拼命加班还债了。在我看来,这种加班其实是管理者的责任,对开发中的技术风险控制不足,在开发中没有干预的结果,开发者都是乐观主义者,没人会意识到自己的技术不足以胜任(在测试、维护阶段可以会意识到,往往已经晚了)。

我独立写了一个脚本,功能是运行磁盘检查命令,分析其log,在有错误的时候进行修复。脚本的代码量在50行左右,尽管以前没有写过,但通过百度通过基本的if、for、while循环与文件重定向语句还是把功能给实现了。写完还沾沾自喜:尽管没怎么学过,但还是能够把任务完成了。。。。但在9月份课长阅读了我的代码后,就告诉我不用在管这份代码了,会给其他人重新写。囧,当时还很想不明白,自觉自己的代码没写那么差呀,怎么就叫毙了呢?在学校中,我看了《linux shell 脚本攻略》,系统学习了脚本语言,才知道自己以前写过的代码有多丑陋!在有个类似功能的代码,用awk只需要武行代码。完整学习基础知识与仅靠百度而完成代码区别还是很大的,代码不仅仅是需要完成功能,还需要优雅、清晰、健壮,没有足够的知识储备是不行的。也可以看出,越无知越自大,当知识太少时会觉得自己任务完成的挺不错,而知识越多越谦卑,才能认识到自己的更多缺点!最后引用屈原的一句话,以此自勉:路漫漫其修远兮,吾将上下而求索!