Ian Bicking:跟Python說再見
這篇文章有點長,這并非聲明觀點,只是對我一路走來的反思。我很久以前就離開了Python世界,但我從沒機會說個再見。
在我多年前離開Python的時候,無限感慨,不太承認我不會再回來。當我對PyCon2013的提議被拒絕時,我非常泄氣并且感覺到我不再是Python社區(qū)的一員了。
Python社區(qū)是我***個也是唯一一個參與的開源社區(qū)。參與到Python里是經(jīng)過深思熟慮的決定。在大學里我對Scheme和Smalltalk感興趣。這些語言很高端大氣很有意思,但是很難找到實際用戶。Scheme的庫一直不太完善,社區(qū)也不太活躍。而與之相反,Smalltalk是能實際應(yīng)用的,它是為喜歡創(chuàng)造東西的人創(chuàng)造出來的。但是Smalltalk從原來知道現(xiàn)在一直是它自己的世界。它在文化和技術(shù)上是前互聯(lián)網(wǎng),前開源和前在線社區(qū)。盡管Smalltalk環(huán)境和語言有好的東西,可是它仍然無法滿足這些富有潛力的需求,盡管它試著去適應(yīng)。
在我大學生涯的尾聲,我有意識的去尋找一個新的鉆研方向。我折騰了Perl和C,但它們不適合我。然后我發(fā)現(xiàn)了Python,它足夠好了我也就沒有去找更好的語言了。我并沒有像原來喜歡Scheme和Smalltalk那樣喜歡Python——Scheme就像是為我打開了世界的大門,而Smalltalk是一個神秘的世界,就像突然從遠古的廢墟來到先進的文明。Python相對比較實用——我在那時候并不是興致勃勃的,我想要做點東西出來。
然后我用Python做了很多東西。我當時在做web開發(fā),而我的熱情更多的是創(chuàng)造一個工具來做項目而不是直接做項目。我在那段時間做了一些很酷的產(chǎn)品,不只是庫,但是因為一些原因,我只想一些更小的模塊。并且我發(fā)現(xiàn)了一個Python里的社區(qū)。
想當年我貢獻了Webware,感覺跟現(xiàn)在Python Web開發(fā)完全不是一個時代的東西。我寫了SQLObject,這是我的***個感覺到:我去!有人居然在用它,而我不太確定對它的感覺的這么一個庫。但是SQLObject探索了很多元編程的概念并且這在當時的Python世界里是相當新奇的。與此同時,維護它是個沉重的負擔。花了我太多經(jīng)歷的來解決問題,當我的興趣完全消退之后,我把它交給Oleg來更好的維護它。這后來成為了我一個經(jīng)常做事的模式。SQLObject幫助了下一代的ORM庫SQLAlchemy的產(chǎn)生,這對我來說已經(jīng)夠不錯了。
接下來就是WSGI,它精巧的功能基礎(chǔ)讓我很興奮。我在Paste里創(chuàng)建了整個Web框架工具集。只有很少人理解我用Paste在做什么。一些人喜歡Ben Bangert能夠看到代碼的本質(zhì),并將其以可用工具的方式把它帶到世界上。Python Web框架在那時候還很糟糕,***使用一個統(tǒng)一的方法是更加成功的技術(shù),而不是像我在做Paste的時候自己造輪子。我還不確定從那有什么樣的教訓。沒有總的教訓,但是對使用場景有了更多的理解。并且理解了你對一個問題能夠做些什么。我感覺我現(xiàn)在理解了豐富的技術(shù)視野和遠見的重要性,我還更加學到了如何在正確的環(huán)境里組合與協(xié)調(diào)一群對的人來走向成功。
話說回來我感覺我達到了使用Python編碼10000小時的標準。我寫了WebOb,從Paste里吸取了教訓對于設(shè)計庫有了更好的直覺。我仍然覺得它在將HTTP映射為Python方面是最棒的。其他的庫包含更多的Web開發(fā)方面的東西,或者有更好的文檔和更多的用戶,但從一個特別的角度來看,我仍然為WebOb感到驕傲。它對于很多人在構(gòu)建Web框架的探索中是很重要的一塊。其他與它同時期的庫有l(wèi)xmlhtml,比較小的如WebTest,ScriptTest,MiniMock,Tempita。那段時間就像是清空了我的系統(tǒng),上傳了一堆我的想法。
但我最成功的工具是virtualenv和pip。這是我投入了最多感情的作品。它們是關(guān)于:處理部署時的麻煩(virtualenv),pip能讓人不再抱怨setuptools 里的easy_install。我不確定我是否埋怨這些工具在使用率上的很不容易的成功,或者它們在某種意義上是用戶可見的工具而不是庫,亦或是我不喜歡做這樣的東西因為別人也同樣不喜歡所以才會有這樣的空白讓我來填補。
然后,我做了***一個項目,Sliver Lining。它是devops革命的初期出現(xiàn)的,它是考慮web應(yīng)用的通用容器會是什么樣子的一個嘗試。它在某種意義上比virtualenv和pip更進一步,但目標是構(gòu)建一個完整的產(chǎn)品而不是一組折衷的工具。沒有人關(guān)系,我只是有一點關(guān)心,是因為它實現(xiàn)了我很久以來想要實現(xiàn)的想法,因為是為了web應(yīng)用開發(fā)更加敏捷和可靠,它能去掉那些我比喜歡做的任務(wù)或?qū)⑵渥詣踊N已刂纷呦氯ミM行代碼和技術(shù)設(shè)計,但我由于很單調(diào)乏味而沒有堅持下去。
然后當我發(fā)現(xiàn)Python里面沒有什么能讓我興奮的東西了。Python非常棒,我的興趣不是去追逐流行的東西。但我一直想象我能創(chuàng)造出好的工具,并且使用這些工具來構(gòu)建出我想要做的產(chǎn)品——那個產(chǎn)品具體是什么樣子,我也不知道,但是利用好的工具我想我能更快更容易發(fā)現(xiàn)它。
有時候當我對一個想法很興奮的時候,我就會停下來。我需要冷靜一下。試著好好想想這個想法,因為我知道如果我直接推進這個想法,我會把事情搞亂并且非常失望。不,我不知道這是不是真的:可能是我不想去面對,在那個時候,那個想法并不是像我想的那么酷,圍繞這個想法還需要更多成熟的考慮,因為我擔心把事情搞亂,或者把事情搞砸,所以我停止開發(fā)工具了。
我一直把我的注意力集中于Web,,盡管我在服務(wù)器端陷入困境。我跳過本地GUI,成為一名用戶。但是缺少考慮的純數(shù)據(jù)處理讓人感到很乏味。我曾經(jīng)是,一個自由軟件和Web的信徒。我相信在Web里不一定全是開源,開源也不是為了Web。然后我寫下來,我感覺我不關(guān)心開源 ,但那不是因為Web。
當我覺得Python不再與Web相關(guān),至少不與讓我感興趣的那部分Web相關(guān)。那些我構(gòu)建的工具看起來也就沒了意義,這些工具不能實現(xiàn)我的抱負。數(shù)據(jù)庫后端的網(wǎng)站,或者基于動態(tài)HTTP的web應(yīng)用,模版和部署,任何你稱為REST的東西——它們看起來都不是未來,不管這些模糊的東西是怎樣,我都不會再去研究它們了。
這并不是一個真正的革命,我回顧構(gòu)建這些工具的過程。如果甚至你幾年前問我我也是這個看法,這并非我的獨特觀點,我覺得這是非常明白的,難道我們沒發(fā)現(xiàn)世界發(fā)展的方向?因此我轉(zhuǎn)向了javascript去研究DOM。
在這之前我加入了Mozilla。Mozilla從某種程度上***了這種變革(javascript),誘惑我離開Python。事實上我如果不再Mozilla做Python后端開發(fā)的話,我還能更加輕松的工作。
在過渡的***幾年非常艱難。使用Python做服務(wù)端的開發(fā),我很擅長,能夠勝任這樣的工作。我能很自信的構(gòu)建一個想法并且考慮到所有的設(shè)計問題。我很受尊敬并且我的建議能得到采納。我已經(jīng)投入了10000小時,我已經(jīng)精通了。
而轉(zhuǎn)移到j(luò)avascript后以前的優(yōu)勢都不存在了。如果我做web開發(fā),并且身邊有一些也在做相同的轉(zhuǎn)變的人的話,完成這種轉(zhuǎn)變可能會簡單一些。但Mozilla不是那樣的環(huán)境。但也不錯了,我感覺到自信可能是因為沒有人來糾正我。
很奇怪看到人們談?wù)撘粋€程序員如何幾天或一個月的時間里學一些新的東西。程序員覺得所有的只是都是可轉(zhuǎn)移的。我不知道怎么解釋它,我情愿認為這些人從來不知道什么是真正的精通。我不認為會需要花另外10000小時來精通一門新的語言,但至少需要花幾千小時、幾年的辛苦工作。我現(xiàn)在感覺我已經(jīng)接近了。
可能這是我對于精通的觀點。決定做什么事情就要把它做好。你必須去解決正確的問題。你需要用好的方法來解決它。你需要知道什么時候要修訂你的方案,并且理解修訂帶來的限制。你需要有宏觀和微觀的直覺。你需要對編程的所有細節(jié)掌握的足夠好,不會被簡單的東西淹沒,那么你才有精力花在主要的部分。從Python到Javascript的轉(zhuǎn)變并不大,這兩種語言的看起來很相似。瀏覽器已經(jīng)是我關(guān)注的環(huán)境了。但是在新的環(huán)境里重建直覺還是花了些時間。
我不會回到我原來在的位置了,因為Javascript不是Python。如果有我沒發(fā)現(xiàn)的Javascript社區(qū),或者不是一個單獨的實體。社區(qū)創(chuàng)造Javascript和Python社區(qū)創(chuàng)造Python是完全不同的,Javascript是為因特網(wǎng)而生的,但Python是在因特網(wǎng)上創(chuàng)造出來的。我很想念Python社區(qū),你們都是好人。
我原來有的一些關(guān)于語言派別的想法已經(jīng)不存在了,我不會偽裝這是我***的語言。這不應(yīng)該與對語言不感興趣相混淆。我仍然為“針對工作使用正確的工具”而煩惱,平淡的真理不要太多的討論和投入到軟件工程里的任務(wù)和選擇,用冷靜的技術(shù)宿命論來代替。
我想我對平臺的關(guān)注程度超過了語言,而瀏覽器看起來是最有意思的平臺,不是因為它很新奇,而是因為它非常實在,并且與任何東西都能關(guān)聯(lián)起來。瀏覽器不再是服務(wù)器的仆人,我傾向于把瀏覽器看作是一個獨立的代理,連接服務(wù)而不是服務(wù)器。顯然那不是很多運行的網(wǎng)站的情況,但我把這種模型看作是未來,這是一個更好的理解未來架構(gòu)的觀點。
我依然會向著這個目標前進。我不想再為我從未設(shè)法去做的事情構(gòu)建工具?,F(xiàn)在我想我處在協(xié)同合作的環(huán)境下,首先是利用TogetherJS,現(xiàn)在我想要嘗試一個更大的實驗。我覺得已經(jīng)有了執(zhí)行這些項目的能力,編碼只是推進大的遠景里的一小部分。我仍然要學很多東西,如何在可行性與用戶價值之間平衡,如何在戰(zhàn)略和設(shè)計上進行妥協(xié)。協(xié)作本身就是一門專業(yè)的技術(shù)。我學到了很多,也可以做事情,但我還沒有在這個領(lǐng)域里積累足夠多。我擔心我沒有足夠的空間來學這些東西,時間在我學習的過程中都不夠用了。
那么我現(xiàn)在就是這樣了。不再是一個語言的信徒,不清楚我參與的那些社區(qū),我對自己更加不確定了。那么我如何來評價我自己?盡管我發(fā)現(xiàn)我的技術(shù)立足點漫無目的。不過也很難說再見。那么我會說,Pythonistas,等到下次再見,可能我會在這看到你。
原文鏈接: Ian Bicking 翻譯: 伯樂在線 - 賤圣OMG