美文网首页管理
读书笔记—《码农翻身》

读书笔记—《码农翻身》

作者: whybask | 来源:发表于2018-12-12 23:18 被阅读167次


    以下内容节选自《码农翻身》,我对这些内容深有感触,因此整理出来推荐给年轻的程序员们看看,希望激发大家去看看原书的兴趣,从而在IT技术道路上精进。

    顺便说一下:此书80%的内容,还是在讲IT技术的(用讲故事的形式、浅显易懂),适合架构师以下级别。

    凡事必先骑上虎背

    有人问我,说他所在的是一家中小型公司,开发团队有十来个人、七八条枪,做行业软件,现在公司没有技术经理,只有一个懂业务的总监来管理所有开发人员,而且开发人员都是初级水平,大部分只有一两年经验,相比而言,他还算老人。总监认可他的技术,似乎有意让他做技术经理,最近公司招人也让他去面试。

    但是他不太自信,觉得表达能力不行,有些技术还比较薄弱,领导布置的功能可以做出来,但是说原理就有可能卡売。我告诉他,这正好是一次机会,是最好的学习时机,有了问题的引导,你会疯狂地学习,迅速地提升自己

    我想起了2009年看过的一本书《陈寅恪与傅斯年》,里面形容傅斯年的性格是“凡事必先骑上虎背”,这句话我一直印象深刻。

    对于我这样一个性格内向的程序员来说,我在遇到机会,犹豫不决、缩手的时候总会想起这句话,然后鼓起勇气先骑上虎背,让自己下不来台再说,但是真的尽自己最大力以后就会发现,事情没那么难,最后还都把事情完成了。

    作为一个擅长和机器打交道的群体,大部分程序员的性格都比较内向、沉默。别看在网上、在O群里谈突风生、幽默有趣,斗斗得不亦乐乎,但是回现实中,面对一群“真人”的时候,连准确地表达自己的观点可能都做不到,更不用说去柔中带刚、唇枪舌剑地去争抢某个东西了。

    程序员大多实诚、谨小慎微,很多事情不敢也不会去努力争取,完全靠自己的能力吃饭。这样很吃亏,因为你的能力无法完全体现,在工作中只能表现出一部分,比如10分的能力只能显露出7分,剩下的3分可能就被埋没了。

    对于ー个内向的人来说,害怕失败,害伯被别人说自己不够格,所以总想把自己修炼得尽善尽美,在达到基至远远超过那个职位的要求以后心里オ会踏实,才会想着领导会看到,让自己去负责那项工作。可是反过来讲,世上哪儿有等你完全准备好以后才开始做的事情?你觉得完全准备好以后,黄花菜都凉了。

    IBM每年害期都有一项叫作“蓝色之路”的实习生计划,招聘学生到公司实习,在这项计划中有四五个被称为 Extreme Blue(青出于蓝)的项目,面向的是优秀的大学实习生。这个 Extreme Blue项目是由IBM的员工提出有创新的、有商业价值的想法,由这些优秀的学生去实现。

    作者在2008年提出了一个想法:在一个3D虚拟世界中构建一个支持数捷软件开发的环境,有幸被选中作为 Extreme Blue项目之ー。当时我对散捷软件开发还算了解,但是对于在3D虚拟世界中建模、编程一无所知。可是已然骑上虎背,下不来了,接下来马上要带着实习生来实现,怎么办?只剩华山一条路,明知山有虎,偏向虎山行。那就是逼着自己赶紧进入未知领域,拼命地去学,像海绵一样吸收各种知识。几个月以后,我们确实把这个项目做出来了。

    举这个例子就是想说:对于性格内向的程序员,很多时候你认为基本准备好了其实就够了,凡事必先骑上虎,勇敢地迈出去,努力地争取一下,你就会发现自己登上了更高层的台阶。

    一名架构师的总结

    我和很多人交流过一个有趣的现象:那就是从刚毕业到30岁这段时间,会觉得时间过得很慢,总觉得自己还很年轻;但是一旦过了30岁,时间就如白驹过,一年又一年飞逝而过。我自己也是,眼看着毕业快15年了,15年间从一个刚毕业的菜鸟成长为技术骨干,做到架构师的职位,回头看看,编程虽然枯燥辛苦,但是如果真的感兴趣,就能体会到其中的乐趣。

    好奇心

    刘慈欣在《朝闻道》中描绘过这样一个情节:在古老的非洲大陆上,有一个原始人无意间抬头仰望星空,凝视的时间稍微长了一些,超过了外星人设置的國值,立刻拉响了人类即将产生文明的警报。因为外星人认为,人类已经产生了对宇宙的好奇心。有了好奇心,文明的产生、科技的发展不过是一瞬间的事情

    确实是这样的,好奇心驱动人类不断向前,在短短的几千年(相对于长达几十万年的原始时代)里就登上了月球,并且努力向其他行星拓展。

    对于程序员来说也是如此,如果你看到新技术、新产品没有像小孩看到新玩具那样两眼放光,没有立刻在自己的电脑上试试的冲动,你就需要仔细考虑一下是否真的对软件开发有兴。如果根本没兴趣,那不要浪费时间,还是趁早转行,有更多话合你的职业在等着你。

    没有好奇心,就不愿意追本溯源,追求技术的本质。
    没有好奇心,就难以静下心来,耐得住寂寞,远离浮躁,更难以跨过这个行业所带来的种种挑战。
    没有好奇心,就不愿意学习新技术。一名架构师,如果没有对技术的敏感度和前性,直抱着一套技术架构不变,估计很快就会被海汰。

    当然,自制力强大的人除外。但话说回来,靠着自制力让自己做自己不喜欢的事情不非常痛苦?

    在一堂关于领导力的培训课上,老师一直在说 Passion(激情)、Passion、 Passion。但我直觉得,没有好奇心,没有兴趙,怎么会产生 Passion呢?所以,对技术的好奇心、兴趣是一切的基础

    抽象的能力

    抽象思考的能力怎么强调都不为过。

    现实的需求纷繁复杂,如果架构师不能把这些乱无头绪的需求抽象成一些“概念”,在概念的层次进行思考,那么系统根本就无法设计。

    我认为,把纷杂的事物抽象到数学层面是最高的抽象。也许有人会说哲学层面才是,但到数学层面已经非常难了。

    我在之前的公司有率遇到一次,把针对税务领域的 Credit, Debit s等概念抽象为在一个二维坐标下点的运动,问题一下子简化了很多,实现简单,并且非常安全可靠。

    但是抽象成数学模型和算法通常是可遇而不可求的,在这种情况下,我们需要退而求其次,试图抽象成若干个正交的概念,以此来降低复杂度。

    “正交”在数学上指的是线性无关,最常见的例子就是坐标系下的x轴和y轴。对于一个点来讲,它的x值的变化不会影响到y,y值的变化不会影响到x,即x和y是正交的。

    正交的威力在于互不影响、扩展方便。单用一个x轴可以表示一条直线上的所有点;再加一个y轴就能表示平面上的所有点;再加一个z轴,三维空间中的所有点都能表示出来。

    人类的大脑在思考问题的时候是有容量限制的,难以同时驾驭太多复杂的概念。如果我们的软件系统也能做成x、y、z坐标这样,就带来了无与伦比的好处。你在处理与x轴相关的事情时,不用考虑与y轴和z轴相关的事情,因为你知道它们不会受到影响。这样问题的复杂度就从三维一下子下降到一维,更容易把握了。

    抽象能力的训练没有捷径,就是经验的积累,勤于思考和学习。例如学习 Java Web:开发的可以思考一下为什么 Spring有 Controller、ViewResolver这样的概念?学习 Android的可以思考一下 Android是怎么对未知的、纷紧复杂的应用程序进行抽象的?为什么会有Maven、Git、Nginx、Hadoop这些产品呢?

    开始写作吧

    我时常会有这样的感觉:自己心里党得对一个技术点已经掌握了,但是当我试图给别人讲述的时候,发现并不能轻松自如、深入浅出地讲出来。

    这就说明了一个问题:自认为掌握了,其实并没有真正掌握,大脑只是对这个技术点建立了一个整体的概念,在一些细节处做了想当然的假设,等到你用语言再来表达的时候就会发现,原来这个假设井不完全成立,是有问题的。

    估计大家都有这样的经验:如果你能把一门技术通俗易懂地给别人讲明白,那就说明你已经掌握了。这种“转教别人”( Teach others)的办法属于主动学习,效率是最高的。但是在工作和生活当中,你是很少有机会去给别人讲授的。

    那怎么办?总不能拉着你正忙着的同事说:“哥们儿,来,我別学了 Java CAS,我给你讲讲吧。”也许你的同事很有礼貌,耐着性子听你地讲完了,然后不知所云。前几次还行、次数多了,就对你敬而远之了。既然没法给別人讲,那就退而求其次吧,把自己的理解写出来。

    当然不是泛泛地记流水账,或者把几个孤立的点罗列在那里,而是要把思路厘清楚,尤其要写出为什么要有这门技术、这门技术解决了什么问题,然后才是这门技术是怎么使用的。

    当你逼着自己去回答这些问题的时候,很快就会发现,自己的理解还不够,还需要查找更多的资料。在你从网上查找资料的时候,你会发现,网上的这些文章怎么这么差劲,重复的内容这么多,大部分都是复制、粘贴的,大部分都在讲述怎么使用,对于“为什么”从来都是只字不提,或者犹抱琵琶半遮面,羞羞答答地不说出来。

    这个整理资料和思考的过程是很珍贵的,只有这样才能把信息变成你自身的知识。如果实在搞不定,就带着问题去论坛提问,去QQ群发言,找大牛请教,总是可以解决的。

    有人可能要问了:我也可以按照这个思路去学习,为什么要写下来呢?原因很简单:不写出来,很容易放弃深度思考

    我们已经进入了一个碎片化的时代,我们的大脑已经养成了碎片化的习惯。写作会逼着你去深度思考,梳理知识体系。

    相关文章

      网友评论

        本文标题:读书笔记—《码农翻身》

        本文链接:https://www.haomeiwen.com/subject/diemhqtx.html