作为一个专业修(漂亮妹子)电脑的,本狗很多时候被问到推荐一门易学好用又能装逼的计算机语言,于是今天我就来小小得罪你们一下:
这门语言必须就是Python?。。ɑ队凑剑?/p>
作为现在美国顶尖大学计算机专业最受欢迎的入门语言,再加之搭上了现在机器学习的东风,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给我们的现身说法呢?