程式員在大廠和小廠做代碼開發,區別有多大

程式員在大廠和小廠做代碼開發,區別有多大

有一個問題一直困擾著很多人,作為程式師,在知名的成熟的大廠,和在小廠乃至創業公司,做代碼開發,區別到底有多大,體現在什麼地方。 我可以講講我個人的體會。

我2009年博士畢業,加入了當時的微軟,做微軟內部的大數據專案。 項目當時還挺保密的,現在當然已經眾所周知了。

我不是一個沒什麼經驗寫程式的人。 博士做的方向是新型的數據倉庫和統計相關技術的結合,為了發表論文也寫過幾個系統,若干萬行c++程式。 所以我一直都以為自己是個"有經驗"的人。

等我真正跨入大廠的時候,還是有點掉下巴的感覺。 微軟給我的第一個感覺是限制多多,非常非常的多。 最基本的限制我給大家列舉一下。

首先,有一個內部的代碼管理系統。 那個時候Git沒那麼流行,微軟用的是自己搞的一套管理代碼的系統。 但是不管怎麼樣,代碼管理的思路基本上還是差不多的。 你不能本地隨意寫代碼就行了。 你需要先checkout一份代碼,等你做完了你的工作以後,再checkin。 Checkout雖然不是什麼難的事情,checkin就老難老難了。

其實,產品開發不是始於代碼。 我們當時在的組用的是敏捷開發,採用scrum的方式,兩週一個sprint。 產品經理先在微軟的專用的管理產品功能的軟體里面對每個功能進行分解,分解到可以開發的功能模組,然後全組根據功能模組的優先順序,在sprint的planning大會上開始選擇誰做什麼。 所有相關的東西都被記錄下來。

與此同時,每個bug的管理也在同一個系統里,bug會被一套完整的流程進行triage,分配給組裡的每個人,然後每個人按時的修復bug。

再次,當我們中間每個人完成了對應功能開發或者bug的修復的時候,這個人需要做很多的事情,才能最終checkin進代碼庫里。 這個過程非常的繁雜。 而對應的每一步,都有軟體產品的支援。

第一步是需要對應的測試用例。 我們會做單元測試,整合測試,性能測試等等,其中單元測試和一部分整合測試都是寫代碼的人負責的,性能測試則由專門的測試團隊負責。 只有代碼沒有測試是不行的。

為了更好的跑測試和開發測試,微軟內部提供了一個測試框架,按照測試框架開發出來的測試,會在整個系統的不同階段被跑。 有一部分是在代碼checkin的時候,作為系統build的一部分。 另外一部分則是每天或者每周定期跑的。 後者通常是一些需要更多資源和時間的測試。 如果有跑失敗的,會通過email的方式發給對應的checkin的負責人那裡。

除了測試以外,開發的軟體需要先build。 build可以簡單的認為對代碼進行編譯,同時跑一部分測試用例。 這個build的過程也非常的冗長而嚴謹。 微軟內部有一系列的工具,每個團隊可以根據自己的需要定製。 這些工具包括對代碼進行編碼風格檢查,是否符合命名規範,是否符合代碼風格。 它們也包含了各種各樣的安全檢查。 比如說有沒有用了什麼軟體包,受不受到什麼漏洞影響,是不是直接在代碼里寫了密碼,信用卡訊息等等。

當然,還有一個必不可缺的步驟是code review。 每次的checkin之前,先需要經過同行的review,需要把review產生的問題一個一個都解決了才能夠checkin。 微軟的工具體系裡,有自動整合review功能的。

除此之外,每個小時,每天,每周的build和跑不同的測試用例都在連續不斷的進行。 有的時候你checkin進去的代碼,也會因此而被打回來,因為在更深度的相容性測試和性能測試里,發現了問題。

這是一套非常複雜的協助開發人員進行全流程管理的工具體系。 微軟有一整個團隊,浩浩蕩蕩很多人在做不同的事情,給內部用,有些產品也賣給外面的人。

由於我剛從學校畢業,對工業界的軟體開發沒經驗,不能真正理解有些東西背後的深意。 這套系統給我的第一感覺是,有點小題大做,拿著高射炮打蚊子。 一方面系統很全面,基本上代碼開發的方方面面都涉及到了,但是在另外一方面,這也讓所有人開發代碼的時候束手束腳的,必須code review,必須過這些安全檢查,必須寫這麼多的test等等。 明明代碼就寫了那麼一點,但是代碼以外的工作卻那麼多。

從學校剛出來的我,很難理解為什麼需要這麼複雜龐大的一套系統,還有那麼大的一個團隊在維繫。 感覺開發效率都低了很多。 不過慢慢的我也越來越習慣於在這樣一套系統里開發軟體。 而且時不時的系統也經常會給我抓出這樣或者那樣的問題。

2014年的時候我決定離開微軟去小一點的公司看看。 我最後加入了一家剛上市的公司。 我加入的時候整個研發團隊大概不到400人。 18個月後,該公司的研發團隊膨脹到1000人。

和微軟比起來,這算是很小的公司了。 但是嚴格意義上來說,這其實也不能算是創業公司,畢竟已經成功上市了。

進到這個公司,給我的感覺有點草台班子。 不是說該有的東西沒有,而是我覺得所有的東西都缺胳膊斷腿的感覺。 新公司依然用scrum,也有自己管理軟體功能和bug的產品,用的是個開源的系統。 總的來說,除了體現在功能少,不好用以外,這個系統和後續的代碼管理,build,測試框架等等,完全沒有打通,有種各自為營的感覺。

公司用的代碼管理系統,買的是另外一家公司的產品。 相對微軟的代碼管理系統來說,功能上先不說,首先的問題是性能。 公司的人員從400到1000的增長過程中,公司代碼管理系統已肉眼可見的速度開始卡頓,掉線,經常罷工。

必須說git的出現極大程度上的解決了這個問題,用了git的都說好。 所以現在的創業公司再也不用擔心代碼管理系統不穩定的問題了。

如果說代碼管理系統的不穩定還不是什麼大問題,最多就是影響工作效率的話,那build和測試就是另外一番天地了。 公司的build系統,是公司的大牛草台班子自己搭的。 為什麼會變成這個樣子,有很多歷史原因。 這個系統有一個特點,薛定諤的貓一般:大部分時候是正常的,有的時候不知道為什麼build就掛掉了,再來一次又正常了。 能修的毛病,估計很多人都試圖去修過。 不能修的一些東西,大家也都養成了用薛定諤對付薛定諤的辦法,多跑幾次,哪次跑通了算哪次。

Code review用的是另外一個開源系統, 和整個build,以及代碼管理系統就完全沒關係了。 Code review本身的不好用暫且不說。 更大的問題是,code review和追蹤產品功能的系統,以及代碼管理的系統都沒有打通,各自為營的話,如果系統出了bug,想要查一查到底哪段代碼導致了什麼事情,程式師就必須在三個系統里三線作戰了,非常的讓人焦頭爛額,頭髮都要多掉幾根。

事情還沒完,公司跑test的系統又是買的另外一個公司的產品,這個產品當然也是不和前面三個系統打通的,所以你想要跑test的話,還得先build好了,再自己到這個新的系統裡面去跑。 公司跑test的系統一如既往的繼承了薛定諤的貓的特性。 很多時候跑著挺好的,但是莫名其妙就會掛,多跑幾次又好了。 這個事情,有的時候是test自己的問題能修,很多時候是系統的穩定性問題。

這些還不算,公司除了自己的build系統的不穩定性以外,公司並沒有能力像微軟那樣對代碼做各種各樣的檢查,不管是程式設計風格還是安全相關的檢查。 公司有次發佈了產品,造成了安全隱患,某些情況下一些使用者可以看到另外一些用戶的數據。 事情影響惡劣。

由於種種原因,公司的這套build相關的框架極大的影響了公司整體的發展。 於是公司決定專門成立一個隊伍,開發自己的build和測試框架,增強穩定性和對代碼安全檢查等等。 這個專案前後兩年時間,投入了40多個人,中間還換了負責人。 結果看起來並不是很好。

我們曾經私底下討論過這個問題。 大廠的一整套對開發人員的生態支持軟體,並不是一蹴而就的,這是長期積累的結果。 這套東西做好了,需要的投入不低。 更重要的,這個體系有很強的複用性。 所以在幾萬人的大廠里投入幾百人搞,不見得是投不起。 但是相反的,一個小企業總共幾百個開發人員,投入幾十個人,這成本就很難負擔得起來,而且效果未必好。

那這樣一來,小企業感覺日子不好過了。 尤其是創業公司,投入多少人能夠搞好這套東西,真說不好。 只能說比較幸運的是Git的出現,起碼解決了代碼管理的問題。

但是我們應該慶幸現在是雲時代。 如果大廠願意,完全可以把自己成熟的生態做成雲服務開放出來。 國內外雲廠商都開始這方面的嘗試了。 比如,阿裡就把內部的一整套DevOps工具免費開放了出來,對外叫做阿裡雲雲效。

使用雲效這樣的雲服務平臺的好處是,作為SaaS雲服務,它開箱即用,企業不需要任何的開發和運維成本。 更重要的是,它是一整套成體系的東西,不管是專案協作、代碼管理、CI/CD、測試管理、製品倉庫等工具都互相打通,而且還和阿裡雲ECS、ACK等產品進行了深度集成,可以自動化部署到雲上。

雖然現在開源社區提供了不同的產品來每個服務,比如說創業公司自己搭git伺服器管理代碼,用Jenkins做CI/CD。 但是回歸問題的本質,東一榔頭西一棒槌的維護各個不同的系統,並不能讓程式師很好的聚焦在真正有意義的事情上。

其次,割裂的工具鏈,不僅數據無法打通,企業也還要維護各自獨立的賬號許可權體系。 相反,使用雲效,註冊一個帳號,就可以快速具備大廠的一站式的DevOps工具鏈, 把精力聚焦在業務開發上,何樂而不為呢。

基於大廠多年的積累,雲效在安全方面也考慮得相當周全。

以雲效代碼管理產品Codeup為例,它不僅對接了阿裡雲完備的高防保護,在產品功能上,也提供了一系列的安全特性。 例如,在數據安全層面,它支持代碼定時備份、代碼加密;在訪問控制上,支援多級許可權管控、IP白名單訪問控制等;在安全審計上,遇到風險問題,你完全可以進行事前監測、事中通知、事後追溯。

值得一提的是,雲效Codeup還內置了豐富的代碼掃描服務,包括源碼漏洞檢測、依賴包漏洞檢測和敏感訊息檢測,一鍵開啟,就可以及時發現最新的安全威脅和漏洞。

雲計算時代是一個改變現實改變未來的時代。 雲效DevOps就是這樣的一款產品,通過將阿里內部的DevOps工具雲服務化,給創業團隊和中小企業提供和大廠一樣方便、安全、高效、全面的體驗。

好消息是,30人以下團隊,直接免費就可以使用雲效一站式的DevOps工具。 前面提到的雲效代碼管理Codeup,更是不限人數、不限容量直接免費用。

感興趣的,可以瞭解一下阿裡雲雲效。

What do you think?

Written by marketer

如何從零開發一個低代碼平臺,有哪些成熟技術元件可用

程式員為什麼不喜歡低代碼