百度工程师厂外生存指南

简介: 百度曾经一度被称为中国互联网的黄埔军校。这句话其实有两方面含义:一是说从百度走出来的工程师活跃在中国各大互联网企业中,对整个中国互联网的繁荣发展做出了贡献。二是说百度如同历史上的黄埔军校一般,为外界培育和输送了大量人才,但是自身却在逐步没落,暗示百度的人才流失严重。然而很多百度厂内高管常以『百度是中国互联网的黄埔军校』而自豪,这只是理解了这句话的第一层含义,却殊不知其第二层。高管们不对厂内人才大量流失的原因做反思,反而因为一句黄埔军校而沾沾自喜。着实让人唏嘘不已。

百度曾经一度被称为中国互联网的黄埔军校。这句话其实有两方面含义:一是说从百度走出来的工程师活跃在中国各大互联网企业中,对整个中国互联网的繁荣发展做出了贡献。二是说百度如同历史上的黄埔军校一般,为外界培育和输送了大量人才,但是自身却在逐步没落,暗示百度的人才流失严重。然而很多百度厂内高管常以『百度是中国互联网的黄埔军校』而自豪,这只是理解了这句话的第一层含义,却殊不知其第二层。高管们不对厂内人才大量流失的原因做反思,反而因为一句黄埔军校而沾沾自喜。着实让人唏嘘不已。


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也是开源的:



当然由于开源世界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

                         640.jpg 

                                                      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更好用。

640.jpg

                                                     docker

替换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是更可爱的说法……


640.jpg

                                                    biu

舵主


“为人不识陈近南,便称英雄也枉然”。好了,好了,串台了。在百度每个组都有一个同学担当舵主,所谓舵主就是负责组内组织团建活动、掌管经费开支的同学。同样不知道是哪位前辈高人首先这样命名的……


“舵主,我们周四去哪biu啊~”


其他的,欢迎大家补充

相关文章
|
3月前
|
安全 算法 数据安全/隐私保护
腾讯面试官:工作两年了,这么简单的cisp题你都不会?
注册信息安全专业人员,是经中【国信息安全产品测评认证中心】实施的国家【认证】,对信息安全人员执业资质的认可。该证书是面向【信息安全】企业、信息安全咨询【服务机构】、信息安全【测评机构】、【政府机构】、社会各组织、团体、大专院校以及企事业单位中负责信息系统建设、运行维护和管理工作的信息安全专业人员所颁发的专业资质证书。
77 0
腾讯面试官:工作两年了,这么简单的cisp题你都不会?
|
10月前
|
算法 架构师 安全
阿里十年:我用十年的时间,学会成长
记录自己在阿里工作10年间遇到的挑战与困难,以及一些思考与成长的经验,分享出来,希望对大家有所帮助。
52505 55
|
10月前
|
边缘计算 人工智能 搜索推荐
2021年最值得期待的九大创业趋势——帮助您在这个不确定的时代中生存
2021年最值得期待的九大创业趋势——帮助您在这个不确定的时代中生存
|
人工智能 自动驾驶 小程序
百度的长期主义
百度的长期主义
176 0
百度的长期主义
谷歌如何管理世界上最聪明的工程师?
工程师不喜欢别人干预工作,但不拒绝管理者能够密切关注他们的职业发展。 谷歌一直以关注人力资源和管理战略而著称,该公司的一大重要任务就是说服旗下大量工程师服务各自老板和主管经理的管理,并让这些工程师信服这些管理者的价值。
167 0
谷歌如何管理世界上最聪明的工程师?
WM
|
存储 canal 开发框架
我所经历的创业公司是如何做技术的?--《我与开源的故事》
人类的文明得以快速发展,很重要的一点在于我们可以站在巨人的肩膀上继续探索。而开源世界之于互联网行业来说就是这个巨人之一, 本文将重点阐述作者本人所了解的开源世界,以及如何通过开源项目做出有效个工作产出。
WM
9049 0
我所经历的创业公司是如何做技术的?--《我与开源的故事》
|
程序员
推荐11本对程序员最有影响力的书籍
译文链接:推荐11本对程序员最有影响力的书籍
695 0
李彦宏回应百度是否被落下:我们擅长技术含量高的事情
“技术含量没那么高的,我们做起来就相对困难一些。”
384 0