编程语言与软件工程2018cs.brown.edu
编程范式及其超越
Programming Paradigms and Beyond
进阶 · 约 75 分钟读完前置知识:编程语言基础、递归与范式概念、计算教育/教学法基础
导读
这篇论文是《剑桥计算教育研究手册》中的一章,梳理编程语言教育中的盲点与研究机会,讨论如何教授编程范式以及若干教学方法的成效。章节涉及 notional machines、可视化/块语言等教学工具,并指出值得进一步研究的方向。适合编程语言教学、学习或设计者阅读。
HN 关注点:如何教编程范式、递归等概念,以及可视化/块语言和未来编程教育;评论区分享教学经验并讨论孩子十年后如何编程。
HN 评论精选
这几条评论里:支持 1 补充 3
补充用指称/结构递归策略学递归比操作语义跟踪控制流更高效、更不易被复杂度吓到。
关于“Notional Machines”(第4节)的想法,我最近意识到,我所说的“指称策略”(denotational strategies)在学习上可能比“操作策略”(operational strategies)高效得多。例如,通过操作语义/抽象机器模型学习递归,会让递归显得很复杂:维护栈、跟踪控制流都很难。另一种方式是使用结构递归模式(类似归纳证明),这样就不必在脑中走一遍控制流;只要各个分支正确,正确性就有保证。上面这段可能不太好理解,确实需要单独写一篇博客。
noelwelsh查看英文原文
Related to the idea of "Notional Machines" (§4) I recently realised that what I'm calling "denotational strategies" can be vastly more efficient for learning than "operational strategies". For example, learning recursion via an operational semantics / abstract machine model can make recursion seem very complex. Maintaining the stack and tracing through the control flow is hard. Alternatively one can use structural recursion patterns (think proof by induction) in which case you don't have to think through the control flow. The correctness is guaranteed if the individual cases are correct. Probably this statement isn't so understandable from the above description. It really needs a blog post of its own.
支持文本仍主导编程但非新手友好,期待可视化/文本混合的编程环境,尤其图/树编辑器和智能补全。
只想说我很喜欢你们“Visuals and Blocked Languages”那一章。我的职业生涯始于写 Flash,主要是因为我喜欢可视化并想用代码实现它。尽管有 Scratch 和其他块语言,文本仍然是王者。正如你们指出的,文本并不是对新手最友好的。我仍然认为可视化编程的圣杯尚未到来。编程的大部分工作是在描述抽象语法树。一个漂亮的、可视化树/图操作编辑器还没有被发明出来。能够把文本和可视化混合起来似乎是个好位置。我花了很多年思考和痴迷于这个概念,尤其是代码补全/Intellisense 方面。你们怎么看十年后的孩子会如何编程?
nojvek查看英文原文
Just want to say I really enjoyed your chapter on “Visuals and Blocked Languages”. My career got started programming Flash. Mostly because I loved the visuals and wanted to code it. Even though there is scratch, and other block based languages it seems text is still the king. Text as you’ve identified is not the most new comer friendly. I still think the holy grail of visual programming is still to come. Most of coding is describing abstract syntax trees. A nice visual tree/graph manipulation editor has yet to be invented. Being able to have a hybrid text and visual seems like a good place to be. I’ve spent many years thinking and obsessed about this concept. Especially around the ideas of code completion/intellisense. What are your opinions on how kids in a decade will code?
补充标题更像教学综述;推荐 Bret Victor 关于被遗忘编程范式的演讲作为补充。
很好的阅读材料。我觉得标题应该叫“Teaching Programming Paradigms and Beyond”,因为正文假定读者熟悉完整的 CS 图景,并评述了几种教学方法的成效。我还想推荐(标题同样有误导性的)Bret Victor 的演讲 The Future of Programming [1],它回顾了一些曾具突破性但后来大多被遗忘的范式。[1] https://www.youtube.com/watch?v=8pTEmbeENF4
veli_joza查看英文原文
Good read. I feel the title should be "Teaching Programming Paradigms and Beyond" since the text assumes familiarity with complete CS landscape and comments on success of several teaching methods. I would recommend (also misleadingly titled) talk The Future of Programming by Bret Victor [1] which goes over some groundbreaking paradigms that have since become mostly forgotten. [1] https://www.youtube.com/watch?v=8pTEmbeENF4
补充给出章节出处并推荐给编程语言教学/学习者。
《Programming Paradigms and Beyond》Shriram Krishnamurthi, Kathi Fisler,The Cambridge Handbook of Computing Education Research, 2019。讲编程语言教育的盲点与研究机会。推荐给任何教授、学习或编写编程语言的人。
efm查看英文原文
Programming Paradigms and Beyond Shriram Krishnamurthi, Kathi Fisler The Cambridge Handbook of Computing Education Research, 2019 Programming Language education blind spots and opportunities for research. Recommended for anyone who teaches, learns or writes programming languages.
相关资源
从这篇论文所有 HN 讨论帖的全部评论里整理出来的链接。
历次讨论
- 2018Hacker News 讨论帖156 分 · 33 评
同领域还值得读
Google 的软件工程(2017)
Software Engineering at Google (2017)
介绍了 Google 的软件工程实践,包括其单一代码库(monorepo)、几乎全部开发在主干进行而非分支、代码审查、构建系统 Blaze、协议缓冲区等工具与流程,并讨论了频繁重…
编程语言与软件工程2017 · 1,127 分 · 465 评 · 引用 15入门 · 约 45 分钟编辑精选Peter Naur:编程作为理论构建 (1985)
Peter Naur – Programming as Theory Building (1985)
Peter Naur 1985 年的经典论文《Programming as Theory Building》提出:编程的本质不是写代码或文档,而是在程序员头脑中构建对程序及其运行…
编程语言与软件工程2016 · 629 分 · 74 评入门 · 约 45 分钟编辑精选SciPy 1.0:Python 科学计算的基础算法
SciPy 1.0: fundamental algorithms for scientific computing in Python
这篇发表于 Nature Methods 的论文介绍了 SciPy 1.0——Python 科学计算生态的基石库,涵盖其核心算法模块(优化、积分、插值、线性代数等)、软件架构与社…
编程语言与软件工程2020 · 387 分 · 98 评入门 · 约 45 分钟编辑精选Lisp 的历史(1979)
History of Lisp (1979)
这是 Lisp 发明者 John McCarthy 于 1979 年为 HOPL(编程语言史)会议撰写的回顾文章,讲述 Lisp 的起源、设计动机与早期演进,文中也涉及 if 表…
编程语言与软件工程2018 · 352 分 · 44 评入门 · 约 45 分钟编辑精选使用 NumPy 进行数组编程
Array Programming with NumPy
这篇 Nature 文章介绍 NumPy 的数组编程模型及其在科学计算中的核心作用:以 ndarray 为中心,通过向量化操作让 Python 高效处理多维数组。
编程语言与软件工程2020 · 318 分 · 134 评入门 · 约 40 分钟编辑精选