腾讯以及各大厂的 C++ 开发环境是什么样的？
简单介绍下腾讯微信事业群后台开发环境。 微信事业群比较特殊，喜欢自己搞一套东西自己用，有些基础设施跟腾讯其他事业群的不太一样。 现在通常是macbook pro + 远程Linux主机。远程主机方面当前已经舍弃了以前集体户式的开发机，每人拥有一台相对独立的云主机，我的配置是8核Xeon Gold + 16GB + 500GB，考虑到这台机绝大多数时间只是跑个编辑器，性能还是挺富余的。 代码编辑：老员工通常是vim，基本没见过emacs。新员工很多开始用vs code了。我身边绝大部分人是用vim的，大家有时会互相分享一些自己使用的插件，但是每个人的配置都大不一样。编辑器是网上程序员撕逼大战的主战场之一，但是现实中同事之间倒也没有因为编辑器争执过，大家还是很文明的，新人刚来的时候我们这些老vim用户也会安利他们学一下vim，但人家最终选择了vs code我们也没说啥不是。 版本控制：目前基本都迁移到git了，以前是用svn。vim党基本都是直接用git命令，有些vs code的用户会在mac上用图形化的前端。 编译系统：现在是基于bazel搞的一套东西，开发阶段编译代码时使用一条指令将本地代码diff发送到编译机来编译，这样可以共享很多中间文件，速度蛮快的。以前是在本地开发机编译，有些比较大的模块编一次几十分钟，而且编译吃掉太多cpu还会导致vim卡顿…… 工具链：用的是GCC那一套，由于后台服务都是微服务，每个小模块都可选使用gcc4或者gcc7构建，最近我写了个小模块用了c++17，就是用gcc7编译上线的。希望哪天可以支持clang，我比较喜欢clang的编译报错信息…… 微信的后台开发环境一直有很多槽点，但也一直在改进，每年都能看到一些进步。现在还没解决的比较影响开发效率的应该就是代码的语义分析工具了。目前大家写代码的环境都是没有精确的跳转和补齐能力的，考虑到大家的环境很不统一，估计也没什么动力统一去搞。由于微信的后台代码量非常非常大，如果暴力把所有代码都加到一个工程里，ycm之类的东西根本跑不动，按一下tab卡5分钟还不一定能缓过来（gdb的时候也是不怎么敢按tab的）。后台C++项目都是基于bazel的BUILD文件管理依赖，总体上来说比较粗放，基本上每个新人刚来的时候都会折腾一下这个东西，试图搞定基于BUILD的补全方案，但最后性能和准确性上很难满足日常使用的需求。目前我的解决方案是用universal-ctags定期给常用目录下的文件生成tags，写代码的时候凭经验去跳。 在微信写业务非常傻瓜化，微信的微服务框架svrkit准备了一堆配套工具来生成代码，新起一个服务就是写一个protobuf文件，里面定义好接口，然后用这个文件生成整个服务的框架代码，再把业务逻辑填进去就好了。微信的C++基础库里面大到消息队列，小到string的trim都有提供，写普通的业务代码需要什么功能基本都可以找到，完全就是堆积木，对普通的业务部门来说，面试造火箭入职拧螺丝一点都不夸张。 微信的开发最讨厌的事情有两个：一个是别人写的代码没有注释，另一个是自己写代码还要写注释。这造成了很多工具、功能、逻辑的细节都是口口相传，或者沉没在浩如烟海的km文章、邮件里。没事去看看别人的代码总会有惊喜……有时是惊吓。当然这一点最近也在慢慢改变，基础能力相关的组件开始开辟一些wiki、git issue之类的进行系统的介绍了。