看的黑客与画家想学 lisp,但是在拉勾上没有找到 lisp 相关的职位。

2016-03-02 15:52:02 +08:00
 wudanyang
那么问题来了,到底学习 lisp 能干什么呢?俗话说,白猫黑猫会抓老鼠的就是好猫。 lisp 只是一只好看点儿的猫吗?
9738 次点击
所在节点    程序员
73 条回复
nicevar
2016-03-03 08:39:10 +08:00
哈哈,楼上几位打击的,不过确实是白看了,楼主理想主义者
jimmy8chu
2016-03-03 08:51:11 +08:00
leancloud. cn. 他们就是用 clojure 的
asxalex
2016-03-03 08:57:53 +08:00
lisp 是一种信仰
wizardforcel
2016-03-03 08:59:05 +08:00
很明显作者在过度吹捧 lisp 。 lisp 开发效率高?函数式语言是公认的学习困难。要不然 OO 怎么会成为不成文的标准。实际上,各种 OO 语言发展到现在都有了无比丰富的生态, lisp 能干啥?
MrFinch
2016-03-03 09:29:35 +08:00
屠龙之技厉害,奈何龙少
iamxi
2016-03-03 09:32:57 +08:00
@wizardforcel OO 和函数式编程都只是一种思维方式而已。哪个更好,现在谁也说不好。不能保证面向对象就真的是提高了效率。如果真的难学,又效率低下,那为什么有这么多语言要往函数式这块发展呢。
robertlyc
2016-03-03 09:40:20 +08:00
javascript,ruby 都可以看做 lisp 的遗产
wizardforcel
2016-03-03 09:43:11 +08:00
@iamxi 一般说到“函数式语言”指的是纯函数式语言,你会把 js 当成函数式吗?脚本语言的确把函数作为 first-class ,但不妨碍其 OO 的主体部分。

OO 是不成文的标准,这个是显而易见的。无论是企业项目,还是 github 上的项目,都封装成对象的形式,而不是高阶函数(闭包套闭包)的形式。以对象为主体,闭包用作辅助,可以提升效率。但是纯函数式语言的闭包套闭包,实在是恶心。

在作者写书的那个年代,绝大多数命令式语言都没有闭包这个东西,不够灵活。现在不少命令式语言吸收了闭包,纯函数式语言也就没有用武之地了。看看 TIOBE 的排行榜就知道了。
chuan
2016-03-03 09:51:45 +08:00
可以看看 Racket ,属于 Lisp-Scheme family , https://racket-lang.org/
iamxi
2016-03-03 10:17:37 +08:00
@wizardforcel 面向对象的中的对象,本来就是对现实事物的抽象,但不是只要把东西都看成对象了就是 OOP 了。 restful 中的资源也可以看成对象。但确实不能说 restful 的接口都是 OO 的吧。现在来说 REST 不是一种规范吗。谁说都通过 OO 的封装了。封装是 OOP 的一部分,但是模块化的实现就不止 OO 一种。 windows 和 linux 提供的接口时候可没告诉我接口是哪个类下面的。

而且 OOP 和函数式并不冲突,要不然 python 怎么做到的完全基于面向对象,还能写出函数式的代码。从大教堂和集市中可以看到, C 之所以取代了 lisp ,完全是因为 C 的移植能力好。如果历史是 lisp 更易移植,恐怕现在的操作系统是 lisp 写的了。

函数式提供的是数学抽象,相比, OO 提供的抽象更容易让人理解,这也是为什么现在 OO 大行其道的原因。我没说哪个更好。我是一个 JAVA 程序员,学了 python 后发现,原来那些设计模式都 TM 是为了避免 JAVA 开发中一些弊端。学了 lisp 才发现,原来一个算法可以表达的如此完美,哪些什么类,什么对象,都可以去死了。
wizardforcel
2016-03-03 10:29:54 +08:00
@iamxi

你说的是狭义的 OOP 。然而 OO 的模式不仅仅只有基于继承那一种。比如 JS 是基于原型链的 OO , Golang 是基于组合的 OO 。你说的 linux ,如果你看过源码的话,它采用的是基于组合的 OO 。那些 struct 中的函数指针就是实现多态的途径。

linux 和 win32 的 api 以函数粒度封装,应该是历史因素。你看最新的 winRT api ,就是以类的形式封装的。
tabris17
2016-03-03 10:33:00 +08:00
哪有学会一门语言就出门找工作的,你以为是 PHP 啊
raawaa
2016-03-03 12:21:52 +08:00
@jsonline 那期听过,另外田春巨巨好像去意大利留学了,期间还跟老婆离了婚。这些八卦的真实性不知。
Rothschild
2016-03-03 12:40:29 +08:00
@pepsin lisp 在工业界当脚本用处多了,机械设计 AutoCAD 就有用 AutoLISP
bramblex
2016-03-03 13:15:46 +08:00
看到楼上几个业余的在讨论函数式,真心觉得蛋疼……
vincenttone
2016-03-03 13:36:07 +08:00
首先, lisp 不是纯函数式语言,因为有 define 和 let 这种允许变量的存在。反而 erlang 不存在变量。
第二, lisp 可以 OO ,实现上是通过 let 来保持内部状态的。而 let 是通过 lambda 来实现的。 define 也只是一个 hash 而已。
OO 只是一种模式,目的还是抽象, lisp 的基础允许这种抽象。
确实, lisp 的部分问题在于语法上,或许是这个问题导致了受众小,相关应用库少,推广不容易。

现在确实实际应用上 lisp 很少,貌似 auto cad 用到 lisp (未考证), emacs 扩展是用的 elisp 。
我觉得现在除了传说中人工智能偏好 lisp (未考证), lisp 更多是帮助人理解编程,相关书籍可以参考 sicp 。
黑客与画家这书上对 lisp 的肯定是属于作者那个年代的,我们没必要刻舟求剑。除了很 NB 的宏,其他语言也在慢慢借鉴函数式编程方法,比如 lambda 、 map 、闭包等等。
lisp 的函数式编程对后续的函数式编程语言影响自己是很大的,但是 erlang 、 closure 等语言火的原因和并发编程有关(未考证),这已经是近期的事情了。
楼主既然是为了工作,建议选个热门且自己真正喜欢的, lisp 可以作为提高技能的手段。

个人意见,不建议作为参考。
a68UkLHpycW7ImyV
2016-03-03 15:11:09 +08:00
拉钩,呵呵。
任何一个招聘网站的成功率都比拉钩高,而且不是一般的高。
SrvenX
2016-03-03 16:32:54 +08:00
学习 LISP 语言的思路比 LISP 本体好的多吧,而且作者本来也是这个意思。
那本书我也有看过,当时对我启发很大。
wowpanda
2016-03-03 18:49:40 +08:00
@wlbcs 还有哪些比拉钩成功率高的?感觉拉钩好多都是几十个人的小公司啊
lostpupil
2016-03-03 22:35:25 +08:00
Lisp 能屠龙

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/260532

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX