从编程思想到软件开发和设计能力培养


从编程思想到软件开发和设计能力培养文章插图
【从编程思想到软件开发和设计能力培养】在和开发团队沟通的时候 , 经常会谈到开发人员要逐步提升软件设计能力 , 而实际上我们整个软件编码和设计的过程往往并没有严格拆分 , 那么软件编码和设计究竟有哪些区别?或者说如何从软件编码阶段逐步提升自己的软件能力能力?
在前面我专门谈过软件架构设计方面的文章 , 因此今天重点主要是谈软件设计和编码 , 整个内容主要从如下几个方面来谈 。
1.从软件开发编程思想说起
2.基于一个业务场景谈软件编码和设计
3.从编码到设计 , 从设计到架构
从软件编程思想说起
从编程思想到软件开发和设计能力培养文章插图
在前面的文章里面有不少谈到通用性思维 , 分析和解决问题思维 , SOA思想 , 面向对象思维等方面的文章 。 实际上可以看到里面很多内容是互通的 , 因此今天谈下编程思维 。
编程的过程是对现实世界的抽象
谈编程不可避免的要谈到编程语言 , 而编程语言之所以出现 , 其最终的目的仍然是提供一种抽象方法来解决现实中的问题 , 问题本身的复杂程度往往取决于抽象的种类和质量 。 从汇编语言的出现解决了最初的抽象 , 而类似c或fortran语言出现则可以看做是对汇编语言的进一步抽象 。 这一步抽象的完成其实是很重要的一 个进步 , 既我们在解决问题的时候不再需要关系复杂的机器模型或机器码 , 而是可以更多的关注问题和解决方案本身 。
算法+数据结构
从编程思想到软件开发和设计能力培养文章插图
在这个阶段 , 从编程本身来说最核心的还是算法和数据结构 。 这也是任何程序最重要的两个基本要素 。 既把问题域本身涉及到的数据映射到合适的数据结构 , 把通过 程序解决问题的过程映射为具体的算法逻辑 。
那么编程实际的难点在哪?
不是算法本身或数据结构本身 , 而是当你拿到问题域的时候知道如何理解和分解问题 , 并将其映射到最适合的算法或数据结构上 。 这个映射其实本身不是程序解决的问题 , 还是人脑在思维 , 程序本身仅仅是在实现自动化的过程 。
那么程序在算法实现过程中最基本的是什么?
我们看不同的程序片段可以看到的还是if/else , 或者for/while , 然后才是数据或数据类型定义 。 而 前者即写任何一个程序中最重要的控制逻辑 。 那么编程里难的实际上不是控制语句本身 , 而是在把问题域分解后知道如何理解判断逻辑 , 如何将问题域中重复的东西抽象为循环 , 如何从问题域中抽象出数据结构 。 一个人编程能力本身的好坏 , 或者说编程思维能力 , 重点其实是体现在这种映射能力 , 也可以称这种映射能力为数学 建模能力 。
举个例子来说 , 如果一个问题你已经知道了可以映射到构建二叉树 , 然后通过遍历的方式来解决了 , 那么可以说然后一个掌握了语言语法的人都可以写出程序来 。 那么实际编程思维或能力的强弱则在于前面谈到的映射和建模 。
面向对象思想是最容易理解的现实抽象
从编程思想到软件开发和设计能力培养文章插图
面向对象思想和面向对象编程语言的出现 , 可以说也是编程思维本身的第二次重大提升 。 既原有的编程语言可以看到我们关注更多的已经是抽象后的解决方案 , 而面向对象的编程语言则首先关注的是通过对象和类 , 通过继承 , 通过接口定义等首先对现实世界进行很好的抽象描述 , 其次才是如何去解决问题 。 现实世界中所有的一 切都是对象 , 而面向对象语言中的类本身就是对现实世界中对象的很好的抽象 。