本人硕士毕业后的头几年是主要在通讯设备商(他们研发生产通讯设备(如基站)卖给电信运营商(如中国移动))工做,那时是通讯业的黄金十年,单是通讯设备商就有不少家,国内有华为、中兴、大唐、烽火等,国外有爱立信、诺基亚、西门子、摩托罗拉、朗讯、北电、阿尔卡特等。这里面的有些公司如今刚毕业的可能都没据说过,由于它们要么被兼并要么倒闭了,这要“归功”于华为(是华为打的他们无还手之力致使要么兼并要么倒闭的)。如今这个领域主要有四个玩家了,国内的华为和中兴,国外的爱立信和诺基亚。这个诺基亚跟手机领域的诺基亚当年能够说是兄弟关系,是诺基亚公司的两大业务:手机(通讯终端)和通讯设备。后来诺基亚把手机卖给了微软,通讯设备就成了诺基亚的主营业务了。现今的诺基亚能够说是多家通讯设备商的综合体,包括诺基亚、西门子、朗讯、阿尔卡特、北电、摩托罗拉,即这么多家最后并成了一家叫诺基亚。上面说了那时是通讯业的黄金十年,同时外企明显强于国内公司,是毕业生眼里的香饽饽,不少毕业生都进了外企,其中不乏至关优秀的。这跟如今彻底不同了,如今是移动互联网的黄金时代,毕业生都想进移动互联网公司。这也很正常,你们都想进处于黄金时期的行业。我就在那时进入了一家外资背景的通讯设备商,作媒体网关(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