标签归档:程序

我爱 Python

哦,别误会了,我说的 Python 不是这玩意,而是一种编程语言。

这几天用 Python 语言完成了一个项目,包括一个数据分析统计模块和一个简陋的 GUI (图形用户界面)模块,大约一千行代码左右。这是我第一次用 Python 写这么大的程序(对我来说算是够大的了)。从这个项目中充分体会到了 Python 语言的强大和易用。

一个语言是否简洁,有多简洁,从它的 hello world 程序中就可以看得出来:

print 'hello world'

在我所接触到的编程语言中,Python 代码最接近自然语言。强制缩进和一种问题只有一种解决办法的思想使得 Python 代码很整齐,看起来和伪代码一样。虽说这样少了自由度,但再也不用去管那些大括号匹配,行末位分号等,你会对此心存感激的。Python 是真正的为人类设计的语言。

Python 是一种动态语言,也就是说没有了编译步骤,代码就是程序,程序就是代码。并且在使用变量时用不着声明,想用就用,不用那么多废话。在使用一个变量时,也不用太考虑类型问题,直接用就是。

Python 有一个涵盖面很广的标准库,很多问题都已经在此解决了。我想如果这个项目我用 C/C++ 语言写的话,那么几乎要自己从新实现这些 Python 标准库就提供的功能。加上 C/C++ 语言的啰嗦程度,估计代码行数要增加一个数量级。

还有一个是 Python 没有指针,不用手动管理内存。Python 内建的内存管理和垃圾回收机制很完善,再也不会遇到莫名其妙的段错误了。

Python 的好处太多了,可以看看维基百科的介绍。

Python 是一门很容易学习的语言,也被推荐为入门者应该学的第一门语言。事实上,如果你是一名有经验的程序员,那么你能在两个小时内学会 Python 语言的语法并写出有用的程序。简明 Python 教程 是一个很不错的学习资料,深入学习的话可以看看 Dive Into Python 中文版Python 的官方网站是你应该常去的地方,也是各种文档资料最多的地方。

Python 可以说是一个很“酷”的编程语言,它被列为黑客应该学习的五中编程语言之一,它的资深使用者几乎都是很厉害的程序员。它被使用的也很广泛,豆瓣网的后台开发语言就是 python, Google 主要使用的三种编程语言也包括 Python.

Python的创始人为吉多·范罗苏姆(Guido van Rossum),关于他还有一段有意思的故事:Guido 去 Google 面试,简历只有一句话:I wrote Python (我写 Python),结果面到第10轮 Google 才明白过来这句话的真正意思。

当然每种编程语言都有它合适的领域,相对来说 Python 是一种开发效率较高的语言,但其运行效率则相对较差,如果和 C 语言写出的同样功能程序相比的话,有时候甚至要慢上几个数量级。在一些项目中,牺牲运行效率来提升开发效率还是很直当的。比如在我的这个项目中,写一个桌面程序,对于用户来说,一毫秒和一秒的反应时间真没什么区别。不过 Python 语言和 C 语言结合的很紧密,一些对效率要求很高的模块可以用 C 语言来写,Python 执行时导入该模块即可。实际上,Python 本身就是 C 语言写的。由于 Python 的代码即程序的特点,所以如果算法需要保密的话,也可以用 C 来写,这样别人就看不到你的源码了。

有很多工具可以将 Python 程序转换为 Windows 可以在不用安装 Python 解释器直接执行的 exe 文件。我根据这篇文章:使用py2exe打包pyqt程序为exe 提供的方法成功将 PyQt 程序打包成了 exe.

另外,Python 语言是一个由社区驱动的自由软件,任何人都可对其做贡献,它的源码也是很好的学习 C 语言资源。

延伸阅读:

每个程序员都应该学习使用Python或Ruby

Zen of Python — 蟒之禅!

看完电影《黑客帝国》的感想

看过许多的科幻电影,最近看了《黑客帝国》后觉得,这是我看过的最好的科幻电影。

中国的电影行业还处于起步期,貌似国内还没有拍出比较好的科幻电影。众多的科幻电影大都出于好莱坞之手。其中的许多都描述了人类未来可能面临的灾难:冰川、地质活动、小行星撞地球、外星人入侵等等等等。这反映了美国人开阔的思维和对未来的担忧。

大多数的科幻电影都属于商业片的范畴,目的是吸引观众,赢得票房。所以产生了许多所谓的科幻电影。许多科幻电影描写灾难时,先是描写一些普通人的生活,然后突然毫无征兆的灾难来临,然后这些普通人担当起了救世主的责任,在最后的关头拯救全人类,比如《独立日》。还有一些科幻电影纯粹就是硬生生的大量套用物理,生物,天文等专业术语,借普通观众对这些名词的陌生神秘感来骗钱,比如《量子启示录》。有些电影则是重新描述了古老的神话传说,片中借用了一些科幻元素,也被称为了科幻电影,比如《2012》。有些电影是靠大场面和一些先进技术取胜,比如《阿凡达》,《变形金刚》。有的则是走感情路线,比如《人工智能》,一部称为童话故事更为贴切的电影。有的电影刚开始还不错,但续集越拍越离奇,都脱离了科幻范畴,比如《生化危机》的续集,应该称为魔幻电影了。

这些电影有一个共同点就是逻辑根本经不起仔细的推敲,相信每个人都有体会。还有就是都很成功的描述了一个英雄式的人物,科幻只是其背景。专门描述人们对未来对人生思考的专业并且优秀的科幻电影非常的少,《黑客帝国》系列应该算是其一吧。片中的许多台词也富含哲学色彩,包含着对人生的思考。关于这部电影的争论也非常之多,有兴趣的可以到豆瓣电影上看看评论,不乏精彩的论述。

这部电影是基于一个关于思想的实验:缸中的大脑(Brain in a Vat):一个人被邪恶科学家施行了手术,他的脑被从身体上切了下来,放进一个盛有维持脑存活营养液的缸中。脑的神经末梢被连接在一台计算机上,这台计算机按照程序向脑输送信息,以使他保持一切完全正常的幻觉…有关这个假想的最基本的问题是:“你如何担保你自己不是在这种困境之中?”这是一个涵盖了哲学到文化各个领域的实验。

我对这部电影的的理解是:电影描述了一个人类早已灭绝在自己发明的机器手中的未知年代(从另一个意义上讲是人类进化了),发生在一个“超级电脑”(或者就是机器文明存在的方式)模拟出的世界中的一个关于进化的故事。在这个世界中又分为两部分:一部分是Matrix,用来模拟20世纪末的人类社会;另一部分则是用来收容那些不满于虚拟世界统治的“人”(模拟的人),称为Zion.两个世界产生冲突,发生一系列似乎已经预定好的但又充满选择的不确定的事情。而这一切,都是由程序掌控,一切按照系统的安排进行着,最终的目的是给机器文明带来进化的动力。

电影带来许多让人思考的东西。就像《盗梦空间》一样,第一个问题是:“如何确定这个世界是真实的?”这似乎是一个没有答案的问题。这个世界有太多让人无法想通的事情,没有人能够想象的出时间为零的世界,而它又确实存在。或许最好的回答就是假设它是存在的吧。你,确切来说是那个“思考的你”存在是因为你在思考。(笛卡尔 —— I think, therefore I am )

第二个问题,我自己的一些看法:“人(这里侧重于人的意识方面),具有机器属性。或者说,机器是有可能产生意识的。”

试想,人的思维从某方面来说是和现在的电脑有些相似呢?和电脑一样,人的一切思维是基于记忆(在非洲的一些文化里,并不把新生婴儿称作人);和电脑一样,这些记忆分为程序和数据两种;和电脑一样,人似乎也有一个”CPU”. 但现在的基于“存储——运算”的冯诺依曼式电脑其优点是快速执行指令进行处理运算,并不能像人的大脑那样,胜任大量的并发的逻辑判断问题,或者称为感情、直觉什么的。在电影中分别对应了那个老头子Architect和老太太Oracle. 所以现在电脑顶多是模拟人的一些行为,并无法真正的产生人工智能(我的理解)。人工智能的产生有赖于现在电脑从基本构架上的升级。

也许有那么一天,人类发明的机器智慧超过了人类自己,人类也可能就不再需要肉体而存在了,就像神话或科幻电影里边的那样。这时,并不是人类灭绝之日,而是人类进化之时。

开头说过这部电影业并非完美,受成本、环境、文化的制约,电影中也存在许多不太符合逻辑的地方。但相比于其他的科幻电影来说,它更加有深度和内涵。

这部电影的优秀之处是,向我们展示了一个奇妙的世界,带领我们去探索自己。