惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 最新话题
G
Google Developers Blog
J
Java Code Geeks
The GitHub Blog
The GitHub Blog
F
Full Disclosure
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Vercel News
Vercel News
酷 壳 – CoolShell
酷 壳 – CoolShell
Recent Announcements
Recent Announcements
Help Net Security
Help Net Security
The Hacker News
The Hacker News
IT之家
IT之家
Y
Y Combinator Blog
Martin Fowler
Martin Fowler
L
Lohrmann on Cybersecurity
C
CERT Recently Published Vulnerability Notes
V
Visual Studio Blog
博客园 - 聂微东
Hacker News: Ask HN
Hacker News: Ask HN
H
Hacker News: Front Page
Know Your Adversary
Know Your Adversary
Security Latest
Security Latest
Security Archives - TechRepublic
Security Archives - TechRepublic
Simon Willison's Weblog
Simon Willison's Weblog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
Last Week in AI
Last Week in AI
Schneier on Security
Schneier on Security
N
News and Events Feed by Topic
博客园 - 【当耐特】
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
Blog — PlanetScale
Blog — PlanetScale
博客园_首页
Google DeepMind News
Google DeepMind News
Cloudbric
Cloudbric
N
News | PayPal Newsroom
A
About on SuperTechFans
S
Schneier on Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Hugging Face - Blog
Hugging Face - Blog
M
MIT News - Artificial intelligence
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
雷峰网
雷峰网
T
The Exploit Database - CXSecurity.com
罗磊的独立博客
K
Kaspersky official blog
The Cloudflare Blog
I
Intezer

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 积木化编程与3D场景 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) OCR应用一例 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事
[译]软件: 艺术,工程,数学还是科学?
种瓜 · 2021-11-20 · via 夜行人

原文

Software: Art, Engineering, Mathematics, or Science? by Alan Kay

译文

建造一座 500 英尺高的埃及金字塔,花了几十万工人几十年的时间。他们将材料一块块胡乱堆在一起,然后用石灰岩做外墙,使其外表光鲜。相比之下,1000 英尺高的帝国大厦由不到 3000 名工人在不到 11 个月的时间里从头建造完成。今天相当多的软件及其建造过程类似于埃及金字塔,我敢说,目前没有谁知道如何组织 3000 名程序员,花不到 11 个月的时间, 从头开始制作一个重要的软件。

我对这一点的解释是,“软件工程"仍然是一个矛盾的说法(像航空食品、大学停车场,甚至是 “计算机科学”)。不过,我们今天所做的事情颇像建筑学诞生之前, 建筑物的设计和建造(建筑学,从字面上看是"拱门"的 “技术化”)。我们偶尔可以做出一些有某些功能的东西,尽管它像一堆材料的胡乱堆放。这是一种古老的工程,是一本临时编写的食谱,在过去多少有些用处。

今天,科学(对现实(real)事物的关注)与数学(对真实(true)事物的关注)混合在一起,与工程(对如何制造某种东西的关注)混合在一起。这些领域中的每个工作者也部分地在其他两个领域工作。每个领域都有与之相关的不同气质:数学家往往是理想主义者,科学家是现实主义者,而工程师是实用主义者。而当他们利用其他领域知识来帮助他们最喜爱的领域取得进展时,每个人都发现自己临时采用了一种借用的气质。

如今,什么是计算(computing)?它似乎是一种数学–因为机器是一种推理引擎,可以计算出各种关系的结果 – 外加一种工程 – 因为通常必须构建相当大的语言表述,才能表达任何真正有趣的东西。

但科学在哪儿?在我们对这一术语的正常使用中,我们认为眼前是一个与我们的任何希望或信仰都无关的宇宙,而科学是了解这个宇宙如何运作的一种特殊方式。在现代,我们特别喜欢用数学模型来表达我们所认为宇宙的运作方式,这些数学模型似乎与现实世界有足够的对应关系,可以讨论和预测现实。我们倾向于认为科学是分析性的(analytic)。

相比之下,计算似乎是更多带有人造的(synthetic)味道,因为我们从规则开始,计算出一种 “现实”(reality)。会不会存在一门 “计算机科学” 呢?

我认为答案是肯定的,与物理世界的构建相类似。从历史上看,不可能从基本粒子的第一原理出发,来计算一幢大型建筑或桥梁是会倒塌还是会保持上升。我们的方法是尽可能地制造大型结构,并把它们当作宇宙的一部分来研究,以便于我们理解。这导致了一种新的科学工程,这不是一个矛盾的说法,它导致了巨大的改进,用于建造大型可靠结构的技术。

我认为这便是最终创造软件工程所需要做的。我们需要对重要的软件结构进行更多的建设,而且我们需要以一种允许分析、学习的形式来做,并根据刚刚学到的东西重新设计和制造。

这儿似乎有一个鸡和蛋的问题。如果我们没有一门真正的工程学科,那么要制造出足以让人理解的大型建筑不就太困难了吗?而我们所做的乱七八糟的东西会不会太难重新表述,以至于我们无法了解我们的新发现是否真的有价值?

我相信,在这里可以用来取得进展的秘密武器是极端的晚绑定(late binding)。对什么进行晚绑定?对系统中尽可能多的东西。

人们可以提出一个很好的论点,即硬件和软件设计中的大多数进步, 都是通过引入新的晚绑定机制来促进的。追溯到硬件方面,我们可以想到、内存管理单元等。在软件中,我们从绝对指令位置和格式,到符号汇编器,到子程序,到可重定位代码,到独立于硬件的数据索引和重定位寄存器结构格式,到垃圾收集,到对象的许多晚绑定优势,包括类和实例、消息发送、封装、多态性和元编程。

在 Squeak 中,你有一个有史以来最晚绑定但又最实用的编程系统。它也是一个兼具广度和深度的人工制品,足以允许进行真正的科学研究、创造新的理论、新的数学和新的工程结构。事实上,Squeak 已经准备好成为它自己的替代品。由于 Squeak 在自己的结构中使用的每一个机制都是显而易见的,并且可以被任何程序员改变,所以它可以被理解和摆弄。“极端的玩法” 很容易导致创造出一个比 Squeak 更好的系统,与 Squeak 非常不同,或者两者都有。

我们不仅允许你这样做,我们还强烈建议你去尝试! 为什么?因为我们的领域离合理的状态还有很长的路要走,我们不能让糟糕的事实标准(主要由供应商控制)来阻碍进步。你习惯于把编程系统作为一种具有某些功能的语言来学习,目的是利用这些功能来制造东西。Squeak 在这方面做得很好,而且有很多功能(实际上太多了!),可以用来制作东西。但是,对待你将要进行的学习的最好方式,是把 Squeak 看作是一种可以构建语言的元语言(metalanguage)。除了学习如何用现有的功能来制造东西,还要试着学习这些功能本身是如何被发明和制造的。所有的代码都是可见的,而且很多代码都有关于它们如何工作的解释。在这里,系统就是课程。即使是本书的在线版本也很难跟踪一个不断变化和改进的系统,所以最好是学习如何从系统本身找出它的作用。然后尝试添加你自己新的深度功能。最终,你会形成自己的观点,了解更好的编程方式。Squeak 将允许你添加这些功能,甚至用你发明的新功能来取代它目前所有的功能。其中一些想法将足以推动编程的艺术、工程、科学和数学的发展。

然后你就会以我们所期望的方式使用 Squeak。在某些时候,一个比 Squeak 更好的系统将被创造出来,没有什么能让我们更高兴的了 – 特别是如果你能在我们还在享受新想法的时候完成它的话。