以数之名:In Praise of APL 后记
原文:http://www.jsoftware.com/papers/perlis77.htm
标题:In Praise of APL: A Language for Lyrical Programming
作者:Alan J. Perlis,1977-06
1943年于卡内基理工学院(现卡内基梅隆大学)获得化学学士学位。二战中,在美军服役,开始对数学感兴趣。后改学数学,1949年获得硕士学位。1950年在麻省理工学院获博士学位。他的博士论文题目是“On Integral Equations, Their Solution by Iteration and Analytic Continuation”(积分方程中的迭代和解析开拓解法)。
1948年-1949年和1952年,他参加了“旋风”计算机计划,为“旋风”编制程序。1952年出任普渡大学计算中心的第一任主任,1956年任卡内基理工学院计算系的首任主任。1962年-1964年当选为ACM主席。1971年,加盟耶鲁大学计算机系,多次任系主任,直至去世。期间1977年-1978年曾在加州理工院执教。
1990年2月7日,因心脏病在康涅狄格州的纽哈芬去世,享年68岁。
荣誉:1966年成为首届图灵奖的获得者。颁奖词:for his influence in the area of advanced programming techniques and compiler construction(即主要指在Algol 58和Algol 60的形成和修改过程中的核心和关键作用)。其图灵奖演讲稿为:“The Synthesis of Algorithmic Systems”(算法系统的合成)
其他文章:
1:https://cpsc.yale.edu/epigrams-programming
2:Almost Perfect Artifacts Improve only in Small Ways: APL is more French than English http://www.jsoftware.com/papers/perlis78.htm
part1:计算机科学的教学意义
Perlis首先列出了5条:(1) 学会并且能够编写算法 (2) 了解计算机的组织和构造方式 (3) 熟练掌握至少一门编程语言 (4) 通过系统设计来理解复杂度控制的必然性 (5) to appreciate the devotion of computer scientists to their subject and the exterior consequences (to the student as citizen) of the science’s development.
其次是提到了CS和其他学科在教学上的区别。其他学科可以基于一些现有的基础和常识来展开教学,而计算机这块没有(1977年)。Perlis认为,计算机科学[deals with symbolic objects whose nature we study mathematically],以及,编程是CS学习实践的最佳方法。
接着他引出了几个问题:学生应该编写什么样的程序?学习编程应当用什么编程语言?
同时Perlis补充了自己的一个观点,他认为初学者不应该过度使用现有的工具(比如现成的第三方库)。
it is more important to master self-expression during this initial contact.
关于这个观点,Perlis补充了一点,即学生的学习时间也是一个限制因素。换言之,如果时间充足,学生可以自己多造轮子等等(而现实情况是一个学期只有16周)。当然,在有限的时间内完成目标,也是一种能力的锻炼。
学习编程的过程总是伴随着排错。低级错误越来越少,往后则会被其他更深层的错误取代。然而,由于很多编程语言设计的结构存在缺陷,这会增加初学者的调试时间(比如为了解决一些文本层面的语法错误,可能需要把代码片段的位置重新调整,以便成功通过编译)。为此,学生在编程的时候,同时还需要掌握相对程序设计本身无关的一些,可以加快编译调试流程的相关技巧(注:比如Makefile)。
综上所述,Perlis相信, APL is the most rational first language for a first course in computer science.
虽然BASIC 和 FORTRAN确实比APL更容易上手,但相对前面的五点要求而言,APL更值得掌握。
Part2:Style and Idiom
APL的特性:简洁,组合性[composability]与自然语言一致[字/词/句/段,英文是symbol->word->sentence];而APL语句的简洁,可以更好的体现程序本身的结构(而这种结构的体现,在其他编程语言里面通常需要几页的代码量)。基于APL的简洁和特性,使得一门16周的课程可以设计安排的更丰富合理,而后期一系列练习可以相互间组成更复杂的任务。
注:这段主要强调的是idiom的形成,以及在学习APL的过程中这种意识和习惯的培养。{ One begins to appreciate the emergence and significance of style and to observe that reading and writing facility is tied to the development of an arsenal of idioms which soon become engraved in one’s skull as units. }
Part3:In Teaching Computer Organization
要了解计算机科学,需要先了解计算机(组成原理)。解释了这点之后,Perlis指出,使用APL可以很方便的对整个计算机结构进行建模/模拟,而且代码只需约40行(注:以前的计算机是真的"计算"机,所以软硬件结构不算复杂)。如果用APL写一个汇编处理程序,复杂度类似,也需要约40行。
而文本和图形处理,这些相对非底层的应用,相关练习的实践代码量则更少。例如:做标题列表的排列索引(约12行),[显示,旋转和缩放]复合多边形(约20行) ,函数示意图(约5行),等等。而一些文件处理问题,如工资单和人员搜索,不论是否使用内置函数,都只需几行就可以搞定。
这里引出了一个不容小视的结论,在APL的学习实践过程中,学生会最终意识到,自己不用依赖现有的复杂系统和第三方库也能实现很多自己想要的功能,进而激励自己编写自己需要的程序,构建出属于自己的一个完善的体系(走到这一步,则说明他已经对系统的各个细节都有了足够的了解)。
还有一点值的注意的是,无论任务有多复杂,APL通常都是FBAPP (FORTRAN or BASIC or ALGOL or PL/I or Pascal) 的语句或行数的1/5到1/10。 由于APL通过其primitive functions的组合控制,代替其他编程语言中通过显式控制语句实现的业务流程,因此APL程序中的错误数量远远少于FBAPP中的任意一门编程语言。
接着,Perlis提到了结构化编程和程序验证的话题。他认为,两者都很重要,但它们的内容和重要性在很大程度上取决于程序所用的编程语言。之后他列举了几点APL在结构化编程和程序验证方面的优势(简单说就是APL大法好)。
注:FBAPP类编程语言,现在可以归类成,类C编程语言,因为FBAPP里面AP已经进博物馆了(FB和Pascal还没死。
part4:APL与硬件架构
简单说,APL不适合当时的主流架构(注:比如冯诺依曼架构),相比较之下,类C编程语言更适合。但是,除此之外,也有其他更适合APL的架构,比如新的[array processing computer]。换言之,Perlis认为,我们不应该抛弃APL或限制它的发展。我们必须设法将它与通用计算机相匹配。我们必须设计更适合APL的编译器和计算机。
part5:性价比高,学到就是赚到 / More Cost-Effective than BASIC
成本是教学过程中需要考虑的一个重要问题。集成APL的计算机系统,1977年每个终端的成本约为10000美元,大约是BASIC成本的两倍。However,随着APL系统设计逐渐成熟,集成电路的成本下降,这些都将成为历史。Perlis同时给出了一个说法:假设APL在当时变得跟BASIC环境一样便宜,那么在相同的时间内APL还是能干BASIC两倍的活。
最后,Perlis提了一下关于在计算机科学入门课程中使用APL的另外两个问题。首先,大多数大学计算机科学家并不真正了解APL。他们还没有意识到在APL中思考它意味着什么:
They haven’t appreciated what it means to think in APL — to think about parallel operations in arrays and to distribute and submerge explicit looping among its primitive functions.
这时Perlis类比了当年,许多大学的数学系在尝试用新的课程安排取代微积分时遇到的困难(总有第一个吃螃蟹的人)。
其次是:
The second issue is of a different kind. I am firmly convinced that APL and LISP are related to each other along an important axis of language design and that acquiring simultaneous expertise in both languages is possible and desirable for the beginning student. Were they unified, the set of tasks that succumb to terse, flexible and expressive descriptions will enlarge enormously without overly increasing the intellectual burden on the student over his initial 16 week contact period.
Above all, remember what we must provide is a pou sto to last the student for 40 years, not a handbook for tomorrow’s employment.
注:最后这句话,有点类似最近有人提到的一个说法,叫完美的苍蝇。
PS:epigrams programming 这个写的挺有意思,推荐阅读。标题的Lyrical Programming可以理解为歌词式编程(念经大概也算把
以数之名:In Praise of APL 后记的更多相关文章
- Github上Laravel开源排行榜Star数61-90名
Github上Laravel开源排行榜Star数61-90名,罗列所有 Laravel 开源扩展包,含 Github Star 数量,下载数量和项目简介.默认排序是按Star数量从多到少来排 61.c ...
- Github上Laravel开源排行榜Star数31-60名
Github上Laravel开源排行榜Star数31-60名,罗列所有 Laravel 开源扩展包,含 Github Star 数量,下载数量和项目简介.默认排序是按Star数量从多到少来排 31.c ...
- Windows PowerShell 入門(8)-関数編3
この連載では.Microsoftが提供している新しいシェル.Windows PowerShellの使い方を解説します.今回は.フィルタ.スクリプトブロック.変数のスコープについて取り上げます. はじめ ...
- CET4
Directions: For this part, you are allowed 30 minutes to write a short essay on the challenges of st ...
- 前端学HTTP之缓存
前面的话 Web缓存是可以自动保存常见文档副本的HTTP设备.当Web请求抵达缓存时,如果本地有“已缓存的”副本,就可以从本地存储设备而不是原始服务器中提取这个文档.本文将详细介绍缓存的相关内容 功能 ...
- 使用 Visual Studio Online 进行协同开发
Visual Studio Online(原来的 Team Foundation Service),是项目数据在云中的主页.在我们的云基础架构中只需数分钟便可启动并运行,无需安装或配置任何服务器.设置 ...
- 某中国500强企业BI系统成功应用案例
随着某集团20多年的不断发展发展,现已成为中国500强.中国大企业集团竞争力前25强.中国信息化标杆企业和国家重点火炬高新技术企业.拥有总资产数十亿元.员工数万名,涉足电力.家电.能源.等多个行业,并 ...
- WCF的三个名称/命名空间,你是否傻傻分不清楚?
在定义和寄宿WCF服务的时候会面临三个名称/命名空间,它们分别是ServiceContractAttribute.ServiceBehaviorAttribute和Binding的Name和Names ...
- HTTP协议学习---(六)缓存
本文介绍浏览器和Web服务器之间如何处理"浏览器缓存",以及控制缓存的http header. 本文会使用Fiddler来查看HTTP request和Response, 如果不熟 ...
随机推荐
- java0426 wen IO2
- ORA-08176 错误的一个案例
在演示事务的read only mode 的时候,因为一个错误有了这个意外的收获.场景是这样的: 在session 1 中执行了如下的语句. SQL> set transaction read ...
- AndroidStudio生成APK注意的几个问题
生成APK遇到两个问题:一是生成的APK安装失败(没有勾选V1所致),二是生成APK后,百度与谷歌地图不显示(SHA1值改变所致). 通过Build>Generate Signed APK生成A ...
- 编程类-----matlab基础语法复习(2)
2019年美赛准备:matlab基本题目运算 clear,clc %% 计算1/3 + 2/5 + ...3/7 +10/21 % i = 1; j = 3; ans = 0; % while i & ...
- 异常处理与网络基础中的tcp,udp协议
# 异常处理: # 什么是异常?异常和错误的区别 # Error 语法错误 比较明显的错误 在编译代码阶段就能检测出来 # Iteration 异常 在执行代码的过程中引发的异常 # 异常发生之后的效 ...
- Java对象、引用、实例
https://blog.csdn.net/zmx729618/article/details/54093075
- 支持向量机(Support Vector Machine):超平面
超平面 超平面是 $n$ 维空间的 $n-1$ 维子空间,类似二维空间的直线,三维空间的平面. 分类学习最基本的想法就是基于训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开.以二维空间为例 ...
- Vue-admin工作整理(五):守卫导航
一.作用: 它可以帮我们在路由发生跳转,到导航结束的时间内,做一些相应的逻辑处理,分为:全局守卫,和专项守卫 1.全局收尾: (a).前置守卫:router.beforeEach(to,from,ne ...
- UE4外包团队:更新一下UE4和Unity3D案例
全部的贴图都是用出的法线贴图构建的话只用了阳光和天光,都是静态光源,视角是第一人称模板最后的效果嘛就是全4K,120帧,0错误0警告,场景小是小了点但是效果还不错. 工作活有时间更新,欢迎有UE4和U ...
- vue--transition-group
1.为什么要使用<transition-group> <transition></transition>是vue封装的过渡组件 <transition nam ...