精华内容
下载资源
问答
  • 如何成为一个优秀工程师
  • 怎样成为一优秀的算法工程师

    万次阅读 多人点赞 2018-07-12 10:54:25
    其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,...怎样成为一名优秀的算法工程师?这是很多从事人工智能学术研究和产品研发的同学都关心的一个问题。面对市场对人才的大量需求...

    其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。

    原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不得转载,不能用于商业目的。

    怎样成为一名优秀的算法工程师?这是很多从事人工智能学术研究和产品研发的同学都关心的一个问题。面对市场对人才的大量需求与供给的严重不足,以及高薪水的诱惑,越来越多的人开始学习这个方向的技术,或者打算向人工智能转型。市面上各种鱼龙混杂的培训班以及误导人的文章会把很多初学者带入歧途,浮躁的跟风将会让你最后收获甚微,根本达不到企业的用人要求。为了更好的帮助大家学习和成长,少走弯路,在今天的文章里,SIGAI的作者以自己的亲身经历和思考,为大家写下对这一问题的理解与答案。

    首先来看一个高度相关的问题:一个优秀的算法工程师必须具备哪些素质?我们给出的答案是这样的:

    数学知识

    编程能力

    机器学习与深度学习的知识

    应用方向的知识

    对自己所做的问题的思考和经验

    除去教育背景,逻辑思维,学习能力,沟通能力等其他方面的因素,大多数公司在考察算法工程师的技术水平时都会考虑上面这几个因素。接下来我们将按照这几个方面进行展开,详细的说明如何学习这些方面的知识以及积累经验。

     

    数学知识

    与其他工作方向如app、服务器开发相比,以及与计算机科学的其他方向如网络,数据库,分布式计算等相比,人工智能尤其是机器学习属于数学知识密集的方向。在各种书籍,论文,算法中都充斥着大量的数学公式,这让很多打算入门的人或者开始学习的人感到明显的压力。首先我们考虑一个最核心的问题:机器学习和深度学习究竟需要哪些数学知识?在SIGAI之前的公众号文章“学好机器学习需要哪些数学知识”里,我们已经给出了答案。先看下面这张表:

    算法或理论 用到的数学知识点
    贝叶斯分类器

    随机变量,贝叶斯公式,随机变量独立性,正态分布,最大似然估计

     

    决策树 概率,熵,Gini系数
    KNN算法 距离函数
    主成分分析 协方差矩阵,散布矩阵,拉格朗日乘数法,特征值与特征向量
    流形学习 流形,最优化,测地线,测地距离,图,特征值与特征向量

    线性判别分析

    散度矩阵,逆矩阵,拉格朗日乘数法,特征值与特征向量
    支持向量机 点到平面的距离,Slater条件,强对偶,拉格朗日对偶,KKT条件,凸优化,核函数,Mercer条件
    logistic回归 概率,随机变量,最大似然估计,梯度下降法,凸优化,牛顿法
    随机森林 抽样,方差
    AdaBoost算法 概率,随机变量,极值定理,数学期望,牛顿法
    隐马尔可夫模型 概率,离散型随机变量,条件概率,随机变量独立性,拉格朗日乘数法,最大似然估计
    条件随机场 条件概率,数学期望,最大似然估计
    高斯混合模型 正态分布,最大似然估计,Jensen不等式
    人工神经网络 梯度下降法,链式法则
    卷积神经网络 梯度下降法,链式法则
    循环神经网络 梯度下降法,链式法则
    生成对抗网络 梯度下降法,链式法则,极值定理,Kullback-Leibler散度,Jensen-Shannon散度,测地距离,条件分布,互信息
    K-means算法 距离函数
    强化学习 数学期望,贝尔曼方程
    贝叶斯网络 条件概率,贝叶斯公式,图
    VC维 Hoeffding不等式

                                                 更多算法工程师的必读文章,请关注SIGAICN公众号

    上面的表给出了各种典型的机器学习算法所用到的数学知识点。我们之前已经总结过,理解绝大多数算法和理论,有微积分/高等数学,线性代数,概率论,最优化方法的知识就够了。除流形学习需要简单的微分几何概念之外,深层次的数学知识如实变函数,泛函分析等主要用在一些基础理论结果的证明上,即使不能看懂证明过程,也不影响我们使用具体的机器学习算法。概率图模型、流形学习中基于图的模型会用到图论的一些基本知识,如果学习过离散数学或者数据结构,这些概念很容易理解。除此之外,某些算法会用到离散数学中的树的概念,但很容易理解。

    如果你已经学过这些大学数学课,只要把所需的知识点复习一遍就够了。对于微积分,通俗易懂而又被广为采用的是同济版的高等数学:

     

     

    在机器学习中主要用到了微分部分,积分用的非常少。具体的,用到了下面的概念:

    导数和偏导数的定义与计算方法,与函数性质的关系

    梯度向量的定义

    极值定理,可导函数在极值点处导数或梯度必须为0

    雅克比矩阵,这是向量到向量映射函数的偏导数构成的矩阵,在求导推导中会用到

    Hessian矩阵,这是2阶导数对多元函数的推广,与函数的极值有密切的联系

    凸函数的定义与判断方法泰勒展开公式

    拉格朗日乘数法,用于求解带等式约束的极值问题

    其中最核心的是多元函数的泰勒展开公式,根据它我们可以推导出梯度下降法,牛顿法,拟牛顿法等一系列最优化方法。如果你想要深入的学习微积分,可以阅读数学系的教程,称为数学分析:

     

    与工科的高等数学偏重计算不同,它里面有大量的理论证明,对于锻炼数学思维非常有帮助。北大张筑生先生所著的数学分析可谓是国内这方面教材的精品。

    下面来看线性代数,同样是同济版的教材:

    如果想更全面系统的学习线性代数,可以看这本书:

    相比之下,线性代数用的更多。具体用到的知识点有:

    向量和它的各种运算,包括加法,减法,数乘,转置,内积

    向量和矩阵的范数,L1范数和L2范数

    矩阵和它的各种运算,包括加法,减法,乘法,数乘

    逆矩阵的定义与性质

    行列式的定义与计算方法

    二次型的定义

    矩阵的正定性

    特征值与特征向量

    奇异值分解

    线性方程组的数值解

    机器学习算法处理的数据一般都是向量、矩阵或者张量。经典的机器学习算法输入的数据都是特征向量,深度学习算法在处理图像时输入的2维的矩阵或者3维的张量。掌握这些概念是你理解机器学习和深度学习算法的基础。

    概率论国内理工科专业使用最多的是浙大版的教材:

    如果把机器学习所处理的样本数据看作随机变量/向量,就可以用概率论的方法对问题进行建模,这代表了机器学习中很大一类方法。在机器学习里用到的概率论知识点有:

    随机事件的概念,概率的定义与计算方法

    随机变量与概率分布,尤其是连续型随机变量的概率密度函数和分布函数

    条件概率与贝叶斯公式

    常用的概率分布,包括正态分布,伯努利二项分布,均匀分布

    随机变量的均值与方差,协方差

    随机变量的独立性

    最大似然估计

    这些知识不超出普通理工科概率论教材的范围。

    最后来说最优化,几乎所有机器学习算法归根到底都是在求解最优化问题。求解最优化问题的指导思想是在极值点出函数的导数/梯度必须为0。因此你必须理解梯度下降法,牛顿法这两种常用的算法,它们的迭代公式都可以从泰勒展开公式而得到。

    凸优化是机器学习中经常会提及的一个概念,这是一类特殊的优化问题,它的优化变量的可行域是凸集,目标函数是凸函数。凸优化最好的性质是它的所有局部最优解就是全局最优解,因此求解时不会陷入局部最优解。如果一个问题被证明为是凸优化问题,基本上已经宣告此问题得到了解决。在机器学习中,线性回归、岭回归、支持向量机、logistic回归等很多算法求解的都是凸优化问题。

    拉格朗日对偶为带等式和不等式约束条件的优化问题构造拉格朗日函数,将其变为原问题,这两个问题是等价的。通过这一步变换,将带约束条件的问题转换成不带约束条件的问题。通过变换原始优化变量和拉格朗日乘子的优化次序,进一步将原问题转换为对偶问题,如果满足某种条件,原问题和对偶问题是等价的。这种方法的意义在于可以将一个不易于求解的问题转换成更容易求解的问题。在支持向量机中有拉格朗日对偶的应用。

    KKT条件是拉格朗日乘数法对带不等式约束问题的推广,它给出了带等式和不等式约束的优化问题在极值点处所必须满足的条件。在支持向量机中也有它的应用。

    如果你没有学过最优化方法这门课也不用担心,这些方法根据微积分和线性代数的基础知识可以很容易推导出来。如果需要系统的学习这方面的知识,可以阅读《凸优化》,《非线性规划》两本经典教材。

     

    编程能力

    编程能力是学好机器学习和深度学习的又一大基础。对于计算机类专业的学生,由于本科已经学了c语言,c++,数据结构与算法,因此这方面一般不存在问题。对于非计算机专业的人来说,要真正学好机器学习和深度学习,这些知识是绕不开的。

    虽然现在大家热衷于学习python,但要作为一名真正的算法工程师,还是应该好好学习一下c++,至少,机器学习和深度学习的很多底层开源库都是用它写的;很多公司线上的产品,无论是运行在服务器端,还是嵌入式端,都是用c++写的。此外,如果你是应届生,在校园招聘时不少公司都会面试你c++的知识。

    C++最经典的教材无疑是c++ primer:

    对做算法的人来说,这本书其实不用全部看,把常用的点学完就够了。对于进阶,Effective c++是很好的选择,不少公司的面试题就直接出自这本书的知识点:

    接下来说python,相比c++来说,学习的门槛要低很多,找一本通俗易懂的入门教程学习一遍即可。

    数据结构和算法是编写很多程序的基础,对于机器学习和深度学习程序也不例外。很多算法的实现都依赖于数组,链表,数,排序,查找之类的数据结构和基础算法。如果有时间和精力,把算法导论啃一遍,你会有不一样的感受:

    对于应届生来说,学完它对于你通过大互联网和人工智能公司校园招聘的技术面试也非常有用。

    上面说的只是编程语言的程序设计的理论知识,我们还要考虑实际动手能力。对于开发环境如gcc/g++,visual studio之类的工具,以及gdb之类的调试工具需要做到熟练使用。如果是在linux上开发,对linux的常用命令也要熟记于心。这方面的知识看各种具体的知识点和教程即可。另外,对于编程的一些常识,如进程,线程,虚拟内存,文件系统等,你最好也要进行了解。

     

    机器学习与深度学习

    在说完了数学和编程基础之后,下面我来看核心的内容,机器学习和深度学习知识。机器学习是现阶段解决很多人工智能问题的核心方法,尤其是深度学习,因此它们是算法工程师的核心知识。在这里有一个问题:是否需要先学机器学习,还是直接学深度学习?如果是一个专业的算法工程师,我的建议是先学机器学习。至少,你要知道机器学习中的基本概念,过拟合,生成模型,ROC曲线等,上来就看深度学习,如没有背景知识你将不知所云。另外,神经网络只是机器学习中的一类方法,对于很多问题,其他机器学习算法如logistic回归,随机森林,GBDT,决策树等还在被大规模使用,因此你不要把自己局限在神经网络的小圈子里。

    首先来看机器学习,这方面的教材很多,周志华老师的机器学习,李航老师的统计学习方法是国内的经典。这里我们介绍国外的经典教材,首先是PRML:

    此书深厚,内容全面,涵盖了有监督学习,无监督学习的主要方法,理论推导和证明详细深入,是机器学习的经典。此外还有模式分类这本书,在这里不详细介绍。

    深度学习目前最权威的教程是下面这本书:

    它涵盖了深度学习的方方面面,从理论到工程,但美中不足的是对应于介绍的相对较少。

    强化学习是机器学习很独特的一个分支,大多数人对它不太了解,这方面的教程非常少,我们推荐下面这本书:

    美中不足的是这本书对深度强化学习没有介绍,因为出版的较早。不知最新的版本有没有加上这方面的内容。

    在这里需要强调的是,你的知识要系统化,有整体感。很多同学都感觉到自己学的机器学习太零散,缺乏整体感。这需要你多思考算法之间的关系,演化历史之类的问题,这样你就做到胸中有图-机器学习算法地图。其实,SIGAI在之前的公众号文章“机器学习算法地图”里已经给你总结出来了。

     

    开源库

    上面介绍了机器学习和深度学习的理论教材,下面来说实践问题。我们无需重复造车轮子,熟练的使用主流的开源库是需要掌握的一项技能。对于经典的机器学习,常用的库的有:

    libsvm

    liblinear

    XGBoost

    OpenCV

    HTK

    Weka

    在这里我们不一一列举。借助于这些库,我们可以方便的完成自己的实验,或是研发自己的产品。对于深度学习,目前常用的有:

    Caffe

    TensorFlow

    MXNet

    除此之外,还有其他的。对于你要用到的开源库,一定要理解它的原理,以及使用中的一些细节问题。例如很多算法要求输入的数据先做归一化,否则效果会非常差,而且面临浮点数溢出的问题,这些实际经验需要你在使用中摸索。如果有精力把这些库的核心代码分析一遍,你对实现机器学习算法将会更有底气。以深度学习为例,最核心的代码无非是实现:

    各种层,包括它们的正向传播和反向传播

    激活函数的实现

    损失函数的实现

    输入数据的处理

    求解器,实现各种梯度下降法

    这些代码的量并不大,沉下心来,我相信一周之内肯定能分析完。看完之后你会有一种豁然开朗的感觉。

     

    应用方向的知识

    接下来是各个方向的知识,与机器学习有关的应用方向当前主要有:

    机器视觉

    语音识别

    自然语言处理

    数据挖掘

    知识图谱

    推荐系统

    除此之外,还有其他一些特定小方向,在这里不一一列举。这些具体的应用方向一般都有自己的教材,如果你以后要从事此方向的研究,系统的学习一遍是必须的。

     

    实践经验与思考

    在说完理论与实践知识之后,最后我们来说经验与思考。在你确定要做某一个方向之后,对这个方向的方法要有一个全面系统的认识,很多方法是一脉相承的,如果只追求时髦看最新的算法,你很难做出学术上的创新,以及工程上的优化。对于本问题所有的经典论文,都应该化时间细度,清楚的理解它们解决了什么问题,是怎么解决的,还有哪些问题没有解决。例如:

    机器视觉目标检测中的遮挡问题

    推荐系统中的冷启动问题

    自然语言处理中文分词中的歧义切分问题

    只有经过大量的编程和实验训练,以及持续的思考,你才能算得上对这个方向深刻理解,以至于有自己的理解。很多同学对自己实现轮上的算法没有底气,解决这个问题最快的途径就是看论文算法的开源代码,在github上有丰富的资源,选择一些合适的,研究一下别人是怎么实现的,你就能明白怎么实现自己的网络结构和损失函数,照葫芦画瓢即可。

    计算机以及人工智能是一个偏实践的学科,它的方法和理论既需要我们有扎实的理论功底,又需要有丰富的实践能力与经验。这两个方面构成了算法工程师最主要的素质。科学的学习路径能够让你取得好的学习效果,同时也缩短学习时间。错误和浮躁的做法则会让你最后事倍功半。这是SIGAI对想进入这个领域,或者刚进入这个领域的每个人要说的!

     

    推荐阅读

    [1] 机器学习-波澜壮阔40年 SIGAI 2018.4.13.

    [2] 学好机器学习需要哪些数学知识?SIGAI 2018.4.17.

    [3] 人脸识别算法演化史 SIGAI 2018.4.20.

    [4] 基于深度学习的目标检测算法综述 SIGAI 2018.4.24.

    [5] 卷积神经网络为什么能够称霸计算机视觉领域? SIGAI 2018.4.26.

    [6] 用一张图理解SVM的脉络 SIGAI 2018.4.28.

    [7] 人脸检测算法综述 SIGAI 2018.5.3.

    [8] 理解神经网络的激活函数 SIGAI 2018.5.5.

    [9] 深度卷积神经网络演化历史及结构改进脉络-40页长文全面解读 SIGAI 2018.5.8.

    [10] 理解梯度下降法 SIGAI 2018.5.11.

    [11] 循环神经网络综述—语音识别与自然语言处理的利器 SIGAI 2018.5.15

    [12] 理解凸优化 SIGAI 2018.5.18

    [13] 【实验】理解SVM的核函数和参数 SIGAI 2018.5.22

    [14] 【SIGAI综述】行人检测算法 SIGAI 2018.5.25

    [15] 机器学习在自动驾驶中的应用—以百度阿波罗平台为例(上) SIGAI 2018.5.29

    [16] 理解牛顿法 SIGAI 2018.5.31

    [17] 【群话题精华】5月集锦—机器学习和深度学习中一些值得思考的问题 SIGAI 2018.6.1

    [18] 大话Adaboost算法 SIGAI 2018.6.2

    [19] FlowNet到FlowNet2.0:基于卷积神经网络的光流预测算法 SIGAI 2018.6.4

    [20] 理解主成分分析(PCA) SIGAI 2018.6.6

    [21] 人体骨骼关键点检测综述 SIGAI 2018.6.8

    [22] 理解决策树 SIGAI 2018.6.11

    [23] 用一句话总结常用的机器学习算法 SIGAI 2018.6.13

    [24] 目标检测算法之YOLO SIGAI 2018.6.15

    [25] 理解过拟合 SIGAI 2018.6.18

    [26] 理解计算:从√2到AlphaGo ——第1季 从√2谈起 SIGAI 2018.6.20

    [27] 场景文本检测——CTPN算法介绍 SIGAI 2018.6.22

    [28] 卷积神经网络的压缩和加速 SIGAI 2018.6.25

    [29] k近邻算法 SIGAI 2018.6.27

    [30] 自然场景文本检测识别技术综述 SIGAI 2018.6.27

    [31] 理解计算:从√2到AlphaGo ——第2季 神经计算的历史背景 SIGAI 2018.7.4

    [32] 机器学习算法地图 SIGAI2018.7.6

    [33] 反向传播算法推导-全连接神经网络 SIGAI2018.7.9

    [34] 生成式对抗网络模型综述 SIGAI2018.7.11

     

     

    原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不得转载,不能用于商业目的。

     

     

    展开全文
  • 如何成为一个优秀的测试工程师

    千次阅读 2014-12-03 17:59:15
    我一直在想,如何将自己的测试团队打造成世界一流的团队?流程、测试自动化、创新、扁平式管理、国际标准制定、测试社区贡献、…… 但首先一点是明确的,就是...所以,先讨论“如何成为一个优秀的测试工程师

    链接地址:http://blog.csdn.net/KerryZhu/article/details/5250504


    一直在想,如何将自己的测试团队打造成世界一流的团队?流程、测试自动化、创新、扁平式管理、国际标准制定、测试社区贡献、…… 但首先一点是明确的,就是要将每一个测试工程师打造成优秀的测试工程师,优秀的团队必须由优秀的成员构成。所以,先讨论“如何成为一个优秀的测试工程师”,将来再慢慢讨论:

    • 一流的测试流程是什么?
    • 测试自动化如何突破?
    • 测试如何创新?
    • ……

    http://blog.csdn.net/KerryZhu

    这个周末在看《赢在测试:中国软件测试先行者之道》,每个被访问者都会被问到“如何成为一个优秀的测试工程师”,多数专家只是部分地回答了这个问题,要么是阐述了 “优秀的测试工程师”应具有的素质,或告诉我们什么样的测试工程师是优秀的测试工程师。而问题“如何成为一个优秀的测试工程师”中至少包含了两部分内容:

    • 什么样的测试工程师是优秀的测试工程师?优秀的测试工程师的标准是什么?
    • 如何达到那个标准?即成长为优秀的测试工程师的过程。

    http://blog.csdn.net/KerryZhu

    1. 关于第一个问题

         每个公司或每个测试经理对“优秀的测试工程师”标准是不一样,而且一个测试工程师,自己定义“成功”的标准也不相同。我们需要专才,例如IBM 陈雅丽就谈到“第一个将复杂的测试环境设置好”的工程师就是一个优秀的测试工程师。有些工程师就是技术很强,能解决测试中技术问题,或者开发出适合自己的自动化测试框架,那也是优秀的;而有些测试工程师,比较全面,沟通能力好、需求理解深刻、测试用例设计全面,也有好的技术,能够圆满地完成测试任务,当然,也是优秀测试工程师。优秀测试工程师可能是一个专才,也可能是一个通才。对企业来说,你能进入Top 20%(所有工程师)就是优秀工程师。如果某个测试团队每个人很强,如果努力不够,你可能就不能成为优秀的工程师,这时候“积极态度”、“ 相对性”就体现出来了,“优秀的标准”也被提高了。例如,象Google、Microsoft等公司的测试工程师,如果放在普通的中小企业中,个个优秀,但从Google、Microsoft等公司的管理者看,他们还是觉得(评定)其中20~30%是优秀的。

    关于优秀的标准,还会受到企业文化、环境等影响,但总的来说,也是有共性的,许多东西是大家普遍认可的,如扎实的技术、良好的沟通能力等。下面,我们就看看《赢在测试》11位业界人士的看法,然后找出共同的关键字:

    • Google 段先生(没有完整描述):学习能力强、自我驱动、沟通良好、开发背景、知识面广、深入一门(技术)
    • 本地化专家崔博士:勤奋、开放、善于总结、设定适度目标
    • 性能测试专家陈先生:热情和责任心、过硬的技术、沟通、方法
    • 测试专家曹先生:责任心(强)、耐心、细心、信心、沟通、学习能力、总结和积累
    • 用友夏女士:熟悉业务、沟通、主动、偏外向的性格
    • 东软敬先生:热爱测试、责任心、逻辑思维能力、沟通、坚持
    • IBM陈女士:扎实、用心、思维开阔、执着、喜欢测试 (更多成分是指导如何成长)
    • 微软周先生:基础扎实、分析和解决问题能力、沟通、创新
    • 金山李女士:人品、责任心、思路、编码能力、主动、条理性
    • H3C刘先生:好奇心、细致耐心、坚持不懈、创造性、追求完美、沟通、开发经验、逆向思维
    • 我自己:强烈愿望、顾客第一、技术、沟通、踏实主动

    http://blog.csdn.net/KerryZhu

    从上面可以看出,优秀的测试工程师要具有的素质和能力,首先要热爱测试,没有兴趣,一切也许是空的。优秀的测试工程师应具有良好的沟通能力,沟通无处不在,没有良好的沟通,不能完全理解需求和设计,也不能很好地表达自己的意见。大家都知道沟通重要,但没有想到它会排在第一。其次,技术能力,应不局限于开发经验、编程能力,还应包括操作系统配置和排错( troubleshooting)能力、网络技术等。然后是人们经常提到的四心——责任心、耐心、细心、信心,有了这四心,应该能做到自我驱动,也会有很高的主动性、积极性,也比较执着、坚持不懈、追求完美。最后,也要强调,开阔的思路/逆向思维、创新、学习能力、善于总结等等。

    这样优秀的测试工程师的关键字已经产生:

    热爱、沟通、技术、责任心、耐心、细心、信心、

    思路、创新、自我学习、不断总结

    http://blog.csdn.net/KerryZhu 

     

    2. 第2个问题——如何成长

    关于第2个问题,也不是一两句话能说清楚,但如果将上述关键字作为自己的座右铭,每天看一遍,自己会成长的更快。当然,更重要的是方法,《赢在测试》也给出了不少方法,例如东软敬先生提出的3点就很好:去实践、去正规的公司、专注。另外,如果有开放的胸怀、很强的自我学习能力,肯定对自己的成长会有很多帮助。还有一点就是设定明确目标,不断思考和总结,才能不断衡量/评估自己,提高自己。如何更快地成长为优秀的测试工程师,关键字是:

    座右铭、目标、专注、实践、思考、总结、再实践

     

    链接:

    原创 成为一个优秀的测试工程师,其实挺难的

    原创 从职业人角度看外企

    人对了,公司就对了

     

    原创 如何从测试人员招聘的尴尬中走出来?

     

     

    30岁了 该如何谋划自己的未来

    原创 做事的态度与工作态度

    原创 人生的35个好习惯


    展开全文
  • 虽然陆奇离开了,但在他担任 COO 的这段时间里,为百度铺好了一条通往人工智能的轨道,同时...除了写得一手好 Code,什么的工作态度和方法才是一个优秀工程师的必备?7 月 11 日,陆奇出席百度内部 Engineering L...
    虽然陆奇离开了,但在他担任 COO 的这段时间里,为百度铺好了一条通往人工智能的轨道,同时他也为百度留下了宝贵的精神财富。今天我们将陆奇曾经的一篇演讲重新发布出来,回顾陆奇在百度的这段时间里,如何贯彻自己成为一个优秀的工程师的理念。

    一位工程师,如何才能称得上优秀?除了写得一手好 Code,什么样的工作态度和方法才是一个优秀工程师的必备?7 月 11 日,陆奇出席百度内部 Engineering Leadership Talk。作为计算机科学博士及优秀的管理者,他提出的五点要求,对每一位(百度)工程师都适用。


    Believe in 技术

    首先要相信技术,我刚才已经讲了,整个我们工业界,特别是像百度这样的公司,对技术坚定的、不动摇的信念特别重要。

    我也分享一下,盖茨提到微软公司的宗旨就是:写软件代表的是世界的将来。

    为什么?未来任何一个工业都会变成软件工业。盖茨是对的,因为任何工业任何行业自动化的程度会越来越高,最后你所处理的就是信息和知识。

    但现在软件的做法又往前提了一次,因为在人工智能时代,不光是写代码,你必须懂算法,懂硬件,懂数据,整个人工智能的开发过程有一个很大程度的提高,但是,技术,特别是我们这个工业所代表的技术一定是将来任何工业的前沿。

    所以,我们一定要有一个坚定不移的深刻的理念,相信整个世界终究是为技术所驱动的。


    站在巨人的肩膀上做创新

    我们观察一下,在美国硅谷、在中国,互联网创业公司也好,大型公司也好,大家的起点是越来越高的。为什么现在创新速度那么快?主要是起点高了。我们可以使用的代码模块,使用的服务的能力,都是大大的提升。

    在内部我想强调这一点,很多大公司包括微软在内,内部的 Code 都重做了无数遍。

    我现在的要求是,每一次你写一行新的代码,第一要做的,先想一想你这行代码值得不值得写,是不是有人已经做了同样的工作,可能做得比你还好一点。有没有其他人已经解决这个问题,然后你可以把你的时间放在更好的创新上。

    特别是大公司里面重复或者是几乎重复的 Code 实在太多,浪费太多的资源,对每个人的职业生涯都不是好事情。

    我再强调,在大公司内部,你写代码之前想一想,你这行代码要不要写,是不是别人已经有了,站在别人的肩膀上去做这件事情。


    追求 Engineering Excellence

    我要另外强调的一点就是 Engineering Excellence,工程的技术的卓越性和能力。

    任何市场上竞争就像打仗一样,就看你的部队体能、质量,每一个士兵他的训练的程度,和你给他使机关枪、坦克,还是什么样的武器。

    所以 Engineering Excellence 跟这个类比,我们要建的是一支世界上最强的部队,每一个士兵,每一个领军人,每个人的能力,他的训练都是超强的,然后我们给每个人提供的工具和武器都是一流的。

    所以 Engineering Excellence 是一个永无止境的、个人的、团队的,能力的追求和工具平台的创新,综合在一起可以给我们带来的长期的、核心的竞争力,为社会创造价值,最终的目的是给每个用户、每个企业、整个社会创造价值。

    我另外还要在这里强调的一点就是 Relentless pursuit of excellence:永无止境的不断的持续的追求。

    我们要么不做,要做的事情一定做最好,这是我对大家的要求。数据库也好,做大平台也好,大数据也好,我们要做什么事情,我们一定要下决心,这是我对你们每个人的要求,做什么事情一定要做最好,一定要是做业界最强的。


    每天学习

    每天学习,可能是对每个人都是最最重要的。

    我今天分享一下,我自己怎么想我自己的。就很简单一个概念,我把自己想象是一个软件、一个代码,今天的版本一定要比昨天版本好,明天的版本肯定会比今天好,因为即使犯了错误,我里面有 If statement,说如果见到这个错误,绝对不要再犯。

    英语,另外有一句说法就是 Life is too short, don’t live the same day twice. 同样一天不要重活两次。每天都是不一样,每天为什么不一样,因为每天都变成最好,每天都变得更好。今天的版本一定要比昨天好,每个好的、杰出的工程师,杰出的技术领袖,一定要保持自己学习的能力,特别是学习的范围。

    在这上面我也稍微引申一下,做 Computer science 的,如果只学 Computer science,不去学一些其他的行业,肯定不够。我举个例子,经济学必须要学。为什么这样讲?Computer science 它有个很大的限制,他是假定你有输入以后有输出,这种解决问题的方式有它的好处,但有它的限制性。

    我给大家举个例子,地图导航,如果你纯粹用这个方式去做,你只是把一个拥挤的地方移到另外一个拥挤的地方。经济学,它对问题的建模是不一样的。它起点是假定是一个整体的一个生态,每个人的输入都是另外一个人的输出,你要用经济学的方式来描述地图导航的问题,你就会去算一个 Equilibrium,市场也是这样。

    如果把深度学习真的要想彻底,必须把物理重学一遍,把生物学看一遍,再把进化论再看一遍。因为深度学习跟这些东西完全相关,自己肯定想不清楚,要彻底想清楚,必须学。

    另外,学产品,我以前跟所有的工程师都讲,如果不懂产品,你不可能成为一个最好的工程师。真正要做世界一流的工程师不光要懂产品,还要懂整个商业,懂生态。因为你的工作的责任,是能够看到将来,把技术展望到将来的需求,把平台、把开发流程、把你的团队为将来做准备。所以学习是非常非常重要的。


    Ownership

    最后是从我做起。

    我们公司有个非常大的使命,用科技让复杂的世界更简单。整个世界非常非常复杂,人其实所做的事情基本上都是 Reduce entropy。

    因为从热力学第二定律来讲,世界是会变得越来越乱的,我们想做的事情就是把它变的更简单,让我们生活变得更美好。

    而且具体的,我们可以通过人工智能技术来做到唤醒万物,但是这一切是通过每一个人的一点一滴的行为累计起来,从我做起。还有 Ownership,看到机会不需要问别人,有机会就去做,看到问题也不要去问别人,就把它 Fix。

    把我们的使命、把我们的公司当成我们自己每个人的事业来做,我可以坦诚的给每个人讲,如果你把公司的使命,把公司的事业,当成你自己个人的事业,Own everything,你在职业生涯一定是走得最快。从我做起,从身边的每一件事情做起。

    Believe in 技术、站在巨人的肩膀上做创新、追求 Engineering Excellence、每天学习、Ownership,陆奇送给每一位工程师的建议,你 get 到了吗?
    展开全文
  • 除了写得一手好Code,什么的工作态度和方法才是一个优秀工程师的必备? 7月11日,陆奇出席百度内部Engineering Leadership Talk。作为计算机科学博士及优秀的管理者,他提出的五点要求,对每一位百度...

    一位工程师,如何才能称得上优秀?除了写得一手好Code,什么样的工作态度和方法才是一个优秀工程师的必备?


    7月11日,陆奇出席百度内部Engineering Leadership Talk。作为计算机科学博士及优秀的管理者,他提出的五点要求,对每一位百度工程师都适用。


    “我们一定要有一个坚定不移的深刻的理念,相信整个世界终究是为技术所驱动的。”
    “有没有其他人已经解决这个问题?然后你可以把你的时间放在更好的创新上。” 
    “做什么事情一定要做最好,一定要是做业界最强的。”
    “我把自己想象是一个软件、一个代码,今天的版本一定要比昨天版本好,明天的版本肯定会比今天好。”
    “看到问题也不要去问别人,就把它Fix。”




    欲知是哪五点要求?请往下看

    展开全文
  • 怎么成为一个优秀.net软件工程师

    千次阅读 2015-03-20 13:07:07
    如何成为一个优秀.net程序员  下面我谈谈成为一个合格的.NET程序员要掌握哪些知识,有很多技术可能大家没有听过,就算开开眼界吧.如果觉的我写的都过时或者很垃圾哪就一笑而过吧!   第一步 掌握一门.NET...
  • 很多人都希望成为一个优秀的软件开发工程师,那么,成为一个优秀的软件开发工程师应该具备哪些能力呢? 下面是我个人的见解,有不同想法的欢迎提出讨论。
  • 怎样成为一优秀的嵌入式工程师

    千次阅读 2017-03-14 16:41:54
    无论是在北京、上海、深圳还是内地,嵌入式企业的人力资源经理们最头痛的就是没有办法为企业找到足够的嵌入式系统工程师,与每年几十万找不到工作的应届大学生相比,成为一个鲜明的差别。   那么,是
  • 【博客目录】成为一个优秀的数据工程师

    千次阅读 多人点赞 2019-06-12 08:51:52
    :PPT:极简PPT设计方法,一个就够 3)Xmind 【精品推荐】:Xmind:让你的大脑解放出来 4)Visio 【精品推荐】:visio:将文字、思维用优美的图片流程画出来 5)MarkDown 【精品推荐】:MarkDown编辑器,换一种方式...
  • 一个优秀的系统集成工程师(包括售前和实施)的技术线路 笔者注:并不是每个都要求掌握,只是寻找自己的一条技术线路 1:网络 基础知识:深刻理解网络基本概念,例如>ISO/OSI、TCP/IP、VLAN、各种LAN、WAN协议、各种...
  • 成为一优秀的Python工程师的方法

    千次阅读 2018-08-29 18:11:42
    随着人工智能的发展与应用,Python编程语言受到世界各界人士的关注,Python工程师成为一个热门职业,就业薪资高,发展前景广阔。 Python是一门简单的编程语言,学习相对更加轻松容易,初学者很容易入门,但想要...
  • 技能: 1) 熟练掌握c语言,了解汇编 2) 能熟练阅读硬件原理图 3) 熟悉linux操作系统原理 4) 熟悉Uboot常用开发 5) 熟悉Makefile、shell脚本 ...6) 有嵌入式linux驱动程序开发经验,如usb、网卡、spi、iic、uart ...
  • Java语言在2015年首次荣登编程语言热门榜的榜首,2018年再度登上榜首,下面不妨让我们来看看Java开发...你是否也能成为一个优秀的高级工程师工程师必须掌握的知识点是那些?人人都想成为高薪架构师,为什么现在高...
  • 特别是在信息化速度加快的今天,软件开发工程师更是成为一个高薪的岗位。  那么,如何成为一名优秀的软件开发工程师?想要胜任这一高薪职业,我们应该具备什么的素质呢?  根据调查,想要成为一名优秀的软件...
  • 全文链接 写在最前  ...询问的内容也大多是如何选择职业方向,如何成为一优秀的软件工程师,以及怎样快速提高自身的技能等。我在一一回复的同时,不禁想结合自身的经历,谈谈如何才能成为一名优
  • 随着人工智能的发展与应用,Python编程语言受到世界各界人士的关注,Python工程师成为一个热门职业,就业薪资高,发展前景广阔。Python是一门简单的编程语言,学习相对更加轻松容易,初学者很容易入门,但想要学好...
  • 位伟大的工程师曾经提出过这样的段感言。不错,工程师是利用自然科学来创造工程的人。工程既是物质的也是思想上的。许多不朽的工程,伟大的发明以及出神入化的技术方案,许多人往往只看到了他们的瑰丽,而作为...
  • 随着网络科技的迅速发展与应用,Python编程语言已经变得越来重要,Python自动化测试工程师成为一个高薪发展前景好的一个职业。 Python相对于其他语言来说,是一门比较容易上手的编程语言。只要你愿意学,投入时间...
  • 如何成为一优秀的软件工程师

    千次阅读 2018-09-07 08:57:18
    写在前面:作为名十五年的前端码农,最近一直在想着把自己工作中积累的经验分享给大家,一起进步,所以于1月前开通了这公众号,这公众号以后会不定期分享一些我工作中涉及的软件前端专业知识、遇到问题的...
  • 三者必须同时精通,类似我字样对前端知识一知半解的,一遇到问题就停下工作就四处搜索解决方案的,首先就算不上一个合格的前端人员。像我这样的如果当了前端工程师那工期肯定是不能保证的。合格的前端工程师第一要...
  • 如何成为一优秀的iOS开发工程师

    千次阅读 2015-09-08 12:08:12
    如果你是一位专业的iOS开发工程师,你应该为自己感到自豪。因为你能在强大的iOS系统下,一展身手实现自己和他人的...作为码农,英语水平虽然不是一个硬指标,但是,如果你的英语水平足够好,那真是如虎添翼。在公司里
  • 根据我的观察,优秀的测试人员可以做的事情可以包括如下3点: 由单纯的测试变成项目质量保证工作 持续集成探索和推动和自动化测试技术研究 测试相关工具的开发 1、我们先来讲第点,由单纯的测试变成项目质量...
  • 一个残酷的现实是市场上不缺普通前端开发,缺的是掌握专业技能的优秀前端工程师优秀的前端工程师和普通前端工程师相比有哪些区别?凭什么优秀的前端工程师就比普通前端工程师多占据那么多优势? 优秀的前端...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,418
精华内容 30,967
关键字:

怎样成为一个优秀的工程师