【实验】用 elisp 教编程

其实,如果你考虑学完之后应用到其他编程语言上的话,其实 Lisp 系本身就不是什么好选择。怎么说,现在主流的语言还都是命令式的思考方式;而 Lisp 或多或少带点函数式的思路。Lisp 世界的 OOP 和「主流」的 OOP 差别也是很大。就不说语言特性上的差别,第一眼的语法,就和其他语言差得太多了。另外,elisp 的绝大多数代码,跟其他编程工作中写的代码类似吗?如果说学其神而不是学其形,确实有效;但是这样的话,The Little Schemer 绝对是一个优秀的学习资料了。

1 个赞

我投scheme的R5RS一票,语法就50页不到的pdf,而且在Emacs中写,体验和写elisp也差不多。最近刚开始学elisp,感觉变量作用域各种千奇百怪,非常恐怖。

1 个赞

好些经典的 Lisp 入门书确实如你所言,例如 SICP 讲了好久才到 side effect。但 elisp 似乎挺命令式的,因为很多都是编辑命令,总是要输出点儿什么东西,也就有了 side effect。

OO 的话,我还没想好,因为觉得不算入门一定要学的东西,或者也可以留到 JavaScript 中教。

操作:移动光标到行结束,输入句号,一比一翻译成代码:

(goto-char (line-end-position))
(insert ".")
3 个赞

目前我比较困扰的是,怎么教英文不够好的人

1 个赞

请问,他读几年级,还是你被长辈逼得

已经毕业了,教着玩

更新 2020/04/16

之前我都是开 zoom 基本上即兴讲(因为之前主要是跟着 elisp intro 走,不需要太多准备),后来发现这样:1. 有时候因为我自己没想明白而耗费时间 2. 常常一节课两三个小时,不利于课后复习。

所以想到,可以就各 topic 分别录小段的视频,这样1. 讲得太差的话可以重录,2. 时长较短方便复习。

试了一下:【肉山编程入门课 2020年4月】1.4.1 把函数做为参数传递, apply, funcall_哔哩哔哩_bilibili

  • 大家有什么建议请尽管讲
  • 我平时很少写 lisp,所没太优化过编辑操作,大家看到哪里有提升空间的还望指点下啊
5 个赞

赞赞赞,行动派。

看了下视频,建议讲解时需要的用例提前敲一下,防止在讲解过程中再debug。还有就是可以说明一下reduce和mapcar的区别和使用场景,感觉讲解的不是很清晰。总之就是建议提前准备的内容要再细致一点,落实到文本,包括概念的理解,对比,用例的实现,总结提取本质的东西。这样在录制视频的时候更能条理清晰。这是我的理解。

另外,留练习的思路很棒,声音很好听,小伙子长得也不错。 :dog:

2 个赞

字号调大些,我眼神不好看起来费劲。可以用 C-x C-+ 调大。

多谢你的建议哈。

这次纯粹只是验证一下想法,相当于 prototyping,所以并没做充分的准备,如果实验结果尚可的话,我是有想法迭代打磨出一套『编程入门课』视频的 —— 这是为什么视频标题上有注明“2020年4月”。


只是有一点我还没想好,就是要不要在讲解过程中 debug:通常课程中好像不大会有,但我有时候又觉得『展示一段代码实际上是如何写出来的』也是教学的一部分,比如我自己,就挺喜欢看 Handmade Hero (直播从头写游戏的全过程)。

另外单纯从 emacs 的角度讲,网上有不少『展示某个特定的编辑功能』的视频,当然很有用,但我很希望也能看到『用 emacs 进行真实编程』的视频 —— 其实早期的 Handmade Hero 就是这样,我常常想如果能看到 @manateelazycat / @redguardtoo 这些高手的同类型视频就完美了。

1 个赞

好的,多谢建议

这是很好的,我指的debug不是现场敲代码,而是遇到错误时调试的过程。当然换个角度看,代码调试也很重要,debug的过程观众可以学到很多经验,但是也会拖慢讲解的进度和节奏。提前敲一遍的目的就是排除由于自己的不熟练导致的一些低级错误。

可以专门录一期关于代码调试的,故意设置一些错误,然后讲解调试的技巧。

1 个赞

我知道你的意思,我所谓的『一段代码实际上是如何写出来的』就包含了 debug 的过程的,因为实际编程中这是无法避免的。提前敲一遍避免低级错误确实应该。

这是用的什么软件录的? 有样学样,咱也录个。

??(占位符)

我是用 zoom 录的,创建会议,然后 share screen,然后 record

1 个赞
  1. 源码随写随跑,反馈循环非常顺畅
  2. 自带文档,非常方便查看
  3. 搭建环境非常容易,只用下载一个 Emacs 就行
  4. 自带大量的真实源码可供阅读,随时修改随时看到结果
  5. Lisp 的语法非常简单,且非常严谨

欧几里得的公理也是五条,把第五条去掉的非欧几何也同样成立

我觉得javascript比elisp要好

elisp的语法虽然简单,但基本概念却并不少,比如说list array vector hashtable class

js的语法看似复杂,概念却少的多,只有基本类型和object

用一个复杂语法的精华部分比一个简单的语法要更好

学会了js,迁移到python java会很容易,而elisp则没有那么简单

emacs是可以轻易获得,但是并不能容易操作,你得有个键盘才行,在手机上基本不可能,但现在人们用手机的时间应该会超过用电脑的时间

用js写的东西,可以很容易的展示给别人看,能提高积极性。

js自带标准的gui库,能解决生活中的某些问题。

js如果遇到问题,百度一下会有几百个答案,elisp遇到问题,google一下都不见得能搜到。

最近看到了个词 serverless,js技术是标配,更有前途。

js其实和c++很像,你可以用它写过程式,也可以函数式,还可以oop。