百度工程师厂外生存指南
The following article is from 编程往事 Author 果冻虾仁
百度曾经一度被称为中国互联网的黄埔军校。这句话其实有两方面含义:一是说从百度走出来的工程师活跃在中国各大互联网企业中,对整个中国互联网的繁荣发展做出了贡献。二是说百度如同历史上的黄埔军校一般,为外界培育和输送了大量人才,但是自身却在逐步没落,暗示百度的人才流失严重。然而很多百度厂内高管常以『百度是中国互联网的黄埔军校』而自豪,这只是理解了这句话的第一层含义,却殊不知其第二层。高管们不对厂内人才大量流失的原因做反思,反而因为一句黄埔军校而沾沾自喜。着实让人唏嘘不已。
Anyway,俗话说『干着SEO的活,操着CEO的心』,当然我也没资格评价大公司的管理制度,好好挣钱过好自己的日子才是王道。本文主要是写给从百度跳槽(或即将跳槽)到其他公司的工程师们。尤其是跳槽到小厂的工程师们,因为其他的大公司都有自己的基础设施,进去之后自然就能找到好的技术替代。
百度已开源的库和框架
首先,你要知道百度其实开源了不少东西,这些你都可以在厂外继续使用。下面收集了一些百度的开源项目。
github地址 | |
---|---|
百度github地址 | https://github.com/baidu |
brpc(厂外使用的也比较多) | https://github.com/apache/incubator-brpc |
echarts(前端图表库) | https://github.com/apache/echarts |
Doris(OLAP系统,内部叫Polo) | https://github.com/apache/incubator-doris |
BFE(应用层负载均衡网关) | https://github.com/bfenetworks/bfe |
Paddle | https://github.com/PaddlePaddle |
大部分开源项目都可以在baidu账户中查看。但brpc、echarts等项目由于捐献给了Apache基金会所以不在baidu的账户中。bfe由于未知原因没有放到baidu账户中。
值得一提的是深受百度做离线的同学所喜爱的bigflow也是开源的:
https://github.com/baidu/bigflow
当然由于开源世界Spark、Flink等大数据技术演进,bigflow或许已经过时。
替换bsl(百度C++基础库)
bsl是“百度STL”的意思,主要包含了一些百度自研的C++容器,有一些用以作为std容器的替代,另外有一些是补充(比如json)。在厂外可以使用boost + 腾讯的Rapidjson + Facebook开源的folly库来替代。
bsl诞生的其中一个原因是std容器不是线程安全的,而bsl容器做到了线程安全。但是其实这也会让程序员变懒。可以通过调整并发逻辑、增加容器初始化等,让std容器在不使用锁的情况下达到安全使用的目的。并且很多情况下并非是多线程竞争操作std容器的场景,无需使用bsl容器。当然bsl还有一些特性比较公共的内存池等,这些在folly中都能找到类似的替代,不过大多数时候std容器 + boost 就已经足够满足要求。
替换bcloud(百度内部C++编译构建工具)
bcloud是百度内部的C++编译工具,基于Python实现的。众所周知,C++没有像Java的maven、Python的pip、JS的npm这种被广泛认可且好用的构建工具。
为此百度自研了bcloud,用来编译C++项目。这绝不仅仅是不用手写Makefile这么简单。
厂外可以使用腾讯开源的blade(https://github.com/chen3feng/blade-build)或者谷歌开源的bazel(https://github.com/bazelbuild/bazel) 。blade和bazel用法和BUILD文件写法都很像,不过blade开源时间要比bazel早很久。
坊间传言谷歌bazel是最先开发的,但是并未开源,后来谷歌员工离职在其他公司找不到像bazel一样好用的C++构建工具,就开始仿照bazel自研。这期间来到腾讯的那批人做了blade,去了Facebook的人做了buck,主要用于给安卓源码做编译。当然这可能是谣传。
当然bcloud也有一些独到之处,比如依赖打平和支持集群编译等。所谓的支持集群编译指的是,自己在开发机开发过程中,可以用bcloud让当前C++项目在集群上进行编译,最后再自动下载到开发机上。这是因为某些项目如果不用集群编译,本地可能编译个把小时……是的你没听错。我犹记得我使用了集群编译还是编译四五十分钟的心痛回忆,当然这某些老项目没有使用SOA或微服务思想做拆解所导致,bcloud支持让本地代码发送到集群做编译只不过是给这些项目擦屁股。
替换ODP(百度内部PHP集成框架)
在百度开发过PHP的RD和FE们应该都使用过ODP。其实所谓的ODP是在鸟哥(惠新宸)开发的PHP框架Yaf基础上做的调整和整合(整合了一些Web框架以外的东西,比如Nginx、PHP扩展等统统打包)。
Yaf是开源的,项目手册:https://www.laruence.com/manual/
github地址:https://github.com/laruence/yaf
替换百度配置格式
百度内部C++、PHP项目配置文件格式是基本统一的,这是一种升级版的ini文件格式。注意是升级版,普通的ini文件格式层级比较浅,最多只有一级section,并且没办法表示数组类型。百度配置格式语法比较复杂,但能表示的嵌套的多级section,也支持数组类型的表示。比如这样一个demo:
[A]
name: abc
[.B]
id: xxx
[.@C]
user: a
[.@C]
user: b
[.@C]
user: c
该配置转成json表达是这样:
{
"A": {
"name": "abc",
"B": {
"id": "xxx"
},
"C": [
{"user": "a"},
{"user": "b"},
{"user": "c"}
]
}
}
配置文件格式有很多,在厂外可以替换的百度配置文件格式,我首先推荐toml,其次是yaml。
yaml没有xml那种臃肿,但也有槽点,就是yaml用缩进表达section的嵌套递进关系,虽然这样配置文件比较直观,但层级如果太多,就会有大量缩进。如果你不喜欢yaml,那么我推荐你使用toml,这是一种和百度配置一样的扁平配置格式,同样是基于ini文件格式的升级版。上面的配置用toml表达是这样:
[A]
name = "abc"
[A.B]
id = "xxx"
[[A.C]]
user = "a"
[[A.C]]
user = "b"
[[A.C]]
user = "c"
或许toml比yaml更适合你。
替换BNS(百度内部命名服务)
BNS是百度内部的命名服务,它不仅可以给后台服务做服务发现,从而避免直接配置 ip+端口。也可以给机器本身(ip)做命名服务,所以主机、容器也有BNS,可以用它们BNS名字来做ssh登录。不过在厂外,我们一般直接通过机器ip登录机器就可以了。我们只需要给后台服务的服务发现找替代就可以了。像阿里的dubbo采用了zookeeper做服务发现,随着Go语言和云原生的兴起,采用etcd做服务发现也日趋流行。
不过若是C++在线服务则还有其他选择,那就是consul。因为brpc现在默认集成了对consul的支持,你可以直接给brpc的channel地址配成consul://
consul主页:https://www.consul.io
替换Matrix(百度容器化技术)
Matrix是百度内部自研的容器技术。想替换它,毋庸置疑必然是Docker和K8S。并且可能比Matrix更好用。
替换iCode
iCode就是百度内部管理代码库的代码平台,基于git。这个在其他公司应该都有独立的部署gitlab来做代码托管。
wiki
百度内部的wiki是一个大宝库,可以搜到很多资料。我在百度期间也有写wiki的习惯,而且自认为写得还不错,不信你在内网搜搜wangwei114
而这个wiki系统其实不是自研,而是直接购买的商业软件confluence,然后在内网部署了一套而已。很多公司应该都有购买confluence,即使也没有confluence那也会有自研的替代笔记软件。毕竟我们不应该把工作写到外网笔记上,以免泄密!
话术更新
百度有一套约定俗称的话术体系。其实这些都不是通用话术,初次跳槽的百度工程师们,千万不要把下面这些话术当成业内标准,其实都只是百度内部的习惯叫法。
RD、FE、PM、OP、QA
比如:RD、FE、PM、OP、QA。RD在百度内部表示的是后端的工程和算法工程师。其实RD一词表示的是“研发”,不应该仅限于后端才对。在百度把前端开发称为FE,包括web和移动客户端开发的工程师。
PM一词也有歧义,在腾讯PM表示的是项目经理,在百度PM特指产品经理。谁叫project manager和product manager的缩写都是PM呢?
QA在百度表示的是测试工程师。在腾讯则不然,QA和测试并不等价,虽然QA一般也隶属于测试团队,但是人员配置却相对较少,一般不负责具体的测试工作。只负责做事故定级等外围工作。
OP表示的是运维,这个没有什么争议。
据说这套词汇也被百度工程师们带到了字节跳动,除此之外还有一个习惯被带到字节,那就是“串讲”。
串讲
串讲指的是阅读历史代码,然后做PPT开个分享会去讲解的意思。一般是新人串讲。百度所有码农入职后估计都有被要求做串讲的经历。新人串讲这个习惯据说也被带到了字节。
词表
我之前所在的部门,把词典文件称之为词表,比如什么静态词表、动态词表之类的。在其他公司一般就叫词典文件,也就是dict文件。
showcase
貌似是需求开发差不多的时候,给老大们看效果叫做“show case”
case study
case study,直译是案例研究。看起来是中性词,表示大家一起学习研究某一案例。其实在百度base study表示的事故发生之后的复盘会(批斗会)。
CI
CI本身是持续集成的意思。在百度,CI一词变成了特指把代码合并到代码主干的这一操作。其实合并代码只是持续集成中的一个环节而以……
wise
另外还有一些黑话,比如“wise”。最早wise原本是wireless search的缩写,即无线搜索,也就是移动端的百度(不仅限于手机百度APP上的百度),但是常常被员工误解为wise就是移动端的意思,其实只是表示移动端的百度搜索。
biu
百度把团建叫做biu。团建的英文是team building,如果要缩写building也应该是bui才对。但是不知道哪位前辈起的头,让biu成为了团建的代名词,据说和bui相比,biu是更可爱的说法……
舵主
“为人不识陈近南,便称英雄也枉然”。好了,好了,串台了。在百度每个组都有一个同学担当舵主,所谓舵主就是负责组内组织团建活动、掌管经费开支的同学。同样不知道是哪位前辈高人首先这样命名的……
“舵主,我们周四去哪biu啊~”
其他的,欢迎大家补充
- EOF -
看完本文有收获?请分享给更多人
推荐关注「Linux 爱好者」,提升Linux技能
点赞和在看就是最大的支持❤️