最近有空闲的时候会在阿里藏金阁看书,偶然看到一本《阿里工程师的修养》,两眼放光,彷佛周星驰里面那个老伯对着一个拿着棒棒糖流鼻涕的小孩讲:我看你骨骼惊奇,我这里有本书适合你。
没错,我之前读过《穷查理宝典》,《好好思考》等书籍,深知思考的重要性,那么今天就走进去看下阿里的工程师是怎么自我修炼的。
所谓结构化思考,就是逻辑+思考能力,逻辑有什么顺序,前后顺序、时间顺序、空间顺序。思考能力有哪些维度呢?应该怎样思考?怎么样才是比较合理的?
书中给出的答案:不遗漏,我们可以将一个东西,横向穷尽,然后再针对一点进行纵向穷尽,这样我们就能够将大部分方面涉及到,思考到位。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LQscedp2-1657271299544)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1be92f0f2c3c401da73bead0f562c65c~tplv-k3u1fbpfcp-watermark.image?)]
比如说中心:如何描述好一件事?书中给出5个w2个h来叙述,who when where why what how how mach。
然后我们再从这几个方面纵向进行穷尽,那么我们就得到一个中心,很多细节,内容比较丰富,然后大家可以明白你在讲什么,有什么价值。
书中有一篇讲了工程师需要具备思想:产品、技术、工程 这三个思想。
产品思想
对应我们现实的产品经理,源于用户体验,用户使用便捷性,产品价值解决用户难点。
技术思维
作为开发者,就很好理解这个思想了,技术源于需求,不可能你自己yy一个技术方案出来,又不知道解决什么痛点。我们基于需求,思考解决方案,对应设计方案,架构上思考,还有未来的扩展性。
工程思维
原文的定义是工程即流程,工程思维来源于流程。怎么理解呢?比如说计算器,输入1+1,然后点等于号,他会输出2。整个流程有输入,有处理流程,有输出,是一个标准模式,可以扩展接入很多项目。
在产品上,我们刚刚进入一个岗位,最迫切要解决的自然是熟悉业务,书中提到几个方法,首先要个测试账户去走下主要流程,然后看下核心流程代码,以及主要的表结构,然后需要跟主要业务的干系人有所交流,这样能更快速地熟悉业务。
在技术上,职业规划是很重要的,这个怎么思考呢?首先从全局的角度看待,我们可以观察身边优秀的人,他具有什么品质,需要什么技能,当然这个技能不仅仅是硬技能(吃饭的本事),还有软技术,包括沟通能力、组织能力等等。然后是定目标,拆分成一个个小目标,就像马拉松一样,一个一个点,然后指向目标的位置,这样每完成一个小目标也会更有动力。最后是以终为始,通过计划来实现对应的目标。
在工程上,我觉得是很重要的一项技能,流程化,本身就是降本提效的一种思想,意味着之前的方法虽然能解决问题,但是存在不足,我们通过将这些繁琐的工作流程化之后,提高整个系统的效率。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cR3B1r3O-1657271299547)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1d38786799464734a0a2a7345fd542e0~tplv-k3u1fbpfcp-watermark.image?)]
在工程思想这个点,我讲下我自身的案例。
我经常需要接入内部的api,将数据丢给外部,在之前的方案我这边会进行落库操作,(PS:先不说方案上对不对),整个流程比较繁琐的,包括表sql语句,对内api对接,提供对外api。如果我们具有这个工程化思想,需要将重复的工作抽取出来,然后变成一种处理逻辑,然后提供输入,输出的标准。
在我实习那会是Struct+JSP,如果说我们只专注技术上,过几年就会被淘汰,所以需要持续的学习,以及总结其中的设计思想。谈到设计思想,我就要讲下DDD,你说这东西之前没有吧?之前有,只是没有一个概念去定义它,一套理论来支持它。这就是为什么很多开发者说DDD是个噱头。
但是你真的掌握了DDD了吗?
如果上来就是各种概念,我觉得是被绕进去了,没有理解精髓,最重要的思想就是高内聚低耦合,这个也符合设计思想:开闭原则。不管从防腐层,还是说充血模型,设配器,六边形模型,都在诠释着高内聚低耦合的思想。
所以设计思想是最重要的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9qc6q0TS-1657271299548)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cfc876d83af143ef943ba3b65e5c28ff~tplv-k3u1fbpfcp-watermark.image?)]
我们再看下 # TransmittableThreadLocal 解决线程池的思路:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-euT3kEIV-1657271299548)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7dde004263434934952fd7df01e4b445~tplv-k3u1fbpfcp-watermark.image?)]
如果我能拿到当前线程,又能拿到线程池里头的线程,还有什么我拿不到的?这就是设计思想!