精华内容
下载资源
问答
  • 技术大牛

    千次阅读 2012-06-21 11:28:08
    1. 做为技术方面的大牛/专家,一路走来,你最大的感悟和收获是什么? 我不是大牛,所以........我仍然有一些感悟和收获: 做技术不在于是你否有天赋,而在于你是否的热情。请注意热情不是激情,它更持久,更浓厚。...

    今天终于知道之前好几年仰慕的诗剑书生,叫王瑾华,技术牛人啊,他说的好多话哲理性的都很强,很有教育意义.

    王瑾华:

    1. 做为技术方面的大牛/专家,一路走来,你最大的感悟和收获是什么?

    我不是大牛,所以........我仍然有一些感悟和收获: 做技术不在于是你否有天赋,而在于你是否的热情。请注意热情不是激情,它更持久,更浓厚。

    2. 因为做技术的平时都喜欢熬夜、加班,在家庭和工作之间时间你是如何分配的?

    大家千万不要学我,当年辞职的时候,我是把家庭完成放开来从事我喜欢的技术。但是对于不是如此特殊的情况,我建议大家以家庭为重,因为家庭是本,技 术是末。当然我们说的技术是指狭义的计算机技术。没有这个技术,你肯定可以生活下去,或者可以生活得更好。但因为技术而失去家庭,你的整个人生都是失败 的。

    3. 在技术方面你通常给自己设定方向和目标吗?

    技术靠的是正确的选择和长久的积累,没有人没有积累就可以成不大牛,天才也不会,否则这个世界的法则就错了。现在计算机技术本来就是没有真正的目标(或者说目的地),怎么设定目标? 我们说一个短期的任务是有目标的,因为在一段时间内不会轻易改变。 但技术积累就是人生的积累,设定目标会使人过于执著,限入一种“障”。 方向我倒是很在意这个字眼,现代计算机科学越来越复杂,分工也越来越精细,没有人能面面俱到,选择一个方面深入进去,占领属于你的一片领域。当然别人的领域虽然不能占有,但非常有必要去旅游一番。

    4. 工作之外你每天都花多少时间在学习上?

    学习从来就不需要刻苦,只需要坚持,每天30-40分钟足够了。

    5. 在学习上有走过什么弯路没有?

    最值得庆幸的是没有走过弯路,因为我从来追求流行的和热门的“技术”。一直按照我个人的计划在学习。

    6. 学习新技术有什么捷径没有?或者什么技巧?

    没有一种新技术是凭空产生的,就象计算机本身,在人类没有解决载体(或叫材质)问题之前,X86架构也不会有本质的突破,不会一下子产生人脑结构的计算模型。所以掌握“旧技术”的深浅是理解新技术的关键。

    7. 如何阅读一本技术书?

    1.如果有光盘请扔掉。 2.如果有源码下载请把URL涂黑。 3.所有例子请手工输入,如果一次运行没有通过,恭喜你,在调试的过程中不仅解决了问题,更加深了你的理解 。 4.如果没有例子请按作者的原意为他添加例子。 5.如果为了在别人面前有谈论的资本,可以泛读。

    8. 开源/前沿技术多如牛毛,更新很快,如何能够快速的吸取其精髓?

    深入底层,如第6题,如果能写出一个作业系统模型,你还不了解什么叫中断门,任务门,陷井门? 对一种技术,至少能最小模型的自我实现,就可以快速抓住本质。

    9. 都说看源代码提高快,但拿到后很多人往往不知道如何看? 有技巧没有?

    “都说”的都指谁啊?“看源代码提高快”这句话对新人一定不合适。在你掌握了基础的技术和技能以后,看别人的源代码可以提高自己的实现能力和技巧。 这样的经验积累多了就可以从中抽象出一些架构,模式性的高级内容。但如果没有一定的基础,以级对相关领域的认识,看源代码肯定是浪费时间。

    10. 为了更好的帮助新人成长,请给准备往技术方面发展的他们一些建议吧?

    先不要想如何成为大牛,先想好你要不要成为大牛。 技术专家和职业经理人,两条路各有风景,但收获可能完全不一样,付出也不一样。 不过,技术专家的路子比职业经理人更广一些。一个10个人的团队可以有8个技术专家而只能有1个职业经理人。 友情提醒:技术专家并不是一种美丽的人生。你的生活圈子会很小,你处理问题的方式受职业会和常人不一样,俗称“不正常”。 工作以外,最好不要再工作,看一些哲学,人文,社会方面的书,建议不要看心理方面的书。任何学科到了某一程度(或者说境界) 都会遇到一个坎(障),打开这个大门的钥匙不会在本学科,在于边缘科学的综合积累。


    展开全文
  • 漫谈程序员(十九)天天写业务代码,如何成为技术大牛?  不管是开发、测试、运维,每个技术人员心理多多少少都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地...

    #漫谈程序员(十九)天天写业务代码,如何成为技术大牛?
      不管是开发、测试、运维,每个技术人员心理多多少少都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地努力和提升自己。
    这里写图片描述
      然而“梦想是美好的,现实却是残酷的”,很多同学在实际工作后就会发现,梦想是成为大牛,但做的事情看起来跟大牛都不沾边,例如,程序员说“天天写业务代码还加班,如何才能成为技术大牛”,测试说“每天都有执行不完的测试用例”,运维说“扛机器接网线敲shell命令,这不是我想要的运维人生”… 知乎上类似的问题“天天写业务代码的程序员,怎么成为技术大牛,开始写技术代码?”关注人数有6K+,答案有120+,当时我也回答了并且点赞数最多,后来做职业等级晋升面评和沟通的时候,又有了新的发现和想法,于是有了系统的整理一篇文章的想法,希望让更多同学在技术大牛的路上能够少走一些弯路。
    由于我是程序员,所以以下的一些例子都是基于程序开发的,但大道理是相通的,测试、运维都可以借鉴。
    ##几个典型的误区
    ###1、拜大牛为师
      知乎上有人认为想成为技术大牛最简单直接、快速有效的方式是“拜团队技术大牛为师”,让他们平时给你开小灶,给你分配一些有难度的任务。
      我个人是反对这种方法的,主要的原因有几个:
      大牛很忙,不太可能单独给你开小灶,更不可能每天都给你开1个小时的小灶;而且一个团队里面,如果大牛平时经常给你开小灶,难免会引起其他团队成员的疑惑,我个人认为如果团队里的大牛真正有心的话,多给团队培训是最好的。然而做过培训的都知道,准备一场培训是很耗费时间的,课件和材料至少2个小时(还不能是碎片时间),讲解1个小时,大牛们一个月做一次培训已经是很高频了。
      因为第一个原因,所以一般要找大牛,都是带着问题去请教或者探讨。因为回答或者探讨问题无需太多的时间,更多的是靠经验和积累,这种情况下大牛们都是很乐意的,毕竟影响力是大牛的一个重要指标嘛。然而也要特别注意:如果经常问那些书本或者google能够很容易查到的知识,大牛们也会很不耐烦的, 毕竟时间宝贵。经常有网友问我诸如“jvm的-Xmn参数如何配置”这类问题,我都是直接回答“请直接去google”,因为这样的问题实在是太多了,如果自己不去系统学习,每个都要问是非常浪费自己和别人的时间的。
      大牛不多,不太可能每个团队都有技术大牛,只能说团队里面会有比你水平高的人,即使他每天给你开小灶,最终你也只能提升到他的水平;而如果是跨团队的技术大牛,由于工作安排和分配的原因,直接请教和辅导的机会是比较少的,单凭参加几次大牛的培训,是不太可能就成为技术大牛的。
      综合上述的几个原因,我认为对于大部分人来说,要想成为技术大牛,首先还是要明白“主要靠自己”这个道理,不要期望有个像武功师傅一样的大牛手把手一步一步地教你。适当的时候可以通过请教大牛或者和大牛探讨来提升自己,但大部分时间还是自己系统性、有针对性地提升。
    ###2、业务代码一样很牛逼
      知乎上有的回答认为写业务代码一样可以很牛逼,理由是业务代码一样可以有各种技巧,例如可以使用封装和抽象使得业务代码更具可扩展性,可以通过和产品多交流以便更好地理解和实现业务,日志记录好了问题定位效率可以提升10倍…等等。
      业务代码一样有技术含量,这点是肯定的,业务代码中的技术是每个程序员的基础,但只是掌握了这些技巧,并不能成为技术大牛,就像游戏中升级打怪一样,开始打小怪,经验值很高,越到后面经验值越少,打小怪已经不能提升经验值了,这个时候就需要打一些更高级的怪,刷一些有挑战的副本了,没看到哪个游戏 只要一直打小怪就能升到顶级的。成为技术大牛的路也是类似的,你要不断地提升自己的水平,然后面临更大的挑战,通过应对这些挑战从而使自己水平更上一级, 然后如此往复,最终达到技术大牛甚至业界大牛的境界,写业务代码只是这个打怪升级路上的一个挑战而已,而且我认为是比较初级的一个挑战。
      所以我认为:业务代码都写不好的程序员肯定无法成为技术大牛,但只把业务代码写好的程序员也还不能成为技术大牛。
    ###3、上班太忙没时间自己学习
      很多人认为自己没有成为技术大牛并不是自己不聪明,也不是自己不努力,而是中国的这个环境下,技术人员加班都太多了,导致自己没有额外的时间进行学习。
      这个理由有一定的客观性,毕竟和欧美相比,我们的加班确实要多一些,但这个因素只是一个需要克服的问题,并不是不可逾越的鸿沟,毕竟我们身边还是有那么多的大牛也是在中国这个环境成长起来的。
      我认为有几个误区导致了这种看法的形成:

    • 1)上班做的都是重复工作,要想提升必须自己额外去学习形成这个误区的主要原因还是在于认为“写业务代码是没有技术含量的”,而我现在上班就是写业务代码,所以我在工作中不能提升。
    • 2)学习需要大段的连续时间很多人以为要学习就要像学校上课一样,给你一整天时间来上课才算学习,而我们平时加班又比较多,周末累的只想睡懒觉,或者只想去看看电影打打游戏来放松,所以就没有时间学习了。

      实际上的做法正好相反:首先我们应该在工作中学习和提升,因为学以致用或者有实例参考,学习的效果是最好的;其次工作后学习不需要大段时间,而是要挤出时间,利用时间碎片来学习。
    ##正确的做法
    ###1、Do more
      做的更多,做的比你主管安排给你的任务更多。
      我在HW的时候,负责一个版本的开发,这个版本的工作量大约是2000行左右,但是我除了做完这个功能,还将关联的功能全部掌握清楚了,代码(大约 10000行)也全部看了一遍,做完这个版本后,我对这个版本相关的整套业务全部很熟悉了。经过一两次会议后,大家发现我对这块掌握最熟了,接下来就有趣了:产品讨论需求找我、测试有问题也找我、老大对外支撑也找我;后来,不是我负责的功能他们也找我,即使我当时不知道,我也会看代码或者找文档帮他们回答…最后我就成了我这个系统的“专家”了。虽然这个时候我还是做业务的,还是写业务代码,但是我已经对整个业务都很熟悉了。
      以上只是一个简单的例子,其实就是想说:要想有机会,首先你得从人群中冒出来,要想冒出来,你就必须做到与众不同,要做到与众不同,你就要做得更多!
      怎么做得更多呢?可以从以下几个方面着手:

    • 1)熟悉更多业务,不管是不是你负责的;熟悉更多代码,不管是不是你写的。

      这样做有很多好处,举几个简单的例子:

    • 需求分析的时候更加准确,能够在需求阶段就识别风险、影响、难点;
    • 问题处理的时候更加快速,因为相关的业务和代码都熟悉,能够快速地判断问题可能的原因并进行排查处理;
    • 方案设计的时候考虑更加周全,由于有对全局业务的理解,能够设计出更好的方案。

    ###2)熟悉端到端
      比如说你负责web后台开发,但实际上用户发起一个http请求,要经过很多中间步骤才到你的服务器(例如浏览器缓存、DNS、nginx等),服务器一般又会经过很多处理才到你写的那部分代码(路由、权限等)这整个流程中的很多系统或者步骤,绝大部分人是不可能去参与写代码的,但掌握了这些知识对你的综合水平有很大作用,例如方案设计、线上故障处理这些更加有含金量的技术工作都需要综合技术水平。
    “系统性”、“全局性”、“综合性”这些字眼看起来比较虚,但其实都是技术大牛的必备的素质,要达到这样的境界,必须去熟悉更多系统、业务、代码。
    ###3)自学
      一般在比较成熟的团队,由于框架或者组件已经进行了大量的封装,写业务代码所用到的技术确实也比较少,但我们要明白“唯一不变的只有变化”,框架有可能要改进,组件可能要替换,或者你换了一家公司,新公司既没有组件也没有框架,要你从头开始来做。这些都是机会,也是挑战,而机会和挑战只会分配给有准备的人,所以这种情况下我们更加需要自学更多东西,因为真正等到要用的时候再来学已经没有时间了。
      以java为例,大部分业务代码就是if-else加个数据库操作,但我们完全可以自己学些更多java的知识,例如垃圾回收,调优,网络编程等,这些可能暂时没用,但真要用的时候,不是google一下就可以了,这个时候谁已经掌握了相关知识和技能,机会就是谁的。
    以垃圾回收为例,我自己平时就抽时间学习了这些知识,学了1年都没用上,但后来用上了几次,每次都解决了卡死的大问题,而有的同学,写了几年的java代码,对于stop-the-world是什么概念都不知道,更不用说去优化了。
    ##2、Do better
      要知道这个世界上没有完美的东西,你负责的系统和业务,总有不合理和可以改进的地方,这些“不合理”和“可改进”的地方,都是更高级别的怪物,打完后能够增加更多的经验值。识别出这些地方,并且给出解决方案,然后向主管提出,一次不行两次,多提几次,只要有一次落地了,这就是你的机会。
      例如:

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

      …
      只要你去想,其实总能发现可以改进的地方的。如果你觉得系统哪里都没有改进的地方,那就说明你的水平还不够,可以多学习相关技术,多看看业界其它公司怎么做,BAT都怎么做。
      我2013年调配到九游,刚开始接手了一个简单的后台系统,每天就是配合前台做数据增删改查,看起来完全没意思,是吧?如果只做这些确实没意思,但我们接手后做了很多事情:

    • 解耦,将一个后台拆分为2个后台,提升可扩展性和稳定性;
    • 双机,将单机改为双机系统,提高可靠性;
    • 优化,将原来一个耗时5小时的接口优化为耗时5分钟;

      还有其它很多优化,后来我们这个组承担了更多的系统,后来这个小组5个人,负责了6个系统。
    ##3、Do exercise
      在做职业等级沟通的时候,发现有很多同学确实也在尝试Do more、Do better,但在执行的过程中,几乎每个人都遇到同一个问题:光看不用效果很差,怎么办?
      例如:
      学习了jvm的垃圾回收,但是线上比较少出现FGC导致的卡顿问题,就算出现了,恢复业务也是第一位的,不太可能线上出现问题然后让每个同学都去练一下手,那怎么去实践这些jvm的知识和技能呢?
      Netty我也看了,也了解了Reactor的原理,但是我不可能参与Netty开发,怎么去让自己真正掌握Reactor异步模式呢?
      看了《高性能MySQL》,但是线上的数据库都是DBA管理的,测试环境的数据库感觉又是随便配置的,我怎么去验证这些技术呢?
    框架封装了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来观察浏览器的反应。

      还有很多方法,这里就不一一列举,简单来说,就是要将学到的东西真正试试,才能理解更加深刻,印第安人有一句谚语:I hear and I forget. I see and I remember. I do and I understand,而且“试试”其实可以比较简单,很多时候我们都可以自己动手做。
      当然,如果能够在实际工作中使用,效果会更好,毕竟实际的线上环境和业务复杂度不是我们写个模拟程序就能够模拟的,但这样的机会可遇不可求,大部分情况我们还真的只能靠自己模拟,然后等到真正业务要用的时候,能够信手拈来。
    ###3)Teaching
      一般来说,经过Learning和Trying,能掌握70%左右,但要真正掌握,我觉得一定要做到能够跟别人讲清楚。因为在讲的时候,我们既需要将一个知识点系统化,也需要考虑各种细节,这会促使我们进一步思考和学习。同时,讲出来后看或者听的人可以有不同的理解,或者有新的补充,这相当于继续完善了整个知识技能体系。
      这样的例子很多,包括我自己写博客的时候经常遇到,本来我觉得自己已经掌握很全面了,但一写就发现很多点没考虑到;组内培训的时候也经常看到,有的同学写了PPT,但是讲的时候,大家一问,或者一讨论,就会发现很多点还没有讲清楚,或者有的点其实是理解错了。写PPT、讲PPT、讨论PPT,这个流程全部走一遍,基本上对一个知识点掌握就比较全面了。
    ##后记
      成为技术大牛梦想虽然很美好,但是要付出很多,不管是Do more还是Do better还是Do exercise,都需要花费时间和精力,这个过程中可能很苦逼,也可能很枯燥,这里我想特别强调一下:前面我讲的都是一些方法论的东西,但真正起决定作用的,其实还是我们对技术的热情和兴趣!

    展开全文
  • 如何快速成为技术大牛,阿里大牛的总结亮了

    千次阅读 多人点赞 2018-08-10 09:26:21
    不管是开发、测试、运维,每个技术人员心里多多少少都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地努力和提升自己。  然而“梦想是美好的,现实却是残酷的...

    写在前面

    不管是开发、测试、运维,每个技术人员心里多多少少都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地努力和提升自己。

     然而“梦想是美好的,现实却是残酷的”,很多同学在实际工作后就会发现,梦想是成为大牛,但做的事情看起来跟大牛都不沾边,例如,程序员说“天天写业务代码还加班,如何才能成为技术大牛”,测试说“每天都有执行不完的测试用例”,运维说“扛机器接网线敲shell命令,这不是我想要的运维人生”。

    我也是一位程序员,所以我希望通过以下基于程序开发的一些例子,帮助大家解决这些困惑。大道理是相通的,测试、运维都可以借鉴。

    几个典型的误区

    拜大牛为师

    有人认为想成为技术大牛最简单直接、快速有效的方式是“拜团队技术大牛为师”,让他们平时给你开小灶,给你分配一些有难度的任务。

     我个人是反对这种方法的,主要的原因有几个:

     ● 大牛很忙,不太可能单独给你开小灶,更不可能每天都给你开 1 个小时的小灶;而且一个团队里面,如果大牛平时经常给你开小灶,难免会引起其他团队成员的疑惑, 我个人认为如果团队里的大牛如果真正有心的话,多给团队培训是最好的。然而做过培训的都知道,准备一场培训是很耗费时间的,课件和材料至少 2 个小时(还不能是碎片时间),讲解 1 个小时,大牛们一个月做一次培训已经是很高频了。

    ● 因为第一个原因,所以一般要找大牛,都是带着问题去请教或者探讨。因为回答或者探讨问题无需太多的时间,更多的是靠经验和积累,这种情况下大 牛们都是很乐意的,毕竟影响力是大牛的一个重要指标嘛。然而也要特别注意:如果经常问那些书本或者 google 能够很容易查到的知识,大牛们也会很不耐烦的,毕竟时间宝贵。经常有网友问我诸如“jvm 的 -Xmn 参数如何配置”这类问题,我都是直接回答“请直接去 google”,因为这样的问题实在是太多了,如果自己不去系统学习,每个都要问是非常浪费自己和别人的时间的。

    ● 大牛不多,不太可能每个团队都有技术大牛,只能说团队里面会有比你水平高的人,即使他每天给你开小灶,最终你也只能提升到他的水平;而如果是跨团队的技术大牛,由于工作安排和分配的原因,直接请教和辅导的机会是比较少的,单凭参加几次大牛的培训,是不太可能就成为技术大牛的。

    综合上述的几个原因,我认为对于大部分人来说,要想成为技术大牛,首先还是要明白“主要靠自己”这个道理,不要期望有个像武功师傅一样的大牛手把手一步一步地教你。适当的时候可以通过请教大牛或者和大牛探讨来提升自己,但大部分时间还是自己系统性、有针对性的提升。

    业务代码一样很牛逼

    有人认为写业务代码一样可以很牛逼,理由是业务代码一样可以有各种技巧,例如可以使用封装和抽象使得业务代码更具可扩展性,可以通过和产品多交流以便更好 的理解和实现业务,日志记录好了问题定位效率可以提升 10 倍等等。

    业务代码一样有技术含量,这点是肯定的,业务代码中的技术是每个程序员的基础,但只是掌握了这些技巧,并不能成为技术大牛,就像游戏中升级打怪一样,开始打小怪,经验值很高,越到后面经验值越少,打小怪已经不能提升经验值了,这个时 候就需要打一些更高级的怪,刷一些有挑战的副本了,没看到哪个游戏只要一直打小怪就能升到顶级的。成为技术大牛的路也是类似的,你要不断的提升自己的水平,然后面临更大的挑战,通过应对这些挑战从而使自己水平更上一级,然后如此往复,最终达到技术大牛甚至业界大牛的境界,写业务代码只是这个打怪升级路上的一个挑战而已,而且我认为是比较初级的一个挑战。

    所以我认为:业务代码都写不好的程序员肯定无法成为技术大牛,但只把业务代码写好的程序员也还不能成为技术大牛。

    上班太忙没时间自己学习

    很多人认为自己没有成为技术大牛并不是自己不聪明,也不是自己不努力, 而是中国的这个环境下,技术人员加班都太多了,导致自己没有额外的时间进行学习。

    这个理由有一定的客观性,毕竟和欧美相比,我们的加班确实要多一些,但这个因素只是一个需要克服的问题,并不是不可逾越的鸿沟,毕竟我们身边还是有那么多的大牛也是在中国这个环境成长起来的。

    我认为有几个误区导致了这种看法的形成:

    1、上班做的都是重复工作,要想提升必须自己额外去学习

    形成这个误区的主要原因还是在于认为“写业务代码是没有技术含量的”,而我现在上班就是写业务代码,所以我在工作中不能提升。

    2、学习需要大段的连续时间

    很多人以为要学习就要像学校上课一样,给你一整天时间来上课才算学习,而我 们平时加班又比较多,周末累的只想睡懒觉,或者只想去看看电影打打游戏来放松, 所以就没有时间学习了。

    实际上的做法正好相反:首先我们应该在工作中学习和提升,因为学以致用或者有实例参考,学习的效果是最好的;其次工作后学习不需要大段时间,而是要挤出时 间,利用时间碎片来学习。

    正确的做法

    Do more

    做的更多,做的比你主管安排给你的任务更多。 我在 HW 的时候,负责一个版本的开发,这个版本的工作量大约是 2000 行左右,但是我除了做完这个功能,还将关联的功能全部掌握清楚了,代码(大约 10000 行)也全部看了一遍,做完这个版本后,我对这个版本相关的整套业务全部很熟悉了。 经过一两次会议后,大家发现我对这块掌握最熟了,接下来就有趣了:产品讨论需求找我、测试有问题也找我、老大对外支撑也找我;后来,不是我负责的功能他们也找我,即使我当时不知道,我也会看代码或者找文档帮他们回答。最后我就成了我这个系统的“专家”了。虽然这个时候我还是做业务的,还是写业务代码,但是我已经对整个业务都很熟悉了。

     以上只是一个简单的例子,其实就是想说:要想有机会,首先你得从人群中冒出来,要想冒出来,你就必须做到与众不同,要做到与众不同,你就要做得更多!

    怎么做得更多呢?可以从以下几个方面着手:

    1、熟悉更多业务,不管是不是你负责的;熟悉更多代码,不管是不是你写的 这样做有很多好处,举几个简单的例子:

            ● 需求分析的时候更加准确,能够在需求阶段就识别风险、影响、难点

            ● 问题处理的时候更加快速,因为相关的业务和代码都熟悉,能够快速的判断问题可能的原因并进行排查处理

            ● 方案设计的时候考虑更加周全,由于有对全局业务的理解,能够设计出更好的方案

    2、熟悉端到端

    比如说你负责 web 后台开发,但实际上用户发起一个 http 请求,要经过很多中间步骤才到你的服务器(例如浏览器缓存、DNS、nginx 等),服务器一般又会经过很多处理才到你写的那部分代码(路由、权限等)这整个流程中的很多系统或者步骤,绝大部分人是不可能去参与写代码的,但掌握了这些知识对你的综合水平有很大作用,例如方案设计、线上故障处理这些更加有含金量的技术工作都需要综合技术 水平。

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

    3、自学

     一般在比较成熟的团队,由于框架或者组件已经进行了大量的封装,写业务代码所用到的技术确实也比较少,但我们要明白“唯一不变的只有变化”,框架有可能要改进,组件可能要替换,或者你换了一家公司,新公司既没有组件也没有框架,要你从头开始来做。这些都是机会,也是挑战,而机会和挑战只会分配给有准备的人,所以这种情况下我们更加需要自学更多东西,因为真正等到要用的时候再来学已经没有时间了。

     以 java 为例,大部分业务代码就是 if-else 加个数据库操作,但我们完全可以自己学些更多 java 的知识,例如垃圾回收,调优,网络编程等,这些可能暂时没用, 但真要用的时候,不是 google 一下就可以了,这个时候谁已经掌握了相关知识和技 能,机会就是谁的。

    以垃圾回收为例,我自己平时就抽时间学习了这些知识,学了 1 年都没用上,但后来用上了几次,每次都解决了卡死的大问题,而有的同学,写了几年的 java 代码, 对于 stop-the-world 是什么概念都不知道,更不用说去优化了。

     Do better

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

    例如:

    重复代码太多,是否可以引入设计模式?

    系统性能一般,可否进行优化?

    目前是单机,如果做成双机是否更好?

    版本开发质量不高,是否引入高效的单元测试和集成测试方案?

    目前的系统太庞大,是否可以通过重构和解耦改为 3 个系统?

    阿里中间件有一些系统感觉我们也可以用,是否可以引入 ?

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

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

    ● 解耦,将一个后台拆分为 2 个后台,提升可扩展性和稳定性;

    ● 双机,将单机改为双机系统,提高可靠性;

    ● 优化,将原来一个耗时 5 小时的接口优化为耗时 5 分钟 还有其它很多优化,后来我们这个组承担了更多的系统,后来这个小组 5 个人, 负责了 6 个系统。

    Do exercise

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

    例如:

     ● 学习了 jvm 的垃圾回收,但是线上比较少出现 FGC 导致的卡顿问题,就算出现了,恢复业务也是第一位的,不太可能线上出现问题然后让每个同学都去练一下手,那怎么去实践这些 jvm 的知识和技能呢?

     ● Netty 我也看了,也了解了 Reactor 的原理,但是我不可能参与 Netty 开发, 怎么去让自己真正掌握 Reactor 异步模式呢?

    ● 看了《高性能 MySQL》,但是线上的数据库都是 DBA 管理的,测试环境的数据库感觉又是随便配置的,我怎么去验证这些技术呢?

    ● 框架封装了 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 来观察浏览器的反应。

    还有很多方法,这里就不一一列举,简单来说,就是要将学到的东西真正试试,才能理解更加深刻,印第安人有一句谚语:I hear and I forget. I see and I remember. I do and I understand,而且“试试”其实可以比较简单,很多时候我们都可以自己动手做。

    当然,如果能够在实际工作中使用,效果会更好,毕竟实际的线上环境和业务复杂度不是我们写个模拟程序就能够模拟的,但这样的机会可遇不可求,大部分情况我们还真的只能靠自己模拟,然后等到真正业务要用的时候,能够信手拈来。

    3)Teaching

    一般来说,经过 Learning 和 Trying,能掌握 70% 左右,但要真正掌握,我觉得一定要做到能够跟别人讲清楚。因为在讲的时候,我们既需要将一个知识点系统化,也需要考虑各种细节,这会促使我们进一步思考和学习。同时,讲出来后看或者听的人可以有不同的理解,或者有新的补充,这相当于继续完善了整个知识技能体系。

    这样的例子很多,包括我自己写博客的时候经常遇到,本来我觉得自己已经掌握很全面了,但一写就发现很多点没考虑到;组内培训的时候也经常看到,有的同学写了 PPT,但是讲的时候,大家一问,或者一讨论,就会发现很多点还没有讲清楚, 或者有的点其实是理解错了。写 PPT、讲 PPT、讨论 PPT,这个流程全部走一遍, 基本上对一个知识点掌握就比较全面了。

    后记

    成为技术大牛梦想虽然很美好,但是要付出很多,不管是 Do more 还是 Do better 还是 Do exercise,都需要花费时间和精力,这个过程中可能很苦逼,也可能很枯燥,这里我想特别强调一下:前面我讲的都是一些方法论的东西,但真正起决定作用的,其实还是我们对技术的热情和兴趣!

    展开全文
  • 国内Android开发技术大牛推介

    千次阅读 2017-12-15 21:07:01
    国内Android开发技术大牛推介 院辉辉 Android系统工程师,曾就职于IBM、Lenovo,目前就职于小米MIUI系统组,对Android系统源码研究的比较透彻,毕竟是系统工程师。博客中有很多高质量的源码分析文章. 博客地址:...

    国内Android开发技术大牛推介

    1. 袁辉辉
      Android系统工程师,曾就职于IBM、Lenovo,目前就职于小米MIUI系统组,对Android系统源码研究的比较透彻,毕竟是系统工程师。博客中有很多高质量的源码分析文章.
      博客地址:Gityuan

    2. 罗升阳
      江湖人称老罗(其实挺年轻的),对Android系统源码有颇深的研究,著有《Android系统源代码情景分析》一书,并且在CSDN上分享了出来,文章内容的质量也是非常高,非常值得研读一番,听说他最近在oppo供职。
      博客地址:老罗的Android之旅

    3. 邓凡平
      《深入理解Android 卷》一书的作者,早年是做C++开发的,后来转到Android开发,对Android源码研究的也比较透彻,也有自己的博客:
      博客地址:Innost的专栏
    4. 郭霖
      《第一行代码》一书的作者,主要分析应用层的代码,将一些开源库的分析比较透彻。
      博客地址:郭霖的专栏

    5. 尼古拉斯_赵四
      此人擅长于Android逆向,对于APK的加固破解有较深入的研究,擅长从反编译已经被混淆的代码中寻找线速,再结合Xposed工具修复已经按照的应用的功能
      博客地址:尼古拉斯.赵四
      GITHUB:尼古拉斯.赵四

    6. Weishu
      真名可能是叫田维术,博客行文不错,很容易让人明白,也有不少实实在在的干货。
      博客地址:Weishu’s Notes

    7. zjutkz
      对于Android热修复,逆向以及RN Weex开发有一些的研究,博客文章数量不多,但有些文章写的还可以。
      博客地址:zjutkz’s blog

    8. 任玉刚
      前几年因为提出通过代理的方式实现Activity插件化而非常出名,还出了一本书《Android开发艺术探索》,最近没有什么高质量的文章问世,有点可惜。
      博客地址:任玉刚

      
      更多的国内外优秀Android大牛,下面这篇文章有介绍,不过介绍的比较笼统:
      国内外优秀Android开发者(崇拜大牛)

    展开全文
  • 技术大牛?业务大牛?

    千次阅读 2010-08-09 09:29:00
    技术大牛?业务大牛? 吴旻 泰岩网络工作室    成为技术大牛是每个喜欢技术的开发人员的梦想。想想那种别人遇到的困难被自己一语道破,或者成为技术英雄被景仰的感觉,简直太陶醉了!  ...
  • 如何成为技术大牛

    千次阅读 2016-04-13 09:05:42
    天天写业务代码的程序员,怎么成为技术大牛,开始写技术代码? https://www.zhihu.com/question/39430220/answer/90546883 姚冬,填坑侠 一个产品业务的开发过程中必然存在很多需要解决的问题,比如 崩溃,死锁...
  • 成为技术大牛的两个方法[推荐]

    千次阅读 2019-10-28 11:52:48
    1.应用场景 很多技术同学都关注自身成长的问题,比如如何成长为牛人、如何...每一个技术人,都应该立志成为技术大牛,持续学习和成长。 解决方法: 见上红色字 2.介绍 见下方 3.学习/操作 ...
  • 摘要: 写在前面 不管是开发、测试、运维,每个技术人员心理多多少少都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地努力和提升自己。然而“梦想是美好的,...
  • 不管是开发、测试、运维,每个技术人员心理多多少少都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地努力和提升自己。然而“梦想是美好的,现实却是残酷的”,...
  • 华为超级技术大牛的十年经验总结  人类与动物的最大不同是积累知识可以传承学习,学习他人成功的经验可以让我们少 走弯路并缩短学习曲线,这里,华为大牛徐家骏的10年华为之路对每个人都有启迪和指导 意义!    ...
  • 20位活跃在Github上的国内技术大牛 本文列举了20位在Github上非常活跃的国内大牛,看看其中是不是很多熟悉的面孔?1. lifesinger(玉伯) Github主页: https://github.com/lifesinger 微博:@ 玉伯也叫射雕 .....
  • 通往技术大牛的必读十本书

    千次阅读 2018-03-14 23:14:07
    前言本期文章就推荐十本书给大家,这十本书每一本都是业界的经典,同时抛开了具体的技术细节而从一个更高的层次上...当然并不是说读完这几本书转身就成为技术大牛,而是这几本书可以帮你少走很多弯路,有时候慢就是快。
  • 阿里妹导读:你是否有类似这样的问题——“天天写业务代码的程序员,怎么成为技术大牛,开始写技术代码?”今天,阿里资深无线开发专家李运华,系统梳理了自己的思考和理解,希望帮助更多同学少走一些弯路。 写在...
  • 20位活跃在Github上的国内技术大牛

    千次阅读 2016-03-11 11:09:10
    20位活跃在Github上的国内技术大牛 本文列举了20位在Github上非常活跃的国内大牛,看看其中是不是很多熟悉的面孔? 1. lifesinger(玉伯) Github主页: https://github.com/lifesinger微博:@ 玉伯也叫射...
  • Github上的20位国内技术大牛

    千次阅读 2016-10-30 20:36:41
    20位活跃在Github上的国内技术大牛 本文列举了20位在Github上非常活跃的国内大牛,看看其中是不是很多熟悉的面孔? 1. lifesinger(玉伯) Github主页:  https://github.com/lifesinger微博:@  玉...
  • 技术大牛的练成

    千次阅读 2012-08-24 13:17:12
    首先声明,我不是Expert,但我发现很多有成就的技术大牛,很多都在30岁左右,这类人,一般都是23岁左右毕业,工作两年后,开始从事自己感兴趣的细分行业。 打个比方吧,这位牛人23岁毕业,做了两年嵌入式C编程,...
  • 阿里技术大牛告诉你真相!   来源:阿里云 作者:林昊(花名毕玄),阿里巴巴技术保障部研究员,曾任淘宝网平台架构部架构师。个人的研究方向主要为Java模块化、动态化系统的构建,以及高性能大型分布式Java...
  • 要想成为技术大牛, 首先还是 要明白“主要靠自己”这个道理,不要期望有个像武功师傅一样的大牛手把手一步一步地教你。适当的时候可以通过请教大牛或者和大牛探讨来提升自己,但大部分时间 还是自己系统性、有...
  • 如何转成技术大牛
  • 找一个技术大牛做兼职,月入数万

    千次阅读 2016-06-23 01:57:17
    找一个技术大牛需要挣点外快的,长期合作,月入数万,只需要维持软件的更新,其他什么都不用管。
  • 走近腾讯技术大牛——2012年腾讯线下讨论PPT大盘点   腾讯大讲堂是腾讯专业、高品质的知识分享平台,分享产品技术和成功经验。腾讯大讲堂秉承腾讯大开放战略,致力于对外分享腾讯技术、产品、设计交互、运营等...
  • 天天写业务代码的程序员,怎么成为技术大牛,开始写技术代码? 转自知乎:(知乎ID:阿里云云栖社区) 阿里云云栖社区,汇集阿里技术精粹,点此关注  著作权归作者所有。商业转载请联系作者获得授权,非商业转载请...
  • 今天就为大家推荐我认为比较不错的6个技术大牛博客,大家有兴趣可以关注一下,看看大牛们的编程思路,学习他们思考问题的方法,不多说废话,开始我们的话题吧! 风雪之隅-Laruence的博客 Laruence的博客就是...
  • 技术大牛养成指南

    千次阅读 2017-04-10 17:00:08
    有的人想成为大牛,却不曾为此努力。有的人辛苦耕耘,却收获寥寥。很多时候,你跟成功的差距并不是能力,也不是运气,或许只是正确的方法?这是一篇不鸡汤的成功学指南,如果你相信且愿意坚持尝试,未必帮不到你! ...
  • java技术大牛博客

    千次阅读 2018-09-28 16:19:19
    https://blog.csdn.net/forezp
  • 成为技术大牛梦想虽然很美好,但是要付出很多,不管是Do more还是Do better还是Do exercise,都需要花费时间和精力,这个过程中可能很苦逼,也可能很枯燥,这里我想特别强调一下:前面我讲的都是一些方法论的东西,...
  • 技术大牛养成指南,一篇不鸡汤的成功学实践 编者按:本文来自微信公众号“InfoQ”(ID:infoqchina),作者李运华,阿里游戏资深软件工程师 有的人想成为大牛,却不曾为此努力。有的人辛苦耕耘,却收获寥寥...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 229,749
精华内容 91,899
关键字:

技术大牛