编程思维是一种什么思维?

news2025/1/12 8:41:40

hello wordl!
   keep coding!🏃

学编程不是将来要当程序猿,而是在学习编程思维。比尔盖茨、扎克伯格、乔布斯用经验告诉我们,拥有编程思维的人,就相当于成功了一半——不但逻辑清晰心思缜密,而且解决问题能力、管理能力也非一般人可比。但什么是编程思维呢?

编程思维

编程思维是解决问题的算法加代码实现的过程的集合,编程思维有两个组成部分,一部分是算法设计,另一部分是代码实现。

问题拆解

编程思维的核心,不是编程语言,也不是语法,甚至不是算法或数据结构本身,而是如何分解问题,从中发现规律,建立解决问题的模型,并映射到合适的数据结构和算法上,然后才能根据算法写程序实现。

比如吃一个大西瓜时,一口肯定吃不掉,这时就会把它切成一块一块的,或是用勺子一口一口吃。这就是把一个问题拆分再逐个解决的过程。

而编程的过程,就是把复杂和庞大的问题“自下而上,逐步拆解,直至理顺”。这种思维在学习和生活中叫“分解思维”。

在做数学题时也是一样的道理,解答一道复杂的大题通常需要把它 拆分 成多个部分,通过套用多个公式不断解决每个部分最后再汇总。这也是学编程的人通常数学成绩不会太差的原因。

具备这种思维的人,做事情是有条不紊并且有耐心的,即便面对一道有挑战的数学题,也能列出清晰的解题步骤,清楚的知道自己每一步的进展,而不是遇到难题时脑子里一团乱麻。

运用抽象

想象一下房子的形象,一般人的想象中它可能是这样的

在这里插入图片描述

但在建造师的想象中,它可能是这样的

在这里插入图片描述

建筑师想象中的房子,具体到了房子内部的具体架构和材料,每一面墙、每一扇门窗应该如何更精巧地设置。

抽象级别越高,则越接近事物的本质,规律的适用面也越广。编程的世界里,就包含“子系统、模块、包、类、方法和语句”等不同层级的抽象。

模式识别

模式识别是“ 如何发现相似的模式并有效地解决细分问题 ”,在编程中,经常提到调用、函数调用、模块调用等,其过程就是将重复的单元整合起来,直接使用,避免复杂和重复的任务,有规律的融入。

算法逻辑思维

算法设计,就是根据问题拆解去设计一步一步的具体解决路径(尽可能优算法),从而解决整个问题。
在具体解决问题的过程中,较关键的能力有两个 —— “逻辑思维”和“调试纠错”。

逻辑思维

说逻辑思维经常说的一个笑话是,程序员老公买10个包子,如果遇到卖西瓜的,就买1个,结果就是老公只买了1个包子,原因是因为遇到了卖西瓜的。

这其实是很典型的逻辑思维。逻辑思维中有个很重要的原则叫 MECE(Mutually Exclusive and Collectively Exhaustive),意思就是“相互排斥且整体完备”,也就是“不重复,不遗漏”。

编程里,只有对与错,没有模糊值。在程序运行的过程中,只要较终的结果与期望不符合,就证明算法中肯定有错漏。

调试纠错能力

但程序中的bug常常不是一下就能找到的,需要把程序的运行顺序一步步地跟走一遍,同时观察每一步的运行结果。这就需要很多的耐心、观察力和专注力,对孩子的抗挫能力也是一种磨练。

为啥的人总在进步?就是因为他们懂得“回溯、调试、纠错”,不断进行自我优化和成长,不断be better。

什么是对象

对象是一个 抽象 的概念,世间万物都可以化为一个对象,首先无论是人还是物都会有一个名字,这个可以用对象名称(class name)表示;无论是人还是物都会有很多特征(属性),这个可以用对象属性(class property)表示;人或物会有一些能力,可以做一些事情,这个可以用对象方法(class method)表示;那么对象名称、对象属性、对象方法就是一个对象的三要素,对象实例(instance)化之后就可以描述一个具体的人或物,每个人的人体构造都是一样的,但是每个人的性格是千差万别的,长相也是不尽相同的,这些特性和对象实例是一模一样的。

面向过程和面向对象

面向过程与面向对象都是编程中编写程序的一种 思维方式

面向过程:把事情拆分成几个步骤(相当于拆分成一个个的方法和数据),然后按照一定的顺序执行。

面向对象:面向对象会把事物抽象成对象的概念,先抽象出对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法。

1. 生活举例:用洗衣机洗衣服,来看一下两者的差别。

面向过程:

放衣服(方法)=》加洗衣粉(方法)=》 加水(方法)=》 漂洗(方法)=》 清洗(方法)=》 甩干(方法)

面向对象:

new 出两个对象 ”人“ 和 ”洗衣机“

”人“ 加入属性和方法:放衣服(方法)、加洗衣粉(方法)、加水(方法)

”洗衣机“ 加入属性和方法:漂洗(方法)、清洗(方法)、甩干(方法)

然后执行:

人.放衣服(方法)=》 人.加洗衣粉(方法)=》 人.加水(方法)=》 洗衣机.漂洗(方法)=》 洗衣机.清洗(方法)=》 洗衣机.甩干(方法)

2. 生活举例:打扫卫生

面向过程:

遇到一件事时,思考“我该怎么做”,然后一步步实现的过程。

家里打扫卫生(擦玻璃、扫地、拖地、倒垃圾等),按照面向过程的程序设计方式会思考“打扫卫生我该怎么做,然后一件件的完成”,最后把家里卫生打扫干净了。

面向对象:

遇到一件事时,思考“我该让谁来做”,然后那个“谁”就是对象,他要怎么做这件事是他自己的事,反正最后一群对象合力能把事就好就行了。

家里打扫卫生(擦玻璃、扫地、拖地、倒垃圾等),按照面向对象的程序设计方式会思考“我该让谁来做,如小明擦玻璃、让小丽扫地、让小郭拖地、让小强倒垃圾等”,这里的“小明、小丽、小郭、小强”就是对象,他们要打扫卫生,怎么打扫是他们自己的事,反正最后一群对象合力把卫生打扫干净了。

优缺点对比

面向过程:

优点: 效率高,因为不需要实例化对象。

缺点: 耦合度高,扩展性差,不易维护(例如:每个步骤都要有,不然就不行)

面向对象:

优点: 耦合低(易复用),扩展性强,易维护,由于面向对象有封装、继承、多态性的特点,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。

缺点: 效率比面向过程低。

面向对象三大特征

封装

封装是面向对象编程的核心思想,简单点说就是,我把某些东西封装起来,这些关键的核心的东西不能给你看,但是我可以提供给你一些简单使用的方法。

就说现在最最常用的手机,人人都会用,打电话、发短信、玩游戏、刷视频等等,但你知道手机怎么实现这些功能的吗??不知道吧,我们会用就可以了,怎么实现的对我们来说不重要。那这就很类似封装的理念了。

封装其实是对外隐藏复杂细节,提供简单易用的接口。在Java中这种隐藏或公开是通过权限修饰符来实现

  • 通过封装,我们可以保护代码被破坏,提高数据安全性。
  • 通过封装,我们提高了代码的复用性(有些方法、类在很多地方都能多次反复使用)。
  • 通过封装,带来的高内聚和低耦合,使用不同对象、不同模块之间能更好的协同。

继承

派生类(子类)可以继承基类(父类)的方法,我们可以将多个类 共有 的方法提取到父类当中,这样子类仅需继承父类而不必实现每个方法。

在这里插入图片描述

在现实世界中也有很多例子的。例如:父亲很有钱,儿子可以继承父亲的产业,也可以有钱。家鸡和野鸡都属于鸡这个类别,那么它们肯定也都有鸡所属的共同特征

多态

多态是同一个行为具有多个不同表现形式或形态的能力。指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。

在这里插入图片描述

例如上边的图片,我们平常把它叫做家养的猫🐱,同时它也属于猫科动物,我们又可以把它叫做有生命的动物。即在不同时刻有多种表现形态。

再举个栗子,你的女盆友让你买点 水果 回来,不管买回来的是苹果还是西瓜,只要是水果就行,因为不管是苹果还是西瓜都属于水果,这个就是生活中多态的体现。


上边介绍了这么多,其实每个人的理解可能都有偏差,主要我们还是要在平时的工作实践当中多思考、多总结。行成于思 愿我们终能守得云开见月明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue + el-checkbox 单选功能

需求: 用 el-checkboc 实现单选功能并且当选中某一项时则回填到input框里,当点击 enter 键或者是 按下搜索图标按键,来实现页面搜索内容的同步展示;如图: <el-checkbox-group placeholder"请选择"size"small"v-model"checkedCols"clearablefi…

Android BLE HIDS Data ,从问询DB 到写入Android 节点的flow之二

问题点4&#xff1a;Android BLE具体连接flow 并问询DB的API flow 之第一阶段问询&#xff1b; 当前确认原生BT当作为GATT Client 连接上GATT Server时&#xff0c;在连接上后会有自动启动问询的动作(以下Tracing 基于Android 9(P), 测试 8.1的代码和Android 8.0有差异&#x…

Web大学生网页作业成品——抗击疫情网站设计与实现(HTML+CSS)实训素材

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 击疫情致敬逆行者感人类题材 | 致敬逆行者网页设计作品 | 大学生抗疫感动专题网页设计作业模板 | 等网站的设计与制作 | HTML期末大学生网页设计作业 …

第3阶段-运维线上实战-3.2企业级nginx使用

企业级nginx使用 nginx实现平滑升级 [rootlnmp nginx-1.16.0]# cd /usr/local/nginx/sbin/ [rootlnmp sbin]# ls nginx nginx.old [rootlnmp sbin]# ./nginx -v nginx version: nginx/1.16.0 [rootlnmp sbin]# ./nginx.old -v nginx version: nginx/1.14.2 [rootlnmp sbin]#操…

【Spring】Spring的AspectJ的AOP

Spring学习笔记(10)Spring的AspectJ的AOP 在Spring中使用AspectJ实现AOP AspectJ 是一个面向切面的框架&#xff0c; 它扩展了 Java 语言。 AspectJ 定义了 AOP 语法所以它有一个专门的编译器用来生成遵守 Java 字节编码规范的 Class 文件。AspectJ 是一个基于 Java 语言的 A…

[附源码]java毕业设计双学位在线考试系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

01-mysql基础

MySQL基础 今日目标&#xff1a; 完成MySQL的安装及登陆基本操作能通过SQL对数据库进行CRUD能通过SQL对表进行CRUD能通过SQL对数据进行CRUD 1&#xff0c;数据库相关概念 以前我们做系统&#xff0c;数据持久化的存储采用的是文件存储。存储到文件中可以达到系统关闭数据不会…

[附源码]SSM计算机毕业设计远程教育系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Springboot项目集成Swagger3.0

目录一&#xff0c;Swagger简介二&#xff0c;集成Swagger1&#xff0c;引依赖2&#xff0c;写配置3&#xff0c;配置说明3.1&#xff0c;暴露接口3.2&#xff0c;补充信息4&#xff0c;加注解注解说明三&#xff0c;测试一&#xff0c;Swagger简介 开发时经常会出现下面这种情…

【Redis从入门到进阶】第 1 讲:Redis的五大基本数据类型

本文已收录于专栏&#x1f345;《Redis从入门到进阶》&#x1f345;专栏前言 本专栏开启&#xff0c;目的在于帮助大家更好的掌握学习Redis&#xff0c;同时也是为了记录我自己学习Redis的过程&#xff0c;将会从基础的数据类型开始记录&#xff0c;直到一些更多的应用&#xf…

《十八》JS 中的错误处理

error 对象&#xff1a; error 对象是当错误发生时提供错误信息的 JS 内置对象。 当错误发生时&#xff0c;浏览器会生成 error 对象并抛出&#xff0c;并且中断后面代码的执行。 console.log(person.name) console.log(不会被执行到)也可以通过 Error() 构造函数自定义 err…

使用Resnet网络对人脸图像分类识别出男女性别(包含数据集制作+训练+测试)

文章目录前言一、数据预处理1.分类数据存放2.生成train.txt与val.txt二、更改配置文件1.自定义修改三、定义resnet网络四、train.py训练五、预测predict.py实现六、预测结果七、完整项目代码数据集(大于1500张)总结前言 本打算昨天写这篇博客的&#xff0c;推迟到今天晚上。实…

章节3 配置CentOS

3.1-什么是虚拟机 什么是虚拟机&#xff1f; Virtual Machine&#xff0c;虚拟软件/平台虚拟出来的操作系统。 虚拟机/物理机 虚拟化技术 虚拟化软件&#xff1a;VMware Workstation、VirtualBox、Virtual PC、Citrix Xen Desktop、Parallels Desktop&#xff08;MacOS&am…

刷题日记【第十五篇】-笔试必刷题【有假币+求正数数组的最小不可组成和+最难的问题+因子个数】

1.实例方法需要通过super来调用超类中的实例方法&#xff1b;实例方法需要通过类名称来调用超类的类方法&#xff1b;实例方法需要向下转型才能调用子类的实例方法&#xff1b;实例方法可以直接调用本类的实例方法。 2.HashSet子类依靠【hashCode();equals()】方法区分重复元素…

2.6 场效应管放大电路

一、场效应管放大电路的三种接法 场效应管的源极、栅极和漏极与晶体管的发射极、基极和集电极相对应&#xff0c;因此在组成放大电路时也有三种接法&#xff0c;即共源放大电路、共漏放大电路和共栅放大电路。以 NNN 沟道结型场效应管为例&#xff0c;三种接法的交流通路如图2…

Python 3.11 有什么新功能?

详细概述Python 3.11中最重要功能&#xff0c;包括如何安装 beta 版本以及何时可以获得官方稳定版本。 长按关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 扫码关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 Python在过…

【毕业设计】24-基于单片机的电子显示屏的设计与应用(原理图+源码+仿真工程+论文+答辩PPT)

【毕业设计】24-基于单片机的电子显示屏的设计与应用&#xff08;原理图源码仿真工程论文答辩PPT&#xff09; 文章目录资料下载链接任务书设计说明书摘要设计框架架构设计说明书及设计文件源码展示资料下载链接 资料下载链接 资料链接&#xff1a;https://www.cirmall.com/ci…

SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.13 ES 下载与安装

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇4 数据层解决方案4.13 ES 下载与安装4.13.1 下载4.13.2 安装4.13.3 使…

网页设计作业学生网页课程设计作业成品DIV+CSS-关于家乡的HTML网页设计

Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业&#xff0c;游景点介绍 | 旅游风景区 | 家乡介绍 | 等网站的设计与制作 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#xff1a;样式 在操作方面上运用了html5和cs…

卷积神经网络总结

卷积操作特征图大小计算 图中蓝色部分为55大小的输入卷积层的特征图&#xff0c;黄色部分 为33大小的卷积核&#xff0c;其内部黑色数字为卷积核权重参数&#xff0c;经过卷积操作以后得 到右侧绿色33大小的输出特征图。 如果使用input_N表示输入图像的大小&#xff0c;n表示参…