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

编程的四种范式

面向机器编程范式

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

面向过程编程范式

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

面向对象编程范式

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

面向问题编程范式

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

四种范式的对比

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

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

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

未来的编程范式

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

广义面向问题编程范式

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

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

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

在这里插入图片描述

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

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

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

ChatGPT 回答:

def quicksort(arr):
    if len(arr) <= 1:
        return arr
    else:
        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 random

def 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 += 1
            arr[i], arr[j] = arr[j], arr[i]  # 交换元素
    arr[i + 1], arr[high] = arr[high], arr[i + 1]  # 将基准移到正确的位置
    return i + 1

def 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系统,只要你需求和指令描述的合理,那么甚至能搭建出一个完全可运行于生产环境的系统。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Babel:现代JavaScript的桥梁

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

【Prometheus】PromQL

数据类型 即时向量&#xff08;instant vector&#xff09; node_cpu_seconds_total{instance"ahoj-dev-ubuntu-virtualbox",mode"idle"} 区间向量&#xff08;range vector&#xff09; node_cpu_seconds_total{instance"ahoj-dev-ubuntu-virtu…

java正则表达式概述及案例

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

针对娃哈哈和农夫山泉,AI是如何看待的

娃哈哈和农夫山泉事件是中国饮料行业的两个重要事件。娃哈哈和农夫山泉都是中国知名的饮料品牌&#xff0c;两者之间的竞争一直存在。以下是对这两个事件的介绍&#xff1a; 1. 娃哈哈事件&#xff1a;娃哈哈是中国最大的饮料生产企业之一&#xff0c;也是中国最具影响力的品牌…

.Net6使用JWT认证和授权

文章目录 目的实现案例一.项目所需包&#xff1a;二.配置项目 appsettings.json 文件&#xff1a;三.创建Model文件夹&#xff0c;添加AppConfig类和UserRole类1.AppConfig类获取appsettings.json文件中的值2.UserRole类用于区分用户信息和权限 四.主体代码案例&#xff1a;1.L…

C++的类与对象(三):构造函数、析构函数、对象的销毁顺序

目录 类的6个默认成员函数 构造函数 语法 特性 析构函数 特性 对象的销毁顺序​​​​​​​​​​​​​​ 类的6个默认成员函数 问题&#xff1a;一个什么成员都没的类叫做空类&#xff0c;空类中真的什么都没有吗&#xff1f; 基本概念&#xff1a;任何类在什么都不…

[MRCTF2020]Transform1

a[33]"9,10,15,23,7,24,12,6,1,16,3,17,32,29,11,30,27,22,4,13,19,20,21,2,25,5,31,8,18,26,28,14" b[33]"103,121,123,127,117,43,60,82,83,121,87,94,93,66,123,45,42,102,66,126,76,87,121,65,107,126,101,60,92,69,111,98,77" python代码 a3 [103…

three.js 射线Ray,三维空间中绘制线框

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div> <div>{{ res1 }}</div> <div>{{ res2 }}</div><…

一图看懂Redis持久化机制!

持久化策略 Redis 提供了两种持久化策略&#xff1a; RDB (Redis Database Snapshot) 持久化机制&#xff0c;会在一段时间内生成指定时间点的数据集快照(snapshot) AOF&#xff08;Append Only File&#xff09; 持久化机制&#xff0c;记录 server 端收到的每一条写命令&am…

nmcli绑定bond双网卡(active-backup模式)

安装包 apt-get install network-manager apt install net-tools当前网卡mac地址IP都不一样 创建名为“jbl”的新连接&#xff0c;并将其模式设置为“active-backup” nmcli connection add type bond ifname jbl mode active-backup添加物理网卡到bond(JBL),两个物理网卡添加…

linux操作系统虚拟机的环境配置

目录 一、虚拟机安装&#xff08;类似硬件的安装&#xff09; &#xff08;1&#xff09;创建虚拟机 &#xff08;2&#xff09;创建虚拟机 二、IP和主机名称配置 1、设置VM上的IP 2、设置我们电脑上VMnet8的IP 3、设置虚拟机上的IP 主机名称映射 以下是设置主机名映射…

【异常处理】sbt构建Chisel库时出现extracting structure failed:build status:error的解决办法

文章目录 报错背景&#xff1a;解决思路&#xff1a;①IDEA中配置本地的SBT进行下载②更改下载源为华为的镜像站1. 修改sbtconfig.txt2. 增加repositories文件 ③查看报错信息 总结整理的Scala-Chisel-Chiseltest版本信息对应表 报错背景&#xff1a; 最近在写Chisel时&#x…

JavaScript基础5之作用域、执行上下文的顺序执行、可执行代码、执行上下文栈

JavaScript基础 作用域思考 执行上下文顺序执行可执行代码执行上下文栈案例一案例二case1:case2 作用域 作用域&#xff1a;程序源代码中定义变量的区域。作用域规定了如何查找变量&#xff0c;也就是确定当前执行代码对变量的访问权限。作用域分类&#xff1a;静态作用域&…

哈希表|242.有效的字母异位词

力扣题目链接 bool isAnagram(char* s, char* t) {int len_s strlen(s), len_t strlen(t);if(len_s ! len_t) {return false;}int table[26];memset(table, 0, sizeof(table));for(int i 0; i < len_s; i) {table[s[i] - a];}for(int i 0; i < len_t; i) {table[t[i…

二,几何相交---4,BO算法---(1)接近性和可分离性

提了三个观点 1&#xff0c;如果一条直线&#xff08;比如竖直&#xff09;可以分开两个线段&#xff0c;则这两个线段不相交 2&#xff0c;只需要观察与隔离线相交的几个线段 3&#xff0c;从左向右扫描线只需要观察每个线段的两个端点和一些可能的相交点。

2024年【化工自动化控制仪表】新版试题及化工自动化控制仪表考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 化工自动化控制仪表新版试题是安全生产模拟考试一点通总题库中生成的一套化工自动化控制仪表考试试题&#xff0c;安全生产模拟考试一点通上化工自动化控制仪表作业手机同步练习。2024年【化工自动化控制仪表】新版试…

Qt 中Json文件的操作

Json文件的读取 QFile file("data.json"); //准备好的文件file.open(QIODevice::ReadOnly|QIODevice::Text);QByteArray arr file.readAll();QJsonDocument jsonDoc QJsonDocument::fromJson(arr);QJsonObject jsonObj jsonDoc.object();qint32 id jsonObj["…

沁恒蓝牙芯片CH582:蓝牙OTA升级技术详解与应用探索

文章目录 一、前言1.WCH 蓝牙空中升级&#xff08;BLE OTA&#xff09;概述2. WCH BLE SDK DFU 工作原理&#xff08;方式一&#xff09; 二、移植程序1.找到BackUpgrade_OTA例程2.添加文件到工程2.1 添加文件2.2 如何添加 3.修改APP工程3.1 修改peripheral_main.c文件3.2 修改…

Leetcode 59.螺旋矩阵Ⅱ

1.题目 2.思路 &#xff08;借用代码随想录的图&#xff09; 1.我们将转一圈看作一个循环&#xff08;1->2->3->4->5->6->7->8 这是一个循环&#xff09; 2.在这个循环里&#xff0c;我们要画四条边&#xff08;上右下左&#xff09; 填充上行从左到右 填…

数据分析-Pandas画分布密度图

数据分析-Pandas画分布密度图 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&#xff…