Ian Bicking:跟Python說再見

賤聖OMG發表於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,等到下次再見,可能我會在這看到你。

相關文章