测试你的Perl水平处于那个阶段
写 Perl 有些日子了,自己有幸和大师们学习和交流 Perl,非常感谢这些人的指点,特别要感谢对我 Perl 指点最多的大师。因为玩了 Perl 不少时间了,所以对他也有不同的看法了,感觉 Perl 的强大远远超越普通人的想法。从最开始过来到现在,总结了一下怎么来自测自己的 Perl 的水平。下面的内容可能不完整,也只是我个人的看法,大家有什么新的看法可以告诉我。
学习 Perl 有几个阶段:学Perl->用perl->创造->创新,基本就对应了下面的几个部分:
新手
1. if,else,for 之类的控制循环结构
2. 了解 Perl 的常用特别的符号
3. 能使用数组和 Hash
4. 了解和会使用一些基本的函数
5. 基本可以使用 Perl 代替 shell 的事情
6. 会安装 Perl 模块(cpan,cpanp,cpanm)
7. 能很好的使用 Perl 的正则(不会这个不叫会 Perl )
合格 Perl 程序员
1. 能很好的使用引用,解引用,理解引用
2. 会使用一些高级的函数
3. 了解不太常用的特别符号
4. 会使用常用的模块:Data::Dumper,Smart::Comments,Getopt,lwp系列,file系列,TT模板之类
5. 会使用 sort,map,grep
6. 会写比较强大的单行程序
7. 使用过 30 个以上的模块
8. 最少写过 500 行以上的单个 Perl 程序
高手
1. 比较深入的了解面向对象
2. 能写自己的模块
3. 会使用 POE,AnyEvent,Moose,Catalyst,Gtk2,Mogilefs,Gearman,Perlbal 之类的高级模块和功能
4. 最好能分析上面高级模块中一二个,最少比较深入的了解其中一样。
5. 常常重构自己的程序(看到自己以前的程序就骂,这 tm 太烂了)
6. 能读明白别人的模块 ,和修改别人的模块
7. 会基本的 Perl 打包,和制作 CPAN 的模块
8. Inline::C和xs 的了解和会使用
9. 坚持玩 Perl 三年,天才除外
大师
1. 设计自己的系统、架构、框架以及有自己思想的东西,如前面的 poe 之类
2. C 高手
3. 对 Perl 极为热情(不热情也到不了这步)
还有个简单的方法自测,就是每年的 Perl 大会,你是坐在下面,还是坐在上面。站在上面的,基本都是大师;坐在下面,基本都是新手和普通 Perl 程序员。
技能终将过时,而能力与时俱进
从开始学习程序,到工作十来年,不断地学过很多技能,而也有不少技能已经被淘汰在时间的旅程中。有时不免幻想要是学会什么屠龙之技,从此高枕无忧,该多好?但终究只是幻想,哪里又有什么屠龙之技呢。现有的技能终将会过时,然后就开始想技能的本质是什么?不停学习技能又是为了什么?
技能,是为了从事某项工作或活动所需要学习的专门知识与训练的成果。比如,熟练掌握一门外语或编程语言,都需要一段不短的时间来进行学习和练习,最终成为你习得的一种工具,然后你就能用这门工具来做一些其他有价值的事情。
就以编程这门技能来说,为了掌握这样一种技能,你先要问自己需要用这样的技能来做什么?也许你想给自己建个个人网站,也许你只是想要解决工作上的一个问题,但面临的却是一门新的编程语言。这样的目标是非常具体的,你需要用新学习的技能(工具)来解决当下面临的问题。这样的目标更适合采用深度路线学习方式(这里借用了算法里的深度查找概念,另外对应的一种是广度查找)。
因为一门主流编程语言及其周边的生态是非常庞大的,为了解决一个非常具体的问题,采用深度查找方式学习特定的问题解决办法是一种捷径。这属于痛点驱动式方法,让你快速排除障碍,解决问题。而非先拿一本该语言的书来,从头读到尾。一般技术书籍的组织方式都是按主题的相关性来编排的,系统体系性很强,却不是按你解决问题需要知道的内容来组织的。所以,技术书籍更适合于在你解决问题的过程用来参考,而非直接用于学习。完整的读技术书籍能增长你的知识,但却无法习得技能,编程这样的技能还需要大量的练习。
《软技能》一书的作者曾在书中分享过他的一个十步学习法:
了解全局
确定范围
定义目标
寻找资源
学习计划
筛选资源
开始学习,浅尝辄止
动手操作,边玩边学
全面掌握,学以致用
乐为人师,融汇贯通
这个方法和我自己在实践中养成的习惯基本一致。在深度路线学习中,对全局、范围、目标的定向更聚焦,因此寻找,筛选的资源会更窄,学习计划的迭代期更短。很快就走完了前 6 步,并进入动手实践反复迭代的过程中,直到把问题解决。
在汉语中容易把能力和技能混为一谈,在英语中,技能对应的词是 Skill,而能力对应的是 Ability。如果说技能是你习得的一种工具,那么能力就是你运用工具的思考和行为方式,它是你做成一件事并取得成果的品质。
程序员爱说自己是手艺人,靠手艺总能吃口饭。五百年前,鞋匠也是手艺人,但进入工业革命后,制鞋基本就由机器取代了。制鞋是一门技能,它的过时用了几百年时间,但程序技能的过时周期却要短得多,每几年你的程序技能实际就大幅更新换代了。
要关注的论坛和博客:
论坛:
China Unix
Perl Monks
Perl Maven
三部曲
小骆驼 --> 中骆驼 --> 大骆驼
造轮子的问题:
Perl 自己就有很多的轮子,就是那些自带的核心Perl模块。在这些模块中也有一些神器,可以利用。Perl特性速览
在处理字符串和正则处理上,他无疑是很强大的。
在各大平台上都能容易获取到。
基本上每年都在更新。
语法简单,基本数据类型只有四种,上手快。
Perl one line。
写法多样,这点比较讨那些工程化编程人士的讨厌。
学习小结
变量
perl中变量很简单,我理解起来是:只有标量、数组和哈希三种。
1、标量,理解起来就是数值型、布尔型和字符型的集合,可以直接使用,用变量名前用$号表示。
2、数组,标量的集合,有一个特点是,同一个数组中的标量类型可能是不同的,感觉很神奇。操作函数:pop、push、sort、reverse
3、哈希,键值对的组合。每个键对应一个值。操作函数:keys、values、each、exists、delete
操作符
这里只介绍几个perl与其他语法不一样的操作符。
“x”,重复。例如‘-’ x5,就是‘-----’。
“.”,连接两个字符串,和其他高级语言用“+”连接字符串相同。
“..”,从到。如 6..10,就是6、7、8、9、10。
逻辑控制
1、if,主要注意unless。其他没什么。
2、在while循环中可能看到,while(<>),看不懂不要慌,学到后面的输入输出就懂了。
3、注意next。
子程序
1、结构
sub functionName {
...
}
2、参数传递
#调用
functionName(arg1、arg2...); #注意传递参数时,只能传递一个数组或者哈希,且要放在最后,哈希要用\%hash
#定义函数
sub functionName{
#接受参数
my (arg1, arg2...) = @_; #如果最后是哈希,调用方式:$arg->{key};
...
}
3、返回值
有两种方式。1,用return返回。2、省略return,则自动返回最后一次运算的结果。
该文章最后由 阿炯 于 2023-12-07 13:03:45 更新,目前是第 2 版。