最难的开发语言

Python020

最难的开发语言,第1张

第十名、R语言

R语言,一种自由软件编程语言与操作环境,主要用于统计分析、绘图、数据挖掘。R基于S语言的一个GNU计划项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行。R的语法是来自Scheme。

提名词

R语言作者,George Ross Ihaka:在奥克兰大学统计系任副教授,是R语言的最初作者。

2

/10

第九名、Python

颁奖词

Python是一种广泛使用的高级编程语言,属于通用型编程语言。作为一种解释型语言,Python的设计哲学强调代码的可读性和简洁的语法。相比于C++或Java,Python让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。

提名词

Python语言作者,Guido van Rossum:生于荷兰哈勒姆,计算机程序员,为Python程序设计语言的最初设计者及主要架构师。

3

/10

第八名、C语言

颁奖词

C是一种通用的编程语言,广泛用于系统软件与应用软件的开发。C语言具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点。C语言编译器普遍存在于各种不同的操作系统中,例如Microsoft Windows、macOS、Linux、Unix等。C语言的设计影响了众多后来的编程语言,例如C++、Objective-C、Java、C#等。

提名词

C语言作者,Dennis MacAlistair Ritchie:美国计算机科学家。黑客圈子通常称他为“dmr”。他是C语言的创造者、Unix操作系统的关键开发者,对计算机领域产生了深远影响,并与肯·汤普逊同为1983年图灵奖得主。

4

/10

第七名、Go

颁奖词

Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go的语法接近C语言,但对于变量的声明有所不同。Go支持垃圾回收功能。

提名词

Go语言作者,Robert C. Pike:来自加拿大的程序员,曾经加入贝尔实验室,为 UNIX小组的成员。他与肯·汤普逊共同开发了UTF-8。目前为 google的工程师,参与编程语言 Go与Sawzall的研发工作。

5

/10

第六名、JavaScript

颁奖词

JavaScript,通常缩写为JS,是一种高级的,解释执行的编程语言。JavaScript是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它已经由ECMA(欧洲计算机制造商协会)通过ECMAScript实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。

提名词

JavaScript语言作者,Brendan Eich:美国程序员与企业家,JavaScript主要创造者与架构师,曾任Mozilla公司的首席技术官,并曾短暂担任首席执行官。

6

/10

第五名、Objective-C

颁奖词

Objective-C是一种通用、高级、面向对象的编程语言。它扩展了标准的ANSI C编程语言,将Smalltalk式的消息传递机制加入到ANSI C中。目前主要支持的编译器有GCC和Clang(采用LLVM作为后端)。

提名词

Objective-C作者,Brad Cox:美国计算机科学家。于傅尔曼大学主修化学与数学,于芝加哥大学取得数学生物学博士学位。Objective-C主要作者。

7

/10

第四名、PHP

颁奖词

PHP(全称:PHP:Hypertext Preprocessor,即“PHP:超文本预处理器”)是开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用。PHP的语法借鉴吸收C语言、Java和Perl等流行计算机语言的特点,易于一般程序员学习。PHP的主要目标是允许网络开发人员快速编写动态页面,但PHP也被用于其他很多领域。

提名词

PHP语言作者,Rasmus Lerdorf:出生于格陵兰岛凯凯塔苏瓦克,是一个丹麦程序员,他拥有加拿大国籍。他也是编程语言PHP的创始人,其中PHP的头两个版本是由他编写的,后来他也参与PHP后续版本的开发。

8

/10

第三名、Java

颁奖词

Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

提名词

Java语言作者,James Gosling:出生于加拿大,软件专家,Java编程语言的共同创始人之一,一般公认他为“Java之父”。

9

/10

第二名、C++

颁奖词

C++是一种使用广泛的计算机程序设计语言。它是一种通用程序设计语言,支持多重编程模式,例如过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计和设计模式等。

提名词

C++语言作者,Bjarne Stroustrup:生于丹麦奥胡斯郡,计算机科学家。他以创造C++编程语言而闻名,被称为“C++之父”。

10

/10

第一名、Visual Basic .NET

颁奖词

Visual Basic .NET(VB.NET)是.NET Framework框架下的一种多重编程范式高级语言。Visual Basic .NET属Basic系语言,其语法特点是以极具亲和力的英文单词为基础标识,以及与自然语言极其相近的逻辑表达,有时候你会觉得写VB.NET代码就好像在写英文句子一样,从这个角度来说,VB.NET似乎是最高级的一门编程语言,当然在Basic系语言中VB.NET也确实是迄今为止最强大的一门编程语言。

提名词

Visual Basic .NET作者,Alan Cooper:交互设计的提倡者。库珀有些时候被叫做 Visual Basic 之父,虽然大多数的工作是由微软的内部开发团队完成的,但是对于Windows可视化设计工具的创意是来源于库珀的。

刚刚,Deepmind在Reddit的Machine Learning板块举办了在线答疑活动AMA,Deepmind强化学习组负责人David Silver和其同事热情地回答了网友们提出的各种问题。由于在AMA前一天Deepmind刚刚发表了《Mastering the game of Go without human knowledge》(不使用人类知识掌握围棋)的论文,相关的提问和讨论也异常热烈。

什么是AMA?

AMA(Ask Me Anything)是由Reddit的特色栏目,你也可以将其理解为在线的“真心话大冒险”。AMA一般会约定一个时间,并提前若干天在Reddit上收集问题,回答者统一解答。

本次Deepmind AMA的回答人是:

David Silver:Deepmind强化学习组负责人,AlphaGo首席研究员。David Silver1997年毕业于剑桥大学,获得艾迪生威斯利奖。David于2004年在阿尔伯塔大学获得计算机博士学位,2013年加盟DeepMind,是AlphaGo项目的主要技术负责人。

Julian Schrittwieser:Deepmind高级软件工程师。

此前有多位机器学习界的大牛/公司在Reddit Machine Learning版块开设AMA,包括:Google Brain Team、OpenAI Research Team 、Andrew Ng and Adam Coates、Jürgen Schmidhuber、Geoffrey Hinton、Michael Jordan 、Yann LeCun、Yoshua Bengio等。

我们从今天Deepmind的AMA中选取了一些代表性的问题,整理如下:

关于论文与技术细节

Q: Deepmind Zero的训练为什么如此稳定?深层次的增强学习是不稳定和容易遗忘的,自我对局也是不稳定和容易遗忘的,如果没有一个好的基于模仿的初始化状态和历史检查点,二者结合在一起应该是一个灾难...但Zero从零开始,我没有看到论文中有这部分的内容,你们是怎么做到的呢?

David Silver:在深层增强学习上,AlphaGo Zero与典型的无模式算法(如策略梯度或者Q学习)采用的是完全不同的算法。通过使用AlphaGo搜索,我们可以极大改进策略和自我对局的结果,然后我们会用简单的、基于梯度的更新来训练下一个策略及价值网络。比起基于简便的基于梯度的策略改进,这样的做法会更加稳定。

Q:我注意到ELO等级分增长的数据只与到第40天,是否是因为论文截稿的原因?或者说之后AlphaGo的数据不再显著改善?

David Silver:AlphaGo已经退役了!这意味着我们将人员和硬件资源转移到其他AI问题中,我们还有很长的路要走呐。

Q:关于论文的两个问题:

Q1:您能解释为什么AlphaGo的残差块输入尺寸为19x19x17吗?我不知道为什么每个对局者需要用8个堆叠的二进制特征层来描述?我觉得1、2个层就够了啊。虽然我不是100%理解围棋的规则,但8个层看起来也多了点吧?

Q2:由于整个通道使用自我对局与最近的/最好的模型进行比较,你们觉得这对于采用参数空间的特定SGD驱动轨迹对否会有过拟合的风险?

David Silver:说起来使用表征可能比现在用的8层堆叠的做法更好!但我们使用堆叠的方式观察历史数据有三个原因:1)它与其他领域的常见输入一致2)我们需要一些历史状态来表示被KO3)如果有一些历史数据,我们可以更好地猜测对手最近下的位置,这可以作为一种关注机制(注:在围棋中,这叫“敌之要点即我之要点”),而第17层用于标注我们现在究竟是执黑子还是白子,因为要考虑贴目的关系。

Q:有了强大的棋类引擎,我们可以给玩家一个评级——例如Elo围棋等级分就是通过棋手对局的分析逐步得出的,那么AlphaGo是否可以对过去有等级分前的棋手的实力进行分析?这可能为研究人类的认知提供一个平台。

Julian Schrittwieser:感谢分享,这个主意很棒!

我认为在围棋中这完全可以做到,或许可以用最佳应对和实际应对的价值差异或者政策网络给每一手位置评估得到的概率来进行?我有空的时候试一下。

Q: 既然AlphaGo已经退役了,是否有将其开源的计划?这将对围棋社区和机器学习研究产生巨大的影响。还有,Hassabis在乌镇宣称的围棋工具将会什么时候发布?

David Silver:现在这个工具正在准备中。不久后你就能看到新的消息。

Q:AlphaGo开发过程中,在系统架构上遇到的最大障碍是什么?

David Silver:我们遇到的一个重大挑战是在和李世石比赛的时候,当时我们意识到AlphaGo偶尔会受到我们所谓的“妄想”的影响,也就是说,程序可能会错误理解当前盘面局势,并在错误的方向上持续许多步。我们尝试了许多方案,包括引入更多的围棋知识或人类元知识来解决这个问题。但最终我们取得了成功,从AlphaGo本身解决了这个问题,更多地依靠强化学习的力量来获得更高质量的解决方案。

围棋爱好者的问题

Q:1846年,在十四世本因坊迹目秀策与十一世井上幻庵因硕的一盘对局中,秀策下的第127手让幻庵因硕一时惊急两耳发赤,该手成为扭转败局的“耳赤一手”。如果是AlphaGo,是否也会下出相同的一首棋?

Julian Schrittwieser:我问了樊麾,他的回答是这样的:

当时的围棋不贴目,而AlphaGo的对局中,黑棋需贴7.5目。贴目情况不同造成了古今棋局的差异,如果让AlphaGo穿越到当年下那一手,很有可能下的是不同的另一个地方。

Q:从已发布的AlphaGo相互对局看,执白子的时间更为充裕,因而不少人猜测,7.5目的贴目太高了(注:现代围棋的贴目数也在不断变化,如在30年前,当时通行的是黑子贴白子5.5目)。

如果分析更大的数据集,是否可以对围棋的规则得出一些有趣的结论?(例如,执黑或者执白谁更有优势,贴目应该更高还是更低)

Julian Schrittwieser:从我的经验和运行的结果看,7.5目的贴目对双方来说是均势的,黑子的胜率略高一些(55%左右)。

Q:你能给我们讲一下第一手的选择吗?ALphaGo是否会下出我们前所未见的开局方式?比如说,第一手下在天元或者目外,甚至更奇怪的地方?如果不是,这是否是一种“习惯”,或者说AlphaGo有强烈的“信念”认为星位、小目、三三是更好的选择?

David Silver:在训练中我们看到ALphaGo尝试过不同方式的开局——甚至刚开始训练的时候有过第一手下在一一!

即便在训练后期,我们仍然能看到四、六位超高目的开局,但很快就恢复到小目等正常的开局了。

Q:作为AlphaGo的超级粉丝,有一个问题一直在我心中:AlphaGo可以让职业棋手多少子?从论文中我们知道AlphaGo可以下让子棋,我也知道AlphaGo恐怕让不了柯洁两子,但我想你们一定很好奇,你们是否有做内部测试?

David Silver:我们没有和人类棋手下让子棋。当然,我们在测试不同版本的时候下过让子棋,在AlphaGo Master>AlphaGo Lee>ALphaGo Fan这三个版本中,后一个版本均可让三子击败前一个版本。但是,因为AlphaGo是自我训练的,所以尤其擅长打败自己的较弱的前一版本,因此我们不认为这些训练方式可以推广到和人类选手的让子棋中。

Q:你们有没有想过使用生成对抗网络(GAN)?

David Sliver:从某种意义来讲,自我对弈就是对抗的过程。每一次结果的迭代都是在试图找到之前版本的“反向策略”。

传言终结者

Q:我听说AlphaGo在开发初期被引导在某一个具体的方向训练以解决对弈中展现出的弱点。现在它的能力已经超过了人类,是否需要另外的机制来进一步突破?你们有做了什么样的工作?

David Silver:实际上,我们从未引导过AlphaGo来解决具体的弱点。我们始终专注于基础的机器学习算法,让AlphaGo可以学习修复自己的弱点。

当然你不可能达到100%的完美,所以缺点总会存在。 在实践中,我们需要通过正确的方法来确保训练不会落入局部最优的陷阱,但是我们从未使用过人为的推动。

关于DeepMind公司

Q:我这里有几个问题:在DeepMind工作是什么感受?AlphaGo团队成员都有谁?你能介绍一下AlphaGo团队工作分配的情况吗?下一个重大挑战是什么?

David Silver:在DeepMind工作感觉好极了:)——这不是一个招聘广告,但我感觉每天可以在这里做我喜欢的事实在是太幸运了。有很多(多到忙不过来!:))很酷的项目去参与。

我们很幸运有许多大牛在AlphaGo工作。您可以通过查看相应的作者列表来获取更详细的信息。

Q: 你觉得本科生是否可以在人工智能领域取得成功?

Julian Schrittwiese:当然。我本人就只有计算机科学学士学位,这一领域变化迅速,我认为您可以从阅读最新的论文和试验中来进行自学。另外,去那些做过机器学习项目的公司实习也是很有帮助的。

关于算法的扩展和其他项目

Q:Hassabis今年三月份在剑桥的一个演讲中表示,AlphaGo项目未来目标之一是对神经网络进行解释。我的问题是:ALphaGo在神经网络结构上取得了什么样的进展,或者说,对AlphaGo,神经网络仍然是神秘的黑盒子?

David Silver:不仅仅是ALphaGo,可解释性是我们所有项目的一个非常有意思的课题。Deepmind内部有多个团队从不同方式来探索我们的系统,最近有团队发表了基于认知心理学技术去尝试破译匹配网络内部发生了什么,效果非常不错!

Q: 很高兴看到AlphaGo Zero的好成绩。我们的一篇NIPS论文中也提到了对于深度学习和搜索树之间效率的相似问题,因此我对于在更长的训练过程中的行为尤其感兴趣。

AlphaGo的训练过程中,创建学习目标的蒙特卡洛树搜索的贪心算法、策略网络的贪心算法、以及在训练过程中价值功能变化的贪心算法之间的相对表现如何?这种自我对局学习的方法是否可以应用在最近的星际争霸 II API中?

David Silver:感谢介绍您的论文!真不敢相信这篇论文在我们4月7日投稿的时候已经发布了。事实上,它与我们的学习算法的策略组件非常相似(尽管我们也有一个值组件),您可以参考我们的方法和强化学习中的讨论,也很高兴看到在其他游戏中使用类似方法。

Q:为什么早期版本的AlphaGo没有尝试自我对弈?或者说,AlphaGo之前也尝试过自我对弈但效果不好?

我对这个领域的发展和进步程度感到好奇。相比起今天,在两年前在设计一个自主训练的AlphaGo的瓶颈在哪里?今天我们见到的“机器学习直觉”又是经历了什么样的系统迭代过程?

David Silver:创建一个可以完全从自我学习的系统一直是加强学习的一个开放性问题。 我们最初的尝试包括你能查到的许多类似的算法,是相当不稳定的。 我们做了很多尝试,最终AlphaGo Zero算法是最有效的,而且似乎已经破解了这个特定的问题。

Q:你认为机器人什么时候能够有效解决现实世界关于高度、尺寸方面的问题(例如,自己学习如何抓取任何形状、尺寸、位置垃圾的设备)?策略梯度方法是否是实现这一目标的关键点?

Julian Schrittwieser:这主要是由于价值/政策网络上的双重改进,包括更好的训练和更好的架构。具体参见论文图4对不同网络架构的比较。

Q:据说击败柯洁的ALphaGo Master的功耗只是击败李世石的AlphaGo Lee的1/10。你们做了什么样的优化呢?

Julian Schrittwieser:这主要是由于价值/政策网络上的双重改进,包括更好的训练和更好的架构。具体参见论文图4对不同网络架构的比较。(你确认不是copy上一个问题的答案吗)

Q:看起来在增强学习中使用或模拟Agent的长期记忆是一个很大的障碍。 展望未来,您觉得我们是否能以一种新的思维方式解决这一点? 还是说需要等待我们技术可以实现一个超级网络?

Julian Schrittwieser:是的,长期记忆可能是一个重要的因子,例如在“星际争霸”游戏中,你可能已经做出了上千个动作,但你还要记住你派出的侦察兵。

我认为现在已经有了令人振奋的组件(神经图灵机!),但是我认为我们在这方面仍有很大的改进空间。

Q:David,我看过你的演讲视频,你提到增强学习可以用于金融交易, 你有没有真实世界的例子? 你会如何处理黑天鹅事件(过去没有遇到过的情况)?

David Silver:已经发表增强学习用于现实世界的财务算法的论文非常少见,但有一些经典论文值得一看,例如Nevmyvaka、Kearns在2006写的那篇和Moody、Safell在2001年写的那篇。

Q:你们和Facebook几乎同时研究围棋问题,你们能更快获得大师级表现的优势是什么?

对于那些无法获得像AlphaGo如此多的训练数据的领域如何开展机器学习或者增强学习?

David_Silver:Facebook更侧重于监督学习,我们选择更多地关注强化学习,因为我们认为AlphaGo最终将超越人类的知识。 我们最近的结果实际上表明,监督学习方法可以让人大吃一惊,但强化学习绝对是远远超出人类水平的关键之处。

他的不太清楚,微软有一位老爷爷David

Cutler,他今年三月应该是73岁。他是一位传奇程序员,是VMS和Windows NT的首席设计师,被人们称为“操作系统天神”。详情见百度百科David Cutler_百度百科。

------------------------------------------------

继续补充:尼古拉斯·威尔特(Niklaus Wirth,1934年2月15日—)(特别注明,Niklaus Wirth为德语 ,沃斯为误译名,感谢 @rlei 指明错误),生於于瑞士Winterthur,是瑞士计算机科学家。Pascal语言创始人,如果老人家还健在,年龄应该是81岁了。尼古拉斯·沃斯

============华丽丽的 天神 分割线 =============================

程序猿童鞋们请擦亮双眼,坐好小板凳,前来膜拜一下各路大神.................................

詹姆斯·高斯林(James Gosling,1955年5月19日-,出生于加拿大),软件专家,Java编程语言的共同创始人之一,一般公认他为“Java之父”。詹姆斯·高斯林

吉多·范罗苏姆(Guido van Rossum,1956年1月31日-) 是一名荷兰计算机程序员,他作为 Python 程序设计语言的作者而为人们熟知。吉多·范罗苏姆

肯尼斯·蓝·汤普逊(英语:Kenneth Lane Thompson,1943年2月4日-),为美国计算机科学学者与软件工程师,任职于贝尔实验室Entrisphere, IncGoogle Inc。与丹尼斯·里奇同为1983年图灵奖得主。他与丹尼斯·里奇设计了B语言、C语言,创建了Unix和Plan 9操作系统,编程语言Go的共同作者。发展正规表示法,写作了早期的电脑文字编辑器http://baike.baidu.com/view/524439.htm与ed,定义UTF-8编码,以及发展电脑象棋。与丹尼斯·里奇同为1983年图灵奖得主。肯·汤普逊_百度百科

唐纳德·克努特(出生日期 1938年1月10日 )是算法和程序设计技术的先驱者,计算机排版系统TEX和METAFONT的发明者,他因这些成就和大量创造性的影响深远的著作而誉满全球。唐纳德·克努特

布莱恩·威尔森·柯林汉(英语:Brian Wilson Kernighan,1942年-),生于加拿大多伦多,加拿大计算机科学家,曾服务于贝尔实验室,为普林斯顿大学教授。他曾参与Unix的研发,也是AMPL与AWK的共同创造者之一。

与丹尼斯·里奇共同写作了C语言的第一本著作《C程序设计语言》之后,他的名字开始为人所熟知。他也创作了许多Unix上的程式,包括在Version 7 Unix上的ditroff与cron。布莱恩·柯林汉

蒂莫西·约翰·“蒂姆”·伯纳斯-李爵士(Tim Berners-Lee),OM,KBE,FRS,FREng,FRSA,(Sir Timothy John "Tim" Berners-Lee,1955年6月8日-),英国计算机科学家。他是万维网的发明者,麻省理工学院教授。1990年12月25日,罗伯特·卡里奥在CERN和他一起成功通过Internet实现了HTTP代理与服务器的第一次通讯。蒂姆·伯纳斯·李

比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup,1950年12月30日-),生于丹麦奥胡斯郡,计算机科学家,德州农工大学工程学院的计算机科学首席教授。他以创造C++编程语言而闻名,被称为“C++之父”。比雅尼·斯特劳斯特鲁普