·学生事务

当前位置: 本科生求职心得

赵瑞文:个人成长小故事

[ 2015年6月3日 ]

从小到大,每次我在思考我要做些什么的时候,我都特别希望我的人生可以为这个世界带来一些改变,而不只是庸庸碌碌地过完这一辈子。改变世界有很多种方式,科学家们,政治家们,艺术家们,诗人们,都在以他们独特的方式改变着这个世界。而我选择通过成为一个工科生,日后成为一个工程师的方法,来完成我改变世界的理想。这个想法源自于我对生活的体验。我们每天都能够感受到科技带给我们的便利与愉悦。早上起来可以从电视里看到新闻,吃完微波炉里加热的早餐之后开汽车上班。在公司,电脑帮助我们处理大量的数据。在现在这个时代,科技是每一个人都能感受到的,最实际地影响着大家生活的东西。这也是我为什么希望成为一个工程师的原因。我希望把科学家们最新奇的想法变成一个可以看得见摸的着的产品,然后让我的产品,服务这个社会。

而我对计算机的特殊兴趣源于我小学的时候。那个时候电脑还是一个比较新鲜的玩意,能够熟练地用电脑发邮件聊QQ,在别人眼里就是一个电脑高手的形象了。我至今还记得,我第一次用百度搜索的时候的震惊感。当我输入一个词,来自全世界的相关信息都会在一瞬间显示在我的屏幕上的时候,我感到整个世界瞬间变小了。屏幕上显示的信息可能来自别的城市,别的国家,甚至是地球另一端的一个不知名的小乡村。我从此意识到了计算机的力量,它可以让一个渺小的个体在一瞬间拥有全世界的知识。

高中毕业之后,我来到了上海交通大学的电子信息与电气工程学院,在大一下学期选择专业的时候,我选择了计算机科学与技术专业。

一个优秀的工程师必须有很强的实践能力,在计算机系的专业课程中,有很多课程设计。这些课程设计就是能够很好地培养我们的实践能力的课程,它们能帮助我们把平时课堂上学习到的理论知识运用到实际中去。在所有课程设计中,我印象最深刻的就是编译原理课程设计。在这个课程设计中,老师要求我们实现一个编译器,能把small-C(一种类似于C语言的语言)翻译成llvm编码(一种底层的机器语言)。这个课程设计十分重要,因为它需要我们实现一个编译器的所有环节,包括词法分析,语法分析,语义分析,以及最后的代码生成。在实现这个编译器的过程中,我们需要用到各种数据结构,各种编程技巧。我们从大一开始学习的很多专业课,比如C++,数据结构,都在这个项目中得到了很好的实践与锻炼。比如语法树的规约需要用到类的继承与多态,变量的作用域需要用到栈这种数据结构。另外,这也是我第一次做这种规模比较大的工程,几千行的代码级别使得我需要在开始之前就先仔细安排好工程的计划。所以我先从实现一些简单的功能开始,每写一点就测试一点,以防最后出现问题也不知道从何查起。这个课程设计极大地提高了我的编程能力,也让我初步具有了做一个项目时必需的项目规划能力。

另外一个锻炼自己实践能力的机会,就是去企业进行实习,去真正感受一个企业是怎样运作的,去了解产品级的代码是什么样的。大三升大四的暑假,学校要求每个学生进行生产实习。于是我就在这个时候申请了阿里巴巴的实习生,并在暑假的时候进入阿里巴巴实习。我主要的工作,是编写UI自动化测试代码。这个工作不仅需要计算机方面的专业知识,同时也需要对业务有所了解。所以在刚开始的几天,我几乎每天都会不停地找同事询问业务方面的问题。有的时候一个业务场景会涉及很多个部门,我就会一个一个打电话来弄清楚整个业务逻辑。在企业中,很多工作不是一个人来完成的,因此就需要团队合作。我和另外几位阿里巴巴的正式员工一起完成这项工作,在工作中我们会经常商讨代码的结构与组织方式。因为我们的工作日后会成为一个种子工程,成为推广到其他部门的示范工程,所以我们会考虑到工程中代码的可读性,易用性,和可扩展性。另外,我在完成这个工作的过程中,代码能力与debug能力得到了进一步的提高。为了把我们的工作推广到其他产品线,我还在全组范围内做了经验分享,向其他员工展示UI自动化测试的实现方法。在我离开阿里巴巴的时候,UI自动化测试已经在两个产品的测试上上线运行了。

这一段时间的实习经历让我明白了要成为一个优秀的程序员需要很多努力。首先是要学会看代码。大多数程序员都只愿意用自己写的代码,但高手一般可以轻易调用别人写的代码。表面看上去是工作习惯不同, 但实际上是能力上的差别。看代码要比写代码难很多倍。在刚编写UI自动化测试代码的时候,就是由另外的工作人员给我们写出一个具有简单功能的demo程序。我们要先通过阅读代码,来了解这个框架的使用方法。其次是学着自己用网络解决问题。在实际的工作中,遇到之前没遇到的问题,没用过的工具,没学过的语言,都是很正常的事情。在这种情况下,快速自我学习能力就显得尤为重要。在这段实习中,我学习了通过阅读官方文档,在Stackoverflow上寻找答案,来解决实际工作中遇到的问题。

另外,进入真正的企业进行工作也让我了解了产品级的代码应该是什么样的,这也是我第一次意识到优化代码的重要性。好的代码应该非常的易读,所以如果时间允许,应该尽可能地优化代码,对时间和空间进行合理分配与使用。之前声明的一些变量,现在可能没用了。同样,并不依赖循环的一些声明可以移到循环模块之外去。否则后续开发或是技术提供会比较困难。但也需要注意,优化后的代码并不是越简短越好,用的语法越偏僻越好,因为晦涩的代码,维护成本会非常高,而且好的代码不但要实现功能,更要好维护,最好是A写的代码让B能很轻易的理解和修改。另外,代码的模块化也是非常重要的。经过良好的模块化的代码可以被较好地复用,这样能够比较好地提高开发的效率。

一个工程师不应当只是实现别人已有的想法,而且应该能够自己对问题提出新颖的解决办法。所以在大二的暑假,我加入了一个实验室,开始在科研方面进行尝试。我的研究方向是网络与博弈论相结合的在线拍卖领域。在刚进入实验室的时候,我对这个领域一无所知。在导师的指导下,我阅读了大量论文和教材,从中寻找可以突破的问题。在找到研究问题之后,我发现自己的数学基础太薄弱,尤其是概率论和线性规划方面的知识不足。于是我又重新学习当年学过的概率论与数理统计、线性规划、离散数学,并阅读STOC和FOCS等会议的文章,以跟随数学方面的最新进展。在实验室的这段经历让我体会到了科研工作的流程,也让我提高了自己的数学能力,算法能力,以及创新能力。

 四年的大学生活很快就要结束了。当年刚进入大学的时候,我还是一个对未来的人生充满着迷茫与惶恐的高中毕业生。现在,经过了大学四年的学习,实习,科研,我已经逐渐明确了自己的人生方向。接下来,我会去美国继续进行我的硕士学习。我相信,凭借我这几年的学习与实践所积累的知识与经验,凭借我个人面对困难时的毅力,我一定能向着我人生的目标不断前进,不断实现自我价值与人生目标。

访问数量: