看待编程的视角

个人计算社区(一个观念社区而非实际社区)和主流软件领域的分歧是观念层面的, 技术差异只是观念差异的结果。主流领域认为编程是给计算机一组指令解决某些问题, 从这个角度看, 唯一有价值的东西是结果, 一个软件只有解决某个问题才有趣, 而编程本身不有趣, 因此它应该交给专业人士来做, 其他人最好可以忽视它。个人计算社区认为编程是一种表达和探索思想的方式, 软件开发的过程可以视为理解和记录知识的过程, 其结果顺便能够运行在计算机上。制作出软件与解决问题只是知识健全后的结果, 但不是最重要的结果, 个人借助计算机更好的思考才是。人是目的, 软件是强大思想的副产品。

选择 Snap! 的原因

采用个人计算视角之后, 我逐渐远离了主流计算生态, 开始选择个人计算社区的编程环境, 以下是我采用过的一些个人计算环境:

  • Scratch
  • Pharo
  • Squeak
  • Etoys
  • Lively

最近,我开始将 Snap! 用作主要的计算/编程环境。

相比于我之前用过的个人计算环境, Snap! 有一些突出优点,以下我选择它的主要原因:

  • 运行在浏览器里: 由于浏览器正成为新的操作系统, 基于浏览器的系统有许多好处, 它能够免费得到整个生态努力的成果。由于 Web 生态的开放性, 能够轻松与其他事物互操作。
  • 从 Lisp 那里继承了处理列表的强大能力; 从 Smalltalk 那里继承了 liveness 的特质。
  • 出色的可扩展性: Scratch3.0 也运行在浏览器里, 我一度将其用作日常计算的环境, 但其可扩展性远不如 Snap!, 扩展 Scratch 是一件相当不愉快的事, 这与其糟糕的架构决策有关,我在这个分享里做了讨论。 Snap! 让我可以直接在最终用户环境里扩展它,而不是进入"下一层", 简单而愉快。
  • 新功能的更新和 bug 的修复, 都很积极, 有活跃的社区: 这是我选择 Snap! 而放弃 Lively 的原因。

当然, 选择 Snap! 另一个主要原因是, 我们在 Dynaverse 中使用它!

很早就知道 Snap!, 但一直没有深入了解, 深入了解后, 发现它出色程度远远超出我的预期! 这与我采用 MicroBlocks 的经历类似, 后悔三过其门而不入。

我认为目前最好的图形化硬件编程环境是 MicroBlocks, 而最好的图形化软件编程环境是 Snap! 。

日常计算/编程的需求

以下是我日常计算/编程的主要需求:

  • 探索 Dynaverse: Dynaverse 构建在浏览器里, Snap! 及其内置的JavaScript function 是非常棒的研究工具。
  • 系统编程: 与本地及远程操作系统交互, 为了达成这个目标, 我构建了 Python function
  • 探索数据: 我之前使用 Jupyterlab, Snap! 给了我更多的交互性,更少的心智负担。
  • 探索想法: 我之前喜欢在 Scratch 探索想法, Scratch 是探索和表达想法的绝佳媒介。在 CodeLab 的时候, 每当我想与同伴分享 idea, 总是习惯性地打开一个 Scratch 项目, 然后着手以可视化的方式展示想法。我目前依然保留这个习惯, 每当我模模糊糊察觉到一个 idea, 喜欢在 Scratch 里捕捉和探索它。甚至之前的演讲稿也是在 Scratch 制作的。最近我开始在 Snap! 里做这些事, 它比 Scratch 给予我更多支持。
  • 理解算法和数据结构: Snap! 是我目前发现的最佳游乐场! 我最近通过它克服了对递归的恐惧。 我也非常喜欢使用它向新手解释编程语言中的概念, 它让抽象的概念和计算的过程被看见, 极大地提升了可理解性。

参考