美文网首页
语言表达与软件设计

语言表达与软件设计

作者: 卓_然 | 来源:发表于2021-07-11 20:50 被阅读0次

最近开始看<<金字塔原理>>,这是一本讲语言表达的书,介绍了一种能清晰地展现思路的高效方法,能够训练思考、使表达呈现逻辑性。金字塔原理能将零散的观点有序组织起来,化繁为简,适合所有需要精进思考、分析、表达能力的读者,感兴趣的或者是和我一样语言表达能力需要进步的可以看看.

封面
之所以把这门书和软件设计相提并论,是因为我感觉这本书的一些观点和软件设计颇为相似,可以相互启发,这本书讲语言表达,而软件就是用编程语言来表达逻辑,只不过不同编程语言的语法不同,并且我认为编程语言的语法难度甚至要低于汉语,英语等自然语言,所以,从某种意义上来说写好代码甚至比说好汉语更为简单,好的软件设计和好的语言表达一样,应该言简意赅,一目了然.下面截取文章的部分章节描述对软件设计的启发.

归类分组,将思想组织成金字塔

大脑会自动将发现的所有事物以某种秩序组织起来.基本上,大脑会认为同时发生的任何事物之间都存在某种关联

文中举了多个例子来说明人脑具有对事物进行归类组织的特点,将语言表达进行好的归类便于大脑进行更好的理解,程序也是如此,各种架构各种分层的提出,便是面对共性业务问题的一种归类分组,便于程序员更好的理解软件逻辑,例如最常见的mvc架构,<<实现领域驱动设计>>提出的六边形架构,架构整洁之道提出的整洁架构,Software Architecture Patterns提到的分层架构,事件驱动架构等多种架构,皆是对共性问题的归类分组.

奇妙的数字"7"

米勒认为,大脑的短期记忆无法一次容纳约7个以上的记忆项目.有的人可能一次能记住9个项目,而有的人则能记住5个.....当大脑发现需要处理的项目超过4个或5个时,就会开始将其归类到不同的逻辑范畴中,以便于记忆.

对于软件来讲就是一个函数内的知识点或者说代码行数不要过多,当行数较多时,脑子要有意识的去想是否要对该段代码进行适当抽象归类,虽然7行有点极端,但也不要超过20行代码,熊节老师说过它的代码一般不会超过5行......

自上而下思考,总结概括

金子塔中的思想以3中方式互相关联---向上,向下和横向.位于一组思想的上一个层次的思想是对这一组思想的概括,这一组思想则是对其上一层次的解释和支持.
文章中的思想必须符合以下规则:
1.纵向:文章中任一层次上的思想必须是下一层次思想的概括.
2.横向:每组中的思想必须属于统一逻辑范畴.
3.横向:每组中的思想必须按照逻辑顺序组织.

"两横一纵"是金子塔中的核心思想,软件设计也是如此.

纵向

纵向关系是指文章中任一层次上的思想必须是下一层次思想的概括.软件设计也是如此,例如我们每抽象出一个函数,这个函数必须是对该函数实现的总结概括,例如我们抽象出一个函数叫做initUi(初始化界面),那么该函数的实现必须是Ui相关组件的初始化,而不能包含Ui以外的组件.

横向1

横向关系是指每组中的思想必须属于统一逻辑范畴,<<代码大全>>也通过"形成一致的抽象"来表达相同的意思,例如我们要用代码表达一段业务逻辑,那么该逻辑中用到的类名和函数名应该具有业务含义,而不是把sql语句,报文格式等实现层面的语言放到该段业务逻辑中.在例如我们要实现打开泵组功能,对应到业务逻辑应该是类似于pump.open()这种描述,而不是弄一堆发送报文的逻辑在里面(泵组打开是通过发送报文实现的).

横向2

横向关系是指每组中的思想必须按照逻辑顺序组织.书中提到的组织思想包含4中顺序分别是,

  • 演绎顺序:大前提,小前提,结论
  • 时间顺序:第一,第二,第三
  • 结构顺序:波士顿,纽约,华盛顿
  • 程度顺序:最重要,次重要,等等

本文大概是结构顺序吧,当然对于软件设计来说只用到了时间顺序,软件本质是个图灵机,按照cpu时钟有条不紊的运行.

最后

先写这么多,这本书我还没看完,所截取的部分思想不到全书的1/10,感兴趣的同学还是建议读一下该书.最后在强调一下好的软件设计和好的语言表达一样,应该言简意赅,一目了然,当你不知道自己的设计是否优劣时,把自己的设计用语言描述出来,如果语言简单,逻辑清晰,那么这个设计多半就是好设计了.最后在分享一下熊节老师关于好设计的一个描述,本人深以为然.

我的point是,大多数时候,只要知道什么时候应该增加对象,怎么给对象和函数命名,数据应该放在哪里,设计就已经足够了

最后的最后

推荐一些书和课程,希望对新员工有帮助
重构
Head First 设计模式
程序员修炼之道
代码整洁之道
架构整洁之道
敏捷软件开发
企业应用架构模式
Microsoft NET 企业级应用架构设计
10x程序员工作法
软件设计之美
代码之丑
如何落地业务建模
领域驱动设计实践

相关文章

网友评论

      本文标题:语言表达与软件设计

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