在软件行业,抽象思维的重要性不言而喻。软件开发是一个高度复杂的脑力活动,而程序员经常需要面对五花八门的业务和处理错综复杂的逻辑。如果不具备强大的抽象思维能力,就无法将看似毫无关联的具象凝炼成概念,那么驾驭概念进行思考更是天方夜谭。无法通过抽象思维降低问题的复杂度,思考者们必然会身陷泥潭,无法自拔。而对于其他任何学科,抽象思维都是引领学科发展的基石。同样的在日常生活中,抽象思维充斥于社会的每个角落,推动着人类的不断发展,从而形成了现代社会的总体架构。那么到底什么是抽象思维,我们又该如何刻意地进行抽象思维练习呢?

抽象,简单理解就是提取特征。抽象思维就是正确提取特征的思考方法。意思很简单,但操作起来特别困难,因为特征太复杂了,可能看的见可能看不见,可能有一个可能数不清,可能是确定的可能是不确定的,可能是真的可能是假的,可能是单一的可能是耦合的。而对于复杂问题,最有效的方法就是分解。这里不得不提出一个概念:抽象级别

我们对一种事物抽象,往往不是一步达成的,而是分为多个级别进行抽象。举个结构工程师都了解的例子,现在要算一根H型钢的承载力。首先是第一级别的抽象,我们会从各式各样的钢结构厂房或者高层建筑中提取一根柱子模型,简化了约束条件和荷载工况并且保留了截面信息和材料属性进行分析,这就是钢结构设计原理中讲的内容。接着第二层抽象,我们去掉了截面信息,将型钢简化成一根线,通过约束条件和合理的假设,形成数学方程,这是结构稳定理论中讲的内容。然后是第三级别的抽象,求解微分方程,变成了纯数学问题,这是高等数学中讲内容。事实上,所有的经典力学问题都可以抽象为微分方程的求解问题,因为它们的本质都是物体关于空间和时间变化的函数。

通过对问题的分级别抽象建模,一步步剔除掉我们不关心的特征,保留会产生较大影响的特征,将复杂问题进行逐层分解,逐层抽象,最终达到解决问题的目的。这种解决问题的方法也是符合人脑的一种工作模式-人的大脑在处理同一层级的问题上效率是最高的。如果在抽象层级较低的层面上思考时突然跳到级别较高的层面,细节工作很容易出现疏漏;而一旦在高层级中掺插低层级的思考活动,大方向就容易被带偏,并且深陷其中不能自拔。

对于分级别的抽象,方式并不是唯一的,可以自上而下,也可以自下而上,要根据不同的情况分别考虑。在对整个问题有了清晰的宏观思考后,可以自上而下地将问题分解,逐层深入到细节中去。而对于那些根本无法下手的问题,可以试着从下而上的思路,先从细节入手,做到一定程度在逐层向上抽象,最终看到整个问题的本质所在。

虽然抽象级别越高,越接近事物的本质,规律的适用面也越广,但它带来的负面效应也是显而易见的:不容易理解,难以真正利用。不过这是可以解决的难题,原则就是抽象层级不能跳跃。几乎每一个你不能理解的抽象概念都是因为你没有无层级跳跃地去将概念推演一遍。所以抽象级别特别重要。

在我们学习工作和生活中,到处都是看不见的抽象级别。数学中,实数运算是对现实的抽象,代数运算是对实数运算的抽象,抽象代数又是对代数的抽象;国家方针政策是对整个国家运行发展的抽象,国家级政府职能部门对方针政策进行具象,省级政府职能部门对上级指示进行具象,市级县级依序进行…现实就从这样一个混沌的状态,不断输入负熵,通过抽象分级变得有序起来。

然而对于大量从事设计的普通工程师而言,每天面临的工作,确是相当具体的。屋面层次如何构造,剪力墙中钢筋应该如何布置,水电综合如何走线,天花吊顶如何摆放乃至外墙挂板如何裁切等等一系列非常具体的问题,充斥着工程师的日常,很难让他们从中跳出来,进行抽象层面的思考。常此以往,很容易僵化思维,以至无法处理过于复杂的问题,看到事物的本质。

要提升自己的抽象思维能力,刻意的练习是必不可少的。最有效的办法就是写程序,因为编程中抽象思维运用的极为普遍,编程就是把现实问题转化为机器问题,这一过程就必须将问题抽象为概念模型,进而写成代码。然后就是多做定义,对事物进行描述,因为语言本身就是一种低层次的抽象。

对问题进行抽象,只是程序员写程序的第一步,紧接着的就是对问题的解耦,重构等等,对思维模式的影响也是巨大的,当然这是第二弹要讨论的问题,敬请关注。

抽象思维-程序员系列第一弹相关推荐

  1. 漫谈程序员系列 请区别对待女程序员

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 写下这个 ...

  2. 漫谈程序员系列:怎样成为技术达人

    作为程序员,身边总是有牛逼的前辈.后辈或者同辈.牛逼的人总是让人羡慕.比如自己苦搞一天的 BUG ,头发快抓掉完了,人家扫上两眼,改一行代码,问题就解决了:比如自己干了十年开发,薪水还不到 10K , ...

  3. 漫谈程序员系列:怎么告别“混日子”

    我在"漫谈程序员系列:咦,你也在混日子啊"一文中描述了一种混日子的现状,有朋友说该文只提到了设置目标告别混日子而没有展开论述"如何设立目标"."怎样为 ...

  4. 漫谈程序员系列 怎么告别 混日子

    我在"漫谈程序员系列:咦,你也在混日子啊"一文中描述了一种混日子的现状,有朋友说该文只提到了设置目标告别混日子而没有展开论述"如何设立目标"."怎样为 ...

  5. 【转】漫谈程序员系列 看看你离优秀有多远

    转自:https://blog.csdn.net/foruok/article/details/40075201 分享一下我老师大神的人工智能教程!零基础,通俗易懂!https://www.capta ...

  6. 漫谈程序员系列 看看你离优秀有多远

    前段时间(大概是8月份吧)我终于拿到了驾照,科目一.科目二.科目三.科目四都是一次性过的,没有给教练塞钱也没有给教练递烟.考科目三(路考)时,有个女生没能通过还被陪考员讽刺,伤心地哭了,梨花带雨让人心 ...

  7. 2023春节祝福系列第一弹(下)(放飞祈福孔明灯,祝福大家身体健康)(附完整源代码及资源免费下载)

    2023春节祝福系列第一弹(下) (放飞祈福孔明灯,祝福大家身体健康) (附完整源代码及资源免费下载) 目录 四.画一朵真实的祥云 (1).画一个渐变的白色径向渐变背景 (2).应用一个SVG feT ...

  8. 漫谈程序员系列:任性,春节前辞职

    有些公司会在春节前释放岗位出来,不过说实在的,春节前招人有一些困难,你会发现大部分人的答复都是说要春节后再考虑.这也可以理解,辛辛苦苦干了一年了,拿到年终奖再说吧,年底加薪结果出来再说吧.大部分程序员 ...

  9. 漫谈程序员系列:3D打印能打印出程序猿吗

    首先声明,本文是一本正经的胡扯,绝不是随随便便的胡扯,请您不要随便攻击我胡说八道,我要重复星爷在<喜剧之王>里的台词:其实,我是一本正经的喷子. 3D打印的定义 关于3D打印,下面是来自百 ...

最新文章

  1. golang mysql 超时_golang中mysql建立连接超时时间timeout 测试
  2. Tarjan算法_LCA
  3. ios微信支付失败 php,iOS 微信支付疑难杂症。
  4. .net 流(Stream) - 文件流、内存流、网络流
  5. Linux下的图形库curses写贪吃蛇,酷
  6. Python中的实用小技巧,可以省下不是事情,喜欢记得收下
  7. spring 通过id 查询数据_Spring 数据初始 H2 后进行数据查询提示 Schema not found 错误...
  8. linux 查看tdagent进程,Zabbix监控记录linux服务器近期的登录情况
  9. WEB架构师成长之路-摘录
  10. armv6、armv7、armv7s、arm64 与开发静态库(.a)
  11. 华为性格测试 我就这麽水过的 好水
  12. 修改sublimeText 文件目录窗口样式
  13. 上午在改BUG,下午就通知被裁了
  14. SLF4J--日志门面担当
  15. 欢迎来到全民口罩自制时代!
  16. 离散数学第二版计算机系,离散数学 第2版
  17. 计算机网络的速率怎么计算,宽带速率对照表和计算方法
  18. 拼多多蓝海词数据分析:如何优化拼多多关键词?拼多多标题关键词优化方法。
  19. 朴素贝叶斯分类(Python)
  20. NodeJS 安装及环境配置-Win10

热门文章

  1. 酷宇宙观点:进军“元宇宙”将是加密行业熊市里最大的机会
  2. 生成式对抗网络(Generative Adversarial Networks,GANs)
  3. ORA-03113----解决方法之一
  4. Omnibus F4V3 Pro飞控,APM飞控显示电池电压电流
  5. JS中字符串常用方法总结
  6. python定义静态变量_Python 中类的静态变量怎么理解
  7. 《C#妹妹和Objective-C阿姨对话录》(04)垃圾回收基础--拆迁队那点事
  8. Spring-Core 中文翻译+总结文档(下)
  9. 使用JIEBA和Snownlp工具包解决文本摘要问题
  10. jquery表单form提交阻止页面全部刷新