技术人如何修炼内功(高级篇)

技术人为何要修炼好内功

记得在大学里学习思想政治课中有一条原理是“科学技术是第一生产力”,可见科学技术对于人类的发展有多么的重要,从人类开始制作工具、种植农作物、发明造纸术、发明火药等,在历史的长河中,无一不是科学技术在推动着人类的发展,到了现代的工业革命、计算机革命,再到网络互联、区块链和人工智能,科学技术不断的把人类带入新时代,可见没有科学技术就没有我们人类现在的发展。

在我们飞速发展的IT时代,科学技术更是人类发展的源动力,对于我们IT人,技术是我们做事儿的核动力,没有了技术我们很难体现我们的个人价值,但是,在做好技术、用好技术的同时,我们不能忽略我们是社会人,在大千社会中我们除了创造价值,我们还需要体现创造的价值,推广我们的成果和产出,保护我们的价值,让更多人接受我们的技术价值。从另一方面讲,技术是推动我们前行的动力,但是我们前行的方向也至关重要,我们必须保证前行方向的正确性,否则我们就会走错路走弯路,因此,我们在掌握好技术的同时,我们需要修炼好内功,起航之前我们要设定合适的目标,否则就更容易在茫茫大海中偏离方向。

2017年8月6日,笔者在趣直播组织的百人规模的2017技术人成长交流会上分享了关于《技术人如何修炼内功》的主题,会后有好多小伙伴与笔者探讨技术、架构、人生、生活、工作和思想等,笔者决定将更多的内容纳入《技术人如何修炼内功》这篇文章,帮助更多的小伙伴在专研技术的同时,也多抬头看看是否偏离了自己既定的方向,或者抬头看看是否走了弯路而捷径就在身边,总结成一句话就是:低头干活,抬头走路。

《技术人如何修炼内功》分享的视频和PPT可以在下面的连接观看和下载:

观看现场视频和PPT点击这里

计算机基础知识的修炼

我们在大学里计算机专业都会系统化的学习计算机等相关技术,但是这些技术通常会被IT行业从业者忽略掉,尤其在互联网行业,我发现很多学经济的、学语言的小伙伴也过来从事IT行业,有些做的还不错,这是因为互联网处在风口,机会多,这些小伙伴即使对计算机原理一无所知但是有其他的才能,也能找到适合自己的位置,但是我还是推荐小伙伴们,既然做IT行业,就一定要有技术功底和内功,不要凭空的构建空中花园,这样地基不稳,也难以支撑你一直走下去。

对于基础的计算机知识,最重要的两个方向就是操作系统和网络、算法和数据结构。

操作系统和网络

互联网里面最大的应用场景就是高并发、高可用、高性能的线上服务,做这类系统实际上考验的是我们对操作系统和网络的理解,任何一个系统最后都是运行在操作系统之上的,也都是运行在网络之上的,包括分布式系统,所以,对于操作系统和网络本身一定要有较深的造诣,尤其对于高并发和高性能,如果对操作系统原理一无所知,基本很难理解到什么是并发和锁,很难理解到高性能用什么指标来衡量,以及怎么实现高并发、高可用和高性能。

对于操作系统,我们必须了解CPU的多核体系结构、内存分页和缓存技术、磁盘IO的优略和网卡IO的情况,并且要理解计算机的工作原理,并且会根据这些指标粗略评估服务能够输出的性能。

对于网络,必须理解理论上定义的7层模型,了解TCP/IP的三次握手,另外由于我们在分布式服务架构中多数使用应用层的HTTP协议,我们需要对HTTP协议理解的很深刻。

算法和数据结构

应用层面的小伙伴们可能对算法和数据结构的应用比较少,即使有应用也比较简单,但是算法能力代表了一个人的逻辑思维和思考能力,能把各种基础算法理解的人智商都不会低,能够把程序写好的人逻辑思维一定很强,另外,我一般面试小伙伴的时候,我都会考察一下小伙伴会不会高级算法,例如:递归、剪枝、贪婪、动态规划,仔细想一下就会知道,会动态规划的人,他不是勤奋的就是聪明的,无论哪一样,你都有录取他的冲动。

互联网技术的修炼

在互联网公司里,一共有3个大的方向:线上高并发服务方向、大数据方向、专家方向。

线上高并发服务方向

线上高并发服务方向是个强需求,想象一下无论你开发哪类应用和网站,线上服务都是必须的,有了服务才有了功能,才有了产品,因此笔者也主要从事互联网后台高并发服务的设计与实现。解决高并发服务其实并没有那么难,这些年高并发服务的技术栈也已经没有了门槛,只要可以投入足够的成本,构建可伸缩的服务不是问题,达到多大的TPS也都不是问题,核心思想就是"分而治之,大而化下,小而化了。

无论是使用缓存抗读、使用消息队列抗写、数据库分库分表、缓存分片、应用层伸缩、减少竞争、7层负载均衡、三四层负载均衡等、CDN、DNS轮训等等,这一切的一切都是"分而治之"的思
想。

分而治之并不是一个新概念,周朝的周天子实施分封制,册封自己的亲戚为诸侯,受封的诸侯能够有效地管理地方,为周王提供贡赋等经济来源,战时为周王提供军队,听从周王调遣。周朝繁荣昌盛了几百上千年,但是,受封诸侯随着自身实力的增强壮大,对抗周王、不听从周王调遣的情况越来越严重,导致周朝王室衰落,最终崩溃瓦解,这和我们分布式服务一样,当系统的功能变多了,通过拆分可以化解复杂的系统为多个微小的职责单一的微服务,各个微服务完全自治,通过互相通信协调共同完成一个大任务,然后,不一致的问题就出现了,这也是一个亟待解决的问题。

另外,互联网的项目注重非功能质量,我把这些主要的非功能质量成为六脉神剑:一致性保证、高性能、高可用、可伸缩、可扩展、安全性,每个主体就是一个方法论,每个方法论就想杨过手中的玄铁重剑,大家可以参考《分布式服务架构:原理、设计与实战》一书。

学技术得学它的内功,内功就是基础,不要一味的去追求高大上的技术,而是要寻根究底,拨开现象看本质。记得一个小伙伴在【云时代架构】技术社群里提出一个问题,问题显得非常的骨干:“如何实现10ms延迟的内存计算”,这个问题听起来确实很高大上,首先有内存计算,然后还有10ms的延迟,听起来可是一个高手提出的问题,但是仔细想一下,这里的内存计算其实是直接陷入了方法,10ms是目标,但是没有详细说明什么样的场景下,有什么样的数据,数据的特点是什么,怎么分布的,要从数据中如何分析,使用什么规则找到什么样的结果,因此,对这类问题的讨论通常是无效的,大家各抒己见,有人说用spark实现,有人说用storm实现,实际上在问题没有明确之前,使用什么技术都难以回答这类问题,想一下分布式系统中,机房一个来回的网络通信都需要几个毫秒,不从系统和网络的基础上评估,又如何能解决好这类问题呢?

大数据方向

大数据是最近比较火的方向,大小公司都在使用大数据技术,大公司使用大数据分析从众多数据中分析出来业务模型,得出有价值的结果,来帮助企业制定市场和销售策略,中小公司多数使用大数据出报表和做风控等。

所有的大数据技术的根基都来自Mapreduce、Gfs和Bigtable这三篇论文,推荐大家阅读一下以下论文:

谷歌大数据的三驾马车

理解了这些基础技术原理,再去学习hadoop、hbase、storm、spark、cassandra、mangodb、es等都不是问题。

专家方向

还有一个比较大的方向,就是专家方向,例如:DBA、性能专家、安全专家、区块链专家、人工智能AI专家等。

面试官眼里的优秀技术候选人

作为一个面试官,这两年内笔者面试了无数的候选人,笔者通常通过知识的广度、深度和高度三个维度来衡量一个候选人。

对于知识的广度就是天马行空的聊技术,或者简历写什么主题就聊什么主题,主要看候选人做过哪些工作、使用过哪些工具、解决过哪些问题、会哪些计算机语言等。

对于知识的深度我会让候选人自己选择主题,然后深入探讨,有的候选人会一时不知道如何挖掘自己的深度,那么笔者就会挑几个关键点,例如:GC、索引、锁、并发等深入探讨。建议每个候选人都要挑选几个主题深入学习和探索,并总结落地,象征着进行技术科研的能力。

高度就看这个人的思维模式,会不会换位思考,能不能把握大的方向,是否从生产力和产出的角度来看待技术的价值。

另外,在选择人才的过程中,有人想选择绝对忠诚的人,不过,绝对忠诚是个伪命题,与其要求人家忠诚还不如满足人家的需求,人家才会给你好好干活。

做事的内功

做事儿是需要有能力的这话不假,但是有了能力,我们也要保证做事儿的方向的正确性,南辕北辙的方法实在是不可取,即使再努力也无法达到目标。

目标、原则、方法、结果

这里我要给大家介绍的是一个做事儿的方法论,这个方法论包括:目标、原则、方法、结果。

做事儿要先制定目标,只有目标明确了,后面做的事情才是有意义的,其次就是要有原则,建立自己的底线,也要为事情建立底线,底线是说什么事儿不可以做、什么事儿不能做。

为了实现目标,可以有很多不同的方法,我们要选择最适合的,而不是最高大上的,在实现目标的时候,要有明确的计划,要懂得项目管理,懂得时间管理和目标管理。

任何的事情最终都会有一个产出和结果,要检查最终的结果是否与最初的目标对应,如果没对应到一开始设立的目标,就说明偏离目标,需要反思自己在这过程中存在的问题和不足。

慎用我以为

经常听见小伙伴们会说:“我以为,我认为”,尤其我听见有些讲师在台上讲的时候,也会说这类不确定的词汇,这是非常不可取的,这些主观的词汇基本不能描述一个客观的事实,建议换成这些表达,我们推荐做什么,必须做什么,禁止做什么。

高效沟通

在生产实践中,我发现了小伙伴在沟通过程中,会出现3种异常的情况:

  1. 两个人沟通完毕后,A认为B应该懂了,但是B确实没懂。
  2. 两个人沟通完毕后,A认为B懂了,B也认为自己懂了,但是A和B的想法不一致。
  3. 两个人沟通完毕后,A认为B懂了,B也说自己懂了,但是B内心里面其实没懂。

无论哪种情况,都会影响沟通的效率,我们应该尽量用常识沟通,沟通完确认是否对方理解了,不能假设对方理解了,也不能假设自己理解了,必须达成共识后,才算沟通完毕。

另外一方面,假如两个人讨论一个事情,假如两个人达成共识有多个,一部分达成了共识,一部分没有达成共识,例如:讨论项目有10个,只有1个没有达成共识,其他9个都达成了共识,这时候就需要分开来看,达成共识的可以开始计划和实现,未达成共识的可以继续寻找解决方案,不能因为一个事儿没有达成共识,就认为所有的事儿都没有达成共识。

那么对于一个人来讲,什么是善于沟通呢,善于沟通并不是侃侃而谈,也不是非常会来事就是会沟通和交流,而是要能站在别人的角度考虑事情,具有同理心,了解对方的目的和期待,才能更容易的做有效的沟通。

解决有效的问题

无论我们是在定义产品还是定义一个品类,我们都需要找到当前的痛点,从痛点出发才能改变现状,推动世界进步。因此,无论我们是做一个创新还是完成一个目标,其实我们都是在解决一个问题,笔者最近发现很多小伙伴在解决一些无效的问题,或者解决一些不存在的问题,还有些不知道在解决什么问题,这都是非常不可取的,因此,小伙伴们在解决问题的时候,一定先把问题了解清楚,了解了来龙去脉再去针对问题提出有效的解决方案,千万不要一上来就直接陷入细节和方法,那样就会以偏概全,断章取义,就会不知道问题是什么,或者解决无效的问题,做无效的沟通。

国际上有一个著名的解决问题的方法论叫KT,大家感兴趣的可以参考:The problem solving methodology of Kepner-Tregoe

解决问题的时候切记不要用一个错误掩盖另外一个错误,要寻求方法彻底解决问题,而不要把问题遗留下来,久而久之遗留的问题多了,量变导致质变,就会发生大问题,电影《深海浩劫》里讲述了石油公司为了赶进度和工期,不按照既定流程和规范进行生产作业,对已经发现的问题视而不见,最终导致了海上油井爆炸,酿成了多人死亡的严重事故。

任务分配

我一直认为每个人都是一个管理者,没有下属的小伙伴需要管理自己的时间、资源、情绪和项目,有下属的小伙伴还要管理下属小伙伴的目标、方法和结果,因此,任何人都需要有管理的技能。

这里我要提醒读者的是,管理者分配任务一定要聚焦、具体、明确。如果是给下属分配任务,一定要边界清晰,不要一个任务分给了2个责任人,2个责任人就等于没有责任人,这和一个和尚有水喝、两个和尚抬水喝、三个和尚没水喝的典故如出一辙。

做人的内功

人分为平庸的人、聪明的人和智慧的人,平庸的人会多次的掉入同样的坑里,聪明的人是掉进坑里后下次就会避免,智慧的人听别人讲述掉坑里的故事自己就能绕过坑,大家都要做智慧的人,学习前人分享的干货。

别人对你的印象其实离不开两个因素,靠谱和有脑子。靠谱就是要让人对你产生信任感,有脑子就是灵活、不做作、做事有条理。

其次就是胆大、心细、乐观,做人一定要敢于去尝试,也要乐观,所谓福祸相依,无论发生什么事都要乐观,一个事情过去了1天、一个月、一年,回头再去看事情的重要程度和后果是不一样的,有可能从坏变好,也有可能从好变坏。

如果遇到一些坎坷,尤其是在工作中,不用纠结、不用懊恼也不用沮丧,要么忍、要么狠、要么滚,从这三条路中选一条就好了,因为也没有别的办法可走。

有一种人很善于思考,会剖开现象看本质,还有个一种人是自己不会思考,但是你告诉他思考,他就会沿着你说的想法来思考,这种也很不错,我们都要争当做善于思考的人,因为思考才有创新,才能使人进步。

另外,每个人生活的背景不同、环境不同,每个人的成长轨迹也不同,因此,人不要去与别人攀比,要给自己制定一个明确的进步计划,与之前的自己比进步就足够了,当然也不能失去进步的动力。

最后,要早结婚,早生小孩,早买房,因为早结婚早生小孩就会早买房,早买房大家都懂的。

作者的书籍

笔者最近出版的《分布式服务架构:原理、设计与实战》,这是一本不可多得的理论与实践相结合的架构秘籍,为想修炼互联网高并发架构内功的小伙伴量身定制的。

技术人如何修炼内功(高级篇)_第1张图片

京东购买请点这里或者扫描下方二维码。

技术人如何修炼内功(高级篇)_第2张图片

你可能感兴趣的:(技术人如何修炼内功(高级篇))