我已经和Perl一起工作了很长时间,以至于它的许多特性已成为我的第二天性.当新程序员加入我们的小组时,他们经常对Perl几乎没有经验,而且通常我的任务是训练它们(在必要的程度上).我想知道在培训一个刚接触Perl但具有其他语言经验的程序员时应该关注什么(这个问题与语言无关,但我与之合作的大多数开发人员都来自Java).
我发生了一些事情:
正确使用sigils
引用/取消引用
使用列表函数,如map, grep,sort
在帮助程序员过渡到Perl时,您是否发现重点关注有什么特别之处?您是否同等重视相似性或差异性,或两者兼而有之?
查看我的书籍的目录.这两种学习的Perl和中级Perl的目的是教程序员的Perl语言.我们覆盖了大多数人一直使用的Perl的80%,并开发了多年来教授Perl的人.每本书都是作为教程设计的,每章末尾都有练习.我还写了学习Perl学生练习册,以提供额外的练习.Perl编程也是一个很好的参考.
实际上,要获得"获取"Perl需要知道的规则很少,并且大多数人只是通过查看代码就不能正确地遵守这些规则.有些东西要教新来自另一种语言的Perlers:
严格和警告
标量与列表上下文
动态与词汇范围
sigil不是变量类型
列表创建和操作(map,grep,sort)
如何有效地使用CPAN
闭包和子程序作为数据
Perl中的递归很糟糕
祝好运 :)
我认为Perl的"杀手级应用"是CPAN ......
首次浏览CPAN后的典型报价:
"你有什么图书馆?"
" Extirpate HTML必须是有史以来最好的功能名称!"
"你可以在Perl中总结文本吗?"
一旦程序员看到做硬件有多容易,他们就会被卖掉.
然后你可以向他们展示perldoc和骆驼.
我拥有并管理Perl Training Australia.我已经教Perl大约八年了,计算机科学已经有十多年了.我不仅对Perl有强烈的意见,而且对教学和整体呈现都有很强的见解.我写了几百页关于Perl的文章 - 我不会在这里重复 - 所以我要给你的不是关于Perl教学的建议; 相反,它是元建议.
首先,如果您的时间和预算允许,请考虑派遣您的员工参加专业的Perl培训课程.专用课程的优势在于,它们不会带来工作中断,也不会带来工作场所政治,而且他们会遇到一个非常熟悉人们在学习Perl时遇到的困难的人.请确保您有一位知道他们的东西并且是Perl社区活跃成员的培训师; 这意味着他们应该能够回答任何问题,或者将提问者引导到适当的参考,以便他们可以了解更多信息.是的,我经营一个Perl培训业务,所以我在这里非常自以为是.
如果由于某种原因你不能去专门的课程,那么拿一本专门用来教人们如何在Perl中编程的书,并逐步完成.很容易错过任何事情,或者尝试以错误的顺序介绍事物,或者(天堂禁止)教导不良习惯,所有这些都会让你的生活变得困难.编写专门用于教授Perl的书籍的人通常与成功进行Perl培训的人员相同.如果你想买书,我会推荐最新版的Learning Perl.如果你想下载一本书,我建议你从Perl Training Australia网站上获取Programming Perl课程笔记.
这两本书都带有练习,这让我想到了最后一段建议.确保正在学习Perl的人做练习.学习任何新技能时很容易认为你知道发生了什么,但发现当把事情付诸实践时,它比看起来更难.对于Perl来说尤其如此,其中可以应用诸如"上下文"之类的编程概念,这在其他语言中很少见.通常,练习专门用于教授某种技能,或突出某个陷阱; 在学习期间弄清楚这些事情比在项目截止日期前夕计算出来要容易得多.
我首先告诉他们要始终使用神奇的口头禅:
use strict; use warnings;
他们不需要知道为什么(还).
接下来,我将它们介绍给perldoc并向它们展示使用它的基础知识(-f和-q标志,perldoc perl和perldoc perltoc等).当他们有问题时,他们需要知道在哪里看.
我会谈论标量与列表上下文.
我将它们介绍给基本数据类型(标量,数组和散列)以及sigils如何遵循上下文,而不是数据类型!
介绍$_
和@_
.理解它至关重要,$_
因为它经常被隐含地用在很多地方.@_
对编写子程序至关重要.其他标点符号变量的使用频率较低,可以等待.
将它们引入正则表达式并让它们习惯于将正则表达式作为Perl中的第一类对象.
我简要介绍一下Perl的"对角线"语法.next unless /foo/
一旦你使用它们,成语就像是美妙的,但是当来自其他语言,特别是"正交"时,它们似乎非常陌生.
您无需立即谈论参考文献.让它等到他们准备好做需要数据结构的事情.功能喜欢map
也grep
可以等.
为基础建立坚实的基础.让他们采取婴儿步骤一段时间,然后混合更高级的功能和习语.
你可以告诉他们,最重要的是如何访问文档,以及如何找到它(perldoc perltoc
,perldoc -q $keyword
,perldoc -f $function
等).
Perl附带了很棒的文档,包括参考和教程风格的材料.让新手可以访问是您可以为他们做的最有效的事情.
另一个令人惊讶的方面是背景.函数或甚至变量的行为取决于它们是否在列表或标量(或无效)上下文中被引用,这一事实对于Perl受训者来说是一个重要的细节.
我通常坚持使用"更高级别"的内置函数(map,grep,splice,split).由于TMTOWTDI,许多程序员只记得Perl更熟悉的方面(比如C风格的循环,substr和index)并且只使用它们.
在熟悉该语言之后,Intermediate Perl和Advanced Perl Programming可以让他们进一步深入了解Perl的世界
可能不完全是你想要的.提前道歉.
除非确实有必要,否则我不会指出相似之处.
Perl在自己的世界中工作.如果你愿意,你可以用Java风格编写Perl,但有什么意义呢?
我从Perl(和我的Perl导师)那里学到的最重要的一课是"有多种方法可以做到".因此,我认为学习Perl的最佳方式是接受其编程和支持每个程序员的态度,因为他或她找到了自己的方式.
你正在制作的例子,列出函数等,是自然使用的东西 - 一旦你获得Perl"事物的方式",你只能理解它们的力量.
只是我的两分钱.
坦率地说,我只是给他们骆驼.它是一本如此易读且有趣的书,它们将立即启动并运行.我还在笑'Perl认为真理是不言而喻的',而且自从我第一次阅读它以来,它必须是十年.