我带过的一名C++实习生——Z同学

   

    刚开始带Z同学,吃饭聊天时,我顺便了解了下他的擅长:linux平台下C、C++网络编程。

    接下来的实习,主要分为两个阶段:小组公共培训和项目实训。

    小组公共培训为期2周,主要学习和了解公司文化制度,讲师和导师相结合的方式,对学生的基础知识进行培训和引导。

    公共培训期间,Z同学主要学习和巩固面向对象、数据结构与算法、进程线程与内存、计算机网络、数据库设计等基础知识。独立完成了日志库、桌面计算器,超市管理系统等作业;并与其他学生合作,完成了聊天和文件传输程序的设计、编码和测试。

    我的职责是负责Z同学作业完成情况的跟进与疑难解决。比如日志库作业,先让他按照自己的思路去实现日志库初版,之后我来review,接着面对面提出一些建议和优化措施:编码规范和风格;结合设计模式(单例,工厂方法),对代码结构进行优化;日志库支持多线程等。第二天,他给出了改进后的版本,并在代码中以注释的方式,提出了一些自己的思考:“这里后台线程用死循环,会导致该线程抢占CPU 执行无用的操作( 如果缓冲区为空的话,仅仅执行开关锁操作,浪费CPU), 能改进吧?”看到问题后,我给他讲解了解决思路,他查找资料后,自己解决了这个问题。

    公共培训结束后,开始项目实训。Z同学要做毕业设计,经公司同意之后,他的实训题目是《简单多媒体播放软件》。

    实训项目伊始,软件小组组织了实训计划动员会,各位导师和所带学生,探讨了各自的培训计划。我和Z同学探讨后的计划是:按照软件开发的基本流程:需求分析-->技术调研,选型-->设计-->搭建框架-->编码-->测试,来完成播放软件的开发。与公共培训期间的职责一样:我负责跟进与疑难解答。需求分析时,把大任务分解成一个个子任务,迭代开发:分三个阶段,初版基本功能,比如界面,播放、停止、加速、缓速等基本播放需求;二版高级功能,比如一些特效的实现和处理;三版支持播放方案管理。有了大目标和小目标后,会帮他理清工作头绪,并逐步建立信心。

    接下来就是按照计划,一步一个脚印来执行了。但是这个过程中,对时间节点的把控,是个难点。设计编码过程中,不可避免的会出现一些未知因素,而导致计划延时。比如在使用OpenCV来实现特效——腐蚀时,水平方向的腐蚀正常,而垂直方向的腐蚀却出现了重影问题。Z同学在网上查找资料,没有合理的解释;咨询周边的人,几乎没人接触过。问题卡住了。。。我想起了之前杭州的一位同事,专门做播放器视频编解码的,向那位同事请教之后,同事说调用OpenCV接口代码的参数,可能出错了。顺着这个思路,Z同学通过自己不断摸索和尝试,终于找到了问题根源:1,调用接口函数时,将宽高参数传反了;2,视频帧是YUV格式的,需要转换成RGB格式的。

    经过自己的努力,Z同学基本完成了播放器软件的功能开发,及文档编写(毕业设计文档)。因时间有限,5月18日,他要返校进行答辩,播放器软件只支持Windows平台,暂时不支持Linux平台。不过这对他来说,已经很出色了,毕竟在有限的一个半月时间里,已经完成了基本功能开发及自测。

    通过2个月的接触,我对Z同学的评价:软件基础知识扎实,学习和动手能力强,善于思考和提问,具有很好的可塑性。

后记:以上文字写于2018年5月,前几天无意中翻了出来。

猜你喜欢

转载自blog.csdn.net/chexlong/article/details/129274077