New一个对象 2014-03-24
这篇文章有点长,这并非声明观点,只是对我一路走来的反思。我很久以前就离开了Python世界,但我从没机会说个再见。
在我多年前离开Python的时候,无限感慨,不太承认我不会再回来。当我对PyCon2013的提议被拒绝时,我非常泄气并且感觉到我不再是Python社区的一员了。
Python社区是我第一个也是唯一一个参与的开源社区。参与到Python里是经过深思熟虑的决定。在大学里我对Scheme和Smalltalk感兴趣。这些语言很高端大气很有意思,但是很难找到实际用户。Scheme的库一直不太完善,社区也不太活跃。而与之相反,Smalltalk是能实际应用的,它是为喜欢创造东西的人创造出来的。但是Smalltalk从原来知道现在一直是它自己的世界。它在文化和技术上是前互联网,前开源和前在线社区。尽管Smalltalk环境和语言有好的东西,可是它仍然无法满足这些富有潜力的需求,尽管它试着去适应。
在我大学生涯的尾声,我有意识的去寻找一个新的钻研方向。我折腾了Perl和C,但它们不适合我。然后我发现了Python,它足够好了我也就没有去找更好的语言了。我并没有像原来喜欢Scheme和Smalltalk那样喜欢Python——Scheme就像是为我打开了世界的大门,而Smalltalk是一个神秘的世界,就像突然从远古的废墟来到先进的文明。Python相对比较实用——我在那时候并不是兴致勃勃的,我想要做点东西出来。
然后我用Python做了很多东西。我当时在做web开发,而我的热情更多的是创造一个工具来做项目而不是直接做项目。我在那段时间做了一些很酷的产品,不只是库,但是因为一些原因,我只想一些更小的模块。并且我发现了一个Python里的社区。
想当年我贡献了Webware,感觉跟现在Python Web开发完全不是一个时代的东西。我写了SQLObject,这是我的第一个感觉到:我去!有人居然在用它,而我不太确定对它的感觉的这么一个库。但是SQLObject探索了很多元编程的概念并且这在当时的Python世界里是相当新奇的。与此同时,维护它是个沉重的负担。花了我太多经历的来解决问题,当我的兴趣完全消退之后,我把它交给Oleg来更好的维护它。这后来成为了我一个经常做事的模式。SQLObject帮助了下一代的ORM库SQLAlchemy的产生,这对我来说已经够不错了。
接下来就是WSGI,它精巧的功能基础让我很兴奋。我在Paste里创建了整个Web框架工具集。只有很少人理解我用Paste在做什么。一些人喜欢Ben Bangert能够看到代码的本质,并将其以可用工具的方式把它带到世界上。Python Web框架在那时候还很糟糕,最后使用一个统一的方法是更加成功的技术,而不是像我在做Paste的时候自己造轮子。我还不确定从那有什么样的教训。没有总的教训,但是对使用场景有了更多的理解。并且理解了你对一个问题能够做些什么。我感觉我现在理解了丰富的技术视野和远见的重要性,我还更加学到了如何在正确的环境里组合与协调一群对的人来走向成功。
话说回来我感觉我达到了使用Python编码10000小时的标准。我写了WebOb,从Paste里吸取了教训对于设计库有了更好的直觉。我仍然觉得它在将HTTP映射为Python方面是最棒的。其他的库包含更多的Web开发方面的东西,或者有更好的文档和更多的用户,但从一个特别的角度来看,我仍然为WebOb感到骄傲。它对于很多人在构建Web框架的探索中是很重要的一块。其他与它同时期的库有lxmlhtml,比较小的如WebTest,ScriptTest,MiniMock,Tempita。那段时间就像是清空了我的系统,上传了一堆我的想法。
但我最成功的工具是virtualenv和pip。这是我投入了最多感情的作品。它们是关于:处理部署时的麻烦(virtualenv),pip能让人不再抱怨setuptools 里的easy_install。我不确定我是否埋怨这些工具在使用率上的很不容易的成功,或者它们在某种意义上是用户可见的工具而不是库,亦或是我不喜欢做这样的东西因为别人也同样不喜欢所以才会有这样的空白让我来填补。
然后,我做了最后一个项目,Sliver Lining。它是devops革命的初期出现的,它是考虑web应用的通用容器会是什么样子的一个尝试。它在某种意义上比virtualenv和pip更进一步,但目标是构建一个完整的产品而不是一组折衷的工具。没有人关系,我只是有一点关心,是因为它实现了我很久以来想要实现的想法,因为是为了web应用开发更加敏捷和可靠,它能去掉那些我比喜欢做的任务或将其自动化。我沿着路走下去进行代码和技术设计,但我由于很单调乏味而没有坚持下去。
然后当我发现Python里面没有什么能让我兴奋的东西了。Python非常棒,我的兴趣不是去追逐流行的东西。但我一直想象我能创造出好的工具,并且使用这些工具来构建出我想要做的产品——那个产品具体是什么样子,我也不知道,但是利用好的工具我想我能更快更容易发现它。
有时候当我对一个想法很兴奋的时候,我就会停下来。我需要冷静一下。试着好好想想这个想法,因为我知道如果我直接推进这个想法,我会把事情搞乱并且非常失望。不,我不知道这是不是真的:可能是我不想去面对,在那个时候,那个想法并不是像我想的那么酷,围绕这个想法还需要更多成熟的考虑,因为我担心把事情搞乱,或者把事情搞砸,所以我停止开发工具了。
我一直把我的注意力集中于Web,,尽管我在服务器端陷入困境。我跳过本地GUI,成为一名用户。但是缺少考虑的纯数据处理让人感到很乏味。我曾经是,一个自由软件和Web的信徒。我相信在Web里不一定全是开源,开源也不是为了Web。然后我写下来,我感觉我不关心开源 ,但那不是因为Web。
当我觉得Python不再与Web相关,至少不与让我感兴趣的那部分Web相关。那些我构建的工具看起来也就没了意义,这些工具不能实现我的抱负。数据库后端的网站,或者基于动态HTTP的web应用,模版和部署,任何你称为REST的东西——它们看起来都不是未来,不管这些模糊的东西是怎样,我都不会再去研究它们了。
这并不是一个真正的革命,我回顾构建这些工具的过程。如果甚至你几年前问我我也是这个看法,这并非我的独特观点,我觉得这是非常明白的,难道我们没发现世界发展的方向?因此我转向了javascript去研究DOM。
在这之前我加入了Mozilla。Mozilla从某种程度上引领了这种变革(javascript),诱惑我离开Python。事实上我如果不再Mozilla做Python后端开发的话,我还能更加轻松的工作。
在过渡的最后几年非常艰难。使用Python做服务端的开发,我很擅长,能够胜任这样的工作。我能很自信的构建一个想法并且考虑到所有的设计问题。我很受尊敬并且我的建议能得到采纳。我已经投入了10000小时,我已经精通了。
而转移到javascript后以前的优势都不存在了。如果我做web开发,并且身边有一些也在做相同的转变的人的话,完成这种转变可能会简单一些。但Mozilla不是那样的环境。但也不错了,我感觉到自信可能是因为没有人来纠正我。
很奇怪看到人们谈论一个程序员如何几天或一个月的时间里学一些新的东西。程序员觉得所有的只是都是可转移的。我不知道怎么解释它,我情愿认为这些人从来不知道什么是真正的精通。我不认为会需要花另外10000小时来精通一门新的语言,但至少需要花几千小时、几年的辛苦工作。我现在感觉我已经接近了。
可能这是我对于精通的观点。决定做什么事情就要把它做好。你必须去解决正确的问题。你需要用好的方法来解决它。你需要知道什么时候要修订你的方案,并且理解修订带来的限制。你需要有宏观和微观的直觉。你需要对编程的所有细节掌握的足够好,不会被简单的东西淹没,那么你才有精力花在主要的部分。从Python到Javascript的转变并不大,这两种语言的看起来很相似。浏览器已经是我关注的环境了。但是在新的环境里重建直觉还是花了些时间。
我不会回到我原来在的位置了,因为Javascript不是Python。如果有我没发现的Javascript社区,或者不是一个单独的实体。社区创造Javascript和Python社区创造Python是完全不同的,Javascript是为因特网而生的,但Python是在因特网上创造出来的。我很想念Python社区,你们都是好人。
我原来有的一些关于语言派别的想法已经不存在了,我不会伪装这是我最爱的语言。这不应该与对语言不感兴趣相混淆。我仍然为“针对工作使用正确的工具”而烦恼,平淡的真理不要太多的讨论和投入到软件工程里的任务和选择,用冷静的技术宿命论来代替。
我想我对平台的关注程度超过了语言,而浏览器看起来是最有意思的平台,不是因为它很新奇,而是因为它非常实在,并且与任何东西都能关联起来。浏览器不再是服务器的仆人,我倾向于把浏览器看作是一个独立的代理,连接服务而不是服务器。显然那不是很多运行的网站的情况,但我把这种模型看作是未来,这是一个更好的理解未来架构的观点。
我依然会向着这个目标前进。我不想再为我从未设法去做的事情构建工具。现在我想我处在协同合作的环境下,首先是利用TogetherJS,现在我想要尝试一个更大的实验。我觉得已经有了执行这些项目的能力,编码只是推进大的远景里的一小部分。我仍然要学很多东西,如何在可行性与用户价值之间平衡,如何在战略和设计上进行妥协。协作本身就是一门专业的技术。我学到了很多,也可以做事情,但我还没有在这个领域里积累足够多。我担心我没有足够的空间来学这些东西,时间在我学习的过程中都不够用了。
那么我现在就是这样了。不再是一个语言的信徒,不清楚我参与的那些社区,我对自己更加不确定了。那么我如何来评价我自己?尽管我发现我的技术立足点漫无目的。不过也很难说再见。那么我会说,Pythonistas,等到下次再见,可能我会在这看到你。