Joel Spolsky 與我共同創(chuàng)建的 Stack Overflow?已經(jīng)走過了?10 個年頭。從 2012 年開始我就在做其他的工作了,但是能讓人們在我過世之后還能想起我的東西,那肯定還是我的老伙伴 Stack Overflow。
這里我好像應該滔滔不絕地說?Stack Overflow 有多么優(yōu)秀,而我作為創(chuàng)始人是有多么偉大。
但I這些我都不在乎。
我真正在乎的是,Stack Overflow 對程序員們是不是有幫助。對此,讓我們看看如今最牛叉的開發(fā)者之一,我的偶像?John Carmack 是怎么評價的。
在為提升開發(fā)者的效率方面,Stack Overflow 可能貢獻了好幾十億美元
說實話,2013 年 9 月 17 日是很美好的一天。我讀到這條推的時候嚇了一跳,不光是因為我經(jīng)常用 Carl Sagan 的方式讀 Billions 這個詞。我在 Twitter 每隔幾天就會讀到一些殘酷無盡的人間疾苦,以及人們在網(wǎng)絡上的互相叫罵。與此相反,那一天是我感覺到的只有喜悅。這也提醒了我,我該查查 Twitter,看看如今誰還對網(wǎng)絡抱有不同的理解。
Stack Overflow 有著如此多用戶,也幫助了一個時代的開發(fā)者,對此我感到既榮幸又謙卑。但是,實現(xiàn)這一成就的并不是我。
是你們,對 Stack Overflow 貢獻了經(jīng)過深入研究后想到的提問;
是你們,對 Stack Overflow 貢獻出了簡潔而清晰的答案;
是你們,編輯了 Stack Overflow 的提問或答案,并使其變得更好;
世界各地開發(fā)者們所貢獻的那些大大小小的提問與回答,把 Stack Overflow 變成了一個在開發(fā)領(lǐng)域能與維基百科抗衡的創(chuàng)意共享知識庫。這實在是…非常的不可思議。
不過成功的故事都很無聊。這個世界上有很多人,本身運氣好,但還時不時的告訴別人是自己的努力以及喝活力汽水換來了成功。我覺得失敗的故事更有教育意義,在建立業(yè)務與規(guī)劃未來時,我把自己想象成深淵專家,并開始一場比賽。這是我自己做事的習慣。
當你在凝視深淵的時候,深淵也正在凝視著你 – Friedrich Nietzsche
由此,我現(xiàn)在要與耀眼的深淵對視,預測一下Stack Overflow未來十年會遇到的挑戰(zhàn)。這之前,我要先澄清以下事實。
1、從 2012 年 2 月開始,我就沒有再為 Stack Overflow 做事了,也沒有對其運營有過任何建議。你問我對如何運作Stack Overflow 竟然能沒有建議?額,那你可能不認識我。你問我難道我不會時不時給員工發(fā)郵件告訴他們我的想法?我也許會吧,但是我為數(shù)不多的歸檔郵件可以證明,這個事情很少發(fā)生。
2、Stack 有著優(yōu)秀的員工,他們中的大多數(shù)(包括我離開之前的 Stack Overflow 社區(qū)成員)都能對我們的使命給出更好的,不像我那樣胡思亂想的闡述。我會用生命信任他們嗎?不會。但是我會用 Joel 的生命信任他們!
3、Stack Overflow并不屬于我或者 Joel,或者其他一些優(yōu)秀的開發(fā)者。Stack Overflow 的運作靠的是世界各地日復一日做開發(fā)的人們,就像你或我一樣。我覺得 Stack Overflow 就像個家長,它的目標是讓孩子們最終能離開家長身邊,成為可以獨當一面的大人。
4、作為 Stack Overflow 的創(chuàng)始人,我在社區(qū)成立的最初四年里,花了非常多的時間參與制定規(guī)則與規(guī)范。你現(xiàn)在閱讀的是我所強觀點,弱堅持。這只是我的一些想法,我也希望自己的預測是準確的,但是這并不意味著我可以預測未來,或者我有資格去預測未來。不過我并不會以自己是否具有資格而不去做一些事情。
Stack Overflow首先是一個 wiki
Stack Overflow不僅是個論壇,它跟維基百科有很多相似之處。我們衡量問題和答案是否有意義的方式,不是看那些問題和答案對特定幾個人的幫助,而是看隨著時間的推移,這些問題和答案能不能幫助到越來越多的人。我從?2008 年 Stack Overflow 上線后就在強調(diào)這個關(guān)系。來看看下面誰的地位最高。
為了強調(diào)這一核心價值,Stack Overflow添加了一個簡潔的功能。那就是在用戶資料里會顯示,你所貢獻的問題與回答幫助到了多少人。
這些問答內(nèi)容到底服務于誰?回答問題為何有如此嚴格的審核過程?對于 Stack Overflow 最常見的抱怨通常來自于對前面這兩個問題的誤解。
我希望更多的人能明白,Stack Overflow并不是一個“回答我的問題”的地方,它是“讓我們合作建立一個對未來的開發(fā)者們有益的地方”。也許 Stack Overflow 應該更加努力去幫助用戶理解這件事。
如今很多用戶,甚至泡在 Hacker News 上的技術(shù)圈網(wǎng)友,都不知道 Stack Overflow 上有個功能,那就是每一個問題都是可以修改的,即使是沒有登錄的匿名用戶也可以修改。對此我深表驚訝。這個功能不奇怪,對吧,因為 Stack Overflow 就是一種維基百科,這也是維基百科的運行模式,任何人都可以修改任何內(nèi)容。不信的話,現(xiàn)在就去試試吧,找一個你認為可以提高的問題或者回答,點擊“改善這個回答(improve this answer)”或者“改善這個問題(improve this question)”,然后寫下你的改良版。
Stack Overflow 有很多功能(甚至也包括我自己在 2012 年之前的一些所作所為)都容易導致用戶誤解其核心價值。理論上,“如今每一個開發(fā)者都聽過,用過以及了解 Stack Overflow”,但我覺得這個假設(shè)不準確。畢竟每時每刻都有新的開發(fā)者誕生。說得更復雜一點,Stack Overflow 的使用模式有三種,從大到小,以倒金字塔的形式排列如下:
1、我在需要的時候去搜索答案
用戶直接上網(wǎng)搜索,搜索引擎會直接顯示出 Stack Overflow 中的高票答案。出現(xiàn)在搜索引擎第一頁,這也是Stack Overflow的主要目標。如Stack Overflow正常運行,98%的開發(fā)者在他們的整個職業(yè)生涯中,不需要主動提出或者回答問題。只要通過網(wǎng)絡搜索就可以找Stack Overflow上到他們需要的結(jié)果。這是個好事,非常好的事。
2、我遇到很困難的問題時會參與Stack Overflow的討論,因為單純的搜索找不到我想要的答案
只在遇到難以解決的困難時,參與Stack Overflow的討論,這很合理。然而,我覺得這個階層的用戶最容易感覺到Stack Overflow不是那么容易使用,因為這類用戶可能對Stack Overflow很熟悉,但是并不清楚發(fā)布問題的流程。并且在他們急切想尋找答案的時候,他們沒有時間或心思去應對Stack Overflow對于問題背景、格式、描述以及引用要求。
3、為了自己的職業(yè)發(fā)展,我主動參與Stack Overflow的問題討論
這個階層的用戶很有經(jīng)驗,他們貢獻了很多答案,也了解什么樣的問題是好問題,是他們感興趣、愿意回答的問題。他們不經(jīng)常提問,因為他們知道如何去全面搜索他們想要的答案。但是他們一旦提問,那一定是個示范性的好問題。
(理論上這里還有個第四階層用戶,他們無私的貢獻了很多提問與回答,目的只是為了推動軟件開發(fā)行業(yè)的發(fā)展,造福于新一代的開發(fā)者們。但是我們沒空提這些大神,你們只會讓我們顯得更加平凡,所以我們就此打住吧)
第一階層的用戶在社區(qū)里開心地逛了好幾年,卻在變?yōu)榈诙A層用戶時,一下子有了不開心的用戶體驗。對此我一點兒也不驚訝。我認為解決這個問題最主要的方式,就是改變并提高提問頁面的用戶體驗。另外值得注意的一點是,用戶在提出了某個問題后,可能收到關(guān)于問題信息不足的負面反饋,但是他們也許并不知道,你的問題應該是“有益于其他用戶而并不只是你自己”。
Stack Overflow采用了維基百科的模式,也使其自身受到了很多限制。即使用戶在提問前就知道這些,很多時候到底什么是“有用的信息”也很難判斷。同理,很多時候我們也不確定到底什么樣的話題,人群或者地點需要一份維基百科。Henrietta Lacks?有自己的維基百科頁面,這毫無爭議,但是他住在奧哈馬市的表兄 Dave,那個提出了一個關(guān)于 PHP 5.6 的奇怪問題的人,是不是該被寫入維基百科呢?
隨著時間的推移,重復內(nèi)容像地雷一樣遍地都是
這事我很早就預料到了。老實說,我有點慶幸自己在 2012 年離開了 Stack Overflow,這樣我就不用去處理這個難以置信的技術(shù)性難題:重復性內(nèi)容。在我聽到的關(guān)于 Stack Overflow 的所有抱怨里,重復內(nèi)容是我覺得最有共鳴的。
如果你接受Stack Overflow是個類似于維基百科系統(tǒng)這一前提,那同理你顯然不能接受,在維基百科中,對于意大利有五個不同的詞條。Stack Overflow不允許對于同一個技術(shù)問題有重復的提問。我們確實有很多避免重復問題的功能,比如輸入問題時的同步搜索,以及提交問題前,你會看到一個很明顯的,鼓勵用戶先去搜索相關(guān)問題的搜索框。
… 如何查找并判斷重復內(nèi)容是個非常有難度的問題,即使是Google這樣的公司,有著名副其實世界最聰明的工程師團隊,專攻了20年也沒有解決這個問題。
當你在一個不允許重復問題的網(wǎng)站中提問時,系統(tǒng)去重的難度取決于總問題數(shù)量,處理一百萬的問題總量的去重與一千萬甚至一億相比,是非常不同的。系統(tǒng)處理問題去重的難度,會從不太難處理變?yōu)樽罱K的完全無法處理。比如你提出了一個與藝術(shù)類相關(guān)的問題,那么系統(tǒng)需要根據(jù)你的提問內(nèi)容,在不勝枚舉的已有問題中進行篩選,以確保沒有看起來相似的提問。
等會兒,還有個更難的問題!
相似問題中有一點內(nèi)容變化也是可以的,因為十個不同的人在提出同一個問題時,完全可能使用毫不相關(guān)的詞語來形容這個問題。我知道這聽起來很瘋狂,但是相信我:人類極其擅長做這樣的事。我們希望保留這些重復的問題,并且讓他們都指向同一個主問題,以便于用戶更好的搜索他們需要的內(nèi)容,即使這些用戶使用了那些平常不太會被用到的詞語去描述問題。
如何判斷你提出的問題是不是重復,這是個不小的挑戰(zhàn)。多少詞語的重疊才能決定一個問題是不是與另一個重復?誰來決定?不同人有不同理論。這是個以人類語言為標準的解析,然后人類吧……不可預知。這個系統(tǒng)無法做到讓所有人滿意,去重的缺陷會一直存在于系統(tǒng)之中。
我對于越來越嚴重的重復問題并沒有一個好的解決方案。但是我想指出,早期在?Stack Exchange?有很多先例,它們把網(wǎng)站分為“初級”和“高級”區(qū)域,不同區(qū)域的規(guī)則不同。我們在別的地方也能找到類似的例子,比如 Math 和 MathOverflow,English 和 English Learners, Unix 和 Ubuntu,也許是時候搞一個以初級用戶為主的 Stack Overflow了,在那里我們可以允許多一些重復,少一些規(guī)則。
Stack Overflow是個可以同行評審的競爭性系統(tǒng)
Stack Overflow確實是個相當明確的競爭性系統(tǒng),它的一大標志就是“總會有更好的解決辦法”。根據(jù)我的多年觀察,激勵開發(fā)者最有效的方式就是…巧妙地暗示出別人的解決方案也許比你的更好。
– 你好Randall。醫(yī)生說你能聽到我說話,雖然你看起來像植物人。我是來告訴你,別著急慢慢康復。因為Ross接替了你的工作,并且做的非常好。他甚至找到了你代碼里的瓶頸,還說他改過的代碼變快了兩倍。
– 這不可能?。。。?!我現(xiàn)在就回辦公室!
Stack Overflow的競爭性質(zhì)體現(xiàn)在了它的公開聲望系統(tǒng)上,就是用戶名旁邊那個擁有神奇力量的數(shù)字。所有的聲望值都來源于其他用戶,而不是所謂的系統(tǒng)。
每當你提出問題或者提交回答時,你的問題或回答都可以被其他用戶指指點點,他們可以編輯、標記、關(guān)閉、打開、頂、踩或者收起。這樣做的目的是讓 Stack Overflow 成為一個同行評審和友好競爭的系統(tǒng),就像在公司里,你的代碼被你從沒見過的另一個部門的人來評審。有人以友好的方式去質(zhì)疑你所提問題的提論,也是完全合理的,比如,你真的想用這個正則表達式去匹配 HTML 嗎?
我完全清楚這種競爭性質(zhì)的同行評審系統(tǒng),并不適合每一個人。Stack Overflow 采用維基百科的模式,導致它存在不能接受重復內(nèi)容這樣的限制。那么根據(jù)你的情況與背景,同行評審時,你收到的評價可能會讓你覺得不舒服。
我聽部分用戶反應,在 Stack Overflow 提問的過程中會感覺到焦慮。對我來說,在 Stack Overflow上提問,應該感受到一種 ”我要展示出我最好的一面“ 的正常焦慮:
在你的同事面前演講的焦慮
考試要取得好成績的焦慮
開始新工作,與你尊敬的優(yōu)秀同事們一起工作的焦慮
第一天去學校報到,即將見到新同學的焦慮
至于那種完全不會感到焦慮的地方,我唯一能想到的就是,從事了很久的工作,已經(jīng)不再關(guān)注與工作本身,因此也沒有那種擔心有一天就會丟了工作的焦慮。這樣怎么會好呢?所以說我不喜歡零焦慮的系統(tǒng)。
也許你不喜歡競爭。那么能不能有個少量競爭模式的問答系統(tǒng)呢?一個沒有投支持或者反對票功能的系統(tǒng),這樣無論發(fā)表什么內(nèi)容都不會感覺焦慮。這就像是一個全是你的支持者的網(wǎng)絡,大家都相信你,希望你成功。這當然也是可以的。我認為應該有類似這樣的網(wǎng)站,用戶可以根據(jù)自己的需求與目標來選擇適合自己的體驗。那么 Stack 應該建立一個這樣模式的社區(qū)嗎?這樣的社區(qū)已經(jīng)有了嗎?這是個開放題。也請隨意在留言區(qū)發(fā)表你的看法。
Stack Overflow是為了日常開發(fā)者而設(shè)計的
Stack Overflow的目標用戶到底是誰,這也是經(jīng)常容易被混淆的一點。這個回答很直觀,而且從從未改變過:
一個為專業(yè)和熱情的程序員而存在的問答平臺。這是指:
當前正在從事程序開發(fā)職業(yè)的人,或者如果愿意就能立即勝任程序開發(fā)工作的人。
如果你覺得好奇,這個定義的一部分是公開的商業(yè)決策。為了盈利,你的用戶群體必須要有一部分拿著開發(fā)者薪水的人,或者在找開發(fā)者的工作的人。整個 Stack Overflow 社區(qū)也許有著知識共享的標簽,但是它并不是個非營利組織。我們的出發(fā)點是可持續(xù)經(jīng)營,這也是為什么我們在 Stack Overflow 上線一年之后,就成立?Stack Overflow Careers 招聘平臺的原因,回顧一下,成立的確實有點過早了。為了實現(xiàn)比 2009 好很多的集成化用戶體驗,招聘平臺被歸入了 Stack Overflow,放在了?stackoverflow.com/jobs下面。
用戶的選擇定位并不是說要排斥非開發(fā)者,但是 Stack Overflow 確實是一個有著嚴格同行評審,對已經(jīng)在從事相關(guān)行業(yè)的人來說非常優(yōu)秀的功能,但同時也是對于學生或者初學者來說很不友好的功能。這也是為什么,我每次在推特上,看到有人推薦學生去 Stack Overflow 找答案時,我會小心翼翼的建議不要這樣。對于開發(fā)領(lǐng)域的新手或者學生來說,他們需要的,與 Stack Overflow 所提供的是完全相反的。他們需要的是:
一對一的指導
實時屏幕共享協(xié)作
實時語音
理論背景知識課程
初學者練習
一個練習與實驗的場所
這些都是對初學者來說,很好很合理的事情,但是 Stack Overflow 一個也不做。你可以通過 Stack Overflow 來從頭學習如何編程嗎?理論上你可以通過任何軟件做任何事情,你甚至可以通過 Reddit 與人進行日常交流,如果你是受虐狂的話。但是答案還是肯定的,理論上你可以通過 Stack Overflow 學習如何編程,如果你是喜歡競爭模式(聲望、被關(guān)閉、被踩)的神童,也完全能接受要去幫助別人而不只是自己學習知識這一觀點。但是我強烈不推薦這樣做。對初學者來說,除了 Stack Overflow 外還有很多更好更合適的平臺。那么 Stack Overflow 能不能成為一個適合新手和學生的平臺呢?我不清楚,我也不能決定。
這些就是我要說的。我們可以不再與深淵對視。
我希望我的觀點對 Stack Overflow 不會有什么負面影響??偟膩碚f,我認為目前的 Stack Overflow 很強大。但是,無論是?2008 年還是2018 年,我怎么想有關(guān)系嗎?
Stack Overflow 是你們的。 Stack Overflow 將信念賭在了這一點:信任你的同行。Stack Overflow 的成長離不開那些積極參與社區(qū)討論的開發(fā)者們。是你們讓我相信開發(fā)者社區(qū)是最好的學習與成長的地方。是你們讓我收獲了如此多的對于 Stack Overflow 的贊譽。這不是我的功勞,而是你們的。 很久之前我在 Code Horror 上就知道了合作的力量是多么強大。目前我們的社區(qū)已經(jīng)達到我今生難以企及的高度。我唯一能要求的,或者是我們能要求的,就是大家互相幫助互相成長。 如果有人認可了你的付出,那么你值得為此感到驕傲。
開發(fā)者社區(qū)的力量能夠創(chuàng)造以及終結(jié) Stack Overflow。Stack Overflow 長大了會成為什么?它的未來將由我們共同創(chuàng)造。