精华内容
下载资源
问答
  • 如何做一名优秀工程师

    千次阅读 2019-02-28 14:25:43
    近年来中国在科技领域的突飞猛进,很大程度上因为中国出现了批数量惊人的工程师工程师大致可分为机械、电气、硬件、软件、土木等。通过对那些优秀工程师观察,我们发现他们之所以优秀是有原因的。 从个人...

    看到一篇文章,写的蛮不错,以此文激励和敦促自己!

    近年来中国在科技领域的突飞猛进,很大程度上因为中国出现了一批数量惊人的工程师。

    工程师大致可分为机械、电气、硬件、软件、土木等。通过对那些优秀的工程师观察,我们发现他们之所以优秀是有原因的。

    从个人角度来看,优秀的工程师当具备以下特征:

    1. 强大的学习能力

    2. 过硬的基础知识

    3. 专业的文档管理能力

    4. 顺畅的沟通能力

    5. 超强的时间管理能力

    下文将简单描述一下我对这些能力的理解

    1. 强大的学习能力

    强大的学习能力是一个工程师是否优秀的第一要素,这里认为的学习能力主要是学习态度、学习方法。

    “一切能力问题归根到底都是态度问题”,没有学习的态度,学习能力基本为0。
    我很喜欢那些保持工作热情,拥有学习欲望的工程师。从他们身上,可以看到源源不断的求知欲,对问题的执着和对未知领域的探索。如果遇到这样的工程师,尽可能的多跟他们沟通,多了解他们,向他们看齐。

    当然,有了工作热情还需要一个有效的学习方法。如果一个人只会不断的提问,而不去自我探索,去解决问题,那学习能力也是打折扣的。

    以前遇到问题总喜欢直接找别人要答案,凡是不能直接给答案的大神都是伪大神。而后来当我去指导别人的时候,才发现直接给答案是极其不负责任的做法,授人以渔,而不直接解决,才能真正帮助他人。

    毕竟,学习,更多的是学做事情的方法和背后的逻辑,学习力才是这个时代最强的竞争力。

    2. 过硬的基础知识

    优秀的工程师都有过硬的基础知识,这些知识是他们胜任当前工作的基础。

    如果一个工程师习惯使用模糊的词语或者不专业的表达(如:可能、好像,大量,许多等),要么工作经验尚浅,要么在这个方向不够专业。

    职业分工带来了专业性,多接触一些专业的人士,你将看到他们的身上都有非常深厚的知识积淀,有过硬的基础知识。

    虽然每个人技能属性不同,但都明显能从交流中感受到他们的强大。

    3. 专业的文档管理能力

    专业的文档管理能力包括撰写编辑能力、归档查询能力。

    我见过的所有优秀工程师,都能写出专业而且漂亮的文档,无论是Word、PPT、Excel、Visio都可以熟练使用。相反,很少见到文档一般般但工程能力会非常强的人。

    作为工程师,我们很少在做天才的创新,大部分是将成熟理论在工程实践中应用。如果无法用文档、图形准确的描述工程任务,那工作逻辑和执行方法必然会遗漏或出错。很多时候,多问问自己,多审视自己的文档,是否能像写代码,画PCB一样,尽力做到最好。

    归档查询能力 则是职场的基本素质,如果你的电脑铺满了各种图标和文件,如果你没有听说过文档管理软件(Fences,Everything,Listary,Totalcommander),如果从没对众多文件进行过分类整理,你真的需要系统的学习一下文档管理的知识了。

    4. 顺畅的沟通能力

    能够顺畅的表达自己的观点,能够在会议上有条理有逻辑的展现自己的工作,都是作为优秀工程师的必备素质。

    虽然工程师是偏技术的职位,但在协作网络中,我们只有正确表达自己的想法才可以用最优路径达成目标任务。一味埋头苦干,无法顺畅沟通,必然偏离预期目标,导致任务失败。

    5. 超强的时间管理能力

    对于工作不守时的工程师,无法自律的工程师,很难会有重要的任务交给他。

    正如罗胖所言,我们工作就是在不停的展现自己的确定性。如果没有良好的时间管理,只会不停产生风险,而不会有确定性可言。

    时间管理能力也是工程师是否靠谱的表现之一。这包括了目标、计划、执行等内容,深入理解和执行PDCA流程,是时间管理的基本要求。

    后记

    每个胜任工作的工程师都满足部分优秀工程师的标准。

    作为工程师的一员,我们应当牢记“三人行,必有我师”的原则,从周边的同事身上学习优秀的基因。

    同时,也当建立自己对优秀的定义,并不断强化自己的认知,不在盲目中盲从,失去自己的判断。只有当你对概念有清晰的认知时,你才能朝着这一目标持续努力。

    态度决定高度,细节决定成败,愿你我共同加油~

    展开全文
  • 怎样成为一名优秀的算法工程师

    万次阅读 多人点赞 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 原创文章,仅供个人学习使用,未经允许,不得转载,不能用于商业目的。

     

     

    展开全文
  • Python是一门简单的编程语言,学习相对更加轻松容易,初学者很容易入门,但想要学好,成为一名优秀的Python工程师就不是那么容易的事情了,需要受到很多因素的影响,以下是成为一名优秀的Python工程师需要满足的条件...

    随着人工智能的发展与应用,Python编程语言受到世界各界人士的关注,Python工程师也成为一个热门职业,就业薪资高,发展前景广阔。

    Python是一门简单的编程语言,学习相对更加轻松容易,初学者很容易入门,但想要学好,成为一名优秀的Python工程师就不是那么容易的事情了,需要受到很多因素的影响,以下是成为一名优秀的Python工程师需要满足的条件:

    一、坚持和自信

    做任何一件事,贵在坚持,要坚信自己能够学好,是Python学习过程比不可少的心态,当遇到学习上的难点时,才能更有耐心的解决与积累,完整的进行Python课程的学习。

    二、选择适合自己的教材

    每个人的特点不同,有些人喜欢看书,有些人喜欢听老师讲课,选择适合自己的学习方式,才能更快速的进入学习状态,取得事半功倍的效果。

    三、营造良好的学习氛围

    学习是需要氛围的,让自己舒适的学习环境,学习会更有效率,学习过程中要尽量排除外部的干扰项,让自己更专注、更投入。

    四、多练习,多实战

    知识的学习需要多练习,要经常写代码,不要眼高手低,熟能生巧,最初可以先写小功能,之后再写完整的项目,不会的功能与知识点要多搜索学习,并及时应用,才能熟练掌握。

    五、多看、多分析

    平时,看到比较好的项目和功能,要尝试去写,然后看别人的源码,进行对比分析,取长补短,遇到问题,要多思考,找出原因,积累解决问题的能力。

    六、多交流

    与其他的Python工程师多进行交流,可以通过面对面,也可以加一些QQ群、论坛、贴吧等方式,互相探讨与交流,能够更快的促进知识的增长,甚至有豁然开朗的感觉。

    Python是一门语法非常接近自然语言的编程语言,语法简单优雅、开发效率高,拥有非常丰富的库以及良好的生态环境,对于入门的学习者非常友好,因此,想学好Python相对更加容易,按照以上方法学习,可以起到事半功倍的效果。
    展开全文
  •  我从没有听到有人问:如何做一名优秀、甚至卓越的WEB前端工程师。  何为:前端工程师?  前端工程师,也叫Web前端开发工程师。他是随着web发展,细分出来的行业。  Web前端开发技术主要包括三个...

      我所遇到的前端程序员分两种:

      第一种一直在问:如何学习前端?

      第二种总说:前端很简单,就那么一点东西。

      我从没有听到有人问:如何做一名优秀、甚至卓越的WEB前端工程师

    如果成为一名优秀的web前端工程师(前端攻城师)?

      何为:前端工程师

      前端工程师,也叫Web前端开发工程师。他是随着web发展,细分出来的行业。

      Web前端开发技术主要包括三个要素:HTML、CSS和JavaScript!

      它要求前端开发工程师不仅要掌握基本的Web前端开发技术,网站性能优化、SEO和服务器端的基础知识,而且要学会运用各种工具进行辅助开发以及理论层面的知识,包括代码的可维护性、组件的易用性、分层语义模板和浏览器分级支持等。

      随着近两三年来RIA(Rich Internet Applications的缩写,中文含义为:丰富的因特网应用程序)的流行和普及带来的诸如:Flash/Flex,Silverlight、XML和服务器端语言(PHP、ASP.NET,JSP、Python)等语言,前端开发工程师也需要掌握。

      前端开发的入门门槛其实很低,与服务器端语言先慢后快的学习曲线相比,前端开发的学习曲线是先快后慢。

      HTML 甚至不是一门语言,他仅仅是简单的标记语言!

      CSS 只是无类型的样式修饰语言。当然可以勉强算作弱类型语言

      Javascript 的基础部分相对来说不难,入手还算快。

      也正因为如此,前端开发领域有很多自学成“才”的同行,但大多数人都停留在会用的阶段,因为后面的学习曲线越来越陡峭,每前进一步都很难。

      Web前端技术有一些江湖气,知识点过于琐碎,技术价值观的博弈也难分伯仲,即全局的系统的知识结构并未成体系,这些因素也客观上影响了“正统“前端技术的沉淀!而且各种“奇技淫巧”被滥用,前端技术知识的传承也过于泛泛,新人难看清时局把握主次。因此,前端技术领域,为自己觅得一个靠谱的师兄,重要性要盖过项目、团队、公司、甚至薪水。

      另一方面,正如前面所说,前端开发是个非常新的职业,对一些规范和最佳实践的研究都处于探索阶段。

      总有新的灵感和技术不时闪现出来,例如CSS sprite、负边距布局、栅格布局等;

      各种JavaScript框架层出不穷,为整个前端开发领域注入了巨大的活力;

      浏览器大战也越来越白热化,跨浏览器兼容方案依然是五花八门。

      为了满足“高可维护性”的需要,需要更深入、更系统地去掌握前端知识,这样才可能创建一个好的前端架构,保证代码的质量。

      随着手持设备的迅猛发展,带动了HTML5行业标准的快速发展。web领域的技术,大概有10年都没有大的更新了!

      现在市场很需要优秀的、高级的前端工程师。

      一方面是因为这是一个比较新的细分行业,而且前端程序员大都自学一部分,知识结构不系统;另一方面,大学里面没有这种课程,最最重要的是:北大青鸟这类培训机构也没有专门的前端工程师的培训课程!!

      吴亮在《JavaScript 王者归来》第一张的序里面说:大多数程序员认为 Javascript 过于简陋,只适合一些网页上面花哨的表现,所以不愿花费精力去学习,或者以为不学习就能掌握。

      实际上,一门语言是否脚本语言,往往是她的设计目标决定,简单与复杂并不是区分脚本语言和非脚本语言的标准。

      事实上,在脚本语言里面,Javascript 属于相当复杂的一门语言,他的复杂度即使放在非脚本语言中来衡量,也是一门相当复杂的语言!

      Javascript 的复杂度不逊色于 Perl 和 Python!

      如何学习前端知识? 

      我们生活在一个充满规则的宇宙里面。社会秩序按照规则运行,计算机语言几乎全部是规则的集合。计算机前辈们定义规则,规则约束我们,我们用规则控制数据。大部分时候,对数据的合理控制,来自于你对规则的掌握。

      学习 HTML,CSS 应该先跟着书仔细、扎实的学一遍。然后就需要做大量的练习,做各种常规的、奇怪的、大量的布局练习来捆固、理解自己的知识。

      而学习 Javascript 首先要知道这门语言可以做什么,不能做什么,擅长做什么,不擅长做什么!

      如果你只想当一个普通的前端程序员,你只需要记住大部分 Javascript 函数,做一些练习就可以了。

      如果你想当深入了解Javascript,你需要了解 Javascript 的原理,机制。需要知道他们的本源,需要深刻了解 Javascript 基于对象的本质。

      还需要深刻了解浏览器宿主 下 的 Javascript 的行为、特性。

      因为历史原因,Javascript一直不被重视,有点像被收养的一般! 所以他有很多缺点,各个宿主环境下的行为不统一、内存溢出问题、执行效率低下等问题。

      作为一个优秀的前端工程师还需要深入了解、以及学会处理 Javascript 的这些缺陷。

      那么一名优秀的、甚至卓越的 前端开发工程师的具备什么条件

      首先,优秀的Web前端开发工程师要在知识体系上既要有广度和深度!做到这两点,其实很难。所以很多大公司即使出高薪也很难招聘到理想的前端开发工程师。技术非黑即白,只有对和错,而技巧则见仁见智。

      在以前,会一点Photoshop和Dreamweaver的操作,就可以制作网页。

      现在,只掌握这些已经远远不够了。无论是开发难度上,还是开发方式上,现在的网页制作都更接近传统的网站后台开发,所以现在不再叫网页制作,而是叫Web前端开发。

      Web前端开发在产品开发环节中的作用变得越来越重要,而且需要专业的前端工程师才能做好。

      Web前端开发是一项很特殊的工作,涵盖的知识面非常广,既有具体的技术,又有抽象的理念。简单地说,它的主要职能就是把网站的界面更好地呈现给用户。

      其次,优秀的Web前端开发工程师应该具备快速学习能力。Web发展的很快,甚至可以说这些技术几乎每天都在变化!如果没有快速学习能力,就跟不上Web发展的步伐。前端工程师必须不断提升自己,不断学习新技术、新模式;仅仅依靠今天的知识无法适应未来。Web的明天与今天必将有天壤之别,而前端工程师的工作就是要搞清楚如何通过自己的Web应用程序来体现这种翻天覆地的变化。

      说到这里,我想起了一个大师说过的一句话:对于新手来说,新技术就是新技术。

      对于一个高手来说,新技术不过是旧技术的延伸。

      再者,优秀的前端工程师需要具备良好的沟通能力,因为前端工程师至少都要满足四类客户的需求。

      1、产品经理。这些是负责策划应用程序的一群人。他们会想出很多新鲜的、奇怪的、甚至是不可能实现的应用。一般来说,产品经理都追求丰富的功能。

      2、UI设计师。这些人负责应用程序的视觉设计和交互模拟。他们关心的是用户对什么敏感、交互的一贯性以及整体的好用性。一般来说,UI设计师侯倾向于流畅靓丽、但并不容易实现的用户界面,而且他们经常不满前端工程师造成 1px 的误差。

      3、项目经理。这些人负责实际地运行和维护应用程序。项目管理的主要关注点,无外乎正常运行时间、应用程序始终正常可用的时间、性能和截止日期。项目经理追求的目标往往是尽量保持事情的简单化,以及不在升级更新时引入新问题。

      4、最终用户。指的是应用程序的主要消费者。尽管前端工程师不会经常与最终用户打交道,但他们的反馈意见至关重要。最终用户要求最多的就是对个人有用的功能,以及竞争性产品所具备的功能。

      Yahoo 公司 ,YUI 的开发工程师 Nicholas C. Zakas 认为:

      前端工程师是计算机科学职业领域中最复杂的一个工种。绝大多数传统的编程思想已经不适用了,为了在多种平台中使用,多种技术都借鉴了大量软科学的知识和理念。成为优秀前端工程师所要具备的专业技术,涉及到广阔而复杂的领域,这些领域又会因为你最终必须服务的各方的介入而变得更加复杂。专业技术可能会引领你进入成为前端工程师的大门,但只有运用该技术创造的应用程序以及你跟他人并肩协同的能力,才会真正让你变得优秀。

      ————————————

      关于书籍:

      HTML、CSS 类别书籍,都是大同小异,在当当网、卓越网搜索一下很多推荐。如果感觉学的差不多了,可以关注一下《CSS禅意花园》,这个很有影响力。

      Javascript 的书籍 推荐看老外写的,国内很多 Javascript 书籍的作者对 Javascript 语言了解的都不是很透彻。

      这里推荐几本 Javascript 书籍:

      初级读物:

      JavaScript高级程序设计:一本非常完整的经典入门书籍,被誉为JavaScript圣经之一,详解的非常详细,最新版第三版已经发布了,建议购买。

      JavaScript王者归来百度的一个Web开发项目经理写的,作为初学者准备的入门级教程也不错。

      中级读物:

      JavaScript权威指南:另外一本JavaScript圣经,讲解的也非常详细,属于中级读物,建议购买。

      JavaScript.The.Good.Parts:Yahoo大牛,JavaScript精神领袖Douglas Crockford的大作,虽然才100多页,但是字字珠玑啊!强烈建议阅读。

      高性能JavaScript:《JavaScript高级程序设计》作者Nicholas C. Zakas的又一大作。

      Eloquent JavaScript:这本书才200多页,非常短小,通过几个非常经典的例子(艾米丽姨妈的猫、悲惨的隐士、模拟生态圈、推箱子游戏等等)来介绍JavaScript方方面面的知识和应用方法。

      高级读物:

      JavaScript Patterns :书中介绍到了各种经典的模式,如构造函数、单例、工厂等等,值得学习。

      Pro.JavaScript.Design.Patterns:Apress出版社讲解JavaScript设计模式的书,非常不错。

      《Developing JavaScript Web Applications》:构建富应用的好书,针对MVC模式有较为深入的讲解,同时也对一些流程的库进行了讲解。

      《Developing Large Web Applications》:不仅有JavaScript方面的介绍,还有CSS、HTML方面的介绍,但是介绍的内容却都非常不错,真正考虑到了一个大型的Web程序下,如何进行JavaScript架构设计,值得一读。

      要做优秀的前端工程师,还需要继续努力:高性能网站建设指南》、《Yahoo工程师的网站性能优化的建议》、“YSLOW”性能优化建议、《网站重构》、《Web开发敏捷之道》、“ jQuery 库”、“前端框架”、“HTML5”、“CSS3”。。。 这些都要深入研究!

      万事开头难!如果你能到这个境界,剩下的路自己就可以走下去了。

      人们常说:不想当裁缝的司机,不是个好厨师。

      如果单纯只是学习前端编程语言、而不懂后端编程语言(PHP、ASP.NET,JSP、Python),也不能算作是优秀的前端工程师。

      在成为一个优秀的前端工程师的道路上,充满了汗水和辛劳

      —— 王子墨  写于 Hong Kong, Kowloon

      2012年10月28日 20:18

    展开全文
  • 如何做一名优秀的运维工程师--职称能力要求解读 原文出处:http://www.baidu-ops.com/2012/08/25/how-to-be-a-good-operation-engineer/ 如何积累技术能力,技术职级对技术能力的要求是怎样的?本文从一个侧面...
  • 这个问题应该是最近这几年程序员的诉求了,估计每个程序员的理想都是做一个高大上的工程师,而不是只会Ctrl+C和Ctrl+V的码农。从我们踏入这个行业开始,我相信大多数人都是差不多的,都是学习编程基础,学习算法基础...
  • 成为一名优秀的Python工程师的方法

    千次阅读 2018-08-29 18:11:42
    Python是一门简单的编程语言,学习相对更加轻松容易,初学者很容易入门,但想要学好,成为一名优秀的Python工程师就不是那么容易的事情了,需要受到很多因素的影响,以下是成为一名优秀的Python工程师需要满足的条件...
  • 浅谈如何做一名优秀的 WEB 前端工程师 随着近两三年来 RIA ( Rich Internet Applications 的缩写,中文含义为:丰富的因特网应用程序)的流行和普及,前端开发这个行业也开始备受关注。 前端开发的入门门槛...
  • 如何成为一名优秀的软件开发工程师  软件开发工程师是当今社会的热门职业,各大IT企业和非IT企业,都有不同程度的软件工程师的需求。特别是在信息化速度加快的今天,软件开发工程师更是成为了一个高薪的岗位。  ...
  • 如何成为一名优秀的软件工程师

    千次阅读 2018-09-07 08:57:18
    写在前面:作为一名十五年的前端码农,最近一直在想着把自己工作中积累的经验分享给大家,一起进步,所以于1个月前开通了这个公众号,这个公众号以后会不定期分享一些我工作中涉及的软件前端专业知识、遇到问题的...
  • 全文链接 写在最前  ...询问的内容也大多是如何选择职业方向,如何成为一名优秀的软件工程师,以及怎样快速提高自身的技能等。我在一一回复的同时,不禁想结合自身的经历,谈谈如何才能成为一名
  • 作为一名最基础的前端工程师你必须掌握HTML、CSS和JavaScript。三者必须同时精通,类似我字样对前端知识一知半解的,一遇到问题就停下工作就四处搜索解决方案的,首先就算不上一个合格的前端人员。像我这样的如果当...
  • 个残酷的现实是市场上不缺普通前端开发,缺的是掌握专业技能的优秀前端工程师优秀的前端工程师和普通前端工程师相比有哪些区别?凭什么优秀的前端工程师就比普通前端工程师多占据那么多优势? 优秀的前端...
  • 如何成为一名优秀的iOS开发工程师

    千次阅读 2015-09-08 12:08:12
    那么,如何成为一名优秀的iOS开发工程师呢?我觉得做到以下几点,你就离优秀越来越近了。 提高英语水平 作为码农,英语水平虽然不是一个硬指标,但是,如果你的英语水平足够好,那真是如虎添翼。在公司里
  • 但想要学以致用,学好它,成为一名优秀的并且可以拿高薪的Python工程师就不是那么容易的事情了,以下是我所总结的如何成为一名优秀的Python工程师需要满足的条件: 一、坚持和自信 任何一件事,要有恒心和毅力。...
  • 如何成为一名优秀的web前端工程师

    千次阅读 2013-12-09 21:52:43
     我从没有听到有人问:如何做一名优秀、甚至卓越的WEB前端工程师。  何为:前端工程师?  前端工程师,也叫Web前端开发工程师。他是随着web发展,细分出来的行业。  Web前端开发技术主要包括三个要素:...
  • 一名优秀工程师应该学会在工作中提升自己

    千次阅读 多人点赞 2021-03-18 11:24:32
    引言 古人云:“活到老,学到老。”互联网算是最辛苦的行业之,高额薪资意味着“加班”对工程师来说已是“家常便饭”,...三、成为优秀的架构师是大部分初中级工程师的阶段性目标。 注:原文来自美团技术团队《工.
  •  ... 现在软件测试工作越来越收到企业的...但是如何成为一名优秀的软件测试工程师呢?这是大家比较关注的一个问题,尤其是初入这个行当的莱鸟更想了解这个问题的答案。本文根据自己多年来在IT公司从事软件测试的经验
  • 这封总结信的标题是:二零一七年,我的失败与伟大当我认真读完这篇来自阿里P7资深工程师的2017年度总结后,我决定分享给同样身为软件工程师的你,希望大家都能成为一名优秀的软件工程师。文章目录1. 认知升级,...
  • 明星软件工程师的10种特质 ...从软件创业公司到投机...代码质量不仅成为了个必需品,更成为了个竞争优势。因为众多公司围绕软件而竞争,开发软件的人——软件工程师正显得越发重要。但是,你该如何发现那种百
  • 如何做一名工程师

    千次阅读 2015-08-28 09:09:06
    说实话,你是优秀工程师候选人吗?你怎么评价自己?你面试过多少家公司?你拿到offer的比率是多少?试一下用以下的公式来计算。 x = 获得现场面试的公司数量 y = 拿到的 offer 数量 ...
  • 【译】如何成为一名优秀的初级工程师

    千次阅读 多人点赞 2019-10-24 22:03:44
    很多人都在想着如何成为一名高级工程师,而我想要的是先成为优秀的初级工程师。 明年将是我正式受雇佣写代码的第15年了。(译者:老外的写代码职业生涯真的挺长的) 回首往昔,我第一天工作的日子仍然历历在目。那时...
  • 1、多学习,售后工程师比起售前工程师更辛苦的地方是你必须深入地紧跟着公司的产品的...对于那些软件产品的公司来说,你的工程师对你自己的产品有时候未必比客户的工程师了解的更深入,这是因为用户的工程师有很多
  •  我从没有听到有人问:如何做一名优秀、甚至卓越的WEB前端工程师。   何为:前端工程师?  前端工程师,也叫Web前端开发工程师。他是随着web发展,细分出来的行业。  Web前端开发技术主要包括三个要素...
  • 程序设计之道无远弗届,御晨风而返...我从没有听到有人问:如何做一名优秀、甚至卓越的WEB前端工程师。   何为:前端工程师? 前端工程师,也叫Web前端开发工程师。他是随着web发展,细分出来的行业。 W

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,077
精华内容 28,430
关键字:

如何做一名优秀的工程师