【AI辅助研发】-开端:未来的编程范式

编程的四种范式

面向机器编程范式

面向机器编程范式是最原始的编程方式,它直接针对计算机硬件进行操作。程序员需要了解计算机的内部结构、指令集和内存管理等细节。在这种范式下,编程的主要目标是编写能够直接控制计算机硬件运行的机器代码。面向机器编程范式通常使用汇编语言进行编程,它要求程序员对计算机硬件有深入的了解。然而,由于这种编程方式的高度底层性,代码的可读性和可维护性通常较差,且移植性也较低。
第一台计算机

面向过程编程范式

面向过程编程范式是一种以过程为中心的编程方式。它将问题分解为一系列独立的过程或函数,并通过调用这些过程来实现程序的功能。每个过程都负责完成特定的任务,并可以通过参数传递数据。面向过程编程范式注重代码的模块化和可重用性,使得程序结构更加清晰和易于维护。常见的面向过程编程语言有C语言等。然而,随着软件规模的扩大和复杂性的增加,面向过程编程范式在处理复杂问题时可能会变得繁琐和难以管理。
面向过程-C语言

面向对象编程范式

面向对象编程范式是一种更加高级的编程方式。它将现实世界中的事物抽象为对象,并通过类和对象的概念来描述和组织程序。每个对象都具有自己的属性和方法,可以与其他对象进行交互。面向对象编程范式强调封装、继承和多态等特性,使得代码更加灵活、可扩展和易于维护。常见的面向对象编程语言有Java、C++和Python等。面向对象编程范式在处理复杂问题时具有更高的抽象能力和组织能力,能够提高软件开发的效率和质量。
在这里插入图片描述

面向问题编程范式

面向问题编程范式是一种更加注重解决特定领域问题的编程方式。它根据问题的特性和需求来设计和实现编程模型,旨在提供更加直观和高效的解决方案。面向问题编程范式通常涉及特定领域的知识库、推理机制和问题求解策略等。例如,在人工智能领域,面向问题编程范式可以通过构建知识图谱、使用机器学习算法等方式来解决复杂的推理和决策问题。面向问题编程范式能够针对特定问题提供定制化的解决方案,提高问题求解的效率和准确性。

四种范式的对比

四种编程范式形成的一张对比表格:

编程范式面向机器面向过程面向对象面向问题
核心概念直接操作硬件通过过程/函数实现功能通过类和对象组织程序针对特定领域问题设计模型
关注点计算机硬件细节程序的流程控制对象和类的交互问题特性和需求
代码组织紧密与硬件相关模块化和过程调用对象和类的层次结构特定领域的结构和逻辑
优点直接控制硬件结构清晰,易于维护代码灵活、可扩展针对问题提供定制化解决方案
缺点可读性和可维护性差处理复杂问题时可能繁琐学习曲线较陡峭可能受限于特定领域知识
适用场景底层系统编程、嵌入式系统脚本编写、简单任务大型复杂系统、软件应用特定领域问题求解、人工智能等
典型语言汇编语言C语言Java、C++、Python特定领域的专用语言或框架

这四种编程范式各有其特点和适用场景。在实际应用中,可以根据问题的特性和需求选择合适的编程范式来进行软件开发。同时,随着技术的不断发展和创新,新的编程范式也在不断涌现,为软件开发提供了更多的选择和可能性。

未来的编程范式

比较上面几个范式的例子,其实也代表了编程语言发展的几个阶段,和笔者在【Node.js】-闲聊:前端框架发展史中介绍的前端框架发展的几个阶段十分相似,其实编程范式是随着语言不断发展的。
那未来的编程范式是什么样子呢?笔者认为是广义的“面向问题编程”。

广义面向问题编程范式

狭义的面向问题编程范式,已经做过介绍。广义的是什么?

广义面向问题编程:直接面向人类语义提出的问题,由计算机系统给出问题的答案的编程方式

其实我们已经见到了雏形,ChatGPT。

在这里插入图片描述

用人类说话的方式,让计算机出一个快速排序算法

快速排序是一种高效的排序算法,其基本思想是采用分治法。通过选择一个“基准”(pivot)元素,将待排序序列分割成两部分,其中一部分的所有元素都比基准元素小,另一部分的所有元素都比基准元素大,然后再对这两部分分别进行快速排序,以达到整个序列有序。

提问一:
给我一个对10万个数进行快速排序的算法

ChatGPT 回答:

def quicksort(arr):if len(arr) <= 1:return arrelse:pivot = arr[0]less = [x for x in arr[1:] if x <= pivot]greater = [x for x in arr[1:] if x > pivot]return quicksort(less) + [pivot] + quicksort(greater)# 生成10万个随机数进行排序
import random
random_nums = [random.randint(0, 1000000) for _ in range(100000)]sorted_nums = quicksort(random_nums)# 打印排序后的前10个数和后10个数,以验证排序结果
print(sorted_nums[:10])
print(sorted_nums[-10:])

这个示例中,quicksort函数是快速排序的主要实现。它首先检查数组的长度,如果长度小于或等于1,则直接返回数组(因为长度为1的数组已经是有序的)。否则,它选择数组的第一个元素作为基准,然后将数组中其余的元素分为两部分:小于或等于基准的元素和大于基准的元素。最后,它递归地对这两部分进行快速排序,并将结果合并起来,其中基准元素位于中间。

注意:这个示例中的快速排序实现并不是最优的,特别是在处理大数据集时。在实际应用中,通常会使用“原地”(in-place)版本的快速排序,它直接在输入数组上进行操作,而不需要额外的空间来存储中间结果。此外,还会使用“随机化”版本的快速排序,以减少最坏情况发生的可能性。这些优化可以显著提高快速排序的性能。

提问二:让ChatGPT优化
优化上面的代码,增加“原地”和“随机化”

ChatGPT回答:

为了优化上面的代码并使其“原地”且“随机化”,我们可以采用以下策略:

  1. 原地操作:不使用额外的列表来存储小于和大于基准的元素,而是直接在原数组上进行交换操作。
  2. 随机化基准选择:从数组中随机选择一个元素作为基准,而不是总是选择第一个元素。这有助于减少算法在最坏情况下的性能。

以下是优化后的快速排序算法:

import randomdef partition(arr, low, high):# 随机选择一个基准pivot_index = random.randint(low, high)arr[pivot_index], arr[high] = arr[high], arr[pivot_index]  # 将基准移到末尾pivot = arr[high]i = low - 1  # 指向小于基准的元素的最后一个位置for j in range(low, high):if arr[j] <= pivot:i += 1arr[i], arr[j] = arr[j], arr[i]  # 交换元素arr[i + 1], arr[high] = arr[high], arr[i + 1]  # 将基准移到正确的位置return i + 1def quicksort(arr, low, high):if low < high:pi = partition(arr, low, high)quicksort(arr, low, pi - 1)quicksort(arr, pi + 1, high)# 生成10万个随机数进行排序
random_nums = [random.randint(0, 1000000) for _ in range(100000)]# 调用快速排序函数,从数组的第一个元素到最后一个元素进行排序
quicksort(random_nums, 0, len(random_nums) - 1)# 打印排序后的前10个数和后10个数,以验证排序结果
print(random_nums[:10])
print(random_nums[-10:])

在这个版本中,partition函数负责将数组划分为小于基准和大于基准的两部分,并返回基准的最终位置。quicksort函数递归地对这两部分进行排序。

注意,这个版本的快速排序直接在原数组上进行操作,不需要额外的空间来存储中间结果(除了递归调用栈的空间)。此外,通过使用random.randint来随机选择基准,我们减少了算法在最坏情况下的性能。

这种优化后的快速排序算法在处理大数据集时通常会有更好的性能。

用人类说话的方式,让计算机完成一个系统

既然可以完成一个算法,那么是否能完成一个可用的系统呢?这并不是天方夜谈,我们可以借助分治法的思想,将大问题化成小问题,逐个解决小问题,最终解决大问题。

  1. 给出一个BI系统的架构设计
  2. 详细给出技术选型的结果
  3. 给出ETL层kettle的具体方案
  4. 给出ETL层如下处理过程。从数据源抽取数据,过滤掉时间戳为5天前数据,并将数据存储到目标数据源
  5. 。。。

未来已来

用上面这种方式,我们可以一步一步搭建出一个我们想要的BI系统,只要你需求和指令描述的合理,那么甚至能搭建出一个完全可运行于生产环境的系统。

这就是“广义的面向问题的编程范式”。编程的基础设计和代码工作不再单单由人完成,甚至不再由人完成。人,只需要使用人类的语义进行提问、审核、采纳即可。

这种模式将人从重复的编码工作中解放出来,而直接解决客户的问题,直接导向了客户价值侧。这种模式已经在深刻的影响和改变现有编程的模式和行业从业要求,我们要快速拥抱。

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

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

相关文章

redis使用笔记

redis使用笔记 1、Redis简介1.1 含义1.2 功能1.3 特点 2. 常用的数据结构2.1 HASH 3 redis接口定义3.1 redisReply3.2 redisContext3.3 redisCommand 4 实践操作4.1 遇到问题4.1.1 Get哈希的时候返回error4.1.2 长度一直为0&#xff0c;str没法打印&#xff08;未解决&#xff…

java正则表达式概述及案例

前言&#xff1a; 学习了正则表达式&#xff0c;记录下使用心得。打好基础&#xff0c;daydayup! 正则表达式 什么是正则表达式 正则表达式由一些特定的字符组成&#xff0c;代表一个规则。 正则表达式的功能 1&#xff1a;用来校验数据格式是否合规 2&#xff1a;在一段文本…

2024,互联网打工人最终没能逃得过 AI

时间很快就来到了三月份&#xff0c;回首看过去的一年&#xff0c;如果要选择最令人着迷的新技术&#xff0c;那非 ChatGPT 莫属。 从美国的硅谷、华尔街到中国的后厂村、中关村&#xff0c;几乎所有的科技大厂们都在讨论“AIGC”。 既 ChatGPT 之后&#xff0c;几乎每天都有…

【深度学习笔记】7_2 梯度下降和随机梯度下降

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 7.2 梯度下降和随机梯度下降 在本节中&#xff0c;我们将介绍梯度下降&#xff08;gradient descent&#xff09;的工作原理。虽然梯度…

️网络爬虫与IP代理:双剑合璧,数据采集无障碍️

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

day16_购物车(添加购物车,购物车列表查询,删除购物车商品,更新选中商品状态,完成购物车商品的全选,清空购物车)

文章目录 购物车模块1 需求说明2 环境搭建3 添加购物车3.1 需求说明3.2 远程调用接口开发3.2.1 ProductController3.2.2 ProductService 3.3 openFeign接口定义3.3.1 环境搭建3.3.2 接口定义3.3.3 降级类定义 3.4 业务后端接口开发3.4.1 添加依赖3.4.2 修改启动类3.4.3 CartInf…

基于springboot实现摄影网站系统项目【项目源码】

基于springboot实现摄影网站系统演示 摘要 随着时代的进步&#xff0c;社会生产力高速发展&#xff0c;新技术层出不穷信息量急剧膨胀&#xff0c;整个社会已成为信息化的社会人们对信息和数据的利用和处理已经进入自动化、网络化和社会化的阶段。如在查找情报资料、处理银行账…

invoke()到底是个什么方法???

调用jquery的方法返回属性值 1、invoke&#xff08;‘val’&#xff09; 在form的select下&#xff1a; cy.get(.action-select-multiple).select([apples, oranges, bananas])// when getting multiple values, invoke "val" method first jquery中val方法是用于返…

花店小程序有哪些功能 怎么制作

​花店小程序可以为花店提供一个全新的线上销售平台&#xff0c;帮助花店扩大市场份额&#xff0c;提升用户体验&#xff0c;增加销售额。下面我们来看看花店小程序应该具备哪些功能&#xff0c;以满足用户的需求。 1. 商品展示&#xff1a;展示花店的各类花卉和花束&#xff…

Vue.js数据绑定解密:深入探究v-model和v-bind的原理与应用

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; Vue.js数据绑定解密&#xff1a;深入探究v-model和v-bind的原理与应用 一、引言 Vue.…

Linux多线程之线程互斥

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、互斥 1.线程间的互斥相关背景概念 2.互…

探索CSS预处理器:Sass、Less与Stylus

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Kafka 面试题及答案整理,最新面试题

Kafka中的Producer API是如何工作的&#xff1f; Kafka中的Producer API允许应用程序发布一流的数据到一个或多个Kafka主题。它的工作原理包括&#xff1a; 1、创建Producer实例&#xff1a; 通过配置Producer的各种属性&#xff08;如服务器地址、序列化方式等&#xff09;来…

MySQL执行原理、存储引擎、索引模型简介

1.sql的执行原理 Connectors 连接、支持多种协议&#xff0c;各种语言 Management service 系统管理和控制工具&#xff0c;例如&#xff1a;备份、集群副本管理等 pool 连接池 sql interfaces sql接口-接收命令返回结果 parser 分析解析器&#xff1a;验证 optimizer 优化…

深入浅出计算机网络 day.1 概论② 因特网概述

当你回头看的时候&#xff0c;你会发现自己走了一段&#xff0c;自己都没想到的路 —— 24.3.9 内容概述 01.网络、互连&#xff08;联&#xff09;网与因特网的区别与联系 02.因特网简介 一、网络、互连&#xff08;联&#xff09;网与因特网的区别与联系 1.若干节点和链路互连…

论文:CLIP(Contrastive Language-Image Pretraining)

Learning Transferable Visual Models From Natural Language Supervision 训练阶段 模型架构分为两部分&#xff0c;图像编码器和文本编码器&#xff0c;图像编码器可以是比如 resnet50&#xff0c;然后文本编码器可以是 transformer。 训练数据是网络社交媒体上搜集的图像…

GEE:计算一个遥感影像的空像素占比

作者:CSDN @ _养乐多_ 本文将介绍,如何在 Google Earth Engine (GEE) 平台计算一个遥感影像的空像素占比,其中,包含获取研究区内所有像素的总数的代码,以及获取非空像素的总数的代码。 结果如下图所示, 文章目录 一、核心函数1.1 获取研究区内所有像素的总数1.2 获取非…

APP2:android studio如何使用lombok

一、前言 不知道从哪个版本开始&#xff0c;android studio便无法在plugins中下载lombok了&#xff0c;有人说是内置了&#xff0c;好像有这么回事儿。我主要面临如下两个问题&#xff1a; 使用内置lombok&#xff0c;可以自动生成setter、setter、toString等。但是&#xff0…

mediapipe 实现姿态分析——举手检测

目录 人体姿态检测 效果展示 举手检测 行业应用 代码实现 代码分析 效果展示 代码修改&#xff0c;一只手举起即可 总结 啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦^_^啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦♪(^∇^*)啦啦啦…

使用Vue.js开发前端项目

Vue.js是一个非常受欢迎的渐进式JavaScript框架&#xff0c;用于开发强大而互动的前端应用程序。Vue易于上手&#xff0c;同时拥有强大的功能库和灵活的生态系统。在本篇博客中&#xff0c;我将带你了解使用Vue.js开发项目的基本步骤&#xff0c;并提供相应的代码示例。 环境安…