# 硬件
### 硬件工程师
指在计算机领域里,需要接触到电路底层的工程师,实际上在电气领域,在电方向上分为强电和弱电,强电指高压传输,电动机等高电流作为能源动力领域,弱点就是指微电子方向的信息处理领域。计算机硬件工程师的工作范围在弱电,主要内容主要有PCB设计(印制电路板),ic(芯片)设计,FPGA工程师。往上还包括涉及针对特定硬件做系统开发维护的嵌入式工程。
#### PCB工程师、FPGA工程师、IC工程师
专业术语大家可能不太懂,就举例一下每种工程师对应的工程产品吧。
PCB工程师的工作就是设计一个高速稳健的交通网络,把电路板上各个功能不同的模块连接起来。他们的工作环境如下所示。
FPGA全称叫现场可编程逻辑阵列,就是理解为一个可以编程的硬件。传统意义上的集成电路是定制化的,针对特定的需求设计特定的电路板。而fpga可以通过熔断机制来动态修改电路的结构,达到动态编程的效果,简单点说,针对一块FPGA,你可以把他烧制成视频编码器,也可以烧制成无线wifi通信模块。虽然这些算法都可以通过软件实现,但是硬件实现的效果算法成本更低。开发语言常用的有VHDL(硬件描述语言)。
IC工程师就是设计一个高效运算的大脑,涉及到流水线机制,超频,最重要的是解决纳米级别下电流扰动问题,最大的制约因素也是材料工艺问题。
以上三种岗位其实在现代学术分支类还是属于EE下的子类,事实上从事这个方向的人也大部分是学习电子电路工程的同学。这个专业的特点就是强者通吃,全球唯二的两家芯片公司intel、AMD。而且他们的核心竞争力并不是芯片设计能力上,而是在制作工艺上。现在在移动终端统一江湖的还有英国Acorn有限公司设计的ARM芯片,它只是提供一个解决方案,设计图纸,具体的制造还得是华为,三星自己开场设立。但是同时又有很多小众领域,比方说无人机,安全门等等你又需要做专门的PCB设计,所以硬件工程师也是有市场需求基础的,但是也不多。从技能需求来看,要求数学知识扎实,逻辑严密,电子电路知识更多,类似工具反而并不是显得那么重要。从未来的发展前景来看,随着智能硬件物联网的推广,会有一波大红利。
岗位需求:IC << FPGA = PCB
薪资 :IC >> FPGA = PCB
#### 嵌入式工程师
**系统级别嵌入式**
主要是针对特定硬件移植一套操作系统,类似于linux,VxWorks等,甚至于自己开发一个只能满足需求的未知系统,你需要读管脚信息,读时序。但是大部分还是使用成熟的系统移植,自己写系统一来太慢,二来肯定很多坑。相对来说在这个层面上的人都是大牛。或者做一些驱动开发,比如说,每年让无数游戏宅剁手的最新NVIDIA显卡,都需要这个级别的工程师来做相应的显卡驱动。
薪资水平绝对高,起薪百万级别,入门门槛也绝对高,业内最强不是在研究所,而是在公司。
**应用级别嵌入式**
在基于已经能跑的机器上做开发,比如说,操作系统已经提供了最基本的文件管理,内存管理,CPU管理的情况下。你在此基础上做特定应用的开发。普遍打交道的语言工具是C。本人实验室其实是这个方向的,有过军工和国企的一些项目,从这层往上,到架构师之前,本人至少都接触过一些。能说点自己的感悟,而不是查资料了。
做嵌入式应用开发最蛋疼的不是开发而是调试,在这一层做开发会有各种奇葩问题,比方说你昨天还跑得好好的,今天可能就崩了,可能是硬件问题,虚焊?电容击穿?电路板电流扰动?也可能是软件问题,野指针(很少有系统做了虚拟内存,你所有操作都是在实际的内存空间上操作的),内存溢出。
薪水来看,起薪比较低,今年华为给的算是不错了,能到16K,但是随着你对业务的熟悉,工资是没有上限的,最终达到的升级状态就是系统级别嵌入式工程师。
## 软件
### 桌面程序工程师
传统的桌面应用软件类似于office,浏览器啊在PC端上运行的软件。主流的开发框架有Qt,MFC,.NET。现在还比较强势的一些桌面应用领域就是微软的office和桌面游戏公司。以及基于微软的C#的开发应用,基于QT的C++开发应用。其他的不是特别了解,但是给我的感觉就是这个市场不怎么活跃,招人很少,身边也没有认识的人走这条路线。经知友私信补充,这个行业的薪资并没有随着互联网浪潮而有大幅度增长,该知友在.NET平台下使用C#开发,有5年的从业经验,15年的薪资水平在11k左右,后来转行去了android,当然这可能只是个例,有很多厉害的人我们可能不知道,先谢谢这位知友知友了。
### 网络应用工程师
从google发迹以来,基本上所有新兴的巨无霸公司,facebook,bat,amazon都是依赖于互联网的发展,依赖于这群互联网应用工程师。同时他们也就是在网上自称为码农的这个群体。他们这个群体应该能占到计算机领域70%以上的研发人员。
#### 前端开发
广义的前端就是指呈现在用户视觉的领域,直接可以让用户感受到的开发,往下会细分为web,andoroid,ios。
#### web前端(h5前端)
web前端指在浏览器(包括手机和pc浏览器,或者是webview控件,甚至于搭载JS引擎的任意环境)上运行的一系列应用。
传统意义上的前端主要是指网页,html,css,js那一套了,或者再加上html5,css3。但是最近几年前端发了很多变化。
这个方向是这几年的大热门,随着机器性能的提高,v8引擎的普及,虽然js和c,java的运算效率还是差上很远,但是目前来看对于呈现展示内容已经基本够用,所以,近几年出现了各种叛逃,比如说cocos2d-js来做游戏,react-native来做客户端啊。同时,随着大量人才的涌入,特别是这两年,大量的前端框架,解决方案让你感觉跟不上时代,讲真,两年前还是JQuery的天下,现在你不知道Vue,Angular都不好意思打招呼。同时由于机器性能的提高和V8引擎的强劲有力,脚本语言的另一个优点就是无须编译运行,导致了它可以实现一个其他语言无法做到的事情---动态更新,可以在app不发版的情况下动态的大幅度更改它,进一步的增加了JS的需求量。
薪资比起前两年来看涨了不少,而且市场需求量也很大,基本上任何应用都没有完全脱离web的框架内。门槛也不算高,但是往下深入一样会有很多东西要学。
#### android和iOS
android是一个基于linux内核开发的开放源代码移动操作系统,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发,主要设计用于触屏移动设备如智能手机和平板电脑。iOS(原名 iPhone OS,自 iOS 4 后改名为 iOS)是苹果公司为移动设备所开发的封闭源代码操作系统,所支持的设备包括 iPhone、iPod touch 和 iPad。
目前看来,智能机市场上,android的市场份额在四分之三以上,ios占了大概五分之一,剩下的都是什么塞班,winphone我们应该不用考虑,你应该也不会想做这个的。虽然android和ios市场占有率相差悬殊,但是android工程师和ios工程师基本上能维持相同的人数,所以你如果想从事移动端开发,就业市场来看的话,没有很大的区别。
技术层面来看两个其实比较像,主要的区别其实是生态圈的比较。
相应来说,可能android的入门成本门槛比较低,java相对于Object-C,swift来说还是比较流行的,同时,相对于iOS(mac电脑+苹果手机+一年100刀的开发者账号)的起始1.5W的投入来看,可能android的竞争会更激烈一些。
由于android的开放性,基于开源的linux开发,所以业内会有很多公司针对于android做所谓的“深度定制”,“适合国人的智能手机”等,那就导致了android的各式各样,不同的手机厂商在某些细节方面又有不同的理解,倒是android开发最大的一个问题就是适配。同时由于android的权限开放性,他会有很多可以hack的地方,针对android的木马病毒(360管家)很多,你要考虑到的东西会很多,不过目前来看,android的每次发版,安全性也越来越好,权限管理也越来越规范,以后会越来越好。而iOS的封闭特性,相对来说被发现的漏洞少(并不是不多,我个人觉得绝对比android多),但是每次爆出都是大新闻,它的开发相对来说规范很多,有很多成熟的解决方案,他的主要问题其实是iOS审核这块,大部分的公司都有过app被appstore毙过的经历。
另外,最近苹果公司也在推swift,如果你要做iOS,由于各种历史问题,OC并不能完全弃掉,但是swift也会成为你求职的考点或者亮点,通过同事的反应来看,swift比OC更爽,它更愿意做swift。
#### 后端开发
后端开发指的是,在为前端提供数据支撑的一个大的总类,包括数据库,业务逻辑处理,数据处理等。主要的开发语言分两个方向编译型语言,java,c/c++等,他的特点就是运行效率高,相同机器配置的情况下能支撑更大的访问量,适用于超高并发度,比方说淘宝后台是java,网易游戏腾讯游戏是c++。另一种就是以php、python等解释性语言,他们的特点就是开发效率高,无需编译,写完就能运行,主要针对一些运算量不大的中小型网站,比如说你的个人博客,管理后台。
##### 运维工程师
特意把它从后端中拿出来,主要是他的开发任务比较少,但是同样很重要,当数量量达到一定程度,数据库服务器都有上千台的时候,就需要专业的人士做做数据维护的工作了,它的工作难度一样很多,容灾备份,热替换。而且目前的趋势都是服务化,组件化,虚拟化,一样有各种难题有待于你去解决。但是从市场需求来看,只有大厂才会招专业的运维工程师,创业公司100台服务器以下的小公司一般都是托管到各种云,然后由后台工程师兼任。
##### 通俗意义上的后台开发
也就是那些经常说自己是业务狗的屌丝码农,觉得不做架构设计比较low,他们主要的工作就是实现pm的工作需求,比方说双十一来了,pm说,这个要添加一个抢红包的功能,然后后台业务狗就忙起来,要解决高并发下的死锁啊,重复请求啊,带宽啊各种功能,当然也需要前端,但是前端并不需要考虑复杂的并发性问题。而如果这些业务狗在处理高并发问题上有所建树,那么他们就能一步步升级为架构师。那个时候就可以把屌丝码农的屌丝去掉了。
### 测试工程师
一个产品或者一个新的功能需要上线,必须要经过完备的测试,测试工程师目前其实有两种,一种是纯测试,另一种是他的升级版测试开发工程师,它能在测试的过程的顺手把小bug改了而不需要返工。好的测试开发工程师工资也可以比做开发的工资高。
而且你们也不要小看测试这个东西,不要以为你只会点点鼠标看看对不对这么简单,合格的测试工程师需要熟悉各种测试工具,能自己写测试脚本,能找到bug,而且还能知道为什么会出现bug。这个工种一般也都是大公司才会配置的,对于小公司来说,一般就是开发人员自己也是自己的测试人员。
### 安全工程师
同样一个产品或者一个新的功能需要上线,不仅需要要经过完备的功能测试,还有一向就是安全性测试。而由于安全性测试可能需要的知识比较多,所以又会有一个单独的工种来这个。
或者你们也许更喜欢叫他们黑客(坏孩子),白帽子(好孩子)。他们游走在法律的边缘,或做着侠士的行为而不为人所知,或调皮捣蛋想整一个大新闻,更有甚者违法牟利。但是必须指出,他们确实互联网圈子里最有创新精神,反抗精神的人,当然我不是说的那些连脚本都不会写的工具小子了。我指的是阿桑奇,中本聪(主要是技术吊,思维吊,但是没做啥好事)。他们是IT圈的安拉,耶稣基督,精神偶像。必须指出,走安全工程师这条路必须得先走一条边缘线,要想有最好的防守你得先知道别人是怎么进攻的。薪水来看并不是特别有竞争力(不包括黑产)。从业人员这几年很多看到的情况是好孩子越来越多,但是中国的大环境不是特别好(乌云都被关了)。
### 架构师
从这里往后,已经算是程序员界的高富帅了,可以称的上是半个科学家。架构师的工作差不多已经基本脱离代码了,他的主要工具从VIM,EClipse变成了word,ppt。他主要觉得技术选型,针对大容量高并发的问题制定解决方案。基本上他们都是由后台工程师升级打怪升上来的,好像听闻业界也有前端工程师升级为了CTO做架构的,但是毕竟还是少数,node的效率还是差了很多。
### 算法工程师
这类人,基本都是大学参加ACM竞赛拿过奖,或者本身思维逻辑严密性高,数学基础扎实,算法牛逼。如果你是一个数学系或者物理系的优秀毕业生想转IT,这个可以作为你的主要方向。这个算是建筑系里的学院派,从学校毕业之后就直接达到了这个等级,起薪很高。
#### 数据挖掘
它的作用就是从一堆数据中挖去你你想要的信息。打个比方,给你2008年到2016年所有的房屋成交量,房屋成交价格,土地成交量,人口增长,银行贷款利率变化等等很多信息,让你预测明年房价变化情况。他们就是干这个的,这个工作分三步走,爬数据,建模,写算法验证。
爬虫工程师,就是从各种国家统计局网站,链家网站爬去数据,存储为结构化的数据。
数学建模,建立各种数据之间的影响关系,影响因子。
写算法验证,大部分数据挖掘工程师好像都是用python,工具比较多,语法简单。
难点其实不是在写代码部分,而在于建模,如果设计一个有效的模型来量化这些数据间的联系。其中的影响因子权值就是他们的生命价值所在,所有他们会光荣的把自己称呼为“调参侠”,顾名思义,就是天天调整参数,让模型运算结果来匹配实际情况。
薪水很高,一般统计分析局或者大公司才会招人,而且还可以独立创业,像是知乎很有名的团支书,拿数据打脸的那种牛逼轰轰的人物。
另外再而外介绍一下量化交易,量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略,极大地减少了投资者情绪波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的投资决策。这个是计算机屌丝和金融高富帅融合的比较成功的一个新的工种,通过一个优秀的交易员建立一个理论交易模型,再有程序员实现代码,这个算是数据挖掘领域比较直接的变现交易,著名的知乎英国五毛,Lightwing(李轶睿)就是从事这个方向的,他们的薪水是按照日来的,关键也在于模型建立,而且都是通过技术面分析,确保收益,比如说从10块钱涨到了10.1块,即便它很可能涨到11块,他们也可能就会卖掉(算法策略),然后通过超高频率的买卖来确保收益,比如说虽然每次买卖只能赚一毛钱,但是他一天内买卖了几十手,而且大部分都赚了,总的收益可能也会有1块,所以量化交易也有叫高频交易的.
#### 人工智能
我好久也没看过这方面的书了,可能理解有误。大家经常看到的siri,或者聊天机器人之类的都是属于这种东西。他的本质还是一个有限自动状态机,在一个状态下在很多因素的影响下走向下一个状态,理论上你把你在三维世界所有的输入都考虑进去,而且都分别定义了相应的输出,他是可以做到人工智能的。但是这样写出来程序会非常大,电脑跑不动。我个人的理解,基于计算机简单的01唯一向性,真正意义上的人工智能还是蛮难实现的。比如说之前非常火的李世石大战阿法狗,在这种特定的应用下,输入很简单,围棋上的落子16*16,状态也很简单,2的16*16次方,在这个复杂度下,肯定也是没办法枚举的,他们会有降维算法各种算法来聚类他们的状态。
#### 深度学习
我们上面所说的数据挖掘会有一个调整参数的过程,而在深度学习领域,他会添加一个正向反馈,让你的参数由机器自动调整,让他计算的结果去自动匹配实际的结果。这个就是所谓的机器学习,就是把人为调参的过程让机器自动完成。
此外,人工智能,深度学习,数据挖掘并不是分开来看的,他们会存在一定程度上的重合。他们其实真正的难点实在各种降维算法,概率论,退火等数学领域。所有说他们算是半个科学家也就是这样原因了。
#### 性能效率支持
这个才是普遍意义上的互联网的算法工程师做的事情。比方说,我要求一个数的平方根,现在我们编程很简单,只需要sqrt()就可以了,但是你如果看过这个的源码,你就会惊呼,感兴趣自己去搜,他并不是用牛顿莱布尼兹公式做的,它比牛顿牛逼多了,能提高100倍的效率。这只是一个很简单的例子,在实际应用中,当遇到大运算量的时候,就是他们该出场了。这部分功能其实大部分也是由后台工程是自己担任的,但是不排除大公司类似google,fb会特意招ACM来做算法支持,起薪很高。
在这里我特意提一下效率工程的头面担当,游戏引擎工程师(目前国内主要使用开源的unity3d)。主要做3D渲染,需要在计算机图形学方面有较高建树。类比于工业皇冠上的航天发动机一个级别。游戏开发只是一个特定方向的开发,,一样有客户端,web端,pc端,后台,数据库运维等。并没有需要单独拿出来一个讲。不过游戏开发工程师一般来说都是比较累的,但是同样薪水也是高,阴阳师团队今年估计年终奖拿100个月我都不稀奇。
### 标准化组织协会会员
这个也算是吧。比如说,美国电子工程协会,3GPP协会。他们主要是制作各种标准化协议。这个级别太高了,在特定领域,全球估计也就几十个人能做的了主吧。工资多少,人家应该都不在意这个东西。而且大部分还都是国家拨款或者公益组织拨款,反正不是盈利性质的。比如说,TCP/IP协议制定,5G协议制定。我也不知道他们从拿招人,可能是大学教授或者行业领袖吧。
### 量子计算机工程师
这个超级吊,这个是先驱,未来的计算机,至于他们干嘛的,怎么做,别问我,我不知道!!!
总体来说分为三个方面
1.网络
2.软件
3.集成电路(也就是所谓的硬件 )
如果您希望进入IT行业,那么您先要确定进入这三个方面中的一个。
三个方面的就业方向:
1.集成电路方向,这是一个非常专业的方向,需要求职者有很强的专业知识,这些专业知识很能通过培训来补充,需要很好的类似于大学教育的培养;这类人才就业面很窄,但如果就业了,其薪水很高(当然要看企业的情况)
2.软件方向,这个方面比集成电路设计在专业上相对宽一些,一个好的软件工程师,也需要有扎实的数学基础。常规的培训可以使一个没有软件基础的人成为一个软件蓝领,但要成为软件设计人员,还是需要相当的工作与学习时间;这类人才大多就业于软件企业;
3.网络方向,这个方面涉及的面就比前两者宽得多,通过培训可能从一个对网络技术不了解的人逐步成为网络的工程师,因为网络技术是一种更偏向于操作的技术。在就业面也宽得多,因为信息化是一个全社会的工程,政府、企业都在进行信息化,都需要在网络方面寻找合适的人才进行其网络系统的运行、管理、维护。
而不同网络工程师却是各行各业所需要的。
什么是网络工程师,我们可以从企业信息化的岗位体系中作一些了解。企业(或政府)信息化过程中需要以下四种人:
1.企业信息化主管:负责信息化建设中的目标与方案决策,信息化建设中的方向研究;
2.工程技术人员:负责信息化系统的设计、建设,包括设备、系统、数据库、应用系统的建设;
3.运行维护人员:负责信息化系统的运行、维护、管理以及基本的开发;
4.操作应用人员:主要应用信息化系统进行本职工作。
在企业信息化建设运行的过程来看,一个企业会把建设过程以外包方式交给专业的IT公司来完成,于是一般一个企业不会有IT系统的工程技术人员,可以说IT系统的工程技术人员都集中于专业的IT公司;而当信息化系统建成后,企业一般会有一个人,或一个组来负责信息化系统的运行、维护、管理,这部份人是企业必配的,而且从成本角度来看,企业会招聘一个对网络设备、网络系统、数据库、网络管理、网络安全以及基本网络开发都有所了解的人来负责其信息化系统,这类人一般叫网管。这类人的知识是水平性的,多方面的,但不是特别专业的。如果当企业真正遇到非常专业的技术问题,一般会让这个网管带着问题咨询专业的IT公司。
因此从这个角度来看,网络工程师的就业面会远大于其它两类工程师。
那现在社会中有很多称呼为网络工程师的认证培训或培训认证,我们如何来选择呢,我们可以网络技术的系统来分析与了解:
1.网络设备技术,这主要涉及网络的硬件建设,包括路由器、交换机、组局网、广网,这方面有代表性的是CISCO、NORTEL;
2.网络操作系统,这主要涉及操作系统的系统管理与网络管理,这方向有代表性的是WINDOWS 2000、UNIX、LINUX等;
3.网络数据库,这主要涉及应用于网络的数据库,这方面有代表性的是SQL和ORACLE等;
4.网络安全,大家不应把网络安全片面的想成对操作系统、应用系统的安全,其实安全问题在网络的各方面都存在,在这方面国内还没有出现比较好、比较全面的认证;
5.网络管理,这涉及一个局网、广网的综合管理、优化、计费等等,也没有一个综合性的认证;
6.网络应用开发,企业的网站的基本开发、互动性开发,技术有ASP等等。
这六个方面都是企业信息化必备的因素,所以大家如果要补充自己的知识,可以从这六个方面去补充,自己还要作一个定位,是成为一个全面性的人员,还是专业性的人员。不过如果能在这个方面打下扎实的基本功,那么再在工作中选择一个方向,会更加厉害。
1 软件开发(主要专业:计算机科学与技术,软件工程等),就是编写代码,开发程序。有多种开发语言C/C++,JAVA,C#等。
注:系统开发,网络编程和大型游戏还是需要学好C/C++(个人认为较难点),手机游戏需要学会JAVA。工程项目的系统软件开发,常用的是JAVA/JavaEE和C#/.NET,还有些中小型开发常用的技术Delphi,PB,PHP,ASP等等。
很多人都是从C语言开始接触编程的,它是经典,也很强大,具有承上启下的地位,可以为今后打下良好的基础。
2 计算机网络技术(主要专业:通信,网络安全与管理等),界定很宽泛,网络领域和计算机一样,发展方向细化的很详细了,完全可以独立划出计算机专业行列,主要涉及领域有通信协议,网路信息安全等等。
3 电子专业 倾向于硬件,单片机,嵌入式等
硬件方面,感觉比软件难学的多,难就难在学习实践的环境比较难找,比如嵌入式,大型机,绝不像软件学习,有个电脑连个网就齐活了,呵呵。也正因此它的含金量绝不低于软件,更主要它还比软件技术相对来说发展“稳定”,也就是俗话说的“越老越吃香”的现象更明显,更多的是个积累。
4 计算机应用技术,倾向于“应用”,本科这个专业很少见,多见于专科。研究生好像也有这个专业吧,但“此应用非彼应用”了!计算机应用就是大杂烩,什么都学,软件、硬件、网络、数据库,但都是皮毛,目标是结合其他行业领域的特点使用计算机。比如:工业设计/制图,动漫/flash,多媒体处理等等。
5 信息管理专业,文科转过来可能有帮助,因为也有管理方面课程,计算机方面学的多,但都不深入,理论多一些。
计算机大致可以分为这几个:
1、编程、软件开发(C、C++、JAVA等编程语言,软件开发、游戏开发)
2、网站开发、网页设计(asp、JSP、.net编程等,动态网页要用到数据库)
3、计算机网络(具体又分系统管理、网络安全等)
4、图像设计方面的(像photoshop、3DMAX、CAD、coreldraw等软件。广告设计、建筑设计、模型设计、影视等方面用得上)
5、数据库应用、开发(sql,oracle,DB2等,大点的企业都有自己的数据库)
专科:软件技术计算机应用计算机信息管理电子与信息管理多媒体网络通信信息安全电子商务本科:软件工程计算机科学与技术网络工程课程包括:计算数学及其应用软件电子与信息技术信息与多媒体技术现代信息技术教育数据库应用与信息管理微电子控制技术机电设备及微机应用计算机辅助设计多媒体与网络技术广告电脑制作电脑图文处理与制版计算机制图通信技术计算机网络技术电器与电脑企业信息计算机管理电子工程计算机软件电子技术与微机应用经济信息管理与计算机应用计算机网络与软件应用计算机及应用应用电子技术信息管理与信息系统网络技术与信息处理软件工程微电子技术计算机辅助设计与制造