如何设计脚本语言 漫谈算法设计与脚本语言(grasshopper, python)
时间: 2020.7.31
自从2020.3.28日以来已经开了3期的建筑师编程课(python4rhino), 在课上被问过几次关于grasshopper与python的区别,因此这次尝试着从算法设计的方向以及方法论的角度聊聊这方面的事情.
什么是算法设计?
在回答这个问题之前,先聊聊什么是设计? 简单的一句话设计就是处理内容与形式之间的关系.
工业化生产之前,形式美学上的工艺性,如形状、颜色、材料和纹理等是设计师需要掌握的核心技能。随着第一次工业化时代的到来,设计师面临工业化标准化生产模式产生的新内容. 包豪斯(1919-1933),现代主义是对这一情况在形式上应对. 现代主义在今天依然发挥着重要的作用.
但是随着时代的发展,第二次工业化时代数字化时代到来了, 在全球商业化,数字化时代背景下,设计师要面对的不仅仅是实体的产品,而是用户需求的解决, 这包括了: 复杂问题的提出,服务流程的设计,目标的达成等等,其工作领域甚至扩展到了与设计无关的领域. 系统控制论和计算机化的方法成为这一时期的一种新的设计形式。这不仅要求设计师有关于外形上的创新,而且在某种意义上也要求设计过程的内部的重组。[1][2][3]
在这一语境下,什么是算法设计?
算法设计是设计与计算机科技的融合。计算机与其他人类科技不同的地方是它会思考,中文称之为电脑.
正因为计算机会思考, 这种思考能力从根本上改变了人们构建交互界面、生产产品、提供服务、或建造建筑的方式。
传统设计师习惯于使用Sketchup、Rhino和3ds Max, Maya等绘图工具来实现他们的想法。从一个概念开始,绘图软件帮助他们从抽象的概念到具体的表现。这个过程在许多领域都被采用,从工业设计到建筑设计,其最终成果是由设计师的思维驱动而完成的。
而算法设计的设计师对如何设置生成的过程更加感兴趣. 在对这个生成过程中, 设计师通过脚本语言与计算机沟通, 用算法来驱动计算机如何设计脚本语言,通过这种方式由计算机输出最终的设计成果,犹如一个小孩可以慢慢成长成大人一样, 计算机的智力也在慢慢的成长中. 随着计算机变的越来越聪明, 算法设计将会在未来的日子里极大地改变商业、文化和社区生活。
编程范式(programming paradigms)任何傻瓜都能写出计算机能理解的代码。优秀的程序员写的代码,人类可以理解。
——马丁-福勒
当你开始编程的时候, 你期望通过计算机解决你的问题, 在这里存在三个角色: 你, 你的问题, 计算机. 所谓编程程范式就是你与计算机一起来解决你的问题或任务的方法。
你与计算机对话的媒介是编程语言,编程范式[5]作为方法, 它会使用一些编程语言来解决你的问题. 到目前为止世界上已经有几千种的编程语言,与自然界的语言相比,这么多的编程语言一般都大同小异,它们都需要遵守一些方法论或策略, 这些方法论被称之为范式.最主要的两大类范式为: 命令式范式与声明式范式.
那在实施层面上具体是如何做到呢?
目前主流的计算机系统的软件及应用的架构是分层的,也就是下层做一些支持的工作,暴露接口给上层调用, 这种分层的方式是相对的抽象的分层, 在构架的设计上每一层自己也可以分为很多层.
在这一架构中, 内核(kernel)是计算机操作系统最核心的部分, 软件部分的最底层, 其本质就是用“变量定义+顺序执行+分支判断+循环”所表达的逻辑过程对计算机硬件进行管理与调用。计算机应用的最上层是实现人类社会的某种功能, 或某项任务.
笼统的讲,编写程序就是通过计算机语言及层与层之间定义的接口进行调用并解决你的问题(对算法设计来说就是生成设计成果)。调用的策略称之为范式,越接近现实问题描述与表达就越接近“声明式”(declarative)范式,越接近计算机如何执行过程就越叫做“命令式”(imperative)范式。