您的位置:首页 > 运维架构 > Linux

Linux C/C++ 程序员毕业工作一年多来的感想

2016-12-05 01:22 337 查看
从2015年年中毕业到现在2016年年底,不知不觉已经工作了一年半了。时间过的真快。正好年底了,总结一下这一年多来的感想。

工作和在学校写代码的不同

在学校写代码,很少有规模特别大的,最多也就几千行,代码规范全凭个人喜好,没有规范的测试,更别提什么缺陷跟踪,持续集成了。到了正式工作,这可就大不一样了。工作面对的产品是用C/C++开发,10多年的历史,上百万行的code base. 产品代码有规范的编码风格,清晰的模块划分,统一的编程范式。代码提交有严格的code review, 特性功能有完整的设计文档和完整的测试用例。当然,持续集成,缺陷追踪都一应俱全。

关键的知识与技能

个人感觉最重要的知识是操作系统方面的知识。工作这一年多以来最长看的书也就是《UNIX环境高级编程》、《TCP/IP协议详解:卷一 协议》、《UNIX网络编程卷1:Socket API》这三本了,这三本书基本可以cover住工作中遇到的知识盲点。

常见的设计模式数据结构也是非常重要的,产品代码很多地方都体现出了设计模式的运用,依赖倒转、代理模式、观察者都是经常见到的。工作最常用的数据结构与算法有有链表、哈希、各种树、排序和状态机。在学校往往只重视了数据结构而忽略了设计模式,到了工作中就会发现设计模式在大型软件开发中的精妙之处。

汇编也是很有必要再复习下的,有的地方用到了内联汇编,而且调试代码也经常需要进行汇编级的调试。

至于语言方面的注意点,着重强调一下编程规范,严格按照产品的规范来,没有规定的可以参考业界公认的好的编程规范,比如《Google C/C++编程规范》。其他的到没有什么好强调的了。

常用工具的使用

常用工具的熟练使用时高效开发的一个重要的前提。高效的写代码,规范的提交,快速的调试查log,快速编写一些必要的脚本都是必备的技能。个人在工作中用到工具如下:

版本管理 Git

代码编辑 Source Insight, Sublime, Vim

产品构建 GNU Make, Gradle

调试工具 GDB, Valgrind, Perf

持续集成 Jenkins

脚本语言 shell, python

各种常用的Linux命令:grep, sed, awk, find, ps…

沟通与团队协作

沟通与团队协作十分的重要。尤其是大项目大团队的时候。清晰的表述出自己的想法和意图,理解到位别人的想法是很重要的,因为一个feature往往是多个人共同开发的。而且,有时候还会需要额外协调资源,只闷头搞也是不行的,沟通很重要。

产品code base的快速理解

这一点拿出来单独说是因为感触比较深。不同于平时自己搞项目,公司产品往往都有一定规模了,而且通常都还不小。一定要学会看代码,修bug,加feature,往往都要要求对已有code base准确理解。快速理解code base的方法:

有文档先看文档,然后问老员工,带着对业务的理解去看代码,最后的手段才是从代码反推业务逻辑;

有一定理解后,自己推断程序运行预期,加log,下断点,看call stack,看内部运行信息,验证自己想法;

总之,不要上来就闷头看,不要高估自己从代码反推业务逻辑的能力。要知道,有时候别人写的代码真的没那么容易看懂。用正确的方法才能事半功倍。

不要过分局限于底层

C/C++开发通常是系统级编程,很多知识都是长期不变的经典知识,并且很多相关开发者都有一种越靠近底层就越屌的错觉,从而不愿意去了解其他知识,这绝对是不可取的。故步自封往往是落后的开始。要知道,不同场景不同问题的最佳解决方案绝对是不同的,决定收入与岗位多少的也是市场需求,so 一定要让自己具有多方面的战斗力,用开放的心态多学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: