学习别人的经验

学习大牛的成长经验,再跟自己的过去、当下做对比,看下哪些地方可以做改进,调整自己当前的状态。大牛们的成长之路虽说各有不同,但是有很多共同的地方,如果能做到这些,相信运气都不会差,毕竟现在这个社会能做的事情很多但是靠谱的人反而太少。

黄东旭分享

来自 前辈之路(3) 黄东旭专访,这里跟多的是关于技术学习及技术见解方面。黄东旭的一些建议:

  1. 我认为目前所有基于主从同步复制的方案都没法实现真正的跨数据中心多活,我们基于 Raft 一致性算法取代了传统的主从复制方案,从理论上就解决了这个问题,我们也是全球仅有的几家拥有这个技术的公司;
  2. 对于 AI,他的看法是:
    我其实对于这个趋势有一些自己的看法,仅代表个人,我认为最近 AI 的火热让很多人变得浮躁,一些人才看完了概率论入门,刚学会线性回归,部署个 Spark,稍好点的把 Caffe 能搭起来玩玩就认为是数据科学家了,其实在这个领域里有很多的基础的问题还没有解决得很好,比如海量数据如何存储?如何打通数据库和数据库仓库以提供更好的体验?有没有更好的更实时的计算框架?虽然最近 Deep Learning 很火,但是怎么落地还是需要仔细的思考,两条路线,一条学术路线去扎实的做理论。另一条系统架构的路线,包括分布式存储和计算框架。切勿浮沙铸高台。
  3. 对于学生的建议:另外一些比较偏实际的就是积极的参与开源社区,而且要和社区的人主动沟通起来,github 是很好的工具,已经大大的降低了参与开源成本;还有一点是好好学英语,这个非常重要;
  4. 大数据的火爆:我还是认为炒概念会把整个业界搞得浮躁,其实仔细想想,分布式系统领域已经很久没有突破性的创新了:现在很火的 Hadoop 是 Google 02 ~ 06 年的几篇论文;很火的容器技术的核心 cgroup 其实好多年前就已经进入了 linux 内核...并不是说用几个流行的开源框架搭起来就是大数据了, 如何根据自己的业务来落地需要有自己的思考,不能人云亦云,在这点上很多国人都有这个问题;这些概念的普及,让我们这些底层基础软件走向了大众的视野,至少很多人能理解我们在做什么,我认为整个中国大的环境在持续变好,拥有真正创新核心技术,解决用户实际问题的产品和团队会像大浪淘沙一样浮现出来。

张一鸣的分享

来自 张一鸣:真正优秀的年轻人,都有这5个特质,这里看下老板对于优秀年轻人的特质的介绍(Stay hungry, Stay young):

  1. 有好奇心,能够主动学习新事物、新知识和新技能:对于很多优秀的人,做事情的时候并不会去想,这件事应该谁去做或者只做好自己手头的事情,因为达到职位的要求是远远不够的(做事情不要设边界);
  2. 对不确定性保持乐观:对于不确定的事情,也要勇于尝试;
  3. 不甘于平庸:很多人毕业之后对自己的要求或标准降低了很多;
  4. 不傲娇,要能延迟满足感:上面说的是目标要设得高,这里说的是对现状要踏实(责任心,尽力做好自己的负责的人,根据同事的反馈不断调整);
  5. 对重要的事情有判断力:不要被短期的选择左右,但实际上,能摆脱这个、能有判断力的人,也不是特别多(判断力非常难,反而,更多地关注自己个人的成长反而更简单一些)。

夏华夏的分享

夏华夏老师在美团是非常受大家敬佩的,美团之前也出了关于夏华夏老师的采访 【人物志】美团首席科学家夏华夏:不断突破边界的程序人生,这里夏华夏老师也提了一些个人建议:

  1. 保持不断学习的心态,这也是美团工程师文化特别提倡的,这是我们希望所有工程师具有的特质和建议,包括对技术领域深度和广度的学习,不断延伸个人的能力
  2. 全栈思维:从心态方面,希望大家能够站在团队的视角来看问题。还有就是从技术能力层面,我建议大家的技术能力能够全面一些,每个技术同学应该逐渐从全栈的角度去考虑自己的发展,还有对产品和业务的思考;
  3. 前瞻思维,近几年涌现出很多的热点技术,我们应该积极的思考热点技术如何能够更好的跟我们的业务结合起来。

李运华老师的分享

下面这篇文章,李运华老师介绍的方法非常实际&实用,做到并不简单,但是方法并不难,难的是是否能在工作中坚持下去。

之前就在极客时间上订阅过李运华老师的专栏,干货很多,李运华老师技术深度和技术视野都是非常靠前的,在 如何快速成长为技术大牛?阿里资深技术专家的总结亮了 这篇文章里(题目名字有点哗众取宠),列出的方法非常实用,如果能做到,绝对会成为团队里的顶梁柱,当然并不容易做到

工作常见的误区(大多数人应该都感同身受):

  1. 拜大牛为师:这点就不说了,不过有好的技术氛围还是很重要的,否则只能最好的路径就是混社区了;
  2. 业务代码一样很牛逼:写业务代码只是这个打怪升级路上的一个比较初级的挑战而已,成长的过程中需要不断打更高级的怪;
  3. 上班太忙没时间自己学习:导致这种看法的原因一般是,一 上班做的都是重复工作(如果把学习的东西在工作中应用,提高自己的技术能力),要想提升必须自己额外去学习,二 学习需要大段的连续时间;

上面是很多人在工作经常遇到的问题,那么在工作中,我们应该怎么去做的更好呢?

Do More

做的更多,做的比你主管安排给你的任务更多(要想有机会,首先你得从人群中冒出来,要想冒出来,你就必须做到与众不同,要做到与众不同,你就要做得更多),如何做的更多呢?其实很简单:

  1. 熟悉更多业务,不管是不是你负责的;熟悉更多代码,不管是不是你写的(这样带来的好处是:需求分析更加准确、问题处理更加迅速、方案设计考虑得会更全面,因为自己对 Kafka 源码比较熟悉,在之前工作中确实体会到这个带来的好处);
  2. 熟悉端到端:很多人负责的只是系统的一小块,如果能做到对整个端到端的熟悉,对综合水平(比如:方案设计、线上故障处理)的提升有很大作用;
  3. 自学:框架、组件可能不断变化,但是基本技能则是通用的。

“系统性”、“全局性”、“综合性”这些字眼看起来比较虚,但其实都是技术大牛的必备的素质,要达到这样的境界,必须去熟悉更多系统、业务、代码。
大牛们也都是这样过来的。

Do Better

要知道这个世界上没有完美的东西,你负责的系统和业务,总有不合理和可以改进的地方,这些“不合理”和“可改进”的地方,都是更高级别的怪物,打完后能够增加更多的经验值。识别出这些地方,并且给出解决方案,然后向主管提出,一次不行两次,多提几次,只要有一次落地了,这就是你的机会。

例如:

  1. 重复代码太多,是否可以引入设计模式?
  2. 系统性能一般,可否进行优化?
  3. 目前是单机,如果做成双机是否更好?
  4. 版本开发质量不高,是否引入高效的单元测试和集成测试方案?
  5. 目前的系统太庞大,是否可以通过重构和解耦改为3个系统?
  6. 阿里中间件有一些系统感觉我们也可以用,是否可以引入 ?

只要你去想,其实总能发现可以改进的地方的;如果你觉得系统哪里都没有改进的地方,那就说明你的水平还不够,可以多学习相关技术,多看看业界其它优秀公司怎么做

我2013年调配到九游,刚开始接手了一个简单的后台系统,每天就是配合前台做数据增删改查,看起来完全没意思,是吧?如果只做这些确实没意思,但我们接手后做了很多事情:

  1. 解耦,将一个后台拆分为2个后台,提升可扩展性和稳定性;
  2. 双机,将单机改为双机系统,提高可靠性;
  3. 优化,将原来一个耗时5小时的接口优化为耗时5分钟还有其它很多优化。

后来我们这个组承担了更多的系统,后来这个小组5个人,负责了6个系统。

反过来看,如果你做的不好,即使这个项目现在是你负责,后面项目的主人必然还是会给能做得更好的人。

Do exercise

在做职业等级沟通的时候,发现有很多同学确实也在尝试Do more、Do better,但在执行的过程中,几乎每个人都遇到同一个问题:光看不用效果很差,怎么办?例如:

  1. 学习了jvm的垃圾回收,但是线上比较少出现FGC导致的卡顿问题,就算出现了,恢复业务也是第一位的,不太可能线上出现问题然后让每个同学都去练一下手,那怎么去实践这些jvm的知识和技能呢?
  2. Netty我也看了,也了解了Reactor的原理,但是我不可能参与Netty开发,怎么去让自己真正掌握Reactor异步模式呢?
  3. 看了《高性能MySQL》,但是线上的数据库都是DBA管理的,测试环境的数据库感觉又是随便配置的,我怎么去验证这些技术呢?
  4. 框架封装了DAL层,数据库的访问我们都不需要操心,我们怎么去了解分库分表实现?

诸如此类问题还有很多,我这里分享一下个人的经验,其实就是3个词:learning、trying、teaching

  1. Learning这个是第一阶段:看书、google、看视频、看别人的博客都可以,但要注意一点是【系统化】,特别是一些基础性的东西,例如 JVM原理、Java编程、网络编程,HTTP协议等等,这些基础技术不能只通过google或者博客学习,我的做法一般是先完整的看完一本书全面的了解,然后再通过google、视频、博客去有针对性的查找一些有疑问的地方,或者一些技巧。
  2. Trying 这个步骤就是解答前面提到的很多同学的疑惑的关键点,形象来说就是“自己动手丰衣足食”,也就是自己去尝试搭建一些模拟环境,自己写一些测试程序。例如:
  • Jvm垃圾回收:可以自己写一个简单的测试程序,分配内存不释放,然后调整各种jvm启动参数,再运行的过程中使用 jstack、jstat 等命令查看jvm的堆内存分布和垃圾回收情况。这样的程序写起来很简单,简单一点的就几行,复杂一点的也就几十行;
  • Reactor原理:自己真正去尝试写一个Reactor模式的Demo,不要以为这个很难,最简单的Reactor模式代码量(包括注释)不超过200行(可以参考Doug Lee的PPT)。自己写完后,再去看看netty怎么做,一对比理解就更加深刻了;
  • MySQL:既然有线上的配置可以参考,那可以直接让DBA将线上配置发给我们(注意去掉敏感信息),直接学习;然后自己搭建一个MySQL环境,用线上的配置启动;要知道很多同学用了很多年MySQL,但是连个简单的MySQL环境都搭不起来。
  • 框架封装了DAL层:可以自己用JDBC尝试去写一个分库分表的简单实现,然后与框架的实现进行对比,看看差异在哪里。
  • 用浏览器的工具查看HTTP缓存实现,看看不同种类的网站,不同类型的资源,具体是如何控制缓存的;也可以自己用Python写一个简单的HTTP服务器,模拟返回各种HTTP Headers来观察浏览器的反应。
  • 简单来说,就是要将学到的东西真正试试,才能理解更加深刻,而且“试试”其实可以比较简单,很多时候我们都可以自己动手做。当然,如果能够在实际工作中使用,效果会更好,毕竟实际的线上环境和业务复杂度不是我们写个模拟程序就能够模拟的,但这样的机会可遇不可求,大部分情况我们还真的只能靠自己模拟,然后等到真正业务要用的时候,能够信手拈来。
  1. Teaching:经过Learning和Trying,能掌握70%左右,但要真正掌握,我觉得一定要做到能够跟别人讲清楚
  • 因为在讲的时候,我们既需要将一个知识点系统化,也需要考虑各种细节,这会促使我们进一步思考和学习;
  • 讲出来后看或者听的人可以有不同的理解,或者有新的补充,这相当于继续完善了整个知识技能体系;
  • 这样的例子很多,包括我自己写博客的时候经常遇到,本来我觉得自己已经掌握很全面了,但一写就发现很多点没考虑到;组内培训的时候也经常看到,有的同学写了PPT,但是讲的时候,大家一问,或者一讨论,就会发现很多点还没有讲清楚,或者有的点其实是理解错了。写PPT、讲PPT、讨论PPT,这个流程全部走一遍,基本上对一个知识点掌握就比较全面了。

博客或论坛上看到的

员工换工种,本来可以拓展横向的技能和经验,提升综合能力,但是频繁的变化,若不是出于主动,而是被动,却真的会被职业规划,个人能力沉淀形成障碍。尤其是工作的前两年,对我们更加重要,这期间不仅仅是要将吃饭用的专业技能和知识强化升华,更重要的是要养成一套良好的职业素养与习惯(做事的计划性,目标感,时间管理,责任感,以及问题思考及解决的思路方法等等)。大学的4年也许不能决定你毕业后去做什么,但是工作的前两年或许真的能够让你决定以后去做什么。所以随波逐流虽然轻松不用思考,但真的不是面对变化的最佳解决方案。

北邮人论坛分享1

在学校论坛看到的一个校友的分享:

  1. 关于副业
    我从毕业就着迷于找点副业干,读过MBA后我身边可投的副业很多,也尝试过几个,现在我的建议是不要干副业。集中精力做主业,人的精力是有限的,集中于一点尽快完成能力和level的跃迁。大多数想要开始副业的心态跟钻井碰到石头然后多处打井是一样的。每个人的背景、阶段、境遇和资源都不同,我个人建议年轻的时候不要因为碰到一层天花板而琢磨副业。尽量把所有的精力打到一个点,并争取击穿那个点。
  2. 关于职场
    职场走了8年,我收藏了3位“人生导师”的3句金句,这里分享2句。
    “know everything about something and know something about everything”哪个领域都懂一些,某个领域要什么都懂。
    “只要不犯错,走着走着就到别人前头了”绝大多数人都会自己犯错,no zuo no die。做重大决策的时候可以想想这句话。
    第三句话过于真实,可能引起不当,先不说了。

北邮人论坛分享2

优秀=能力*态度

看了知乎上一个讲应届生判断标准的帖子觉得很不错,优秀=能力*态度。能力分为三方面:技能、学习力、悟性(聪明);态度分为三方面:要性(积极主动)、认同(公司价值观与商业模式)、素质(言谈举止、Nice)。 之前在年度总结里写过 靠谱=能力+态度,这项公式应该对不同阶段的同学都适用吧,再高阶的可能需要加上“人脉”

微博上看到的

国外一位大牛的分享:

"因此,我的建议是:找到感兴趣的东西,以一种近乎狂热的方式去追求它,并至少通过一些严格的实验来指导你的努力过程。 坚持到底,直到有足够的理由(证据)让你相信所追求的真的遥不可及,而不是充满未知。 我想这也是大多数人无法成功的原因——他们太容易放弃了!"

其实,大家并不像我门自己想象中的那么努力。

大江大河中的宋运辉

宋运辉虽然是小说中的人物,但是从他身上我们也能看出宋运辉的成功绝非偶然,他身上有别人没有的东西,这些东西让他脱颖而出(即使最开始时处境很艰难):

  1. 做事情/做技术的态度:他在做事情从来不是只把自己的事情做好,就像他最开始时,花了一两年的时间把整个设备的原理流程搞懂,这一点就没几个人能做到,这种拼命学习的态度我们在很多大牛身上也能看到,比如 R 大,牛逼的人方法都是一样的,我们做的事情远远没有到拼天赋的地步
  2. 学习的拼劲、理论与实践结合(学习技术理论很重要,但是如何把技术落地来提高生产力对企业来说更重要)。

End

这里收集的是一些大牛的经验分享,文章早就看过,这里再捋一遍,只是为了提醒自己,让自己经常回顾一下,对比一下自己当前的状态,也是让自己戒骄戒躁,把握好当下

学习分析别人经验,提高自己,做事情要有 all in 的心态,别人创业也是这样,就像当时张一鸣在创业时,分析众多内容微博号,选择自己的方向,然后做到第一,这些人哪一个不是这样,不做到第一,那就活不下来了,别人有破釜沉舟的勇气,做工程师也应该如此。分析别人的经验,借鉴然后一直坚持做到最好,否则随波逐流跟大多数一样了,如何能做到脱颖而出?


参考:

  • 前辈之路(3) 黄东旭专访;
  • 毕玄:我在阿里的十年技术感悟;
  • 【人物志】美团首席科学家夏华夏:不断突破边界的程序人生;
  • 张一鸣:真正优秀的年轻人,都有这5个特质;
  • 如何快速成长为技术大牛?阿里资深技术专家的总结亮了;

你可能感兴趣的:(学习别人的经验)