出品 | CSDN(ID:)
以下為譯文:
大約在10年前,我加入了社區,當時正值語言的第一個炒作階段。我們都被告知,語言代表著并發性和并行性開發的未來,因為它能夠以最輕松和最快速的方式完成開發。你還可以得到免費的分發包,因為它已經變成了一個開源軟件。在那個年代,一切都開始變得不可思議。虛擬機也剛剛獲得了SMP支持,而在此之前,要想真正利用同一臺計算機上的所有CPU,你必須在那臺機器運行多個虛擬機。
在這篇文章中,我想先花點時間對這十年的大部分時間作個反思。然后我會介紹一些這期間發生在上的事情,例如炒作階段對的影響?語言的知識階梯如何影響了對它的采用?以及我在社區的十年中自身發生了什么變化?最后,我將探討一下我認為及其社區的發展方向。
炒作階段
炒作周期(或技術成熟度曲線)在一個產品或技術的生命周期中引入了“階段”這個概念。這是一個營銷概念,而不是一個科學概念,但是用它來描述事情的發展往往會很有用。而我最感興趣的部分是“炒作階段”,它就像一股發生在編程社區的淘金熱。你可能見過一個或多個這樣的炒作階段,通常他們似乎都依附于某個殺手級應用程序,吸引著每個人蜂擁而至。
我能想到的“炒作”的例子有:炒作Ruby on Rails的“如何在15分鐘內構建一個博客引擎”的視頻(/embed/,其中的“看看我沒有做的所有事情!”仍然是一句有趣的話),炒作 的“在下使用Go語言”的文章(在此以前已經有了大量使用,但在那之后確實進入了一個爆發期)。在某種程度上,對和的炒作或許也可以列入這個名單。
在這樣的一個炒作階段,大量的新來者蜂擁而至,都想來看看能撈點什么好處。有些人會留下,但多數人會很快離開。大多數人的停留時間可能只是幾個月或幾年,能真正地安頓下來并且堅持幾十年的人非常少見。絕大多數人都是一些絡繹不絕的先期采用者,他們從一個技術沖浪到另一個技術,嗅探最佳的機會,希望先行采用某種框架、語言或工具包,來獲取一定的競爭優勢。
所以通常的想法是,首先你要擁有一個真正的殺手級應用程序,然后人們就會涌入你的生態系統。殺手級應用程序會驅動這股人潮,只要你把它構造出來,人們就會蜂擁而至。如果你能留住他們中的小部分并保持他們的活躍度,那么在可以預見的未來,你將會擁有一個活躍的社區。這用一種奇怪的方式,讓我想起了“雨隨犁至”這個理論:
上帝加快犁地的速度。……這是奇妙的“人類主宰自然”的理論假定,天上的云會分配取之不盡的雨水…而[犁]是讓野蠻變成文明的工具;能把沙漠變成農場或花園。……或者更簡潔的表達,就是“雨隨犁至”。
這一理論的基本前提是,通過人類的定居和農業活動可以影響干旱和半干旱地區氣候的永久變化,使這些地區更加濕潤。這一理論在19世紀70年代被廣泛推廣,作為美國大平原(曾被稱為“美國大沙漠”)開墾定居的理由。這也被用來證明南澳大利亞在同一時期的邊界土地上小麥種植的擴張是合理的。
如果我們能讓一個大項目一直進行,開發人員就會出現,然后它就會自我維系下去。我認為這種觀點顯然是錯誤的,因為盡管在其最熱的炒作階段擁有了數十個殺手級應用程序,但是,它的社區仍然維持在很小的規模。下面,就讓我們看看在那個時代,都有哪些殺手級應用程序:
以上提到的殺手級應該程序,很多都是在喬·阿姆斯特朗的《編程》一書問世的時候出現的。它們制造了一場對大量采用的完美風暴,同時也為吸引了大量的旁觀者,甚至對黑客新聞網站都產生了明顯的影響,以至于它強制要求在某一天所有討論都必須是關于的內部機制。
然而,喧囂之后,留下來的人很少。
我認為,現在的殺手級應用程序的出現和過去相反,它是出于人們想在最初的炒作階段分一杯羹的貪婪。任何應用程序,總有一個弱小的、早期的階段,有人嗅出了它技術的有趣之處,決定喜歡它,并且將它構建出來,如果碰巧它成了一個殺手級的應用程序,那么就會進入一個更大的炒作階段。人人都盼望從天上掉餡餅,一個成功的故事會培養更多的模仿者。另一個常見的現象是“重塑世界”階段,每個人都花時間重新實現現有的一切,所以你會看到很多很多“與語言無關”的公告。
但是殺手級的應用程序本身從來就不能夠實現開源語言的自我維系。其中一個有趣的結果是,像和這樣的產品,盡管很受歡迎,但其用戶社區比貢獻者社區要大得多。成千上萬的公司使用他們的產品,但他們不一定會參與到社區中來。
毫無疑問,部分原因在于的大多數殺手級應用程序都在專門的基礎設施中:你創建了一個其他人都可以使用的高可靠性黑盒組件,如果它工作得足夠好,他們就不需要查看盒子內部。現在好了,幾十個開發人員已經為數千種其他產品和服務提供了基礎設施。而按照定義,專業化的基礎設施是一個不需要大量人員就能產生巨大影響的地方。所以它們的貢獻者群體和社區總是比靠近最終產品的群體和社區要小得多。例如,擁有數不清的網頁開發人員的Web開發框架,或者更通用的基礎設施,都可以把它們用到小規模的部署項目上,因為任何企業都可能找到它們的用途。
但是,即使沒有這些因素,也很容易讓人覺得,錯過了一個巨大的機會,那就是它在炒作階段沒有獲得更大的蛋糕份額。
知識階梯
我不想用諸如“過去可以發生或者應該發生”這樣的描述來做反事實推理。相反,我想挖掘我在社區多年的教學和寫作中所看到的常見學習模式。這些也是我現在正在社區中看到的模式,我覺得這可能是預示著可能有著相似未來的一種跡象。
我最鐘愛的一個理論是,像編程語言(及其生態系統)這樣的技術主題具有多層復雜性,需要學習和發現各種概念。我第一次開始表達這種理論是在Learn You Some 的網站上,用一個我稱之為第九圈的圖表。
我認為學習一項技術并不是無休止的痛苦(至少,它不應該如此),這話是不是說得有點假心假意,我只是喜歡雙關語。但簡單地說,對任何新技術的學習,通常有一個更“核心”的主題路徑或次序,這樣就有了“知識階梯”這樣的東西,在這個知識階梯上,越有價值的知識/概念被放得越高,也越難到達,所以實際情況是,到達越高的地方的人會越來越少。
對來說, 我認為它的“知識階梯”可能是這樣的:
函數式編程;隔離進程和并發性;可靠的并發性(links, , );OTP行為模式和其他系統抽象;如何構建OTP系統;如何構建發布版本并處理其生命周期;如何保持系統始終在線,以及如何運作。
如果你是第一次接觸,并且從一本初學者的書開始學習,你可能會在第一級階梯上花費大量的時間:與函數式編程、不可變性、遞歸和類似的概念交朋友。遲早,你會接觸到并發性和并行性、進程和消息傳遞。在那之后,你開始學習links和進程監控,錯誤處理,以及的內部機制。在的大炒作階段,第二級和第三級階梯成了最讓旁觀者驚嘆的賣點。如果你必須學會一些在未來的項目中必備之知識,那就是其中之一。
其他的梯級會在稍后跟進,尤其是OTP(第4級階梯),但前提是你堅持完成編程這一階梯。OTP被視為的真正價值所在——并發性和函數式編程確實不錯,但是OTP代表的一般開發框架是你必須堅持和使用的真正獨特的東西。很多人愿意使用這些框架,了解它們所做的美好的抽象,但是對于如何正確地構建每件事情可能會感到有點困惑。
事實上,像這樣的應用程序的大部分開發幾乎沒有突破第四級階梯。當時的生態系統有點像蠻荒的西部,對于愛立信的員工和最有動力的自學者來說, OTP知識也就是那么一回事。大多數人只有在有值得投入生產的東西出現問題、并且想尋找更好的解決方法時,才有可能到達第五級。直到2015年或2016年,當Relx的出現開始讓整個發行體驗變得更容易時,第6級才被重視。第7級幾乎從未到達,事實上在vb中如何編程使mdb數據庫集成到程序里,很多人都覺得不應該熱升級一個節點,理想情況下,你也不會在生產環境中使用SSH命令行進行調試操作。
在實踐中,并非每個人都會按照相同的順序來學習所有這些知識,有些書會調換它們的次序(這讓我想到了 and OTP in 這本書)。我覺得這些次序都不是問題,“階梯”用在這里只是為了說明問題。
社區波浪式向前發展。炒作階段會使一個社區的規模增加十倍甚至百倍,大多數人會好奇地看一眼然后離開,所以一個社區中的大多數用戶傾向于停留在第一個梯級。少部分人會到達高一級階梯,更少部分的人會到達更高一級,依此類推,直到你擁有到達最高階梯的內部專家圈為止。
對于來說,我認為前三個梯級可能是最容易到達的。第四個階梯花了幾年的時間來開發,最終被認為是有價值的。第五個階梯非常復雜。缺乏工具和生態系統,社區留下來的都是自己選擇的,愿意忍受這種貧瘠環境的人,因此對新來者的困境不敏感。為了保持這篇文章簡短(好吧,長而不是荒謬的長),我就不在此贅述了。
在任何情況下,如果你是一個的用戶,你可能會看到你在這個硬性定義的階梯上的位置,你可以感覺到一個社區中的派系通常都在那里。很多人,可能他們只是在上做得很好,很少能突破第四階梯,而且在可預見的將來,他們中的許多會一直停留在第三階梯或以下。在許多情況下,這些情形都是對的。這里我們只是觀察,不作評判。作為一個通過了很多知識階梯的人(可能在這種環境中,我的頭上還有一些知識階梯,比如“修補虛擬機”之類的),他們似乎錯過了很多知識階梯,但坦率地說,那些東西對他們可能永遠不會有用。
但所有這些都是說:作為一個社區,我們可能會讓人們很難超越基本水平,從而使我們自己陷入困境。經驗教訓的學習是不可以一蹴而就的,在某種程度上,社區是盲人在引導盲人,因為它實在太小了,沒有足夠的人來分享所有需要的經驗。今天的情況比較容易,如果你在一個炒作的周期之外,你很可能會找到好的幫助,因為很少有人同時要求所有的幫助。
我想表達的是,如果明天有第二個炒作階段,我們會比上一個炒作階段表現得更好。希望這些經驗,加上和社區之間更好的合作,讓我們能夠接觸到更多的受眾,讓我們成功的機會加倍。
有哪些改變?
不是一具放在一個裝滿甲醛的玻璃容器里的尸體,等待在光天化日之下被帶走——它一直在進化。部分原因是由于社區的壓力和需求,幸運的是,他們對自己的工具的期望比用戶已經習慣的要高。另外部分原因在于推動平臺向前發展的實際工業需求,而不像學術界,他們只是按照他們自己喜歡的方式推動事情向前發展。
以下是我能想到的一些改變,大家可能很高興知道有些變化在2009年或更早的時候就發生了:
如果你有興趣了解更多信息,你可以查看版本發布說明的完整列表(/news/tag/)。但簡而言之,如果OTP 版本13到16的發布時間對愛立信()OTP團隊來說有點晚的話(我們現在已經是版本22!),那么他們使用對他們的旗艦產品中所做的最新投資確實是顯而易見的。但即使在愛立信之外,一切都在發生變化。社區,以及社區和運行在 VM上的其他語言的貢獻者,都聚集在一起建立了生態系統基金會,現在它擁有一個活躍的工作組,幫助協調和解決有關構建和打包工具、可觀察性工作、安全性、培訓和采用等問題。
如果你像我一樣,在大炒作初期加入,但又沒有像我一樣留下來,因為你覺得很多東西不可用或太棘手,你可能想再試一次,因為的語言的人類工程學及其生態系統已經大大改善。
將去向何方?
雖然沒有必要像2007年到2009年那樣突然出現大殺手級的應用程序,但這并不意味著沒有任何項目顯示出這種希望。仍然是許多公司的基礎設施的不可缺失的部分,其最初的殺手級應用程序大多還在其上運行。我們也有很多有趣的新應用,就像每個BEAM配置文件顯示的那樣。我自己真的很喜歡基于屬性的測試等概念,并且和擁有世界上最好的框架。盡管如此,跡象表明我們現在還沒有進入炒作階段。
會有另一個炒作階段嗎?也許有,也許沒有。你可以說,會有下一個炒作階段。生態系統都有足夠的共同點,在一個地方學到的經驗教訓可以用到另一個地方。它們之間的相似之處多過不同之處。也許還有一個新的復興時期,我個人不再那么在乎它了。我喜歡小社區,所以我對此感覺很好。不需要幾何級增長來讓我覺得樂在其中,它只需要可持續發展。
社區的規模大小也從來沒有阻礙它在全世界發揮它的影響力。就我所知,一直處于這樣一種狀態,既沒有足夠的工作量滿足開發人員的需求,同時沒有足夠的開發人員來完成的工作:這兩個方面都有很多工作要做,但他們在地理位置上并不一致。面向偏遠市場的公司和員工往往做得最好。而在之前無法輕易突破市場的地方,整個的就業市場現在只需稍加努力就能達到良性循環。
從一個更高的層面來看,你是否使用或類似的語言,這可能并不太重要。雖然我確實覺得它沒有被充分利用而且它的價值被低估了,但最大的好處不是來自于運行一個使用它的系統。而是來自于學習可靠系統設計的基本原理,并在實際環境中吸收其經驗教訓。
我多年來聽到的一類問題都和尋求指導有關。例如在vb中如何編程使mdb數據庫集成到程序里,我應該如何學習系統設計?關于構建分布式系統,你有什么好的建議嗎?我應該做什么可以讓系統變得更加健壯和容錯?我怎么知道我的設計是模塊化的,不會導致抽象泄漏?什么是良好的錯誤處理?有什么好方法可以讓我知道優化工作還為時過早呢?聲明()某個東西意味著什么?
我們總是喜歡簡短易懂的解決方案,如食譜和最佳實踐,但事實證明,大多數真正的答案都是“我花了很多時間學到的”或類似的東西。我可以坦誠地說,我的職業生涯中沒有什么能比得上花時間在世界里,潛移默化地吸收社區里老手們的豐富經驗。從數量上看,不是一個大的社區,但從任何其它指標來看,它肯定是富有的。幾年后,我從一個初級開發人員變成了高級開發人員,在世界各地發表演講,尋找方法把我獲得的這些經驗傳授傳大家,這其中大部分都歸功于這個社區。
也許我在15分鐘內還是寫不出一個博客引擎(事實上,我不是一個快速開發人員),但我已經成為一個更加可靠的開發人員和系統架構師,我認為這是一種非常有效的方式。再說一次,我在這里討論的不是使用系統,而是構建它們并使它們工作。無論如何,激勵人們的東西并不隨處可見。
我無法想象我能在其他社區能得到這么多,過去的10年里發生的一切令人驚嘆。有趣的是,社區仍然很小,大部分還沒有開發利用。這意味著你有足夠的機會參與到任何事情中去,與那些充滿智慧的人一對一地進行交流,并為自己爭取一席之地。
原文:ferd.ca/ten-years-of-.html
【END】