41

“模仿” 是架构师的基本能力:守破离

 5 years ago
source link: https://mp.weixin.qq.com/s/W1PBOScBCxbHfoyccg5tGw?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

YnuiI3r.jpg!web

本文作者曲健,1024生人,天选程序员,浆糊人送外号“大爷Dà Yé”,目前在奥琪科技担任首席架构师一职。

二零一八留不住,朱颜辞镜花辞树。

鄙人平素喜偶厌奇,以致现在对2019仍避之不及、兴致索然,更羞愧的是原本想对2018之前人生做的总结也憋到现在...

人这一生,有人从上半场甚至一开场已策马扬鞭绝尘而去,而有人混沌半生却依然摸索不到那道门。不才无甚特长唯虚活三十余载,终究有些人生阅历(通俗点叫失败经验)可与君分享一二。今儿咱们就说道说道 “模仿”这件事

- 谨"守"模仿天性 -

模仿是人类默认出厂设定能力之一,生而为人,始于 “模仿” 。父母的语言语态、行为举止都会成为孩子的模仿对象。孩童会因模仿到大人的一招半式而洋洋自得,成人却因“行与他人雷同之事”顿感不自在甚至羞耻,根源上还是把模仿对标成了另一个概念:

山寨!

山寨更多的是一种抄袭甚至剽窃,与作为有效学习手段的模仿不可同日而语。

这段充满刚正之气的名言论述是讲课用的。实情却是,模仿的第一步往往就靠无脑复制,严重点说就是抄袭。

如同没人会说孩童“山寨”成人,毕竟如此就有降维打击的嫌疑。在成人的世界里,很少有人会承认自己在低维空间,本就同维,我模仿你岂不掉价?更可悲的是一旦开始模仿,就很难不被人扣上山寨的帽子。

日货曾几何时是“质量过硬”产品的代名词,殊不知日本就是抄袭鼻祖。始自隋唐时代,日本已经开始大面积抄袭中国文化,一如茶道、剑道、花道等日本八道都是汲取中国文化后形成的自己特有的道,这些大家基本都知道的且抛开不谈。就说近代,二战后的日本经济萧条,百废待兴,为了重振经济,山寨成了日本选择的一条捷径。巧克力、漫画、家电、相机以及汽车等等,日本全部山寨过。而日货有如今的地位,与其后续一系列的改革创新、科技教育等手段是分不开的。

有兴趣可以搜索一下日本CopyCat视频,看完你会发现国内的那些极品山寨康帅博、大个核桃、农民山泉、粤利粤...大家山寨水平都不过尔尔。

eI3y2uI.jpg!web

而德国曾经也好不到哪去。1887年,德国制造"Made in Germany"耻辱性的进入了英国的商标法条款,被英国人用来区分“英国制造”的优品和"德国制造"的劣品。那时候的德国也是各种仿制和山寨,不过也仅仅过去十几年,德国人就把"德国制造"这顶代表耻辱的帽子摇身变成了金字招牌的代名词至今。您看,随便掀个底儿,抄袭黑历史俯拾皆是,谁也就别笑话谁了。

DàYé自述:

职业生涯冷启动菜鸟期通常会伴随着各种不期而遇的迷茫。当你这也不会那也不会,这也想学那也想学的时候,迷茫、无助或者焦虑就随之而来。还好黑夜给了我黑色的眼睛,我踏踏实实的用来找寻光明。

最开始使用VB6、PRO*C 编码的我,鬼使神差的选择了JAVA高手、TOP ? 程序员作为模仿对象( 当时的我执着地确信Web应用才是未来趋势,也真是眼光毒辣 ),列举如下,不一而足:

特别说明:下述文字只是对本人当时的模仿行为进行陈述,并不代表它们是正确的,请自行甄别。

$ 编程风格 :学习并效仿高手的代码风格。我的代码洁癖就是这段时间养成的,见不得格式乱、忍不了没灵魂。没有注释没有异常处理没有日志没有"断句"一口气写几百上千行的代码,注定是没有灵魂的流水账; 

工欲善其事必先利其器 :NetBeans/ JBuilder/ Eclipse/ MyEclipse之间的各种IDE鄙视(那时候还没有Intellij IDEA啥事),高手用什么自己就用什么,无须纠结高手纠结过的; 

$ 理论知识 :购买并阅读高手推崇的一切好书,虽然很多没啃完,但是读书绝对可以加速知识体系的构建进程。现在很多IT培训机构流水线上组装的“速成”产品,就特别容易出现知识残缺、根基不稳,陷入盲目/机械/重复劳动的泥潭,却以为这就是常态的码农形态; 

热点趋势 :RSS(上古神器之一)订阅高手推荐的各类源站:技术热点/大神博客/业界资讯...学习成长路绝对不能闷头行进,必须学会抬头看路认清大势;

$ 动手能力 :身为程序员不会搭建网站,不会做GUI小应用,不会 Excel 公式,不会搜索,不会 番羽 土啬 ... 比小姐姐让你拆机箱擦个灰都不会还要恶劣。 现在很多程序员应该没见识过以前的企业应用本地环境的搭建、启动、部署和测试,那叫一个繁琐(现在对IBM WebSphere的那套产品仍旧心有余悸),曾经有些人从入职到离职都不知道这一套环境怎么运作的,安心做一名"流水线工人"。

$ 程序员的高傲 :提交的代码被任何人读起来都应该是优雅的;交付给测试的功能点一定是自己反复验证过的,出现低级BUG丢不起那人;敬畏生产环境,上线脚本/配置/变量/步骤/困难全都罗列的一清二楚,上线失败如同过掉门将面对空门将球打飞,可笑又可耻。

$  装逼套路 :能用命令行绝不用图形界面,能用快捷键绝不用鼠标,IDE必须黑色主题,桌面墙纸必须个性,案头必备一本英文原版书(就算垫显示器), 必须盲敲数字键 (别笑,我不认为现在程序员有多少可以做得到或者做得6)

JFbaAjI.jpg!web

Google ->  Creative Desktop Wallpapers

题图:浏览器选项里没有IE, So Chrome Or FireFox?

总之,在编程起步的这段模仿路上,从例行工作到三余读书,从照搬仿效到习惯养成,从实际行为(形)到思想境界(神),其实你会发现这模仿本身也是个成长的过程,只是这路不是你自己摸索的而是踩着前人的脚印。您再看,这个过程缘何我模仿的自得其乐?因为我把自己视作孩童, 放低身段,自降一维, 只求成长。

好的模仿必须找到对的对象

通常大部分人选择的模仿对象通常无非是自己的偶像、长辈、老师或者业界权威、KOL等等。有些模仿并不一定具有特别明确的目的性,就像有多少人因为乔丹篮球之神,23成为了自己的幸运号码。除此之外的大部分模仿一定带有某些目的性,所以一旦选错模仿对象,为此承担的成本可能会无比巨大。靠谱的“ 选择模仿对象 ”的过程应该是这样的:模仿者有能力对自身的基础优劣指标有基本的认知,知晓被模仿者的哪些特质、行为或能力是无害的、有益的、榜样的和相当一段时间内自己想要努力追逐的,双方综合评估后可得Yes Or No。

- 榜样 VS 偶像 -

就模仿而言,我希望是 榜样 的力量,而不是 偶像 的力量,这两者有本质区别。榜样是你还没达到但是想成为的人(或人的某种特质),偶像是你想接近但是不想成为的人。马云说过类似的话,"我没有偶像只有榜样"。大家可以品一品其中意味。

爱因斯坦有个经典的“司机”的故事,说爱因斯坦的司机长期陪着他各地演讲,听多了也就倒背如流了,就像灵山上听佛祖讲道瞬间成精的妖怪似的,自告奋勇申请代爱因斯坦去讲一堂课,结果这哥们确实滔滔不绝、有模有样的演讲完全程。最后不巧有个听众问了一个深入的相对论问题,这司机当然答不出来,却还算机敏地一指坐在后排的爱因斯坦说“这个问题很简单,我的司机就可以回答”。这个例子就是典型的对自身、对模仿对象都评估不足,对大部分的我们来说,爱因斯坦都绝对算不上一个对的模仿对象,因为我们穷究几辈子可能也踩不上他老人家几十年前走过的路...

模仿是个刻意练习的过程

刻意练习、一万小时定律我们都耳熟能详。写代码的手感和语感有时就是冥冥之中方可得,没有大量的实战,寄希望于看个视频读个文章就掌握,这种虚妄犹如似近实远的高山,看似咫尺实则天涯。

你还记得第一个 Hello World 带来的那种芥末味直冲脑门的欣喜么?然而写一万个小时的Hello World并不会让你有什么进步,刻意练习不是刻意重复,你必须从大量枯燥无趣的 “有效” 练习中寻求成长,其中的寂寞可以击退众多求进之人。

总结一下, 住模仿这个人类本能,无须刻意割裂,在没有找到属于自己的路之前,模仿绝对是条不错的捷径。而标题中的 "谨 "字就是表达谨慎选择模仿对象之意,选对了就是成功捷径,选错了可能就是不归路。进入赛道就必须让自己跑起来并持续坚持。

- "破"除复制牢笼 -

如果把上阶段的“守”比喻成机械复制、没有自我的“ 无我 ”蛮荒过程,那么“破”就是要找到“ 自我 ”的文明养成过程: 养成技巧、养成思考、养成创新以及养成习惯等 。除此之外,这个阶段也要找出三个经典人生哲学的答案:

  • 我是谁? -- 自我认知

  • 我在哪儿? -- 自我定位

  • 我要去哪儿? -- 目标规划

MFJJvuN.jpg!web

自我认知Self Awareness

自我认知指的是对自己的洞察和理解,包括自我观察和自我评价。好的自我认知,能清楚勾画出自己的性格、优点、弱点、潜能、思想、情绪和动机;做不到就容易成为别人口中的没有自知之明之人,而有些人终其一生确也无法认清自己。

自我认知会随着个人的阅历、思想、环境等不断变化,所以不是要求大家即可就看懂自己(当然也不可能),而是要掌握这项技能,让自己不断从中受益,所谓吾日三省吾身即是此意。自我认知严重影响着个人的成长、处事方式、情绪管理,比如: 看不到自己的优点就容易自卑,进而做事畏手畏脚;高估自己就容易傲慢,无法听取别人的意见而独断专行;内向型更适合主攻技术性事务,外向型更适合业务性事务,如此等等。

业界有不少可以对个人进行性格测试的方法论,也是一种自我认知的途径(不过更多的场景是Leader对团队,企业对员工的测试)。比如 MBTI职业性格测试,9型/16型人格测试,DISC性格测试,NASA 4D人格测试 ...

自我定位Self Positioning

自我定位相对于自我认知来说,多了一个锚定物。此锚可以是自身或者他人的技能、薪资、岗位、职级、性格甚至背景,以此来分析定位自己所处的位置,是初级能力还是高级能力,是业务开发还是架构开发,是不善言辞还是能说会道...

自我定位和自我认知可视作基本相似的评估行为,只是认知是相对抽象的评估,而定位需要给出相对具体的位置线。

目标规划Goal Planning

在没有认清自我的前提下设定的任何目标都是无源之水无本之木,那么目标一定是因人而异的。那么问题来了,现而今知识共享、知识付费的时代,知识可以是听来的、看来的,大家表面看起来都很上进,购买各种课程学习,目标都是成为懂业务、懂技术、懂产品、懂管理、懂投资的共产主义社会全方位发展的全能型人才,只是,这种快餐路径拿来的知识真的被你吸收了么?你应该持一下怀疑态度...另外,这种“形而上学”得到的知识我把它定义为“ 口腹知识 ”,就是只能用在聊天打屁时口若悬河滔滔不绝,落地实施时除了懵逼还是懵逼。区别于经过咀嚼消化后被充分吸收的“ 心脑知识 ”。

回归本文主题,要在模仿学习中找寻自我,必须思考、挑战、辨别、领悟,直到知识技能融入己身,为我所用。

DàYé自述:

当意识到初期的机械式模仿最多也就是把自己变成别人影子的那一刻,我开始思考如何逃离机械式模仿带来的快感舒适区。因为盲目效仿实在不需要付出额外的心力,只须跟紧步伐,不费吹灰之力就可以逼近甚至赶超模仿对象,多可怕的错觉。

为了跳出行为和思维的双盲区,我是如此行之:

$ 个人标签: 所有的模仿行为通过 思考改进,形成个人风格,打上个人标签 。简单如大家都写的注释,我一定是把时间、作者和备注说明用特殊符号拼接的行列分明、整整齐齐、强迫症般的赏心悦目,并没有为此多耗费什么时间却得到了不同的代码阅读体验和个人风格;同样是用IDE, 记住绝大部分的快捷键,引入更高效的插件,能高效辅助你达成目的的手段才能称其为 工具 ,否则只能算作 器具

$ 知其然知其所以然 :获得一项技能其实没什么了不起,闻道有先后罢了。技能是否真正掌握的评判标准很简单: 可以把这项技能轻松传授给别人 。别以为这个标准很简单。可以举重若轻把知识讲出来的人,绝对是吃透了背后原理机制的;反之当一个人讲的东西不够深刻浮于表面甚至闪烁其词,那他一定自己都是半吊子。

//等式判断时,先写常量,再写变量的写法很常见。

//到底有何好处呢?还是zhuangbility而已?

if ( 100 == score ) {

return "一等奖学金";

}

$ 思想边界 :或理解为 视野局限 ,一个人是无法想象甚至理解思想边界之外的世界的,这与努力程度无关。当日常工作的80%都是常态脑消耗(重复劳动),不需要启动全部脑力来思索创新,释放的信号就是你的思想边界将要停止延伸。所谓眼界决定一个人生的高度,而我的高度就是从脱离国企陈旧的体系和氛围,拥抱外企的自由开放文化开始的。

以防有人断章取义,需要解释下。我可没有表达外企就一定比国企高。不管国企到外企,还是外企到国企,都是边界的延伸。实际上,我那个年代,软件业的外企确实比国企整体上要正规和先进不少...

当时的外企对我来说就是最大的变化和可操作的最远边界,语言、文化、管理、种族、趋势、认证、体系等等对我来说都是新鲜的也是极具挑战的。面试外企前一年我是一直跟一位美国退休教师老大爷学口语的,入职第一个月仍旧是听的磕巴说的哑巴。幸好我的任务都有书面化的工作清单( 请不要怀疑我的英语书面考试能力...考试,我是优秀的 ),第一个月我完全没怎么说话交流,就纯闷头写代码交任务,因为质量好效率高得了当月的部门优秀...我特么第一次知道纯粹的代码能力也可以被如此重视,擅长什么就尽力安排你做什么,发挥出你最大的价值,那感觉太美妙了。

接下来我从外企回归到体制内就是另一个故事了。大比例的企业应用相比互联网应用,有太多的死板和陈旧,初衷是BAT一类的互联网公司,后来因缘际会得朋友推荐,加入了招行的掌上生活团队,对互联网的技术、业务和产品的玩法才真正有了完整的认识。

你看,我的从国企到外企再到国企,从企业应用到互联网应用,从程序员到架构师,我在不断拓展自己思想和视野的外延。促使我跳出框框的一个重要因素开始是薪水,后来发现是成长性和反脆弱性让我不断的做出转变。

$ 反脆弱性 :有一本叫做《反脆弱》(也是黑天鹅一书的作者)的书推荐给大家,里面的观点很是值得玩味。比如公务员相比出租车司机就是脆弱的,考虑公务员40岁失业,和司机40岁面对再就业时截然不同的处境。脆弱的反面不是坚韧,而是反脆弱。一个鸡蛋掉到地上,会碎,鸡蛋在这里是脆弱的;一个纸团掉到地上,不会破,纸团在这里只是坚韧的;一个乒乓球掉到地上,不仅不会碎还可以反弹起来,这个乒乓球就是有反脆弱性。 让变化和波动成为促生蜕变的动因 ,附上此书的一段简介:

  • 《反脆弱》

杀不死我的,使我更强大。

既然黑天鹅事件无法避免,

那就想办法从中获取最大利益。

每一件事情都会从波动得到利益或承受损失。

脆弱是指因为波动和不确定而承受损失。

反脆弱则是让自己避免这些损失,甚至因此获利。

$ 不耻下问 :所谓闻道有先后,在一个新的领域实行模仿学习的时候,模仿对象很可能比你小。这种时候一定要放下心里包袱,不能自卑轻易否定自己,更不能自大不屑于模仿求学。刚入掌上生活团队时,对于互联网应用的技术、组件、开源等了解并不全面,而同期入职的比我小的同事,却玩的贼溜,甚至在意识形态上我都感觉落后一个时代。此人江湖号称万真人,因为当时真有点高山仰止之感,让我想到了武学宗师张三丰,我给起的这个绰号深得大家认同也就很快传开了。最终幸好本人的反脆弱性还算强大,持续恶补、持续模仿学习,不然真差点整自闭了。

总结一下, 我“思”故我在,第二阶段就是破开框框,找到那个“真我”。

- "离"开一招一式 -

ARfaAzq.jpg!web《倚天屠龙记》截图

上图是张三丰教张无忌太极拳招式后的一句话:

你忘记所有招式,就可以练成太极拳了 。”

术和道的纷争软文已然烂大街,简单来说, 术谓之技术,道即为道理 。我们在长期的学习过程中,获得了大量“术”级别的能力,悟出的“道”却屈指可数。若我们花费大量的时间在技术的纯熟上,而没有沉淀下来领悟内在的运作机制和底层原理,这样是基本没可能练成太极拳的。

从无我到自我,进化成最终的 忘我 。忘我是一种态度,忘掉给自己带来虚妄成就感的“术”,进入悟“道”的超然境界。雄鹰经受击喙换羽之痛获得重生,即便它早以遨游九天为乐;王阳明格竹龙场悟道创立心学,直逼万物本源,即使之前他早已文武双全;诚然我们无法与圣人相提并论,但仿效其成圣之路,总有可达之处。

eqmqqy2.jpg!web

DàYé自述:

本人目前也在各种悟的过程中,混混沌沌间也无法给出具体的指导意见。要升级为高级别人才,勇于放下“固有成就”的包袱,补齐各维短板,潜心修习方可。说起来简单,悟起来真的不容易。

$ 以结果为导向 : 这是很多管理者挂在嘴边的一句话,但是执行者却甚少有理解到精髓的。

譬如

代码异常处都知道要打印 日志 ,除了基本的堆栈信息,业务线索数据也应该打印出来。评审的代码中大家是否经常可见下面示例的第一种写法。道理很简单,结果导向,你打印日志到底为了什么,是为了你单机调试用,还是为了多节点生产排障用?

logger.error("user login failed", e);

vs

logger.error("user " + userid + " login failed", e);

异步消息组件处理 消费失败 时,一般都有重试机制,对于重试理解的透彻程度可以部分反映你“结果导向”这个道的高度。不展开讲解就列几个问题大家自己去思索:

  • 该消息的消费处理逻辑是幂等的么?这决定是否可以重试;

  • 该消息消费失败后,是否有必要重试?有些消息体若必要参数缺失,你重试一万次也不可能成功;

  • 该消息消费最终失败,导致的数据不一致怎么处理?有人说在最终失败时再想办法把这个消息持久化存储在某个地方就可以了。

  • 结果导向的问题来了:持久化存储的数据,你会多久去看一次?有主动修复的机制么?如何保证时效性?

$ 设计模式 :设计模式是程序员必修的功课,从背诵到实践到领悟到灵活运行到大道至简。我曾经看到过一个不复杂的微服务系统,被设计的七零八落,这一个helper那一个resolver, 左一个decorator右一个visitor中一个factory, 第一眼看到这个系统就有想躲开的冲动。设计者觉得我能把这么多设计模式融合到一起,是多么了不起的一件事情。殊不知,设计模式就是一种方法论,在你抓耳挠腮不知道怎么组合代码的时候,给你一种思路罢了,你却用来装逼。设计模式绝对不是让你堆砌设计,更不是让你增加系统理解和维护的复杂度。我所崇尚设计的第一原则是简单易懂,能把复杂的事情简单化才叫本事,把简单的事情复杂化就是熊孩子。你想,那些伟人对世界领悟的得多么的透彻,才能将复杂的自然规律抽象为如此简单美妙的一个公式?

Bz2I3mU.jpg!web

$ 管理和领导 :从字面区分就很清楚,“管理”首先是个戴着竹帽子的“官”,“理”顺事情才能推动团队达成目标;“领导”则更多的是带领和指导团队,通过个人专业能力、人格魅力或者影响力来达成,不一定是权力。所以把自己定位好是管理者还是领导者,使用的方法论也不尽相同。我对自己的定位可能更多的是领导者,因为如果摒弃头衔给团队带来的权势压力,我仍能带领好团队,这才是我想要的团队氛围和协作模式。目前这块仍在悟,等沉淀到一定程度了再跟大家掰扯掰扯。

  • - 守破离 -

“守破离”源于禅学,兴于日本剑道,后被引入各类学科和理论工作中。模仿之道不好架空表述,遂以守破离为引直抒胸臆。本人也是从一名普通程序员一步一步的成长为管理者,其中辛酸同行之人应深有戚戚,而模仿不失为一把神锋利器,只是此招需要慎用,万不可走偏。

qemIfef.jpg!web

盼与君共成长

往期推荐:

……

关注本公众号,欢迎订阅。

技术琐话 

以分布式设计、架构、体系思想为基础,兼论研发相关的点点滴滴,不限于代码、质量体系和研发管理。本号由坐馆老司机技术团队维护。

byMnEn3.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK