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

从2015年年中毕业到如今2016年年末,不知不觉已经工做了一年半了。时间过的真快。正好年末了,总结一下这一年多来的感想。python

工做和在学校写代码的不一样

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

关键的知识与技能

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

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

汇编也是颇有必要再复习下的,有的地方用到了内联汇编,并且调试代码也常常须要进行汇编级的调试。编程

至于语言方面的注意点,着重强调一下编程规范,严格按照产品的规范来,没有规定的能够参考业界公认的好的编程规范,好比《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的方法:svg

  1. 有文档先看文档,而后问老员工,带着对业务的理解去看代码,最后的手段才是从代码反推业务逻辑;
  2. 有必定理解后,本身推断程序运行预期,加log,下断点,看call stack,看内部运行信息,验证本身想法;

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

不要过度局限于底层

C/C++开发一般是系统级编程,不少知识都是长期不变的经典知识,而且不少相关开发者都有一种越靠近底层就越屌的错觉,从而不肯意去了解其余知识,这绝对是不可取的。故步自封每每是落后的开始。要知道,不一样场景不一样问题的最佳解决方案绝对是不一样的,决定收入与岗位多少的也是市场需求,so 必定要让本身具备多方面的战斗力,用开放的心态多学习。