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