BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

人类语言与计算机语言
录制于:

| 受访者 Douglas Crockford 关注 0 他的粉丝 作者 杨赛 关注 3 他的粉丝 发布于 2013年12月26日 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!
24:57

个人简介 Douglas Crockford是JavaScript开发社区最知名的权威,是JSON、JSLint、JSMin和ADSafe之父,是《JavaScript:The Good Parts》的作者。 Douglas Crockford现在供职于Paypal。他曾是Yahoo的资深JavaScript架构师;曾在Atari公司(视频游戏工业的领袖)开发了办公自动化系统,同时也完成了对于游戏和音乐的研究;曾任Lucasfilm(卢卡斯)电影公司技术总监;在Paramount(派拉蒙)公司任职过新媒体执行主管;在电气社区,通常为人所知的是communities.com的创始人兼首席执行官;他还创办了State软件公司并作为该公司CTO,这也是他发明JSON时所在的地方。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。

   

1. 欢迎您来到2013年的QCon北京大会。十分感谢你接受我们的采访。那么,我们第一个问题是昨天你说到学习人类语言和编程语言,而人类语言是非常难学的。就这两种语言,最主要区别是什么呢?

道格拉斯:我们使用语言这个词来描述人类语言和计算机语言;但它们的确是完全不同的事情。它们是如此与众不同以至于人们几乎混淆用同一词语来定义它们。当我们说人类语言时,我们所说特定的事会有很多言外之意。我们交流事情有关我们来自哪儿,我们所处社会上的角色或者谈话中的双方。

我们马上可以在不同情况下讲话。人类语言是非常复杂的。在我们语言中某些言语可能就判定出局外人,陌生人和伪装者。我们会谈到我们实际状况。我可以试着主动,或者被动。这一切都在发生。我可以夸奖或者显示轻蔑,或者同时两者兼有。这些都会在人类语言里出现。但所有这些不会出现在计算机编程里,是吧?计算机编程纯碎是关于意思,关于你让计算机为我们做些工作的语意。

有时我会认为当程序员开始用些人类语言到计算机编程,他们会感到困惑,甚至没有意识到这个问题。所以他们试着主宰,或者要掌控或者变优越或者其他与编程行之有效不相关的事请。以至于到最后让编程很难运行,因其目标应该是让编程行之有效地完美起来,而不是完全其它的目标,这则会干涉了其主要目标。

人类语言绝不是关于完美。我们总是言之有意。有时我们说到交流信息或者下达指令,但还有其他言外之意。常有谦辞语,常用语或者形式语。人类语言是非常复杂的。

   

2. 你曾在雅达利公司的游戏和音乐部门任职。当我们弹奏音乐时,很多次,我们想到:“这就是即兴时才思而涌的曲子。”有时在编程中,你也会发现这样的时候去编程而不是按部就班地编程。所以你也曾想过编程就是一门艺术的行为?

道格拉斯:绝对有一种创造性的成分在里头。因为我们通常处理着不全面的信息,正如我们工作时,有创造的洞察力贯穿整个过程是必要的。我们常会发现新的技巧。或许它们对世界而言不是新的。但对于个人而言它们是新的。所以我们也常在创作。

麻烦的是编程这种创新会有不同的水平。有价值的是在深层水平,基本结构。你可以使之运作起来。但是我们常常浪费太多的时间在其肤浅琐碎的层面,我们会做些编程模型以显示我们很有创造力,但是那不关乎创造本身。其最有创造力的是在深层结构。

所以较深层水平会是算法。它会选择如何拆分为对象或数据结构。而编程层次上的创造,我会把右边大括号放到左边,或者把分号放到左边,以显示这是多么有创造力,但这根本就没意义。所以并不是有创造力的编程水平就是有建设意义的。

   

3. 好吧,让我们继续话题。当谈到编程语言,其实有好多种,我意 思是它们都完全不同。如果你看CSS和固定的语法作为一种编程语言,它们是非常不同的。所以年轻人开始学习,行业里得某些人会推荐他们从C或者Lisp语言学起,他们会说:“开始时不要学习Java。”所以从你个人的经验讲, 你是怎么看的?

道格拉斯:我开始时学的Fortran,我不会推荐这个给任何人。我知道很多人开始时学的Basic,他们实际上成为了好的程序员。所以关键是不要太固定在第一种学习语言或者学习了一种就止步了。我给大家的建议是学习尽可能多的编程语言,因为每种语言都会教会你些事,你应该对这些课程如饥似渴。

所以如果你学习了一种新语言,它会使你在其他编程语言上掌握得更好,你会更有见解,和多种思维模式去思考问题;而你只学习了一种,这上述的都不会发生。所以有些人第一编程语言是Java,我对此不会感到难过。有比这更糟糕的事情发生过。但有些人的语言仅为Java,我就感到非常可惜。他们在文化上就被剥夺权利啦。

   

4. 所以假若你现在给些推荐,你会建议些什么。

道格拉斯:许多。如今我们在编程语言复兴时期。有许多非常棒的语言可以考虑。JavaScript有许多好的一面。它值得我们去关注。Scheme也是非常好的和非常棒的语言。Scala是基于JVM语言里最棒的。还有Erlang,E编程语言,许多好的编程语言。我推荐尽可能地多学。它们都是免费的。编程语言现在是免费的,所以没有理由不去学,那么就尽可能学到所有。

   

5. Scala语言有较深的学习曲线。

道格拉斯:任何一种编程语言唯一付出的代价就是学习曲线,这是值得投资的。

   

6. 在你的博客,你提到关于英语语言的语法改革,所以正如你的侧重在于其简洁,精准和标准以及类似的语法改革。那么编程语言里已有些同样的尝试使其更像是人类语言,就如同你说英语,但你不能对电脑说话。所以关于这一趋势,你会有什么见解?中文是非常模糊的。在不同环境下,你所表达的一个句子会有不同意思。假若你的孩子开始学习语言,你会教他写些计算机能理解的东西,或者你想教会计算机去理解你孩子所说的事情?

道格拉斯:我会两者兼做。所以我们有个长远目标试图让计算机理解人。我们在这目标上取得更多的进步,我们越来越发现人们的确有多么复杂,随之而生的问题会变得越来越难。

换种说法,第一种编程语言之一是COBOL,看上去更像是英语。其最初想法是让商业领域的任何人能够写一个这样的程序,但他们很快发现,压根不是这么回事。人们需要训练和规范才能用这种编程语言写出东西来。随后,大家又退一步,想让经理们能够读懂编程语言。他们不信任程序员,不知道他们在做什么。如果其他人可以来读他们的编码,我们会相信他们不是来卷钱或者去做些别的事情。但是他们又发现这也行不通。 人类语言比起计算机语言运行得如此不同。每当你看某人试图把一些人类语言滑进计算机语言,类似CoffeeScript有一个例外的语法,你可以说只有这是true的情况下才指派这个,从哪方面看它都有点像英语——但是这只说明它非常难以维护。因为结果是,如果你又说如果这是true的情况下不要做两件事,你必须重写这部分代码以让其运行。这个优化是针对一个特殊的例子。我们有很多经验,表明这些特殊列子的优化是非常不值的。

   

7. 有些人不想深入去编程,但他们仅想让某些事运行起来,写代码可行吗?

道格拉斯:我认为这是不可行的。所以我们常希望我们能用上Smalltalk,你听说过Smalltalk。其最初动机是建立一个系统,让孩子们做他们自己的编程。这也是为什么它被叫做Smalltalk,因为它是为小孩儿设计的。Smalltalk成为一种非常棒的语言。它也是我们有过的最好语言之一,我所推荐人们学习编程语言列表里的之一。一些孩子用这种语言做出些东西,但它远没有达到最初目标,是的,既让任何孩子可以选用这语言,写出他们自己的游戏或者类似的。

这东西的确也非常难;编程都是关于复杂事物的管理。计算机编程是人类所做的最复杂事情,怎样让我们编程语言趋于随意可行。当你有些随意技巧,试着用它们和一些非常复杂的事作对,事情可能非常快地会失控。所以不幸的是,你还需要正式训练,规范技巧来帮你管控这些复杂事。

   

8. 从某种意义上说,如果想要有50%的人们成为程序员,那是非常不可行的?

道格拉斯:我曾认为每个人都应该学习编程。当我开始编程,我有着清晰的概念,哇,我可以用世界上的任何事物,组织它们,使其自动化。这的确很强大。我认为每个人应该学习怎样能做到这个。但现在我不再这样认为。现在我知道,我们这些能编程的人身上有某种特殊的东西。我们肯定有什么问题,正因如此我们才能写程序而普通人写不出来。

我们花费多数时间去调试程序,我称其为无底洞,调试是痛苦的,寂寞的,悲伤又令人生厌的。没有调试的编程是行不通的。普通人不能忍受调试。他们不会做这个。所以如果一个普通人写了一个程序,他们必须调试它,他们会说:“我要换专业。我不知道你们这些人出了什么问题。这好可怕。我想要生活,我有自尊,我的尊严。我绝不会再做这件事。”而我们不会在乎,是不是?我们会继续,一定程度上这是因为我们受健忘症之苦,我们忘记我们在调试上所花费的时间。所以我们继续着而没有留意到我们逝去的时间。

普通人管控计算机的语言问题,它不仅仅是一个语言过程,它还牵扯到复杂问题的处理。所以假如有了一种完美语言,一种编程语言,看上去更像是英语或者汉语,这意味着你会说出错误的语句,坏事会要发生,然后人们着手解决它。无论是以汉语还是英语作为起点,都不会让事情变得更容易。

我很抱歉关于我们科技,我有这种悲观观点,但是这是软件的性质。软件是非常难的。软件有这些无与伦比的特性,如果我们能立马做些事,我们能复制它,数十亿人们能立即受益于它。这是非常了不起的。其他科技都做不到这个。其代价就是我们要让软件运行起来,这就是非常非常难的,我们中只有少数人非常精通于此。

   

9. 这是非常有趣的。好吧,那么我们的下一个问题是关于Blissymbolics。总的来说,这语言的作者,他开始时学习汉语,但随后他认为汉语太难了,所以他创造了这种语言。为什么你会对这种语言感兴趣?

道格拉斯:当我开始了解Blissymbolics,那是几年以前的事。我开了家公司,在互联网上做些事,在那时互联网刚刚变得流行起来。我们预计我们的软件会让世界上每个人都用上。等一下,我想到,世上的每个人,他们不能互相交流。所以当人们有语言障碍,我们怎样才能创造全球运行社会体系呢?

好吧,我开始查找,我们所能做的是找到一种通用语言?我看了许多例子,除了Blissymbolics外,其他的都行不通。比起其他的,Blissymbolics是非常有希望的,因为其创始人布利斯所设计的象形文字都有其意思。最具特色中国汉字有其意,对吧?但数以千计的汉字完全是随意的,并没有其意,对吧?

布利斯就想了:“如果每个符号都有含义,又会如何?”所以如果他能组合原子符号中一小部分,随后他能组合它们产生出其他所有符号。所以一旦你知道前一百个左右的符号和其规则,它们怎样扩展的,再告诉其他人,那么它就很容易学会。事实上,有份在加拿大做的研究针对残疾儿童,表明孩子们学起布利斯符号比起他们自己母语学习会更容易些。所以Blissymbolics是非常简单易学的。

自从有了谷歌翻译,它做了这种令人震惊的了不起的工作后,我认为我们不再需要一种通用语言。尽管Blissymbolics还是非常有趣的,但针对我们现有的问题,它不是个解决方案。

   

10. 但关于谷歌翻译的问题是它不够精确。

道格拉斯:它是不精确的,它非常不完美,但它还需要做些小努力。在这世界上,反而是那些不好又不需努力的事情比起那些趋于完美仅需要一点努力的事情变得更加流行。

   

11. 但假若Blissymbolics做为一种教育语言,从Blissymbolics到其他语言的自动翻译会是怎样的?

道格拉斯:我还没看到其他人着手解决这问题,但问题会产生。所以布利斯意图去掉所有使人类语言复杂的那些东西。所以那些他所谓“评估词”也就是主观词,那些不精确的词语,那些意思多是应用于感情上回应而不是合乎逻辑回应的词语。他试图从他的语言里去掉所有这些词语或者当它们被用时,简明地表示它们。

所以这使得它与所有其他语言非常的完全不同,因为它的确只关乎其意,而别的都被抽离出去。要试着翻译东西到Blissymbolics,这会是非常难的,因为在我们自身语言里的事情,它们是非常含糊的。布利斯说道:“不行,你得精确地描述其意思。”甚至了解你自身语言,或许你写给自己的一个句子,它也很难识别:“好吧,我到底要表达什么意思?”

布利斯要求一个精确意,一般的人类不习惯这样的精确水平。唯一习惯于这种精确水平的人就是计算机程序员。所以Blissymbolics在某些方面好像是一种编程语言,这也是它为什么没有流行起来的另一个原因。

   

12. 这也是非常有趣的,这就是我所有的问题。你还想对我们InfoQ读者说些什么话吗?

道格拉斯:我非常高兴能在这里对话。谢谢。我非常喜欢你的问题。

记者:十分感谢。

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT