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