成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

騰訊高級工程師自述:十年沉浮,我為什么選擇離開管理崗位?

新聞
從 2001 年在網易成為一名項目經理,到 2011 年進入騰訊,我經歷了從“領導”幾個人到幾百個人的好幾種管理崗位,名字有的叫“總監”,有的叫“經理”,還有什么O 之類的。

從 2001 年在網易成為一名項目經理,到 2011 年進入騰訊,我經歷了從“領導”幾個人到幾百個人的好幾種管理崗位,名字有的叫“總監”,有的叫“經理”,還有什么O 之類的。

[[208719]]

但在十年之后,現在的我沒有一個下屬,一般的人看來似乎有點不可理解。正常來說,中國人的傳統是“學而優則仕”,管人的總比做事的看起來要“高級”一點。

那么,為什么我要“急流勇退”呢?其實并不是我覺得做一般的管理工作力不從心,也不是因為厭倦了管人,或者想要做閑云野鶴,而是我發現,如果要真正的管理好一個技術團隊,還是要從技術方面下手。

然而這些真正能對技術團隊管理有幫助的技術,不實際地去學習和實踐,是非常難以掌握和熟練的。

管理技術團隊的三大挑戰

01人員流動

技術團隊有多難管,從人員流動這個事上,最能直接體會到。

記得我第一次參加網易的校園招聘,招聘了幾十個應屆畢業生,這些畢業生在一年之內,有 70% 都離職了。

有的是去考研、有的去留學,還有繼承家族生意和考公務員的。當然留下來的那批,也有一部分在兩年之內跳槽了。

[[208720]]

按理說,網易也算是不錯的公司,尚且面臨如此之高的離職率,其他的公司可能會更加嚴重。

我在這個事情上,花了無數的精力希望打造一個“具備凝聚力”的團隊,試圖降低這種流動性。

但無論如何努力,技術團隊還是會“維持”著某個流動率,這時我意識到,如何降低人員流動對工作的沖擊,才是一個必須要做的事情。

我們知道,軟件開發的交接,不是一個簡單的事情。因為軟件開發的文檔、代碼、工作關系,甚至很多工作的經驗,都是以一種智力形式存在的。

這種智力產品,如何從一個人的大腦遷移到另外一個大腦,如果不借助任何工具,無異于師徒傳授技藝,是一個效率很低,結果非常不確定的過程。

所以我認為,技術知識在團隊內的共享,必須要有一些強而有力的技術工具來保障,才能成功。

02項目進度控制

技術團隊的管理除了要應付人員流動的挑戰外,如何衡量技術人員的工作量,從而預估工期和掌控開發進度,也是一個巨大的挑戰。

這方面關于“項目管理”的知識也算汗牛充棟了。在實際的工作過程中,我們也嘗試各種方法,但是不管使用什么“項目管理”的方法,總會發現,在項目經理的表格到產品里可運行的代碼之間,總有一道深深的鴻溝。

[[208721]]

不管我們的開發進度預留多少 buff,也不管我們的項目進度報告的周期,從月、周細化到日甚至小時,都無法真正準確的回答——現在項目開發到什么地步、將來的某個時間點,項目可能開發到什么程度。

所以我開始承認,掌控技術項目開發進度,在一些需求變更特別頻繁的領域,特別是互聯網、游戲這類沒有明確客戶代表的領域,是一個非常模糊而且復雜的工作。

我們必須拋棄工業時代對于某個“項目”的管理思路,而采用更新的思路,以及更有效的技術工具,才能真正的對項目管理提供有效的推動。

03軟件質量提升

管理技術團隊,就必須對技術團隊的產出負責:軟件的質量和開發效率。我們既需要穩定的軟件質量,盡量少的 Bug,盡量好的性能和擴展性,也需要能跟隨市場快速變化的軟件迭代速度。

而我們的技術團隊總會抱怨,需求變化太快,沒有時間去重構系統,導致代碼的質量下降,開發效率也受影響等等。

如果我們僅僅是通過提高技術團隊的個人技術能力,或者刺激開發者更多的“主觀能動性”,結果還是會不盡人意的。

[[208722]]

因為個人的技術能力成長需要時間和實踐經驗,而且人員也很有可能會流動;如果主觀能動性被刺激成無休止的加班,到頭來最后還是會降低團隊的工作效率,因為疲勞的開發者只會制造更多的 Bug 和怨言。

因此我們不能單靠傳統的工商管理的思路去解決技術團隊的產品質量問題,而應該看到軟件開發本身是一種具有鮮明特色的行業,要提高產品質量和生產效率,還需要使用更先進的軟件生產工具和生產流程。

人員流動、項目進度控制、軟件質量提升,是我在管理技術團隊中,碰到的最多也是最大的三個挑戰。

在深刻的思考和做了大量的管理實踐后,我深深地認識到,作為一個技術團隊的管理者,最需要的往往不是所謂的“管理能力”,而是對軟件開發這個行業,更專業的技術能力。

這些技術能力,大體包含了所謂的“軟件工程”知識,以及大量的軟件開發工具以及最佳行業實踐的經驗。

所以我認為,認真地去研究、實踐、開發這些,能有效提高技術團隊開發效率、準確掌控項目進度、降低人員流動性影響的技術,是具有非常重要意義的。

技術管理者需要研究的三種“技術”

在這里我所說的這種“技術”,具體包含些什么呢?概括一下,有如下幾類:

  • 軟件模式知識。
  • 開發工具和實踐。
  • 需求領域知識。

01軟件模式知識

軟件模式知識主要來自軟件工程類,包括如何寫出可讀性好的代碼,面向對象或者結構化編程的知識,設計模式、架構模式等等。

其中最基礎也最重要的,就是“編寫可讀性好的代碼”,與其說這是一種知識,還不如說是一種態度。無可否認大多數工科、理科出身的程序員,對于寫文章的訓練都比較少,所以也不難理解為何對此沒有“感覺”。

其實要編寫可讀性好的代碼,最簡單的方式就是重視“命名”。顧名思義是人類最簡單的閱讀體驗,代碼中的變量、函數、類的名字如果是“有意義”的,那就會大大提高代碼的可讀性。

但是,怎樣才能定義一個有意義的名字,而不是僅僅根據技術功能實現的需求來設計名字呢?我知道我們都愛循環變量 inti,但那是因為我們都熟悉它的這個含義。

[[208723]]

對于可能閱讀代碼的人來說,還有什么是確定大家都會比較熟悉的呢?肯定就是業務領域的內容,因為要接觸這份代碼,肯定是那些要在這個業務領域工作的人,所以使用業務領域的內容詞匯是最好的。

但是,由于我們的代碼往往會有很多層的抽象和封裝,所以在某些層次也許無法找到業務領域詞匯去對應,這確實需要一些想象力和抽象能力,但是不管這種想象的是否合理,一定會比不假思索的用 Controllor 或者 Manager 這樣的名字來得“有意義”。

除了命名以外,代碼可讀性還有各種各樣的需求,而業界也對這一類要求,總結出很好的規范,他們就是各種“代碼風格規范”,最著名的有 Google 公司開放的規范,包含了多種編程語言的版本。

更重要的是,我們還可以用類似 cpplint 這類的“代碼靜態檢查工具”來自動的檢查代碼是否符合這樣的規范。

就連 Google 這樣業界知名的公司,也會要求所有程序員寫出來的代碼,都要像是一個人寫出來的那樣(出自《Google 軟件測試之道》),我們還有什么理由去追求各種代碼編寫層面的奇技淫巧呢?

除了靜態代碼檢查工具,我們也可以組織一些代碼檢視(Code Reivew)來保障這個方面,所幸的是,市面上的大多數 IDE 都支持某些 Code Review 的插件,尋找一個好的代碼檢視工具,然后在實踐中用好這個軟件,也是一種讓人愉快的體驗。

更重要的是,如果一個新入職的程序員,能發現自己的代碼是受人關注的,在編碼上的技巧和問題是有人指導的,也會加強對團隊的信任和凝聚力,從另外一個意義上看,這也是一種有效的降低團隊流動性的手段。

反過來說,如果不時地參加代碼檢視或者其他代碼監管的活動,管理者也能更準確地了解成員的編碼水平,從而做到賞罰有據。

在良好的代碼可讀性基礎之上,對于代碼模塊和模塊抽象,也是需要一定的專門技術的。這里要接觸到的就是“結構化編程”和“面向對象”兩種概念。

這兩方面的書籍汗牛充棟,但是我覺得需要強調的是,“結構化編程”并不和“面向對象”是沖突的,它們之間的關系非常密切。

如果你能把某個需求有邏輯性的細分下去,必須要有足夠的抽象思考和對業務領域的理解能力。

面向對象是一種面向名詞的思考方式,結構化的思維同樣需要用到。所以結構化編程的思維同樣是面向對象設計的基礎。

[[208724]]

這方面的專業論述有很多,但是最可惜的是,我們很多技術團隊,僅僅把這些看成是程序員的“個人修養”,而不是一個團隊的必要要求,所以我們的代碼質量往往參差不齊。

其實和“代碼風格規范”一樣,代碼模塊的設計也是必須要符合一定規范的,這個在不同的團隊和業務領域中可能不一樣,但是沒有規范或者指導思想,是最差的一種。

因為這個層面的知識,由于業務需求和領域的不同,往往很難有完全統一的業界標準,所以更加需要團隊的管理者來制訂和執行。

這也是對一個技術團隊管理中最具挑戰性的部分——如何定義、抽象、管理業務模型。而這部分也是很多管理者忽視的部分,他們有太多行政工作要做,反而認為這些事情應該交由其他人代勞。

在這個事情上,如果不是有業務領域經驗豐富的人去做抽象,就一定避免不了模型和需求不對應產生的修改工作量;如果不具備豐富的代碼設計能力,如設計模式的人去設計,需求變更造成的工作量可能會毀掉整個項目。

優秀的程序員——往往都成了管理者,必須要發揮自己的這些智力優勢來提高技術團隊的產出,而不是去做別的一些沒有什么“技術要求”的工作。

況且這些設計工作是那么的有挑戰性和趣味性,工作量(從開發時間看)也不是那么大。

如果管理者在系統的設計過程中和團隊密切的互動,解釋和宣導自己的想法,在執行過程中監督這些設計的實施,本身也是對產品質量的一種把控,不管是評價下屬的工作量,還是理解項目的進度和瓶頸,都是擁有第一手資料的。

這種情況,就是我認為的技術管理工作,最后還是要落實到技術工作之中的重要理由。

當然,你可能會說,如果一個非常大型的團隊,CTO 也是需要這樣去管理嗎?

聽起來似乎不太可能,但實際上任何一個團隊,在某個時間點上,一定會有一些非常重點的項目,或者一些關鍵的問題要解決,CTO 并不是簡單的做做規劃想想點子,而是要針對關鍵的業務問題,去做具體的解決方案的。

這里提一點題外的例子,比如二戰時德國裝甲兵總監古德里安,除了多次打報告要求組建強大的裝甲兵集團,還自己去找了兩輛卡車裝上鐵皮,安排模擬的坦克訓練。

這類高級管理者做具體工作的例子非常多,最重要的是要抓到問題的關鍵點去做。我們最常見的毛病反而是不關注難點重點,一味高屋建瓴的提要求而不找解決方案,這是管理的大忌。

如果一個團隊能關注代碼模塊的抽象,能經常討論諸如設計模式、重構這些設計問題,那么就能有機會在更高的抽象層次上,使用更有價值的設計理論,比如架構模式。

最近幾年無論是 Web service、SOA、restful,還是所謂云(PaaS、SaaS),這些流行的名詞,從某種意義上來說,都是一種架構上的創新:結合最新的技術和最新的業務領域。

使用什么技術,上什么架構,是一個技術團隊管理者必須隨時學習和思考的問題,固步自封肯定會有穩定可靠的好處,但也是讓一個產品腐爛落后的原因。

勇于挑戰和嘗試,才是一個積極向上的技術團隊應有的氣氛,而這個氣氛首先要考驗的是管理者的勇氣。

02開發工具和實踐

關于先進的開發工具和實踐,一直以來都有推陳出新,從最簡單的版本管理工具,到各種高級的 IDE 軟件、缺陷管理系統、知識庫管理等等……其中自動化測試技術,是最重要的一種。

《人月神話》中寫到,由于沒有版本管理工具,作者所在的團隊花了巨大的努力,制定了各種管理規范,來解決代碼分支和覆蓋的問題,甚至要靠把源代碼打印到紙上,堆得比人還高。

我們常常把測試認為是一種“質量檢查”的工作,但實際上,測試是代碼生產的生產線。

我們如果以測試驅動開發的角度來看,需求首先變成測試用例代碼,具體實現代碼的首次運行也是在測試用例代碼中,最后整體項目的運行,也是由測試代碼來啟動。

[[208725]]

這個過程中,測試代碼就好像產品的模具,保障整個產品是設計的樣子。可惜我們常常并不愿意花時間去打造模具,就好像我們直接用手工直接去做產品一樣。

但問題是,如果我們的產品只是一次做出來就好,但是軟件系統往往需要大量的,不同部分的修改,沒有測試系統的保障,我們肯定會改了 A 地方,B 功能就會出錯。

一個項目如果測試用例足夠全面,就算功能代碼全部丟失了,憑借測試用例,也能很快地重建出功能代碼來。

更重要的是,測試代碼還能保證多個層次的代碼,都維持一個穩定的“樣子”,這對于項目團隊的人員交接,是有重要意義的。

我們在項目管理的過程中,常常會苦于不知道項目進度如何,但如果你有一個完整的測試驅動開發的流程,這個問題就不會那么棘手:

需求明確的工作可以看測試用例的編寫進度。在編寫測試用例的過程中,大量的模糊不清的需求,都會被落實成代碼,這也排除了很多日后延期的可能。

如果在比較復雜的系統中,代碼的抽象層次有多個,那么測試用例也許同樣會有很多組。

但不管怎么說,每一層的設計最后都落實成為測試用例的話,整個項目的需求也會因此穩定下來。

如果我們是針對這些測試用例去做開發,那么每天我們都可以統計到有多少個用例被完成,這比從或空洞或繁瑣的程序員日報里,可以獲得的信息準確的多。

在產品運營的過程中,我們可以把所有發現的故障和缺陷,都補充為測試用例,這樣就可以確保項目的質量逐漸穩定下來。

當我們真的需要重構的時候,只要有這些測試用例,就能放心大膽的去修改代碼,因為只要通過所有的測試用例,項目的質量就一定是可靠的。

所以一個自動化、高覆蓋率的測試系統,是一個項目在管理上最有效的工具。

測試工作有那么多好處,但為啥總會覺得有很多困難無法實踐呢?關鍵點就是測試中的各種依賴很難構建,這就是一個比較專業的技術問題——Mock 和 Fack 系統。

所以我們的問題又一次回到了技術上,構建足夠專業的 Mock 和 Fack 系統。

03需求領域知識

需求領域知識,從某種方面來說,不算是“純技術”的領域,但對于特定開發某個業務領域的團隊,這些知識的掌握程度,往往是至關重要的,因為只有在深刻地理解了需求,才能真正用好各種抽象、模式等軟件工程知識。

程序員們往往都會有一些誤區,認為只有技術領域才是自己應該關注的,有些人可以非常熟悉 Linux 內核的各種實現細節,但卻對最近的一個項目的市場情況漠不關心。

很多程序員往往會認為,計算機科學中的那些知識,才是知識,而他們所接觸的其他業務領域,都不是他們應該關心的。

可惜的是,大部分的程序員,也叫軟件工程師,都是需要解決計算機科學以外的業務問題的。所謂工程師,就是利用已有的工具,去解決實際的問題。

所以,對于實際要解決的問題領域,不進行完整細致的學習理解是不行的。

事實上,計算機科學,也是因為其他業務領域的需求而發展起來的,比如軍事、金融等。

要深入地去學習一個業務行業領域的知識,也是需要很多時間的,這往往和程序員希望自己的技能通用化有沖突。

但我認為這個世界上沒有那么多“通用”的知識可以用,能專心做好某一個領域已經很不錯了。

所以你花時間深入到具體的業務領域上,去學習和實踐各種技術解決方案,會比只是空泛的“領導”一隊人做事更能發揮作用。

小結

技術團隊的管理,如果僅僅從一般意義的“管理”上去解決問題,往往是無解的。但彼得·德魯克說:管理本質就是創新。

我的理解是:管理就是要去找解決問題的方法,如果這個方法看起來很不像一般意義上的管理,那也無所謂,因為解決問題才是目的。

打破對“管理”的看法,求真務實的去尋找解決問題之道,才是真正的“管理”。技術團隊的管理問題用技術手段解決,是我切身體會的最好的解決方法。

[[208726]]

韓偉

騰訊科技互娛研發部架構師

曾在網易任職 8 年,擔任無線事業部產品總監。多年來一直從事技術開發,擅長開發高性能系統,對于軟件架構設計也有豐富的經驗。個人的技術興趣在設計模式、軟件體系架構等提高軟件開發效率方面的知識。

責任編輯:武曉燕 來源: 韓大訂閱號
相關推薦

2018-06-04 08:55:15

技術套路開發

2017-11-15 14:37:30

架構技術棧微信半月刊

2020-12-18 11:55:27

編程面試

2021-03-15 07:43:17

騰訊工作事業

2022-08-23 08:00:00

高級工程師軟件工程師代碼庫

2016-02-18 10:05:44

360數字公司創業

2010-12-29 11:15:51

信息系統項目管理師

2021-04-06 11:07:02

字節跳動組織架構

2013-10-22 15:18:19

2010-12-24 10:47:48

網絡規劃設計師

2018-01-03 10:28:02

程序員生涯雷軍

2010-12-24 10:50:43

系統架構設計師

2011-01-04 11:48:04

系統分析師

2015-05-11 09:38:42

.NET高級工程師面試題

2019-03-25 08:30:20

騰訊互聯網

2023-05-29 16:09:22

JavaScript技能瀏覽器

2018-09-20 10:55:38

數據庫順豐高級工程師

2015-08-14 09:45:10

Webnode.jsH5

2023-08-11 13:25:00

JavaScript

2021-03-22 15:53:47

程序員IT互聯網
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精选一区二区 | 欧美黄在线观看 | 久久伊人精品 | 国产片网站| 国产在线观看一区二区 | 国产日韩亚洲欧美 | 婷婷久 | 一区二区三区在线 | 欧美福利在线 | 国产精品1区 | 男女av| 久久成人在线视频 | 成人网视频 | 亚洲精品丝袜日韩 | a级毛片免费高清视频 | 人人看人人射 | 亚洲综合二区 | 免费成人在线网站 | 久久影音先锋 | 日韩在线综合网 | 天堂久久av | 自拍视频在线观看 | 黑人精品欧美一区二区蜜桃 | 日韩av免费在线观看 | h视频在线观看免费 | 国产精品美女www爽爽爽 | 欧美精品一区在线发布 | 日韩一区二区三区在线视频 | 一区二区福利视频 | 欧美一级精品片在线看 | 国产精品视频二区三区 | 欧美一区二区在线播放 | 美日韩免费 | 日本a级大片 | 国产精品亚洲综合 | 日韩视频精品在线 | 欧美日韩视频在线第一区 | 国产高清视频 | 一区二区免费 | 五月激情婷婷网 | 二区久久 |