作为一个专业修(漂亮妹子)电脑的,本狗很多时候被问到推荐一门易学好用又能装逼的计算机语言,于是今天我就来小小得罪你们一下:
这门语言必须就是Python啊!(欢迎来战)
作为现在美国顶尖大学计算机专业最受欢迎的入门语言,再加之搭上了现在机器学习的东风,Python之所以这么火,是有它的道理的。
然而本狗今天推荐它的主要理由却是这个:
我相信,大多数时下为了想要在目前火热的IT领域找一份工作而开始学习Python的人,都没有看过这个东西——The Zen of Python(Python禅道)。略懂Python的人只需要在命令行里输入import this,就能看到由Python领域著名的领军人物之一——Tim Peters写下的这一段阐述了Python禅道的文字,简单,却又略显晦涩。
本狗非常非常喜欢这段文字,将浅显的理解翻译如下:
优美胜于丑陋(Python以编写优美的代码为目标)
简明胜于隐晦(代码应该是简洁明了,而不是复杂难懂的)
简单胜于复杂(如果能有简单的方法实现,就不应该使用复杂的方法)
复杂胜于繁复(如果必须要以复杂的方式呈现,需要尽量简化而不使其繁复凌乱)
扁平胜于嵌套(优美的代码模块需要清晰,繁复的联系要尽量少)
稀疏胜于紧凑(或许写的是代码应该稀疏,有条理方便阅读,而不是一行解决)
可读性很重要
任何特殊状况都不应该打破上述规则
即使实用性重于(理论)的纯粹性(代码是用来解决实际问题的,纯粹的理论只存在于设计,有很多需要单独处理的边界情况)
错误却不能在不被知晓的情况下包容(任何错误都需要被知晓)
除非你允许它这样被包容(在被知晓的情况下如何处理是设计者的责任)
当存在多种可能,放弃猜测
在这里永远只有一种,而且是唯一一种明显的解决方案(奥卡姆剃刀的体现:如无必要,勿增实体)
虽然这并不容易,因为你不是Python之父(这个Dutch荷兰人指Guido, Python的创造者)
即刻动手胜于拖延
审慎思考胜于鲁莽
好的实现是容易被解释的
反之亦然(好的代码永远是自解释的)
命名空间是绝妙的理念,我们应该多使用
以上便是Python禅道的19条内容,然而实际上它在官方的包描述里包含了20条内容,为什么如此呢?本狗先卖一个关子,说点有的没的,把彩蛋放在最后。
之所以这是本狗推荐Python的最主要理由,是因为我认为在学习一样东西之前,你得明白它是干什么的,它为什么要这样做(设计)。
然而本狗残酷地发现,现在大多数想要学习一门计算机语言的人,或者学习计算机这个邻域的人,纯粹是因为“编程好找工作啊”,“码农工资高啊”等这一些大同小异的理由,而不是对一个领域本身的爱好。仅仅是为了会使用这个工具,找一个能使用这个工具的工作,眼里看到的只是高薪和大量的职位需求——这也许就是你一辈子缘木求鱼的开端。
如果我们简单地仅仅把这些语言当做工具使用,认为其它的东西(数学原理,业务逻辑)才是重要的;商学院的CEO们也仅仅把码农们当做工具使用,认为高大上的想法或者商业运作才是重要的——那么这两者并没有太大的本质区别。为什么?
因为当你不用心对待一件事物的时候,这件事物也不会用心对你——对人也好,对物也罢,万事万物都是这个道理。
还在上学的时候,语文课本上看过的两个小故事让本狗至今难忘,出自冯骥才先生的《俗世奇人》——泥人张贱卖海张五,刷子李刷墙没白星——这才是使用工具时需要的“工匠精神”,他们手中的伙计,都是有“灵性”的。
真正出类拔萃的工匠,对他们手中的工具是有感情的,他们手中的工具,是比别人的工具都要有“灵性”的,因为他们比谁都了解他们手上的老伙计。在这个浮躁的世界中,我们仍然保持着对“工匠精神”的敬佩,看看火的不行的《我在故宫修文物》系列就知道了。
学习编程语言嘛,自然也是这个道理。比如Python的禅道,比如与Python设计思想截然不同的Perl,比如瑞士军刀C++,他们都有自己设计的初衷,这些甚至也代表了在一个编程语言领域内的哲学意义。
那么最后这第20条禅道是什么呢?本狗猜想是这个包源代码想表达的
s ="""Gur Mra bs Clguba, ol Gvz Crgref
Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
Pbzcyrk vf orggre guna pbzcyvpngrq.
Syng vf orggre guna arfgrq.
Fcnefr vf orggre guna qrafr.
Ernqnovyvgl pbhagf.
Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
Nygubhtu cenpgvpnyvgl orngf chevgl.
Reebef fubhyq arire cnff fvyragyl.
Hayrff rkcyvpvgyl fvyraprq.
Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
Abj vf orggre guna arire.
Nygubhtu arire vf bsgra orggre guna *evtug* abj.
Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.
Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""
d = {}
forcin(65, 97):
foriinrange(26):
d[chr(i+c)] = chr((i+13) % 26 + c)
print"".join([d.get(c, c)forcins])
这段杂乱无章的代码,用一个顽皮且混乱的ROT13加密算法实现加密了这19条Python箴言,在某种程度上提供了一个大反例,是不是就是Tim Peter给我们的现身说法呢?