By 超神经
喜大普奔的黄金周就要到了,各位程序员们是不是已经买好了回家的票?如果没什么重要的安排,不如也趁此假期,修炼几招内功心法。
等假期结束给领导和同事们一个惊喜,比如。。。
换个语言学学试试?
程序员的换武器之痛
对于程序员来说,在这个变化节奏如此之快的时代,想要对一种编程语言从一而终,估计是件不太现实的事情。
总是会因为一些原因,在你熟练掌握了一种语言之后,突然需要用另一种语言去创建别的项目。
而很多程序猿在上手新的编程语言时,都会遇到一些常见的困难。比如熟悉了老语言的习惯,使用新语言时会产生混淆,导致在使用过程中发生尴尬。
另外,对功力不够的程序员,想用类比法去打通新语言的关节,会在一时间茫然无措。
先别崩溃。
这儿有一本武功秘籍,帮助你在新旧编程语言中来回切换,假日优惠价,5 毛钱一份,客官了解一下啊。
为了解决这个难题,北卡罗来纳州立大学(North Carolina State University,简称 NCSU)的三位工程师给出了一剂良药。
在他们的一篇论文中,提出一种方法,它基于学习迁移,借用类比学习的思想,创造出了一款学习工具,可以让程序员们更快的学会新语言。
惯有的拆解套路 & 新手的空气墙
程序员中的老司机们常用的类比学习法,是一种点亮新技能的好方法。它利用编程语言之间的共性进行类比,从而比较容易的掌握新语言的技巧。
通俗的说就是通过已有知识去学习新知识。
这和武侠小说里,没有功力的人容易练成神功的设定不同。在这个方法下,掌握的编程语言越多,触类旁通的机才会更大。
但类比学习法对经验尚浅,尤其是刚掌握一两种编程语言的菜鸟程序员来讲,就不太友好了。因为他们没有足够的样本,很难发现新语言和自己擅长语言之间的共性。所以在面对新语言时,总会频频「撞墙」。
比如,熟悉面向过程语言(如 C 语言)的人,去学习面向对象语言(例如 C )时,难度就非常大。因为两种语言的思想大相径庭,很难用类比学习法去推演学习。
再比如,让 VB 程序员去学 ASP 就很困难。因为一个是 C/S(Client/Server,客户端/服务器) 架构,一个是 B/S( Browser/Server,浏览器/服务器)架构。
虽然二者在语法上类似,但架构差距巨大,经验不足的程序员难以用类比学习去实现跨越。
此外,入门了新语言之后,在实际应用时,也会面临以下的问题:
1、惯性思维
学了多种语言之后,往往会混淆语法,出现混用。比如有的语言是以「;」为结束符,有的则是「回车」。如果你擅长的语言以「;」结束,那么惯性思维下,比较难纠正过来。
2、程序运行条件不同
编译完一个 exe 程序,并非都能立即运行,不同的语言编写可能需要额外的配置。例如,用 C 语言写出的程序,一般可以直接运行,但 VFP 写好的程序,则需要安装 VFP 系统的 DLL 组件,因此 VFP 程序要做安装盘。习惯了 C 语言的程序员,估计在开始面对 VFP 时会有摔键盘的冲动。
3、语言中的调用问题
语言涉及的调用功能是常用的手段,但不同的语言使用的调用也各有不同。因此,在上手新语言时,程序员要密切关注新语言如何调用的问题。
多数情况下,老道的程序员可以靠经验去解决这些问题,但新手程序员恐怕就要生无可恋了。
新的工具,打开新世界的大门
为了帮助小白程序员掌握类比学习法,去解决新语言在应用过程中出现的问题,北卡罗来纳州立大学的三位工程师开发的学习工具——Transfer Tutor,就有着很好的辅助作用。
这个工具能让用户在新旧两种语言中,找出他们的共性,从而更好的去适应新语言。但目前该工具还需要收费。
它用到的基本原理还是逐句的识别出二种语言的差异,通过对比和提示,来降低新语言的学习和使用难度。它定义了三种类型的语法迁移:
1、Negative Transfer:负迁移
通过对新旧语言进行详细解释,来明确两种语言之间的差异,避免在理解新语言时,受到其他语言的干扰而出错。
2、Positive Transfer:正迁移
找到两种语言之间的共性元素,让用户可以通过类比快速理解新语言,提高学习效率。
3、New Fact: 新语法
对于那些新语言中独特的语法,Transfer Tutor 会为用户提供详细的解释及示例来帮助记忆,缩短用户的学习时间。
以常见的的 Python 和 R 语言举例,看一看该工具是如何发威的。
熟悉的人应该知道,Python 和 R 语言之间有相似性,但也有差异。
比如在进行表格选择时,操作符「[ ]」在 Python 中用于选择行,而在 R 语言中用于选择列,R 语言要加上「,」才能选择行。在进行截取时,Python 中下标是从 0 开始的开区间(即 [ 0:5 ],结果是选出 0-4 ),R 语言则是从 1 开始的闭区间(即 [ 1:5 ] ,结果是选出 1-5 )。
R 语言和 Python 在进行表格选择时差异比较
撕破 Python 到 R 语言的窗户纸
Transfer Tutor 是如何帮助我们打通二者的壁垒的呢?
首先,Transfer Tutor 会标注出 Python 和 R 语言中所有的相似元素,并进行对比展示,通过点击即可进入下一个元素。这种逐元素对比展示方式能够帮助用户 get 到所有的知识要点。
Transfer Tutor 工作简图
然后,Transfer Tutor 会对不同种语言之间存在的分歧和新语法,进行详细解释。
选择行列时对分歧元素的解释
对新语法的解释
最后,通过 Transfer Tutor 的自查功能,可以对新语言编写的代码进行单步调试。用来验证学习成果的正确性,并对两种语言中存在的差异进行单独说明。
R 语言中不同的表示方法:下标从 1 开始、数据中的 NaN(Not a Number,表示错误或溢出的数据)用 NA 代替
从他们的实验操作过程来看,该工具在 Python 到 R 语言的学习迁移中效率很高,可让程序员对这两种语言实现「买一赠一」。
但是否适用于所有语言,还需要深入的实践验证。不过目前它已经能用在好几套语言的学习之中,对于被不同语言折磨着的人类来说,算是抛下了一枝渡江的芦苇。
至于说什么时候会出现 AI 程序员,能够如佛光普照般,解救天下敲代码的万千生灵,嗯,这个问题,还是要去问问敲代码的大佬们,到底什么时候能突破 AI 的奇点呢?
超神经小百科 每天 3 个 AI 名词解释
Symbolic Learning 符号学习
是指从功能上模拟人类学习能力的机器学习方法。
Similarity Measure 相似度度量
是估算不同样本之间的相似程度的标准,常用做分类问题的判断依据。
Transfer learning 迁移学习
是把已训练好的模型参数迁移到新的模型上来训练新模性的策略。