还有4天就是我进公司满一年的日子,想想一年前的稚嫩,到现在的稚嫩,只能说,越学习越觉得自己的卑微。
我准备从多方面来回顾与总结这一年的工作。由于是公司内部有保密协议,只能是笼统的总结。
公司主要是做CDP备份业务。我主要负责的是客户端C++这块。
一、工作任务:
1. 独立开发了一个类似于进程管理器的简易版(记录特定进程的CPU, MEM, IO)。【练手项目】
2. 客户端代码的维护,主要以解bug为主。
3. 客户端模块的开发。
4. 客户端安装包的打包。
二、涉及技术:
1. windows win32. 开发, Linux 开发。
2. windows, linux跨平台。 Cmake。
3. Inno Setup脚本。
4. Linux的shell脚本,windows的.Bat脚本
5. 客户端状态机异步模型、多进程通信模型、多线程模型、socket编程。
6. UML建模,需求分析
7. 项目管理, WBS
三、遇到的问题及解决对策:
1. 如何快速阅读大段代码并了解其内容
第一次阅读客户端代码的时候,所有代码加起来有接近4万多行,瞬间感受到自己陷入一片汪洋大海中。后来通过调试、画UML时序图和状态图、问原作者,逐渐知道了代码的各个模块的内容,并通过解决BUG增加了自己的掌握代码的信心。
2. 如何进行开发和安排任务
遇到一个新需求要进行开发时,如何进行开发,这个问题很重要。
最重要的是做好需求分析,明白为什么要有这个需求,现有的业务能不能覆盖这个需求?如果能覆盖,就不需要再造轮子。如果不能覆盖,就要思考这个需求的核心是什么。明确核心之后,下一步就是进行技术预研,选择好想用的技术,然后就是设计和WBS了。当然如果有条件的话最好有技术和设计评审阶段。设计的时候要将可扩展性考虑进去。
3. 编码中遇到问题时怎么解决?
我一般的解决方式是先找文档,一般是
·MSDN
文档还解决不了或者搜索的时间超过2个小时还没有头绪,就只能问同事了。
四、工作1年的反思
1. talk is talk, code is code.
工作中代码很重要,沟通交流也非常重要,能节省很多时间。
2. 慢就是快
花时间做好设计比一上来就直接编码虽然看起来费工夫,但是这种设计一旦做好了,后期出bug的可能性小,bug即使出现修复也很容易,而且便于新同事接手及培训新人。
3. 模块化很重要、重构的力量
重复造轮子是很没有必要的。如何把已经有的轮子很好的组装起来,如何把之前复杂的逻辑拆成模块便于可以任意组装,这些都是需要思考的。这点也是需要做的。
4. 定位问题、调试的能力
遇到问题时,资深的工程师能够凭借经验直接猜测可能问题出现的地方。我只能根据现象,通过排除法单步调试,逐步解决问题。这个方法很笨,效率也很低下。下一阶段,解决bug之后,要进行总结,如果遇到相同的bug要找到共性,以后遇到问题了,就可以进行类似的推断,这样就不必每次从头开始单步。
调试能力很重要,windows与linux都需要掌握,尤其是多线程、内存泄露方面的调试。
5. 学好英语写作
一手的资料大多数都是英语,目前自己能够做到在阅读英文材料的时基本了解作者的思想。但是如果让自己写出来,你能重新写出来这个资料么?如果有问题想请教这个作者,能用英语准确的写出你的问题放在论坛上或者写在邮件里么?
做技术不是闭门造车,是需要交流的。缜密的逻辑、好的文笔是很重要的。如果遇到大牛,在与他沟通时还要靠翻译,这不是很可笑的事情么!