<ruby id="h6500"><table id="h6500"></table></ruby>
    1. <ruby id="h6500"><video id="h6500"></video></ruby>
          1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>
            • 軟件測試技術(shù)
            • 軟件測試博客
            • 軟件測試視頻
            • 開(kāi)源軟件測試技術(shù)
            • 軟件測試論壇
            • 軟件測試沙龍
            • 軟件測試資料下載
            • 軟件測試雜志
            • 軟件測試人才招聘
              暫時(shí)沒(méi)有公告

            字號: | 推薦給好友 上一篇 | 下一篇

            Facebook的軟件工程師是怎樣開(kāi)發(fā)軟件的?

            發(fā)布: 2011-1-26 11:02 | 作者: 網(wǎng)絡(luò )轉載 | 來(lái)源: 領(lǐng)測軟件測試網(wǎng)采編 | 查看: 129次 | 進(jìn)入軟件測試論壇討論

            領(lǐng)測軟件測試網(wǎng)

              我對Facebook的運作方式一直著(zhù)迷。這是一個(gè)很獨特的環(huán)境,不容易被復制(他們的體系并不適合所有的公司,雖然他們努力嘗試過(guò))。下面是我和Facebook的許多朋友們關(guān)于他們如何開(kāi)發(fā)和發(fā)布軟件所做交流的記錄。

              然而,Facebook對自己的內部流程說(shuō)得很少。他們的工程團隊經(jīng)常發(fā)布筆記介紹各種新的功能和內部系統,但對如何開(kāi)發(fā)卻不怎么講。因此對于外部人員而言,了解Facebook是怎樣遠比其他公司高效地對服務(wù)進(jìn)行創(chuàng )新和優(yōu)化并不容易。為了更多地了解Facebook的運作,我花費數月時(shí)間收集了下面這些文字。為了尊重隱私,刪去了所有人名和具體功能與產(chǎn)品的名字。另外又等過(guò)了6個(gè)多月才對外公開(kāi),所以它們可能會(huì )有點(diǎn)過(guò)時(shí)。我希望發(fā)表這些記錄有助于大家了解Facebook是怎樣致力于將決策下放而同時(shí)又不至于陷入混亂的。無(wú)論Facebook的結果怎樣,產(chǎn)品是否成體系,我認為并希望許多面向消費者的互聯(lián)網(wǎng)公司能從中有所裨益。

              非常感謝那些幫助我整理這篇文章的Facebook的朋友們。同時(shí)也感謝提出指正的Reddit網(wǎng)友。

              記錄:

              截止到2010年6月,Facebook有將近2000名員工,10個(gè)月前只有1100名,一年之間差不多翻了一番。

              兩個(gè)最大的部門(mén)是工程和運維,每個(gè)部門(mén)大概都是400~500人。這兩個(gè)部門(mén)人數大約占了公司的一半。

              產(chǎn)品經(jīng)理與工程師的比例大約為1:7到1:10。

              每個(gè)工程師入職時(shí),都要接收4-6周的培訓,通過(guò)修補bug和聽(tīng)高級開(kāi)發(fā)工程師的課程來(lái)熟悉Facebook。約10%的受訓者無(wú)法通過(guò),并被請出公司。

              培訓結束后,每個(gè)工程師都可以接觸線(xiàn)上的數據庫(更大的權力意味著(zhù)更大的責任,也有一份"勿做清單",寫(xiě)明那些行為會(huì )導致被開(kāi)除,比如共享用戶(hù)的隱私數據)。

              有非常牢靠的防范體系,以免內部人員做惡。如果要應要求替人行事,必須將原因記錄,并接受?chē)栏駥彶,此外都絕對禁止。

              每個(gè)工程師可以修改Facebook的任何代碼,隨時(shí)可以簽入(check-in)。

              濃厚的工程師驅動(dòng)文化。"產(chǎn)品經(jīng)理基本可以被忽略",這是Facebook一名員工的原話(huà)。工程師可以修改流程的細節,重新安排工作任務(wù),隨時(shí)植入自己的想法。(作者原注:我就是產(chǎn)品經(jīng)理,當然對這一點(diǎn)特別關(guān)注。其實(shí)從下文可以看出,Facebook的文化其實(shí)全面吸收了產(chǎn)品管理實(shí)踐,他們不是忽視產(chǎn)品管理,而是創(chuàng )造了一種人人對產(chǎn)品負責的文化。)

              在每月的跨部門(mén)會(huì )議上,由工程師來(lái)匯報工作進(jìn)度,市場(chǎng)部和產(chǎn)品經(jīng)理會(huì )出席會(huì )議,也可以做些簡(jiǎn)短的發(fā)言,但如果說(shuō)得太多,很可能就會(huì )被打小報告。他們確實(shí)想讓工程師來(lái)主導產(chǎn)品的開(kāi)發(fā),對自己的產(chǎn)品負責。

              項目需要的資源都是絕對自愿的

              產(chǎn)品經(jīng)理游說(shuō)工程師,讓他們對自己的想法產(chǎn)生興趣。

              工程師們決定開(kāi)發(fā)那些讓他們感興趣的特性。

              工程師跟他們的經(jīng)理說(shuō):"我下周想開(kāi)發(fā)這5個(gè)新特性"。

              經(jīng)理通常會(huì )尊重工程師的選擇,可能有時(shí)會(huì )讓他優(yōu)先完成一些特性。

              工程師負責所有的特性——前端JavaScript/后端數據庫代碼以及之間所有部分。如果需要得到設計人員(公司內部設計團隊很小)的幫助,需要先讓設計人員對你的想法產(chǎn)生興趣。架構師之類(lèi)的也是一樣?傮w來(lái)說(shuō),工程師要完成所有的任務(wù)。

              對于某個(gè)特性是否值得開(kāi)發(fā)的爭論,通常是這么解決的:花一個(gè)星期的時(shí)間完成,并在小部分人群中(如1%的內華達用戶(hù))進(jìn)行測試。(劉江注:蔣長(cháng)浩介紹,實(shí)際操作時(shí)通常會(huì )選擇某些服務(wù)器上的用戶(hù)進(jìn)行測試。)

              工程師總是希望解決基礎設施、可擴展性以及其他難題,這能獲得聲望和尊敬。他們很難對前端項目或UI設計產(chǎn)生太大的興趣。這與其他公司工程師喜歡做前端并向用戶(hù)吹噓“看,這是我做的”的情況,可能正好相反。在Facebook,后端任務(wù),比如新的feed算法,廣告投放算法,memcache優(yōu)化等等,是工程師真正感興趣的。

              所有的代碼修改必須經(jīng)過(guò)審查(通過(guò)一個(gè)或多個(gè)工程師),但News Feed是個(gè)例外,因為太重要了,Zuckerberg會(huì )親自審查所有改動(dòng)。

              所有的修改至少要被一個(gè)人審核,而且這個(gè)系統可以讓任何人很方便地審查其他人的代碼,即使沒(méi)有得到邀請。簽入未經(jīng)審查的代碼將被視為惡意行為。

              工程師負責測試,代碼修復,和維護自己的項目。

              每個(gè)辦公室或通過(guò)VPN連接的員工會(huì )使用下一版的Facebook,這個(gè)版本的Facebook會(huì )經(jīng)常更新,通常比公開(kāi)的早1-12小時(shí)。所有的員工被強烈建議提交bugs,而且通常會(huì )很快被修復。

              很奇怪只有很少的QA或自動(dòng)測試——"大部分工程師都能寫(xiě)出基本沒(méi)有bug的代碼,只是在其他公司他們不需要這么做。如果有QA部門(mén),他們只要把代碼寫(xiě)完,扔給他們就行了"

              [針對上一條]我們有自動(dòng)測試,代碼發(fā)布前必須要通過(guò)測試。我們不相信"所有的工程師都能寫(xiě)出沒(méi)有bug的代碼",畢竟這是一個(gè)商業(yè)公司。

              很奇怪,缺少產(chǎn)品經(jīng)理的影響和控制——產(chǎn)品經(jīng)理是很獨立的和自由的。產(chǎn)生影響力的關(guān)鍵是與工程師和工程師的領(lǐng)導們們搞好關(guān)系。需要大致了解技術(shù),不要提一些愚蠢的想法。

              所有提交的代碼每周二打包一次。

              只要多一分努力,終于一天會(huì )發(fā)生改變。

              星期二的代碼發(fā)布,需要所有的提交過(guò)代碼的工程師在場(chǎng)。

              代碼打包前,工程師必須在一個(gè)特殊的IRC channel上。

              運維執行打包過(guò)程

              Facebook有大約60000臺服務(wù)器

              有9個(gè)代碼發(fā)布級別

              最小的級別只有6臺服務(wù)器

              星期二的代碼發(fā)布會(huì )先發(fā)布到6臺服務(wù)器上,運維組會(huì )檢測這6臺服務(wù)器的反應,保證代碼正常工作,然后再提交到下一級

              如果發(fā)布出現了一些問(wèn)題(如報錯等等),那么就停止下一級的部署,提交出錯代碼的工程師負責修復問(wèn)題,然后從頭繼續發(fā)布。

              所以一次發(fā)布可能會(huì )經(jīng)歷幾次重復:1-2-3-fix. 回到1. 1-2-3-4-5-fix. 回到1. 1-2-3-4-5-6-7-8-9

              運維組是受過(guò)嚴格訓練,倍受尊敬,而且有商業(yè)意識的。他們的工作包括分析錯誤日志,負載和內存狀態(tài)等等。還包括用戶(hù)行為。

              代碼發(fā)布期間,運維組使用IRC-based頁(yè)面系統,可以通過(guò)Facebook/email/irc/im/sms ping每一個(gè)工程師,如果需要他們注意的話(huà)。對運維組不做回應是一件很羞愧的事。

              代碼一旦發(fā)布到第9級,并且穩定運行,就算發(fā)布成功了。

              如果一個(gè)特性沒(méi)有按時(shí)完成,也沒(méi)什么大不了的,下次完成時(shí)一并發(fā)布即可。

              如果被svn-blamed,public shamed或工作經(jīng)常疏忽就很可能被開(kāi)除。"這是一個(gè)高效的文化"。不夠高效或者不夠聰明的員工會(huì )被剔除。管理層會(huì )在6個(gè)月的時(shí)間里觀(guān)察你表現,如果不合格,只能說(shuō)再見(jiàn)。每一級都是這個(gè)待遇,即使是C級別和VP級別,如果不夠高效,也會(huì )被開(kāi)除。

              被責罵不會(huì )導致解雇。我們特別尊重別人,原諒別人。大部分高級工程師都或多或少犯過(guò)一些嚴重的錯誤,包括我。但沒(méi)有人因此被解雇。

              我也沒(méi)有遇到過(guò)因為上面提到過(guò)的犯錯誤而被解雇。有些人犯了錯,他們會(huì )非常努力地去修復,也讓其他人得到了學(xué)習。

            延伸閱讀

            文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/

            TAG: Facebook facebook 工程師 軟件


            關(guān)于領(lǐng)測軟件測試網(wǎng) | 領(lǐng)測軟件測試網(wǎng)合作伙伴 | 廣告服務(wù) | 投稿指南 | 聯(lián)系我們 | 網(wǎng)站地圖 | 友情鏈接
            版權所有(C) 2003-2010 TestAge(領(lǐng)測軟件測試網(wǎng))|領(lǐng)測國際科技(北京)有限公司|軟件測試工程師培訓網(wǎng) All Rights Reserved
            北京市海淀區中關(guān)村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
            技術(shù)支持和業(yè)務(wù)聯(lián)系:info@testage.com.cn 電話(huà):010-51297073

            軟件測試 | 領(lǐng)測國際ISTQBISTQB官網(wǎng)TMMiTMMi認證國際軟件測試工程師認證領(lǐng)測軟件測試網(wǎng)

            老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
              <ruby id="h6500"><table id="h6500"></table></ruby>
              1. <ruby id="h6500"><video id="h6500"></video></ruby>
                    1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>