36|能力维度一:如何提升结构化设计的能力?
郭东白
该思维导图由 AI 生成,仅供参考
你好, 我是郭东白。
上节课我们定义了架构师这个角色,也了解了架构师的五个成长阶段,分别是程序员、兼职架构师、跨域架构师、总架构师和 CTO。以及与这五个阶段分别对应的核心能力,即:结构化设计能力、解决横向问题的能力、解决跨域冲突的能力、正确技术决策和创造生存优势的能力。
从这节课开始,我们就来探讨一下从程序员到 CTO 的能力跃迁问题。在分析的过程中,我们会着重分析两个角色间的能力差异、面临的工作挑战,从现有能力到下一个能力所必须跨越的障碍,以及对应的跨越方法,最终帮助你规划自己的职业发展。
我们先来研究一下从程序员成长为架构师所必需的核心能力,也就是结构化设计的能力。
什么是结构化设计能力?
我跟很多资深的研发管理者、CTO 交流过,我们的一个共同观察是:一个缺乏结构化设计能力的程序员,永远都成不了好的架构师。
我先给出软件架构能力的定义,从中可以看出结构化设计能力的关键作用。软件架构能力指的是为相对复杂的场景定义并引导实施结构化软件方案的能力,其中结构化,代表这个软件在其设计范围内的设计理念、代码结构和实现方式上是同质的。
我用了“同质(Homogenous)”一词来形容结构化,指的是在设计范围内处处一致。与结构化(Structured)相反的是缺乏一致性,也就是说结构是混乱的(Chaotic)。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
程序员到CTO的能力跃迁问题是本文的核心主题。文章探讨了结构化设计能力在软件架构中的重要性,并提出了提升程序员结构化设计能力的实用建议。首先,强调了代码整洁性对结构化设计能力的重要性,包括编程规范、设计抽象和常见设计模式的掌握。其次,文章提到了设计模式的价值,以及问题域建模和服务API设计的重要性。作者还分享了个人经历,强调了习惯性地对软件结构进行反思的重要性。总的来说,本文通过深入探讨代码整洁性、设计模式、问题域建模和服务API设计等方面,为读者提供了提升结构化设计能力的实用建议,对于想要成为架构师的程序员具有重要的指导意义。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《郭东白的架构课》,新⼈⾸单¥68
《郭东白的架构课》,新⼈⾸单¥68
立即购买
登录 后留言
全部留言(8)
- 最新
- 精选
- 术子米德🤔☕️🤔☕️🤔 * 📖:结构化设计,如何提升? * 🤔:设计,只要不给别人看,自己总是无比满意,尤其是刚完成的时候,得意得不行。过几天来看,这都是啥,怎么这么奇怪。这时候,就会问自己,怎么没点结构感,都不知道怎么看起。如果拿给别人看,大概率对方很雾水一头,即使解释再三,还不如自己拿起马克笔,在白板上画起来,效果略好,但是依然会越画越乱,只能擦掉重来,这次先主要的,再针对某个点细化,先取对象名字,不能这个那个乱点兵。 * 🤔:回头想想,为何现场画的效果好一点,原因是有个时间顺序,那为何自己画图的时候,不提前加上时间轴的思考维度,包括在图上标注出序号,提示阅读人关注的顺序。结构化的时间维度,我就是这么实践并反思出来。 * 🤔:再想想看,为啥要整体再局部,才能好理解,为啥非得取个名字,才能讲得顺,这不就是在空间里,指着什么喊出名字,然后远看怎么样,走进看又如何嘛。结构化的空间维度,我也反思中顿悟。
作者回复: “设计,只要不给别人看,自己总是无比满意,” 太精辟了!
2022-05-238 - 花花大脸猫第三个问题:最大的阻力还是在于上层不care,别人3天,你要5天。。。。结果不骗人。短平快与结构化设计,在这一段至少对上而言。是劣势!对于只管业务的人来说,越快的结果越ok
作者回复: 很遗憾的是。 事实也的确是这样的。 我应该也属于你指的 “上层”。 不过我期望的是你投入3.5天, 做一个对结构性破坏性最小的设计。 这种额外的投入我认为从有巨大资源压力的上层来看也是理性的。
2022-12-29归属地:美国23 - 罗均东白老师的课程,总是可以给学生全新的技术视角,为学生们打开了更大的思考空间。 作业第三题,回顾写代码的历程,最大的障碍还是自身的认知局限。例如,有些场景command pattern与strategy pattern的选择,或者mediator pattern或subscription pattern的选择,在implementation过程中,因为自己的水平有限,没办法融汇贯通达到最优效果。也没有什么好的克服方法,就是多总结多实践(重构),更多地与业务方讨论深入理解业务——学生比较好,七八年前从类似产品的角色开始写代码。另外的“捷径”就是多向东白老师这样的顶级大牛学习,这节课的singleton案例,实在是“美妙”之极,至心感恩老师的课程! 要再尝试推荐老师的课程给一些朋友!
作者回复: 谢谢!
2022-05-183 - Michael老师有没有什么推荐的书?
作者回复: 我还真的一时想不出什么特别好的书籍。 我感觉有些非常大的开源软件的设计还不错, 可以从里面看到不错的封装的思想。 另外大公司内部的成功项目也不错,不知道你能不能接触到。 外面能看到的是AWS的设计, 也很好。 可以学习一下。
2022-06-1922 - spark郭老师,take away~~~结构性是一个结果,追求结构性是需要思考、路径,追求结构的思考需要系统性~~~ a.编程维度,面向对象、面向过程,设计原则,设计模式,代码规范(Google Java Format),重构~~~ b.思考维度,架构思维和结构的因果关系,架构思维是因,结构是果???计算机系统需要自顶向下设计,分治思维是关键,如何定义问题和拆解问题。递归思维是关键,如何确定递归调用的第一步,很关键。因为递归思维和分治思维会引导我们得到一个结构性的、多层网络状的、嵌套调用的模块关系~~~
作者回复: 谢谢总结!
2022-05-1722 - 罗杰第三个问题:在当前的公司干了五个年头了,当时加入的时候,整个后端就我一个人,整体后端架构的设计与客户端的交互都是我基本上是我在主导。说起来比较尴尬,我其实水平真的很一般,在做这些架构之前,也就三年的工作经验。追求结构化的过程其实是相当痛苦的,最开始最大的疑惑是怀疑自己是不是对的。但是随着需求的不断变化,你会发现真的多虑了,因为没有正确的设计。所有的设计都是 trade-off。在心理上解决了这个问题之后,接下来的问题就是别人的质疑了。首先正确表达自己的观点,其实多去学习。解决是不是自己视角太窄,别人的想法我们不能左右,尽可能去说服,有时候无法说服,只是因为该有设计理念我还没有内化。对于正确的理论,正确的观点,践行就好了。他人的埋怨与不解,我只能说:“求仁而得仁,有何怨”。
作者回复: 这个成长过程很赞!
2022-05-221 - Steven分享一个小例子:参与过的一个表单项目,临时组的这个团队成员在类命名,数据库表命名上,习惯采用的是拼音首字母的方式,比如【暂停人口-ZZRK】,当然一些简单的还是用英文。 一个原因是他们以前都是这么用的,另一个他们的英文也确实都比较差。 在这部分,我的要求就是必须要有中文注释/对照
作者回复: 哈哈哈, 我见过中英文混合的简写模式。 直接懵圈了。
2022-06-08 - softbaddog软件上结构化设计最大的好处就是可以不断演进,甚至推到从来。罗马不是一天建成的,需要不断地迭代优化再优化。当然很多时候演进是随着业务的调整而进行的,也没有必要过度使用设计模式,KISS,SOLID等架构原则更有用。2022-07-20
收起评论