go语言迁移其他语言 go语言bufio( 四 )


结语
母语迁移是由于学习者受到目的语和母语之间的相似或差异所产生的影响 。[⑤]这种现象在语言教学中普遍存在,不容忽视、回避 。从整个英语学习的过程来看,中国英语教学必经两个阶段:从以汉语为工具学习英语的初级阶段,逐步过渡到以英语语言为工具学习英语的高级阶段 。[⑥]无论在那一阶段,或多或少都存在母语迁移 。如何有效利用、控制母语迁移,提高英语教学效率,是我们英语教学必须应对的一个挑战 。他山之石,可以攻玉 。作为教育者,我们应该深入挖掘英汉两种语言的共同要素 , 以便促进学生在英语学习中掌握语法规律,英语教学效率定会有所提高 。
注释:
[①]参见皮连生.学与教的心理学[M].上海:华东师范大学出版社,2000:116.
[②]戴炜栋,周大军.中国的二语习得研究:回顾、现状与前瞻[J].外国语,2005(5).
[③]杨连瑞,张德禄.二语习得研究与中国外语教学[M].上海:上海外语教育出版社,2007:254.
[④]杨连瑞,张德禄.二语习得研究与中国外语教学[M].上海:上海外语教育出版社,2007:103-104.
[⑤]石蕴珍,王颖.从认知角度谈语言迁移与对外汉语教学[J].辽宁教育行政学院报,2009(10):108.
[⑥]马力达,周秀兰.从英汉差异及语言迁移透视英语教学[J]. 辽宁工业大学学报(社会科学版),2008(10):119.
参考文献:
[1]彭聘龄.普通心理学[M].北京:北京师范大学出版社.2004.
[2]陈琦.刘儒德.当代教育心理学[M].北京:北京师范大学出版社.2007.
[3]皮连生.学与教的心理学[M].上海:华东师范大学出版社.2000.
[4]杨连瑞,张德禄.二语习得研究与中国外语教学[M].上海:上海外语教育出版社,2007.
[5]黄伯荣,廖序东.现代汉语[M].北京:高等教育出版社,2007.
[6]劳允栋.英汉语言学词典[M].北京:商务印书馆.2005.
[7]中国社会科学院语言研究所.现代汉语词典[M].北京:商务印书馆. 1983.
[8]韦迈尔(英).牛津高阶英语词典(第七版,英语版)[M].北京:商务印书馆.2003.
[9]薄冰.高级英语语法[M].北京:高等教育出版社.2000.
[10]Rodney Huddleston, Geoffrey K. Pullum.剑桥学生英语语法(英文版)[M].北京:外语教育与研究出版社.2008.
[11]孟凡胜.英语语法教程[M].青岛:青岛海洋大学出版社.2000.
[12]石蕴珍,王颖.从认知角度谈语言迁移与对外汉语教学[J].辽宁教育行政学院报,2009(10).
[13]马力达,周秀兰.从英汉差异及语言迁移透视英语教学[J]. 辽宁工业大学学报(社会科学版),2008(10).
Abstract:Language transfer is an effect which is caused by similarities or differences between native language and target language of a language learner. The phenomenon commonly exists in the process of SLA. Language transfer divides into positive transfer and negative transfer, according to the effects of native language in SLA. Positive transfer may help language learners to accelerate the speed of learning target language. Negative transfer may disturb or make difficulties for learning target language. Through examples, the paper discussed the effect of Chinese grammar knowledge to English grammar learning. And the author advocates educators look for the similarities between Chinese and English positively, and which helps students to promote mastery of English grammar rules, and finally improves efficiency of English grammar teaching..
参考资料:洛阳师范学院学报 , 2012年第10期
Python开发者在转到Go语言之前需要了解什么?转载请参见文章末尾处go语言迁移其他语言的要求 。【感谢张佳伟(@ghosert)的热心翻译 。如果其他朋友也有不错的原创或译文go语言迁移其他语言,可以尝试推荐给伯乐在线 。】这是一篇(长)博文 ,  介绍了我们在 Repustate 迁移大量 Python/Cython 代码到 Go 语言的经验 。如果go语言迁移其他语言你想了解整个故事,背景和所有的事情 , 请继续往下读 。如果go语言迁移其他语言你只是想了解 Python 开发者在一头扎进 Go 语言前需要了解什么,请点击一下链接go语言迁移其他语言:从Python迁移到Go的建议(TipsTricks) 背景在Repustate , 我们完成过的最棒的技术成就之一是实现了阿拉伯语的情感分析 。阿拉伯语是一块难啃的硬骨头 , 因为它的词形变化相当复杂 。比起譬如英语,阿拉伯语的分词(将一个句子切分呈几个独立的单词)也更困难,因为阿拉伯语的单词本身还可能会包含空白字符(例如:“阿列夫”在一个单词里的位置) 。这也谈不上是泄密,Repustate 使用支持向量机(SVM)来获取一个句子背后最有可能的含义,并在其中加上情感元素 。总体上来说,我们使用了 22 种模型(22 个 SVM) 并且在一篇文档中 , 每一个单词我们都会加以分析 。因此如果你有一篇 500 字的文档,那么基于 SVM,会进行十万次的比较 。PythonRepustate 几乎完全就是一个 Python 商店 。我们使用 Django 来实现 API 和网站 。因此(目前)为了保持代码一致,同时使用 Python 来实现阿拉伯语情感引擎是合情合理的 。只是做原型和实现的话,Python 是很好的选择 。它的表达能力很强悍,第三方类库等等也很好 。如果你就是为了Web服务 , Python 很完美 。但是当你进行低级别的计算,大量依赖于哈希表(Python 里的字典类型)做比较的时候,一切都变慢了 。我们每秒能处理大约两到三个阿拉伯文档,但是这太慢了 。比较下来,我们的英语情感引擎每秒能处理大约五百份文档 。瓶颈因此我们开启了 Python 分析器,开始调查是什么地方用了那么长时间 。还记得我前面说过我们有 22 个 SVM 并且每个单词都需要经过处理吗?好吧 , 这些都是线性处理的,非并行处理 。所以我们的第一反应是把线性处理改成 map/reduce 那样的操作 。简单来说:Python 不太适合用作 map/reduce 。当你需要并发的时候,Python 算上好用 。在 2013 Python 大会上(译者:PyCon 2013),Guido 谈到了 Tulip,他的这个新项目正在弥补 Python 这方面的不足,不过得过段一段时间才能推出,但是如果已经有了更好用的东西,我们为什么还要等呢? 选Go 语言,还是回家算了?我在Mozilla的朋友告诉我,Mozilla 内部正在将他们大量的基础日志架构切换到 Go 语言上,部分原因是因为强大的 [goroutines] 。Go 语言是 Google 的人设计的 , 并且在设计之初就把支持并发作为第一要务 , 而不是像 Python 的各种解决方案那样是事后才加上去的 。因此我们开始着手把 Python 换成 Go 语言 。虽然Go 代码还不算正式上线的产品,但是结果非常令人鼓舞 。我们现在能做到每秒处理一千份文档,使用更少的内存,还不用调试你在 Python 里遇到:丑陋的多进程/gevent/“为什么 Control-C 杀不了进程”这些问题 。为什么我们喜欢 Go 语言任何人,对编程语言是如何工作(解释型 vs 编译型 ,  动态语言 vs 静态语言)有一点理解的话 , 会说,“切,当然 Go 语言会更快” 。是的 , 我们也可以用 Java 把所有的东西重写一遍,也能看到类似更快的改善,但那不是 Go 语言胜出的原因 。你用 Go 写的代码好像就是对的 。我搞不清楚到底是怎么回事,但是一旦代码被编译了(编译速度很快) , 你就会觉得这代码能工作(不只是跑起来不会错,而且甚至逻辑上也是对的) 。我知道,这听上去不太靠谱,但是确实如此 。这和 Python 在冗余(或非冗余)方面非常类似 , 它把函数作为第一目标,因此函数编程会很容易想明白 。而且当然 , go 线程和通道让你的生活更容易,你可以得到静态类型带来的性能大提升,还能更精细的控制内存分配,而你却不必为此在语言表达力上付出太多的代价 。希望能早点知道的事情(TipsTricks)除去所有这些赞美之词以后,有时你真的需要在处理 Go 代码的时候,相对于 Python,改变一下思维方式 。因此这是我在迁移代码时记录的笔记清单 —— 只是在我把 Python 代码转换到 Go 时从我脑子里随机冒出来的点子:没有内建的集合类型(必须使用map,并检查是否存在)因为没有集合,必须自己写交集,并集之类的方法没有tuples 类型,必须写你自己的结构,或者使用 slices (即数组)没有类似 \__getattr__() 的方法,你必须总是检查存在性,而不是设置默认值 , 例如,在 Python 里,你可以这样写 value = https://www.04ip.com/post/dict.get(“a_key”, “default_value”)必须总是检查错误(或者显式的忽略错误)不能有变量/包没被使用,因此简单的测试也需要有时注掉一些代码在[] byte 和 string 之间转换 。regexp 使用 [] byte (不可变) 。这是对的 , 但是老把一些变量转换来转换去很烦人Python 更宽松 。你可以使用超出范围的索引在字符串里取一个片段 , 而且不会出错 。你还可以用负数取出片段,但是 Go 不行你不能混合数据结构类型 。也许这样也不太干净,但是有时在 Python 里,我会使用值是混合了字符串和列表的字典 。但是 Go 不行 , 你不得不清理干净你的数据结构或者使用自定义的结构不能解包一个 tuple 或者 list 到几个不同的变量(例如:x, y, z = [1, 2, 3])驼峰式命名风格(如果你没有首字大写方法名/结构名,他们不会被暴露给其它的包) 。我更喜欢 Python 的小写字母加下划线命名风格 。必须显式检查是否有错误 != nil, 不像在 Python 里,许多类型可以像 bool 那样检查 (0, “”, None 都可以被解释成 “非” 集合)文档在一些模块上太散乱了,例如(crypto/md5),但是 IRC 上的 go-nuts 很好用,提供了巨大的帮助 。从数字到字符串的转换(int64 - string) 和 []byte - string (只要使用 string([]byte))不太一样 。需要使用 strconv 。阅读Go 代码比起 Python 那样写起来如伪代码的语言更像一门编程语言,Go 有更多的非字母数字字符 , 并且使用 || 和 , 而不是 “or”和“and”写一个文件的话 , 有 File.Write([]byte) 和 File.WriteString(string),这点和 Python 开发者的 Python 之道:“解决问题就一种方法 ”相违背 。修改字符串很困难,必须经常重排 fmt.Sprintf没有构造函数,因此惯用法是创建 NewType() 方法来返回你要的结构Else (或者 else if)必须正确格式化,else 得和 if 配对的大括号在同一行 。奇怪 。赋值运算符取决于在函数内还是函数外,例如,= 和 :=如果我只想要“键”或者只想要 “值”,譬如: dict.keys() 或者 dict.values(),或者一个 tuples 的列表,例如:dict.items() , 在 Go 语言里没有等价的东西,你只能自己枚举 map 来构造你的列表类型我有时使用一种习惯用法:构造一个值是函数的字典类型,我想通过给定的键值调用这些函数,你在 Go 里可以做到,但是所有的函数必须接受 , 返回相同的东西,例如:相同的方法签名如果你使用 JSON 并且 你的 JSON 是一个复合类型,恭喜你 。你必须构造自定义的结构匹配 JSON 块里的格式,然后把原始 JSON 解析到你自定义结构的实例中去 。比起 Python 世界里 object = json.loads(json_blob) 要做更多的工作 是不是值得?值得 , 一百万倍的值得 。速度的提升太多了,以致很难舍弃 。同时,我认为,Go 是目前趋势所在 , 因此在招新员工的时候 , 我认为把 Go 当作 Repustate 技术积累的重要一环会很有帮助 。]

推荐阅读