当下AIGC如火如荼,也带来许多问题,这些问题通常应该使用怎样的方式去解决呢?

0 语言和人工智能

正如人们对其目标所期望的那样,人工智能研究会产生许多重大的编程问题。 在其他编程文化中,这一连串的问题将催生新的语言。


在任何非常大的编程任务中,一个有用的组织原则是通过语言的发明来控制和 隔离任务模块内的流量。


随着人们接近我们人类最常交互的系统边界,这些语言往往变得不 那么原始。 因此,此类系统包含多次复制的复杂语言处理功能。


比如有着悠久历史的c具有如此简单的语法和语义,解析可以被视为一项基本任务。 因此解析技术在 c 程序中几乎没有作用,语言处理器的构建很少会阻碍大型c 系统的增长和变化。


这里包括泛型算术系统、解释器、寄存器机模拟器和编译器; 并且所有的程序示例,以确保任何符合 IEEE Scheme 标准(IEEE 1990)的实现都能够运行代码。


我们将要强调几个新的主题。其中最重要的是不同方法在计算模型中处理时间所发挥 的核心作用:


具有状态的对象、并发编程、函数式编程、惰性求值和非确定性编程。 我们增 加了关于并发性和非确定性的新章节,并且我们试图在整本书中整合这个主题。

  • 首先, 我们要确立这样一种观念,即计算机语言不仅是让计算机执行操作的一种方式, 而且还是一种表达方法论思想的新形式媒体。因此,必须编写程序供人们阅读,而只是偶然 地供机器执行。

  • 其次, 我们认为,这一级别的主题要解决的基本材料不是特定编程语言结构的语法,也不是有效计算特定函数的巧妙算法,甚至不是算法的数学分析和计算基础,而是用于控制大型软件系统的智能复杂性的技术。

  • 最后, 正是这种非常简单的语法和语义导致了所有 c 程序员的负担和自由。 任何超过几行的c程序都不能被任意函数所饱和。 重新发明和再适应;有适合和重塑! 我们为将自己的想法写在括号中的程序员祝贺。


程序员应该能够阅读 50 页长的程序,前提是它以规范风格编写的。

程序员应该知道什么不该读,什么他们在任何时候都不需要理解。他们应该对修改程序感到安全,保留原作者的精神和风格。

这些技能绝不是计算机编程所独有的。我们教授和借鉴的技术对所有工程设计都是通用 的。


我们通过构建在适当的时候隐藏细节的抽象来控制复杂性。 我们通过建立常规接口来控制复杂性,这些接口使我们能够通过以“混合和匹配”方式组合标准的、易于理解的部分来 构建系统。


我们通过建立用于描述设计的新语言来控制复杂性,每种语言都强调设计的特定 方面并淡化其他方面。 我们对这个主题的研究方法的基础是我们坚信“计算机科学”不是一门科学,它的重要 性与计算机无关。


计算机革命是我们思考方式和表达思想方式的一场革命。 这种变化的本质 是出现了最好被称为 程序认识论的东西——从命令的角度研究知识结构,而不是经典数学 学科采取的更具声明性的观点。


数学提供了一个精确处理“是什么”概念的框架。计算提供 了一个精确处理“如何做”概念的框架。


2 计算的基础结构

这里使用的编程语言它们形成复合表达 式的方式很少,几乎没有句法结构。 所有的形式属性都可以在一个小时内完成,就像国际象 棋的规则一样。


不久之后,我们忘记了语言的句法细节(因为没有必要记住)并继续解决真正的问题——弄清楚 我们想要计算什么,我们如何将问题分解为可管理的部分,以及我们将如何处理零件。


类似c的方言 的另一个优点是它支持(但不强制)比我们所知道的任何其他语言更多的程序模 块化分解的大规模策略。


我们可以进行过程和数据抽象,我们可以使用高阶函数来捕获常见 的使用模式, 我们可以使用赋值和数据变异对局部状态进行建模,我们可以将程序的一部分与流和延迟评估联系起来,我们可以轻松地实现嵌入式语言。


这些都嵌入在交互式环境中,对增量程序设计、构建、测试和调试提供出色的支持。


它塑造了一个具有前所未有的强大功能 和优雅的精美工具。 我们可以轻松实现嵌入式语言。所有这些都嵌入在交互式环境中,对增量程序设计、构建、测试和调试提供出色的支持。


实现语言优势特性的人,这些先驱包括 John Reynolds 和 Peter Landin、Alonzo Church、Barkley Rosser、Stephen Kleene 和 Haskell Curry。


古人的计算工具,将思考的抽象对象 与计算方法组合,将产生一个计算过程。


这个过程使用计算机以某种方式组织起来,并通过电流驱动进行运算,得出一个结果。 计算并不一定是文字,也可以是图形,物理实体等等。


而现代计算机内部结构 冯.洛伊曼结构主要 包括输入,输出设备,存储器,中央处理器 四大部分。


    输入设备 :键盘,触摸屏,语音,温度/重力/电磁场传感器等等,接收计算对象 的部分。

    中央处理器 CPU: 即是 现代计算机的核心部分,也就是芯片,执行计算的部分。

    存储器:可以是磁盘,内存,闪存等等,用于保存计算过程 和 结果。

    输出设备: 输出设备可以是 屏幕,打印机,话筒,网络接口等等,输出计算结果。

本质上关于认知方式和计算, 人类认知方式大致分为 3 个 方式,主要有以下三种:

   > 
   组合:将几个简单的观念合二为一,从而形成一切复杂的观念。 

   对比:第二种是把简单的或复杂的两种观念放在一起,把它们放在一起,以便同时观察它们,而不是将它们合二为一,从而得到它所有的关系观念。 

   抽象:第三是将它们与在它们的真实存在中伴随它们的所有其他观念分开:这称为抽象,因此它的所有一般观念都被形成。 因此计算机和互联网蓬勃发展,背后的技术到底是什么? 

3 三个焦点:人类思维、程序和计算机。

对大问题的研究需要使用一系列程序,其中大部分程序在途中就出现了。


这些程序充斥着似乎是手头问题所特有的问题。要将编程本身视为一种智力活动,您必须转向计算机;你必须阅读和编写计算机程序。


程序是关于什么的或它们服务于什么应用程序并不重要。重要的是它们的表现如何,以及它们与其他程序在创建更大程序时的配合程度。程序员既要追求部分的完美,又要追求收集的充分性。


每个计算机程序都是在头脑中孵化的真实或心理过程的模型。 这些源自人类经验和思想的过程数量庞大,细节复杂,在任何时候都只能部分理解。


我们的计算机程序很少将它们建模为我们永久满意的模型。


因此,即使我们的程序是精心手工制作的离散符号集合、互锁功能,它们也在 不断发展:随着我们对模型的感知加深、扩大、概括,我们会改变它们,直到模型最终在另一个模型中达到稳态奋斗。


与计算机编程相关的兴奋的源泉是在头脑中和计算机上不断展开的机制表达为程序以及它们产生的感知的爆炸。


如果艺术解释了我们的梦想,那么计算机就会以程序的形式执行它们!尽管计算机功能强大,但它仍然是一个比较严格的工具。


它的程序必须是正确的,我们想说 的必须每一个细节都说得准确。 与其他所有象征性活动一样,我们通过论证相信程序的真实性。


此处的类似 C 的语言 本身可以分配一个语义(顺便说一下,另一个模型),如果可以指定程序的功能, 例如,在谓词演算中,则可以使用逻辑证明方法来制作可接受的正确性参数。


不幸的是,随着程序变得庞大而复杂,而且它们几乎总是这样,其程序本身的充分性、一致性和正确性变得令人怀疑,因此完全的正确性很少能被大型程序满足。


由于大程序从小程序发展而来,至关重要的是,我们必须开发一系列标准程序结构,我们已经确定其正确性 -- 我们称之为习语 -- 并学会使用已证明有价值的组织技术将它们组合成更大的结构。 理解它们对于参与称为编程的企业至关重要。


最重要的是,发现和掌握强大的组织技术可以加速我们创建大型的、重要程序的能力。 相反,由于编写大型程序非常繁重,因此我们被激励去发明新的方法来减少大型程序的功能和细节的质量。


与程序不同,计算机必须遵守物理定律。 如果他们希望快速执行——每次状态变化在几纳秒完成——他们必须只传输很小的距离(最多 11 / 2 )。


必须去处理在如此集中的空间中的大量设备所产生的热量。 不过现在已经开发出一种在功能多样性和设备密度之间取得平衡的精美工程艺术。


无论如何,硬件总是在比我们想要编程的层次更原始的层次上运行。 将我们的 C 程序转换为“机器”程序的过程本身就是我们编程的抽象模型。


他们的研究和创造为与编程任意模型相关的组织程序提供了大量洞察力。当然,计算机本身也可以 如此建模。


分别确定三个焦点不仅仅是战术上的方便问题。

4 小结

尽管正如他们所说,这一切都在头脑中, 但这种逻辑上的分离导致了这些焦点之间象征性交通的加速,在人类经验中,只有生命本身的进化才能超越这些焦点的丰富性、活力和潜力。


充其量,焦点之间的关系不是完全稳态的。计算机永远不会足够大或足够快去处理人类的事务。


硬件技术的每 4年 一次的突破(摩尔定律,虽然现在有所放缓)都会导致更多的编程企业、新的组织原则和抽象模型的更丰富。


每个读者都应该定期问自己“为了什么目的,为了什么目的?”——但不要问得太频繁, 以免因为苦乐参半的哲学而失去编程的乐趣。