抽象能力决定编程能力

作者: 程序之心 | 来源:发表于2017-05-25 12:32 被阅读856次

程序员的抽象能力是在了解计算机工作原理的基础上,借助于一种或多种编程语言将问题的解决方案抽象为计算机程序的能力。在前文《关于编程能力的思考》中提到了编程能力包括理论基础和系统设计能力,抽象思维能力恰恰就是决定编程能力的关键。

程序的本质是人的意志延伸到计算机的可识别的指令。计算机思维简单仅能识别 0 1 代码,本身不能解决任何问题,只能由人编写程序控制计算机解决问题,因此编程的本质就是人“教会”计算机解决问题。

编写程序总是离不开各种各样的数据结构与算法,其中又蕴含着深刻的数学思想。理解一种数据结构或算法,就是在理解解决方案的一种抽象。

随着业务越来越复杂、需求越来越多,程序总是在扩展和重构之间徘徊,在这个过程中,需要程序员深入理解业务并逐渐优化系统设计。正是在这样逐渐抽象的过程中,诞生了开发框架、中间件和业务框架。有着良好抽象能力的程序员能够根据业务的特点抽象出软件最合理的设计,使得程序具有良好的可读性、性能、扩展性、伸缩性、可用性和可靠性,而抽象能力差的程序员面对复杂的业务逻辑很可能束手无策导致代码臃肿难以维护。

如何提高编程的抽象思维能力,或者抽象能力又具体体现在哪些方面呢?作者认为有三个方面可以参考:善用自顶向下逐层分解的程序设计思想、熟练使用设计模式和对代码进行必要的重构。这三个方面能够体现出优秀程序员的抽象思维能力。

1、善用自顶向下、逐层分解的程序设计思想:

无论阅读或编写什么样的程序,都要始终坚持自顶向下、逐层分解。无论配置多少个显示器,打开多少个编辑器,都不可能一次展示出所有的代码,在阅读或编程时,始终把思维控制在一个屏幕范围内,看不到的代码都当做是黑盒,用抽象的思维去理解代码。小系统总是容易理解,大系统则很难一次把解决方案装入大脑,越大的系统越需要在设计和理解时进行抽象。

2、熟练使用设计模式:

设计模式是程序抽象到一定层次后自然而然产生的多种模式。基于这些模式,可以更好地理解和交流程序的架构和设计,是软件开发的成熟套路。设计模式是面向对象软件能够复用的基础,用好设计模式能培养程序员的抽象思维能力。

3、对代码进行必要的重构:

重构可以改善既有代码的设计,消除代码中的坏味道。任何一段代码都应该经历三个阶段,最初的设计阶段追求多快好省地解决问题,后来的设计优化用于扩展程序的新需求和解决 bug,最后的重构则把重点放在系统设计的优化上。重构是培养抽象能力的好方法,如何用更好的抽象模型描述解决方案以实现更好的扩展性、伸缩性、可用性、可靠性值得每个人深思。

每周 3 篇学习笔记或技术总结,面向有一定基础的 Java 程序员,内容涉及 Java 进阶、虚拟机、MySQL、NoSQL、分布式计算、开源框架等多个领域。关注作者或微信公众号 backend-develop 第一时间获取最新内容。

相关文章

  • 抽象能力决定编程能力

    程序员的抽象能力是在了解计算机工作原理的基础上,借助于一种或多种编程语言将问题的解决方案抽象为计算机程序的能力。在...

  • 可扩展架构模式

    可扩展架构模式框架(编排能力、配置能力、插件机制),模板(场景化、可编程、动态装载),原子能力(能力抽象封装、高可复用)

  • 抽象能力

    抽象能力对于编程非常重要,数学就是一直用来训练这种抽象能力,从数字到微积分、概率统计和离散,从小学到大学这种训练一...

  • 抽象能力

    小的时候,爸爸妈妈教我们认识世界,会告诉我们说,“你看,这是梨子 这是苹果,那是香蕉”,等过一段时间,家长会说,...

  • 抽象能力

    这些天看《逆向管理》,里面谈到很多实践,其实就是我本能在做的,可是却没有意识到的。 比如谈到要建立自外而内的思维方...

  • 抽象能力

    一 抽象 世界是复杂的,复杂到我们大脑反应不过来,所以进化出来一个很重要的能力就是抽象。 记得在一个小品节目中看到...

  • 前端思考

    编程语言 编程思想 编程能力 学习能力

  • 《创造性思维十一讲》摘录5

    1、想象力是什么:“在联想学习法中,我们把决定联想性质的东西称为思维能力、分析能力、抽象能力、概括能力和推论及推断...

  • 得意而忘言

    头脑收集信息太多,就会无法取舍。写作能力是思维能力的体现,理性思维,抽象思维,归纳概括能力,决定着思想的深度和内涵...

  • 抽象的能力

    最近在做一个改造的项目,过程中感觉很费劲,在以前的基础上进行修修补补,很是费劲,自己怕时间不足,不想进行大的重构,...

网友评论

本文标题:抽象能力决定编程能力

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