相关阅读:

阿里职位层级(附P级详细要求)

2019届互联网校招薪资出炉!TMD整体超越 BAT、华为

详解:淘宝大秒杀系统是如何设计的?

https://www.cnblogs.com/baronzhang/p/8944870.html

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

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

差距在哪儿?

我们拿吴军老师在得到专栏中讲解的一道 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. 优秀的工程师必然有着扎实的计算机基础知识,很好的掌握了如数据结构、算法这些工具,能够在工作中借助这些工具帮助自己解决问题;

2. 优秀的工程师会尽量避免做无用功

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

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

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

因此,在软件工程领域一百个臭皮匠也顶不了一个诸葛亮!

做为普通工程师的我们如何提升自己?

学好数据结构、算法、操作系统原理、计算机体系结构等基本功,打好基础。

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

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

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

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

利用碎片时间系统化学习

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

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

持续学习,坚持阅读,保持输出

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

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

锻炼自己的综合能力

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

写在最后

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

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

如有收获,欢迎「分享 

「点赞「评论 

 妈妈常教导我,让我养成良好习惯。这样长大才能成为一个有用的人。良好的习惯是尊敬师长这样长大才能成为一个有用的人。良好的习惯是尊敬师长,爱护同学,对人有礼貌;是不粗心,做事情不拖拉;还是爱护公物,不浪费粮食。为什么呢?因为拥有良好习惯,做一个品德高尚的人,懂得尊重别人,才会得到别人的尊重。我要努力地做到这些。我有一些坏习惯,有时候学习很粗心,把一些会做的题做错。在生活上,也很粗心,有一次早上起床居然穿反了衣服。我吃饭很慢,有的时候还剩饭。我还起床磨蹭,本来应该迅速地穿好衣服,但是,我总是磨磨蹭蹭地,速度很慢。“我打算在这学期里,改掉这些坏习惯。早上起来,迅速地穿好衣服,不拖拉。学习不粗心,仔细完成每一道题。吃饭的时候,要很快的把饭吃完,不剩饭。我要从一点一滴做起,逐渐养成良好习惯。我相信自己一定能成为一名品学兼优的好学生!我打算在这学期里,改掉这些坏习惯。早上起来,迅速地穿好衣服,不拖拉。学习不粗心,仔细完成每一道题。吃饭的时候,要很快的把饭吃完,不剩饭。我要从一点一滴做起,逐渐养成良好习惯。我相信自己一定能成为一名品学兼优的好学生!”  在上幼儿园以前,我什么也不会干,就连穿衣服也是妈妈给我穿好,就要上幼儿园了,这样可不行,妈妈锻炼我要学会自己穿衣服。   有一天,妈妈把衣服摆在我面前,开始让我自己穿。一开始。我又哭又叫就是不穿,还把衣服扔的满地都是,然后坐在地上开始大哭,等了好长时间,妈妈还是不理我,我只好自己乖乖的把衣服穿好, 一出了房间门,妈妈就笑了起来,再看看我的衣服,毛衣和裤子都穿反了,我赶紧回房间又重新穿了一遍,这次穿好了,拿起外套,可是外套的扣子又扣不上了,扣子可调皮了,好像故意和我作对,我把扣子往扣眼——人类邪恶的根源;爱情——幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话:幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话“亲爱的!擦干你的眼泪,至高无上的爱情已经打开了我们的眼界,使我们成了它的崇拜者。是它,

 妈妈常教导我,让我养成良好习惯。这样长大才能成为一个有用的人。良好的习惯是尊敬师长这样长大才能成为一个有用的人。良好的习惯是尊敬师长,爱护同学,对人有礼貌;是不粗心,做事情不拖拉;还是爱护公物,不浪费粮食。为什么呢?因为拥有良好习惯,做一个品德高尚的人,懂得尊重别人,才会得到别人的尊重。我要努力地做到这些。我有一些坏习惯,有时候学习很粗心,把一些会做的题做错。在生活上,也很粗心,有一次早上起床居然穿反了衣服。我吃饭很慢,有的时候还剩饭。我还起床磨蹭,本来应该迅速地穿好衣服,但是,我总是磨磨蹭蹭地,速度很慢。“我打算在这学期里,改掉这些坏习惯。早上起来,迅速地穿好衣服,不拖拉。学习不粗心,仔细完成每一道题。吃饭的时候,要很快的把饭吃完,不剩饭。我要从一点一滴做起,逐渐养成良好习惯。我相信自己一定能成为一名品学兼优的好学生!我打算在这学期里,改掉这些坏习惯。早上起来,迅速地穿好衣服,不拖拉。学习不粗心,仔细完成每一道题。吃饭的时候,要很快的把饭吃完,不剩饭。我要从一点一滴做起,逐渐养成良好习惯。我相信自己一定能成为一名品学兼优的好学生!”  在上幼儿园以前,我什么也不会干,就连穿衣服也是妈妈给我穿好,就要上幼儿园了,这样可不行,妈妈锻炼我要学会自己穿衣服。   有一天,妈妈把衣服摆在我面前,开始让我自己穿。一开始。我又哭又叫就是不穿,还把衣服扔的满地都是,然后坐在地上开始大哭,等了好长时间,妈妈还是不理我,我只好自己乖乖的把衣服穿好, 一出了房间门,妈妈就笑了起来,再看看我的衣服,毛衣和裤子都穿反了,我赶紧回房间又重新穿了一遍,这次穿好了,拿起外套,可是外套的扣子又扣不上了,扣子可调皮了,好像故意和我作对,我把扣子往扣眼——人类邪恶的根源;爱情——幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话:“亲爱的!擦干你的眼泪,至高无上的爱情已经打开了我们的眼界,使我们成了它的崇拜者。是它,

看完本文有收获?请转发分享给更多人


欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

我们和优秀工程师的差距在哪儿相关推荐

  1. [对话CTO]当当网熊长青:兴趣是成为优秀工程师的第一因素-CSDN.NET

    [对话CTO]当当网熊长青:兴趣是成为优秀工程师的第一因素-CSDN.NET Women Techmaker 北京站 [对话CTO]当当网熊长青:兴趣是成为优秀工程师的第一因素-CSDN.NET [对 ...

  2. 优秀工程师应该具备哪些素质_一名优秀工程师所需要具备的条件和素质[1]

    一名优秀工程师所需要具备的条件和素质 碰到一个不相熟的人. "上学还是工作?(我看起来还不算老嘛)" "工作了,一年多一点." "做什么的?" ...

  3. 对“优秀工程师”的一点感悟

    今天在网上看到很多人对自己的IT技术人生路产生了怀疑,大龄工程师有竞争力吗?甚至有人将大龄工程师和"小姐"并论,提出了工程师职业也是青春饭的论断.几年前,我也经常问自己,以后的路该 ...

  4. 优秀工程师应该具备哪些素质_优秀的工程师该具备什么能力?

    平庸的人会一直平庸,但是优秀的人却各有千秋!在这个优秀的框架中,又蕴藏着怎样的相通点?当然了,听说以下这十大能力,是开往优秀工程师的"必经之路"! 一.预备工作的能力 俗话说&qu ...

  5. 运用了先进计算机技术,运用计算机技术推进化工业优秀工程师培养.doc

    运用计算机技术推进化工业优秀工程师培养 运用计算机技术推进化工业优秀工程师培养 1.化学工程与工艺专业与"卓越工程师教育培养"计划 化学工程与工艺专业是一门重要的工程基础学科,具有 ...

  6. 优秀工程师至关重要的一项技能,你解锁了吗?

    来源丨阿里技术官方公众号(ID:ali_tech) 导读:很多程序员在工作一段时间后会遇到迷茫期,虽有技术傍身,也难免会产生焦虑,反复思考怎样才能快速成长.关于如何提高自己的思考力,运用思考的力量推动 ...

  7. 传音控股上海特性和功耗开发团队招期招聘优秀工程师啦

    两个团队侧重各有不同 功耗团队主要致力于结合行业技术趋势,输出手机领域某些具体技术方向 而特性团队则着力于提升整体性能,包括但不限于游戏体验.APP体验等 两个团队均是事业部认可度非常高并且也是十分重 ...

  8. 优秀工程师应该具备哪些素质_想成为一名合格的技术工程师需要具备哪些能力?...

    今天小编要跟大家分享的文章是关于想成为一名合格的工程师需要具备哪些能力.技术人员追求的也不仅是知识点,而是在专业领域正确做事的方法及达成目标的能力.两个同时入职的员工,一段时间后技术好的那个就发展得好 ...

  9. 你和那些优秀的人差距在哪里?

    前言 也许,有的人看到上边这个标题,首先会觉得这肯定是一篇广告文吧.确实,我们可能见过有很多号主用类似于"你的同龄人已经XXX了,而你还在XXX"这种风格,来写软文. 但是,我可以 ...

  10. 优秀工程师应该具备哪些素质_一位优秀的品质工程师应该具备哪些技能?

    原标题:一位优秀的品质工程师应该具备哪些技能? 一位优秀的品质工程师应该具备哪些技能?有人说要有很强的专业技术能力,也有人说要有很高的情商.其实,做好一个 品质工程师,考量的是其综合能力. 有人曾总结 ...

最新文章

  1. linux cp sync,通过SSH使用Rsync传输文件,复制和同步文件及目录
  2. MATLAB中的ind2vec和vec2ind函数
  3. ThinkPHP5下自己写日志
  4. 漫谈C#编程语言在游戏领域的应用
  5. java可以看懂php代码吗_可以自己给自己理发吗?看懂这六点细节就能给自己理发了...
  6. react 脚手架 立即可以写业务 react + react-router-dom + less + axios + antd
  7. 2021年中国氮化镓适配器市场趋势报告、技术动态创新及2027年市场预测
  8. arm指令集_重磅!Arm宣布:指令集,客户可自定义
  9. tensorflow图像数据处理
  10. 简述与oracle相关的程序组,oracle数据库复习程序.doc
  11. java blazeds,java web开发学习-8 BlazeDS
  12. 服务器系统获取最高权限,webshell+servu获取系统最高权限
  13. 搭配online:抖音企业号数量破400万,奇妙好物节即将开启
  14. SQL中方括号的用途
  15. UI 相机和3D相机重叠显示
  16. 原装苹果手机_苹果手机换屏的“学问”这么多,一招教你快速辨别iPhone X原装屏...
  17. 复试数据库系统概论(1)
  18. 上海市考 计算机类岗位,2020上海公务员考试职位表解读:本科学历仍占主体
  19. 科技公司的奇葩企业文化
  20. JS 调用 麦克风 检测实时音量

热门文章

  1. 商品预约抢购实践及redis性能测试
  2. eclipse+testng+maven错误及解决办法记录
  3. Eclipse中添加Android系统jar包
  4. [转]Java 强引用、 软引用、 弱引用、虚引用
  5. Data Mining with R
  6. 转:libatk-bridge.so错误解决
  7. poj Eeny Meeny Moo 我用链表暴力超时了!!!
  8. 如何在Pr中应用混合模式合成影片中的剪辑?
  9. 在 Mac App Store 上如何查看未完成的下载?
  10. iOS开发之cocoapods报错问题You need at least git version 1.8.5 to use CocoaPods