昨天的第一节公开课给所有正在奋斗c和java的小组成员上了一节引人入胜的黑科技之课。从lisp开始,或许从此我就深深的爱上了Scheme这种充满括号的奇特语言。
因为非计算机专业的学生,所以对c的印象不是那么深刻,在处理问题采用方法的时候,可能就会照猫画虎的采用拿来主义思维然后再原有的基础上理解,精通然后就是所谓的我学过,我敲过,我就会了!然而事实真的如此么? 我的确懂了不少东西,在我的硬盘里也有不少代码静静地躺在那里供我阅读,供我修改,然而我只是在别人提供的语法基础上采用他的方法来解决问题,那原理呢?
于是就有一个引人入胜的问题:什么叫做编程。看到此时可能就会有人用硬盘里的代码告诉直接告诉我,这就是编程!当然我理解每个程序员会有那么多代码要维护要忙,但是,问题是,当我们真正去忙于编程的时候,有没有想过,编程到底是什么?
老师从一个很引人入胜的角度开始讲,就是我们要告诉计算机怎么去解决问题!
就好像一个小孩子从懵懂开始,计算机是混沌的,他不认识1是1 也不知道怎么去表达世间万物的称谓,所以我们会告诉他说这是什么,那是什么,然后慢慢的教授一切他所需要的一切知识和技能。
那么我觉得对于初识编程的人来讲,lisp再适合不过。
在接触lisp的两天里,接触了很多括号。这些括号会告诉计算机什么是什么,什么要怎样做的问题。然后唯一的感触就是递归的使用频繁。这个语言就是强迫你在使用递归,而不是形如for while do while之类的循环。我觉得这样做的编程哲学在于,一个点重复利用就成为了一个线,一条线重复利用就成为了一个面。那么一个小过程,被另外一个小过程利用,或者被自身递归引用,那么就跟道家所讲的,一生二,二生万物的思想,在某种意义上,是相同的。然而,lisp整个体系中不乏这样的高明智慧,比如 括号map形的运算形式就是树的应用,比如,原有的可怜的要少的关键字却能造成不菲的有价值的代码,这样的例子不胜枚举。
在道哥的专著 黑客传说天生我材中,主人公就是学了lisp才在以后的exp编程中游刃有余,而真正的事实是,lisp不会对以后语言学习产生多大的影响,而真正影响的是,你编程的思维方式。
如果说编程是用锤子来雕塑,那么编程语言就是那个锤子,然而锤子的本质上并无差别。而我想,lisp是那个最奇特的锤子,它教会你怎么去砸,这大概就是lisp的真谛。
题外话:lisp原先用于人工智能开发(可能现在也在用),我觉得lisp最核心的部分在于过程之间的嵌套,那么想象一下,如果一个电脑,有一天也会用嵌套来生成一个更为强大的过程,那么他会不会有人类相似的学习能力,以供自身的进化。前段的时间的Alphgo与李在石的围棋交锋中,据说alphgo从研究对手的棋局中get到打败对手的方法。所以,强大的根源不在于,原有的库函数基础,而是你本身的衍生能力的强大。当然这话,在人类科学中,也同样适用。
以上内容如果有错误观点请与作者指出,以便作者即时更正,谢谢!