搜索

普通工程师和优秀工程师的差距在哪儿

gecimao 发表于 2019-08-19 21:25 | 查看: | 回复:

  我相信每个工程师都曾怀揣一个成为技术大牛的梦想,可是真正走向技术大牛这条路的少之又少。工作中我们常常会发现,有些同学工作没几年但成长迅速;很快就能走向团队核心岗位,成为一名优秀的工程师;而有些同学工作几年后却在公司里默默无闻,能力和职位上都没有太大提升,得过且过最终沦为一名普普通通的码农。所以我常常会有感慨,太多人(包括我自己)真的只不过是用一两年的经验在职场上混了五年十年甚至更久。

  那么普通工程师和优秀工程师到底差距在哪儿?那些优秀工程师是怎么一步一步成长起来了的呢?以下就我自己的观察和思考来谈一谈,看看能不能一探究竟,了解通向优秀工程师的法门;然后与大家共勉,一起朝着优秀工程师的方向去努力。

  我们拿吴军老师在得到专栏中讲解的一道 Google 面试题来展开聊一聊,看看面对同样的问题,普通工程师和优秀工程师是如何思考解决问题的。

  在最近公司的招聘面试过程中,我也拿类似的问题去问过部分候选人,大部分候选人都把问题想的太简单。通常普通工程师给出的解决方案是:根据经纬度算出所有加油站到当前位置的距离,然后对这些加油站按照距离的远近进行排序,选择距离最近的几个加油站。

  可问题是,在路面上行驶,从 A 点通往 B 点,往往不是直线距离。因为无论是驾车还是步行,我们都不可能穿过建筑直达目的地,A 点到 B 点的距离是很多距离片段的组合,这可能会有上千种组合,那么如何从这上千种组合的路线中选择距离最近的一条路线呢?使用动态规划算法能够很好的解决这个问题,在上千种组合中只需几十个步骤就能计算出最短路线。这对部分工程师已经是个门槛了。

  绝大部分工程师面对这样的问题都会想到排序,排序当然能够解决问题,但并不是最优方案。就算使用效率最高的快速排序,也需要 N 乘 LogN 的计算量。假设城市里有 1000 个加油站,那么 LogN 约等于 10,也就是说计算的复杂度差不多是 1000,当然 1000 的计算量对于计算机算不上什么,但是考虑到一个城市的路面上可能有上百万辆行驶的汽车,这个计算量的消耗就很可观了。

  假设我们只需要最近的 5 个加油站,如果对所有的加油站排序那显然做了很多无用功。数据结构中有一种叫二叉树的数据结构,在二叉树中有一种更细的分类:“堆”,通过堆排序我们可以只用排出前几名,而不用管后面的名次。通过堆排序排出第一名的时间复杂度是N,排出第二名、第三名、第四名、第五名的时间复杂度都 LogN,比对 1000 个加油站排序要快的多。对于我们的需求:选出最近的 5 个加油站,差不多只需要 1000 的计算量,比快速排序快了近 10 倍。

  我们在解决问题的时候不由自主的做了一个假设,就是整个算法的优化过程是围绕一个使用者的某一次使用来进行的。但是在现实生活中,一个城市里有很多人会同时在不同的地方寻找加油站。类似的,同一个人在不同的时间不同的地点开车时也需要寻找加油站。考虑到这个现实场景,时时刻刻都有很多人在不停的寻找附近的加油站,那么很多计算其实是可以预先算好的,等到提供服务的时候直接把结果调出来就好了,避免重复计算。

  比如我们可以把上海市所有路口点到点的距离事先计算好,当一个人要找加油站的时候,距离的计算就不再需要实时地采用动态规划来计算了,只需要计算从当前位置出发到附近几个路口的距离,再计算下某个加油站到它所在地附近路口的距离,由于各个路口点到点的距离是事先计算好的,因此做几次简单的加法即可,这样计算距离的时间就能省几十倍。这就是对上面的问题进行了全局优化的好处。

  其实面对这样的问题,优秀的工程师并不会遇到问题就直接着手去解决,而是会更全面的去考虑问题。比如会考虑到目前的行车方向,比如在解决问题中其实距离要求并不需要太精准,因为对于开车的人来说 2.5 公里和 2.3 公里其实并没有什么差别,再考虑到道路拥堵的情况,200 米的距离更加可以忽略不计了。但如果是行人要寻找附近的便利店,200 米的距离就不得不考虑了。

  那么从上述这个问题的解决上我们能看出普通工程师和优秀工程师的差距在哪儿呢?

  1. 优秀的工程师必然有着扎实的计算机基础知识,很好的掌握了如数据结构、算法这些工具,能够在工作中借助这些工具帮助自己解决问题;

  3. 优秀的工程师不会只满足于完成任务,他们会不断的去思考探索最佳的解决方案;

  4. 优秀的工程师不会被思维所局限,考虑问题更加全面,懂得从全局角度优化解决方案。

  从这个例子我们也能看出来,一个优秀工程师解决问题的性能可能是普通工程师的几百上千倍,一个优秀的解决方案甚至能帮助公司节省几百万的服务器费用。

  如果你是天才,面对像上面这样的问题,即使你没有学过计算机理论知识,即使你不知道动态规划、二叉树、堆排序,可能也能依靠智力上的优势解决。但遗憾的是绝大多数人都不是天才,因此在解决问题的时候就需要借助各种工具以便事半功倍。对于开发人员来说,数据结构、算法以及各种数学知识就是我们手上的工具。

  要成为优秀的工程师需要我们静下来,沉下去,老老实实的吃透你所做的项目。做好简单的事,才有机会去做更有挑战的工作。

  很多工程师会抱怨自己一直在做业务,没什么挑战,感觉不到成长。可事实真的是这样吗?往往我们的业务需求就像这道面试题,看似简单其实想要做好,背后需要下很大功夫。就算平时做的业务真的很简单,我们是不是还可以想想,我的代码实现是否有更好的方式?面对类似的业务我的效率是否可以提升?线上出 Bug 了是否可以采集到线上 Log 快速定位并解决问题?你对自己开发的项目中用到的各种框架是否真的理解其原理,是否真的去翻过代码学习过这些优秀框架的实现?就拿Android开发来说,各种开源框架如 RxJava、Retrofit、OKHttp、ORM框架、热修复框架、插件化框架等等,如果你真的去认真学习过一遍,我相信已经远超行业里 90% 的工程师了。

  同时在工作中要有不怕吃亏的心态,主动去承担更多的职责;做的更多往往也意味着接受了更多的挑战,获得了更多的锻炼机会。

  很多人反对碎片化学习,但我并不完全认同这种看法。碎片化的时间既可以用来碎片化的学习,也可以用来做系统化的学习。很多人都指望能够有一天,有一大片的时间,好好的、系统化的把计算机知识恶补一遍。所以买了算法导论、深入理解计算机系统等等经典书籍放在家里,等着有一天能够有一大片时间,沐浴更衣、正襟危坐来好好学习。但是学了不久很快又被其它事打断了,结果下一次又重新再来。最后往往只是把一本书的前几十页反复看了好多遍,其实这种才是真正的碎片化学习。

  而所谓的利用碎片化时间系统化的学习是指制定好完善的学习计划,利用好每一个碎片时间,比如上下班的路上、等公交的时间、坐地铁的时间、排队的时间,甚至是蹲马桶的时间来按计划的、体系化的学习提高。

  技术更新迭代太快,而计算机科学之复杂也远不是在学校的几年学习就能完全学透的,这就要求我们保持持续学习。但往往很多人走出校门后就再也没有正儿八经的学习过、冲过电,这也是为什么我们毕业后会被那些优秀的工程师越甩越远的原因。而我认为最好的持续学习的方式就是坚持阅读了。你们看!优秀的工程师就算是挂着盐水也要坚持阅读的!!!???

  另外学过的知识只有输出出来了,才是真正的学到肚子了。向别人讲述知识、写作等都是很好的知识输出方式。

  要成为一名优秀的工程师,光有过硬的技术是不够的。出色的完成一项工作往往考研的是一个人的综合能力。良好的表达能力、出色的会议组织能力、事情的推动能力、个人的成熟度等等都是需要我们在工作中去刻意的培养和锻炼的。拿表达能力来说,如果觉得自己表达上有所欠缺,就可以通过写作、主动在团队内做技术分享等等方式来锻炼自己。有时候,不逼自己一把你都不知道自己到底有多棒!

  作为一个技术上的菜鸟,写这样的文章实在是有点惭愧。且算是给自己定个基调,与大家共勉好了,这样也能督促自己不断进步。

  哦,对了!还有一点!!!优秀的工程师是不会抱着手机抖音一刷一晚上的。???

  继由硬件十万个为什么组织的2017电子工程师技术交流大会(EETC)·杭州站的召开,受到广大工程师的热烈欢迎和积极反响。

  我们都知道,大数据现在是非常火热的,基本上是人尽皆知,很多人也都非常想加入这个行业,成为一名优秀合格....

  大数据工程师用阿里巴巴集团研究员薛贵荣的话来说,就是一群“玩数据”的人,玩出大数据的商业价值,让数据....

  数据分析师指的是不同行业中,专门从事行业数据搜集、整理、分析,并依据数据做出行业研究、评估和预测的专....

  互联网行业是一个高速运转的行业,我们这个时代可以说是一个互联网的时代,不知不觉,你会发现,一切行业和....

  针对目前互联网行业的大环境而言,程序员的日子并不是太好过,不管是在找工作的,还是在职场上打拼多年的,....

  Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性....

  随着互联网事业的蓬勃发展,编程语言越来越火爆。Java编程工程师收入高、业内需求量大,备受人们青睐。....

  Java自1995年问世以来,因其卓越的通用性、高效性、平台移植性 和安全性等特性,成为全球范围内应....

  每年都会有大批的大学生求职,这是市场就业的一种严峻考验,大学生只有做好职业生涯规划,才能有目标地去学....

  临近毕业,学生都在找工作,而一般单位对于JAVA工程师要求还是比较高的,起码懂编程语言。今天,小编就....

  在社会分工的背景下,软件行业的工程师群体被划分成了开发、测试、产品等诸多岗位,以协作的方式共同完成价....

  监理这一行业,从1988年正式推行,已成为工程建设不可缺少的责任主体之一,为国家各项工程建设的质量控....

  这个浮躁的时代,我们身边被太多各色新闻所包围。比如企业裁员这种消息比比皆是,其中还不乏行业巨头,有人....

  用阿里巴巴集团研究员薛贵荣的话来说,大数据工程师就是一群“玩数据”的人,玩出数据的商业价值,让数据变....

  一直以来互联网行业一直都是高薪的代言词,其中程序员又是工资最高的一职业,那么大家一直想很问问,请问前....

  本篇文章扣丁学堂Java培训小编和大家分享一下Java工程师需要掌握的技术点问题,我们不论是参加Ja....

  java语言在2017年就是一个备受争议的编程语言,有人说java语言已经过时了,java工程师已经....

  Java编程语言经历了20多年的发展,在C、C++语言占据大半江山的情况下横空出世,杀出了一条血路,....

  嵌入式是软件和硬件的配合,所以知识更新的没有那么的快,目前我国嵌入式人才缺口很大,嵌入式工程师薪资水....

  电子工程师指从事各类电子设备和信息系统研究、教学、产品设计、科技开发、生产和管理等工作的高级工程技术....

  不得不说,现在是一个互联网的时代,所以互联网领域需要的人才越来越多。在程序员这方面,岗位需求更大,所....

  【VIP福利四】资深电源工程师积累的设计资料,毫无保留都给你了!(初、中、高级)

  本资料为资深电源工程师整理的电源学习进阶资料,细心划分了入门篇、终极篇和高级篇,是一套价值极高的参考学习资料,方便每个阶...

  企业,特别是中大型企业对Java工程师的需求仿佛从来没有厌倦,大量的Java技术人才缺口也给了IT行....

  假如你准备在金三银四跳槽的话,那么作为一个Java工程师,应该如何利用1个月的时间,快速为即将到来的....

  由于IT行业的高薪资,高技术等优势,在这个时代已然成为一个热门行业,而且在这个行业中工作的程序员收入....

  本期内容是接上期“工程师告诉你做PCB设计(上篇)”,“工程师告诉你做PCB设计(上篇)” ,如果您错过了前面内容可以点击...

  80%以上的高端企业级应用都使用JAVA平台(电信、银行等)。JAVA是成熟的产品,已经有20多年的....

  很多人事程序员这个职业的人,在到了30岁以后就会有一大部分想要转行,为什么会出现这种情况呢?程序员无....

  Java在中国甚至在全球都有很高的热度,原因在于Java的拓展性和实用性,在众多行业中,Java程序....

  Java工程师怎样才能摆脱朝九晚五的坐班,多些与亲朋好友相聚的幸福时光?当然是做一名自由职业者。做自....

  前两天公司双十一做大促活动,半夜突然来了一大波流量,你在睡梦中就收到了一大波报警短信,仔细一看,说是....

  因为个人为一枚小小的前端工程师,经历了几轮变迁,跨过了30门槛后,有了很多思考,跟大家聊聊。

  最初有做某饱的想法大概是在12年左右。当时我在深圳一家企业上班,做产品设计的工作,每天按部就班的上班....

  顺利通过了注册消防工程师考试,看到成绩后,很是感动,不知道当时是怎么过来的!!其实也不知道该说些啥,....

  步入主题,这两周我面试很多公司,E代驾、聚美优品、百度游戏等,面试百度的经历和百度面试官的水准有很多....

  前端架构师, 听起来就是个很高大上的 Title, 每个初入行的前端工程师在面试时, 被问到你未来的....

  我的造价通关历程是这样的:2006年,我具备报考全国注册造价工程师的资格。当时是我工作生涯中最忙的时....

  高考之后填志愿,那时候其实我也不懂,就觉得电子信息工程好像还不错,于是就填了。在大学四年,除了学校学....

  我刚刚工作的时候,面试官曾经跟我说:好好干两年,可以迅速从程序员成长为工程师。当时我觉得太诧异了,从....

  我是一名工科女,因高考失利与理想的院校擦肩而过,从而选择了机电专业。毕业后找工作时才发现机电专业的工....

  如果你在承担工作以外还另有研究兴趣;如果你面临或已经退休;如果你有科技制作或创造产品的愿望,为自己建一个业...

  他们很少用奇技淫巧。他们写的代码质量高,并清楚知道代码会如何演化,对整个代码结构胸有成竹。他们最多编....

  理想总是美好的。每一个踏入硬件行业的有志青年都怀揣一个想要打造中国芯、成为年入百万的技术总监的理想。....

  阅读了《构建之法》P384~391,让我想起了斯坦尼斯拉夫斯基的《演员自我修养》。虽然隔行如隔山,但....

  大家在平时工作的时候,一定会有一些这样那样的问题。这些问题包含技术、概念,项目流程还有职业规划方面不等。我们都有“问题”...

  朋友最近需要聘请一些性能测试工程师,问我:“一个优秀的性能工程师需要怎样的素质?”在我思前想后最终想....

  曾经有这样试验,随机选择一组对象进行工作的自评,几乎所有对象的自评分都在实际成绩的平均分以上。在工程....

  本资料是专为电子工程师量身打造的模拟电子资料,包括书籍、案例、实用手册和精选电路,囊括众多模电知识点,但它绝不会是有着欺...

  一个好的硬件工程师实际上就是一个项目经理,他/她需要从外界交流获取对自己设计的需求,然后汇总,分析成具体的硬...

  马上就到端午节啦,电子发烧友祝各位端午节快乐! 想必大家都被各种各样的花样粽子刷屏了吧,但是万变不离其宗,粽子还是有个...

  掌握了以下的硬件和软件知识,基本上就可以成为一个合格的电子工程师:...

  本人是LINUX运维工程师,对这方面有点心得,现在我说说要掌握哪方面的工具吧 说到工具,在行外可以说是技能,在行内我们一...

  一名一线企业嵌入式软件工程师的笔者,想通过自己的实际经历理性地评论当今嵌入式行业的真实状况。 嵌入式的定义和举例分析 ...

本文链接:http://baumseelen.com/duipaixu/787.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部