本人碩士畢業後的頭幾年是主要在通訊設備商(他們研發生產通訊設備(如基站)賣給電信運營商(如中國移動))工做,那時是通訊業的黃金十年,單是通訊設備商就有不少家,國內有華爲、中興、大唐、烽火等,國外有愛立信、諾基亞、西門子、摩托羅拉、朗訊、北電、阿爾卡特等。這裏面的有些公司如今剛畢業的可能都沒據說過,由於它們要麼被兼併要麼倒閉了,這要「歸功」於華爲(是華爲打的他們無還手之力致使要麼兼併要麼倒閉的)。如今這個領域主要有四個玩家了,國內的華爲和中興,國外的愛立信和諾基亞。這個諾基亞跟手機領域的諾基亞當年能夠說是兄弟關係,是諾基亞公司的兩大業務:手機(通訊終端)和通訊設備。後來諾基亞把手機賣給了微軟,通訊設備就成了諾基亞的主營業務了。現今的諾基亞能夠說是多家通訊設備商的綜合體,包括諾基亞、西門子、朗訊、阿爾卡特、北電、摩托羅拉,即這麼多家最後併成了一家叫諾基亞。上面說了那時是通訊業的黃金十年,同時外企明顯強於國內公司,是畢業生眼裏的香餑餑,不少畢業生都進了外企,其中不乏至關優秀的。這跟如今徹底不同了,如今是移動互聯網的黃金時代,畢業生都想進移動互聯網公司。這也很正常,你們都想進處於黃金時期的行業。我就在那時進入了一家外資背景的通訊設備商,作媒體網關(media gateway)上的語音軟件開發,從剛開始的啥都不會要人帶到後來的我帶別人。作了幾年後因爲咱們這個產品的開發要transfer到其餘site,我要去作其餘領域軟件開發。當時以爲前面幾年的積累用不上太惋惜了,也就不太願意作其餘領域開發,因而就換了公司,到一家芯片公司繼續作音頻相關的開發。這麼多年過去了,如今想一想當時出來是正確的,通訊設備商的黃金時代早已過去,人不能逆趨勢而行。今天就聊聊我在那段時間技術上的得與失。算法
先說得吧。好多作技術的前一兩份工做就決定了本身的技術方向,我也是這樣。進入通訊設備商作媒體網關上的語音軟件開發,並且一作就是幾年,這就決定了個人技術方向是音頻相關。直到如今我仍然作着音頻相關的工做,只不過如今音頻知識面更廣了,作的東西難度更大了。若是後面還在作技術,我想還會是音頻相關。因此這第一得就是獲得了個人技術方向。我是學自動化(控制理論和控制工程)出身,而音頻屬於信號處理。記得剛進公司的時候聽着周圍人講的術語基本都不懂,以爲本身好弱。一聽到不懂的就記下來,下班後回家到百度上搜(那時公司裏只有部分人能上網,我做爲一個新人確定沒有上網的權限)。老大交待的任務完成後就主動要求作新的任務,好使本身快速上手。通過一段適應期後,我能夠很好的跟你們討論技術問題了。就這樣從剛開始的什麼都不懂到後來經過作不一樣產品形態上的音頻開發掌握了除算法(算法主要是理解基本原理,而後去優化使用)以外的絕大多數的音頻知識。作音頻技術的相對偏冷門,作的人很少,我能堅持下來,而且一作就是這麼多年,我也挺佩服本身的,哈哈。網絡
這第二得是獲得了較爲全面的語音通訊知識。整個通訊網絡分爲通訊終端(用戶)、接入網和核心網,大意以下圖:架構
通訊設備商通常作接入網和核心網(剛開始時一些通訊設備商連通訊終端都作,後來陸陸續續的把通訊終端賣掉了,專心作通訊設備,好比阿爾卡特和西門子),而在接入網和核心網裏都有好多網元,通常一個網元都有一個具體的產品部門作。作開發的除了關注本身開發的網元內部實現外,還要關注與之交互的其餘網元的行爲,若是沒有興趣通常就不會關注整個通訊網絡的架構了。我除了關注本身開發的以及與之交互的,對整個通訊網絡也十分有興趣,想知道整個通訊過程是如何進行的,好比兩個手機之間打電話,信令是怎麼交互的,語音數據是怎樣從手機通過接入網核心網傳輸給對方手機的。公司除了有產品部門外還有總體解決方案部門,他們不作具體開發,關注網絡總體方案,同時還要負責對外交流,告訴客戶公司的從接入網到核心網的總體一攬子方案是什麼。這種部門通常會寫不少關於網絡或解決方案之類的PPT,他們也會把這種PPT放在公司內網上供內部員工學習交流。我在公司的中後期正處於3G研發已成熟剛開始佈網(國內上3G比國外遲了好幾年)同時4G(LTE)已開始研發的階段。我就從內網上找到一些關於通訊網絡架構的PPT學習,先學習了3G的接入網和核心網有哪些網元它們之間從控制面到數據面是如何交互的,後來重點放在了4G的網絡架構上。4G是一個全IP的網絡,即全是PS域(Packet SwitchedDomain,分組域)再也不有CS域(Circuit SwitchedDomain,電路域)。接入網從3G時代的兩個網元(分別是RNC和NodeB,RNC負責控制面,NodeB負責用戶面)演進到只有一個網元(eNodeB,控制面和用戶面都在eNodeB上處理)。核心網演進到EPC(Evolved Packet Core)。爲了實現全IP下的語音通訊,提出了VoLTE(Voice over LTE)的概念,通話雙方都有4G網絡時就用VoLTE通話,不然就回落到2/3G網絡在傳統CS域通話。VoLTE實質上也是VoIP,在終端上對語音數據編碼後碼流也用RTP/UDP打包。跟固網的VoIP相比,主要是網絡承載不同,固網是以以太網(ethernet)爲承載,而VoLTE從終端到接入網是無線承載。語音通訊時在覈心網會用到IMS(IP Muitimedia Sub-system, IP多媒體子系統)。我當時作的媒體網關屬於核心網網元,剛開始時屬於NGN(Next Generation Network,下一代網絡)下的一個網元。隨着IMS的提出,NGN的概念慢慢淡化,媒體網關就成了IMS下的一個網元。就這樣利用零散時間的學習,逐漸的掌握了整個通訊網絡的架構,尤爲是語音通訊方面的。學習
通訊設備商都是大公司,作事風格上都會講流程,相對正規些。在這樣的環境下工做了幾年,我的以爲也養成了相對良好的工做習慣,這是個人第三得。軟件工程師的平常工做有設計、寫代碼、調試、解bug等。當時在軟件設計階段必定要寫設計文檔,還要開會review,確保在設計階段盡最大可能想明白想清楚,而後再去寫代碼,不容許返工,由於越到後面返工的代價越大。我作了那麼多feature,沒有一個返工的,周圍同事也是如此。後來在其餘公司工做,我也是先盡最大可能想清楚而後再寫代碼,只是因爲公司的風格不一樣,有時候就再也不寫設計文檔了。在編碼階段,遵循部門制定的coding rule,有註釋方便他人閱讀,在關鍵處有log,方便後面調試。代碼寫完後還要給他人review,再後來就是自測,根據本身設計的測試用例測試,發現bug並fix掉。最後是給測試人員測並作bugfix。測試人員設計的測試用例會更復雜綜合些,若是測試人員發現了一些簡單的bug說明自測沒作好,這會影響到年末的KPI,因此那時你們的自測作的都是不錯的。測試
以上主要是三得。再來講說失吧。這第一失就是失去了在二十幾歲的黃金時間作相對核心技術的機會。碩士畢業已經二十五六歲,剛從學校出來沒多久,基礎理論知識還在,能夠作相對核心一點的技術,好比作算法。再加上二十幾歲,精力旺盛,又單身,一人吃飽,全家不愁,能夠把所有的精力放在工做上。哪像如今,有老有小,雖然老的目前不須要本身花什麼精力,可是小的花了好多精力,不論是剛出生時的帶娃仍是大一點後的教育,都是很花精力的,尤爲在教育上,因爲忙而忽視小孩的教育,之後會後悔的。我想工做多年且家裏有小孩的確定有同感。我那時雖然是作語音開發,可是解決方案是芯片供應商作的,咱們只是調提供的API(或者說咱們只是作適配層),具體的實現對咱們是黑盒子,咱們是不清楚的。當我從通訊設備商出來進芯片公司作voice engine的時候已經三十出頭,學校裏學的那些基礎理論知識已經忘了好多了。前面說過我是學自動控制出身,信號處理只是學了一下應付了考試,學的不精通,如今作的是音頻,算法就是信號處理方面的。畢業多年後再把信號處理理論知識拾回來難度是特別大的,我最終仍是選擇了作工程。我想若是畢業一出來就作算法,尤爲是作控制上的算法,是能作的(我在讀碩士期間就作的控制算法的具體實現)。這跟大環境有關,當時是通訊熱,碩士班上的同窗絕大多數都去作通訊了;外資熱,同窗們以進入外資公司爲榮。當時的外資通訊設備商在國內都設有研發中心,但作的都不是核心技術,甚至有的很弱。如今想一想好多985甚至C9的畢業生都去作這些有點弱的技術,是對中國人才的一種浪費。我當時作的媒體網關是從國外的研發中心transfer到國內的,除了系統設計和部分測試在海外作,開發等都是在國內作,已經算是不錯的了。即便是內資公司,當時除了華爲中興真正作核心開發的也沒幾家。優化
這第二失是失去了作更多東西的機會。當時公司很是注重流程。就拿開發一個feature來講吧,先需求分析、軟件設計、測試用例設計,而後寫代碼、自測而且bugfix,再後給測試人員測試同時bugfix。作了四五家公司,我以爲作軟件開發流程是要的,可是不能太拘泥於流程,否則效率偏低。就以寫文檔爲例,要寫的文檔有設計文檔、測試用例文檔。我以爲模塊設計和複雜的feature必定要寫設計文檔,一些簡單的feature就不必寫文檔,認認真真想想怎麼作,而後你們討論一下就能夠寫代碼了。如今想一想那時花兩個月作一個feature,如今兩三個星期確定能搞定了。再說當時寫的那些文檔,除了系統架構設計模塊設計,那些小feature的文檔過後基本上是沒人看的,花了那麼多時間寫些過後基本沒人看的文檔真是浪費,還不如作快些,讓項目早完成,早交付給客戶。ui