参加了 InfoQ 的虚拟座谈会
蒙组委的邀请,在 12 月 4 日参加了在上海举办的 PyCon China 2011 活动(http://cn.pycon.org/2011/),并作了题为《Python 于 Webgame 的应用》的报告(幻灯:http://www.slideshare.net/laiyonghao/python-webgame-10452102,录像:http://e.gensee.com/v_3df867_14)。关于首次 Python Conference,InfoQ 给出了一份非常漂亮的报道(见:http://www.infoq.com/cn/articles/pycon-2011-first-in-china),详细记录了讲演的核心内容。会后,InfoQ 还组织了虚拟座谈会,我有幸被邀参加,就 InfoQ 提出的若干问题给了点自己的小看法,后来被整合发表在他们网站上(见:http://www.infoq.com/cn/articles/virtual-panel-pycon)。在这里记录一下未经润色的我回复的内容版本,由于有一个问题最后 InfoQ 的文章省去了,所以我这里也略去。
===================
1. 近些年Python在语言特性的发展上,有什么值得称道的地方,又有什么需要改进的地方?
答:Python 这些年一直在发展,从 2.6 到 3.2 版本的发布都是非常给力的,在 3.x 持续增加新特性的同时还发布新的 2.6、2.7 版本把这些新特性兼容回 2.x 分枝,这是最为难能可贵的、值得称道的——Python 开发者无论选择哪一个大版本都得到了充分的尊重。关于它需要改进的地方,我觉得已经不多,因为一些 bad smell 的问题已经在 3.x 版本得到了根本性的修正。不过我在 2010 年 11 月底的时候写过一篇博客《我想要的 Python 特性》(http://blog.csdn.net/lanphaday/article/details/6043605),里面谈到 3 个 Python 目前没有提供的特性,分别是在函数式编程、设计模式和面向消息编程方面的增强,但从文章的评论来看,赞同和抵制的人基本相当。关于面向消息编程,我自己实现了一个 python-message(http://pypi.python.org/pypi/message)开源库,已经在我主持的一个商业项目中使用,能够很好地解耦模块关系,在 PyCon 也作了简单的宣传,在此再向大家推荐。
2. 您觉得在移动互联网和Big Data兴起的今天,Python的机会在哪里?
答:很遗憾,这两个领域我都没有深入的了解,以下纯属妄言,仅供参考。凭着从业经验,我觉得把 Python 用在移动互联网的服务器端编程应该是不错的选择,但如果想着把 Python 用在编写移动设备应用方面,我觉得技术选型错误。Big Data 方面,我觉得 Python 作为一门优秀的胶水语言,一定有其用武之地,但把它当作 Big Data 处理的主要编程语言,我觉得技术选型错误。
3. 在使用Python的时候,是否有遇到过性能上的问题,是如何解决的?
答:有的,就像以前使用 C++ 的时候一样。无论使用什么编程语言,都会遇到性能问题。性能问题的根源不是编程语言,而是业务。举个例子,你说 C++ 执行效率高吧,写个 CPU 软件渲染图形游戏引擎跑一下 Unreal Engine 3 提供的特性试试看有没有性能问题?在 PyCon 的快速演讲环节中,阿里云的产品经理李俊东先生就鲜明地提出自己的观点(http://weibo.com/1924010407/xAt3A6Yij):不要迷恋语言性能,要多关注业务性能!遇上 Python 性能问题的时候,解决方案与其它语言遇上性能问题是类似的,有以下步骤:1、使用 profiler 确定性能瓶颈;2、使用更适合的数据结构与算法、更合理的 I/O 模型、更少的运算(如缓存之前的运算结果);3、使用更快的编程语言重写瓶颈部分,就像用 C++ 时使用汇编指令重写那样。更细节的内容,不妨参考我博客的几篇文章:http://blog.csdn.net/lanphaday/article/details/1483728、http://blog.csdn.net/lanphaday/article/details/1502290、http://blog.csdn.net/lanphaday/article/details/2120147、http://blog.csdn.net/lanphaday/article/details/2239445。
4. 多进程部署和协程似乎已经成为了一种趋势,在大会上很多嘉宾都谈到了这方面的内容,您是怎么认为的?
答:在未来,起码在脚本语言的世界里,线程的地盘一定会进一步缩小。在 Lua 和 Ruby 中,你看不到原生线程的存在,但它们还是流行了。充分说明哪怕是多核时代,线程也不受待见。相对于获取更佳的 CPU 并行计算性能,现代的程序员更乐于获取更佳的代码可维护性,因为现代项目已经非常庞大,运行在多台计算机甚至多个数据中心上,榨取单机性能显得有点舍本逐末。我个人浅见是在未来线程会有点像 C++ 的处境,它不会被淘汰,但会被限制在编写为多核优化的程序库等领域,嗯,一个能够 CPU 并行计算的 Python 库的确是有吸引力的,但普通的业务逻辑程序员就不碰线程为妙了。
5. 略。
6. 您认为像Python这样的动态语言应用在开发大型项目或企业级开发的时候有什么局限性?
答:目前来看,我觉得没有局限性。不过一堆程序员一直只把 Python 当成更好的 Shell Script、更好的 Perl 来用,他们懒于进取,满足于使用 Python 写一些用完即弃的小脚本,自然没有实力使用 Python 开发大型项目,然后将失败归结于 Python 有这方面的局限性。Python 很棒,豆瓣、金山、盛大、网易等公司都在大量使用,甚至有许多数十万行 Python 代码的项目在大量赚钱,如果你觉得使用 Python 还会受限,请先苦练自己的技能。
7. 优秀的Python开发者一直都不太容易找得到,在人员的培养和招聘方面您有什么心得?
答:优秀的XX(可以代入任何一门编程语言)开发者一直都不太容易找到。给优秀人才想要的,无论是物质还是感情,你身边自然能够聚焦高手。如果又要马儿跑,又要马儿不吃草,请先摆正你的心态。所以如果招不到优秀人才,不妨从如下三个方向入手:一是改变业务逻辑,降低技术难度,自然不需要优秀人才了;二是另找一条路,比如你一直想找更快的马,找不到的时候不妨买辆汽车,说回来就是换套解决方案,比如 Python 程序员不好找,你 C#/java 不就得了,说不定还更好;三是加强自己的修为,所谓人以群分,强强相吸,你很强大,自然容易找到强大的合作者。
8. 对于打算尝试Python的开发者和企业,您有什么建议?
答:对于开发者,我觉得多学一门编程语言肯定不错,利用业余时间学一下大有增益;但切忌随便看点书或文章就下了结论认为这东西无所不能或一文不值,要学就学深入一点。对于企业,我的看法是不要轻易尝试,哪怕 PyCon 的讲师说得天花乱坠。引入新的技术就是引入新的风险,对之前的技术架构、员工情绪、企业文化都会带来巨大冲击,除非你已经考虑清楚愿意为这件事情折腾到脱一层皮都在所不惜。