中国作家林建
如果只是单纯做算法、数据挖掘的话,就永远只是服务于数据,一辈子跟着需求走,对我而言,没有什么前途,我还是想站在公司和市场的最前端,推着公司走。而且简单说来,大家都知道程序员这个职位,年龄会成为发展瓶颈,到了一定年纪或者做到管理层,或者直接转行,很少有人愿意过着一辈子写代码领工资的人生。其实,不论是人、是事还是物,核心竞争力都是你能产出什么价值。学数据挖掘、自然语言这些知识相对来说含金量比较高,门槛也高,不是谁都能做,对于价值变现来说,可能速度会更快。但要想切切实实体会到成就感所带来的快乐,就一定得自己锁定一个目标,不再跟着别人的需求兜兜转转。拒绝被那些提出各种要求的声音转移注意力,这一点是我当程序员带不来的。我认为人生最重要的事还是学习如何创造自己的价值,时间会推动着你选择不同的道路,我很幸运,能够将自己擅长的东西应用到别的领域,把自己的价值发挥到极致。
小剑2016
一、算法工程师简介(通常是月薪15k以上,年薪18万以上,只是一个概数,具体薪资可以到招聘网站如拉钩,猎聘网上看看)算法工程师目前是一个高端也是相对紧缺的职位;算法工程师包括音/视频算法工程师(通常统称为语音/视频/图形开发工程师)、图像处理算法工程师、计算机视觉算法工程师、通信基带算法工程师、信号算法工程师、射频/通信算法工程师、自然语言算法工程师、数据挖掘算法工程师、搜索算法工程师、控制算法工程师(云台算法工程师,飞控算法工程师,机器人控制算法)、导航算法工程师(@之介感谢补充)、其他【其他一切需要复杂算法的行业】专业要求:计算机、电子、通信、数学等相关专业;学历要求:本科及其以上的学历,大多数是硕士学历及其以上;语言要求:英语要求是熟练,基本上能阅读国外专业书刊,做这一行经常要读论文;必须掌握计算机相关知识,熟练使用仿真工具MATLAB等,必须会一门编程语言。算法工程师的技能树(不同方向差异较大,此处仅供参考)1 机器学习2 大数据处理:熟悉至少一个分布式计算框架Hadoop/Spark/Storm/ map-reduce/MPI3 数据挖掘4 扎实的数学功底5 至少熟悉C/C++或者Java,熟悉至少一门编程语言例如java/python/R加分项:具有较为丰富的项目实践经验(不是水论文的哪种)二、算法工程师大致分类与技术要求(一)图像算法/计算机视觉工程师类包括图像算法工程师,图像处理工程师,音/视频处理算法工程师,计算机视觉工程师要求l 专业:计算机、数学、统计学相关专业;l 技术领域:机器学习,模式识别l 技术要求:(1) 精通DirectX HLSL和OpenGL GLSL等shader语言,熟悉常见图像处理算法GPU实现及优化;(2) 语言:精通C/C++;(3) 工具:Matlab数学软件,CUDA运算平台,VTK图像图形开源软件【医学领域:ITK,医学图像处理软件包】(4) 熟悉OpenCV/OpenGL/Caffe等常用开源库;(5) 有人脸识别,行人检测,视频分析,三维建模,动态跟踪,车识别,目标检测跟踪识别经历的人优先考虑;(6) 熟悉基于GPU的算法设计与优化和并行优化经验者优先;(7) 【音/视频领域】熟悉等视频编解码标准和FFMPEG,熟悉rtmp等流媒体传输协议,熟悉视频和音频解码算法,研究各种多媒体文件格式,GPU加速;应用领域:(1) 互联网:如美颜app(2) 医学领域:如临床医学图像(3) 汽车领域(4) 人工智能相关术语:(1) OCR:OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程(2) Matlab:商业数学软件;(3) CUDA: (Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台(由ISA和GPU构成)。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题(4) OpenCL: OpenCL是一个为异构平台编写程序的框架,此异构平台可由CPU,GPU或其他类型的处理器组成。(5) OpenCV:开源计算机视觉库;OpenGL:开源图形库;Caffe:是一个清晰,可读性高,快速的深度学习框架。(6) CNN:(深度学习)卷积神经网络(Convolutional Neural Network)CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。(7) 开源库:指的是计算机行业中对所有人开发的代码库,所有人均可以使用并改进代码算法。(二)机器学习工程师包括机器学习工程师要求l 专业:计算机、数学、统计学相关专业;l 技术领域:人工智能,机器学习l 技术要求:(1) 熟悉Hadoop/Hive以及Map-Reduce计算模式,熟悉Spark、Shark等尤佳;(2) 大数据挖掘;(3) 高性能、高并发的机器学习、数据挖掘方法及架构的研发;应用领域:(1)人工智能,比如各类仿真、拟人应用,如机器人(2)医疗用于各类拟合预测(3)金融高频交易(4)互联网数据挖掘、关联推荐(5)无人汽车,无人机相关术语:(1) Map-Reduce:MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。(三)自然语言处理工程师包括自然语言处理工程师要求l 专业:计算机相关专业;l 技术领域:文本数据库l 技术要求:(1) 熟悉中文分词标注、文本分类、语言模型、实体识别、知识图谱抽取和推理、问答系统设计、深度问答等NLP 相关算法;(2) 应用NLP、机器学习等技术解决海量UGC的文本相关性;(3) 分词、词性分析、实体识别、新词发现、语义关联等NLP基础性研究与开发;(4) 人工智能,分布式处理Hadoop;(5) 数据结构和算法;应用领域:口语输入、书面语输入、语言分析和理解、语言生成、口语输出技术、话语分析与对话、文献自动处理、多语问题的计算机处理、多模态的计算机处理、信息传输与信息存储 、自然语言处理中的数学方法、语言资源、自然语言处理系统的评测。相关术语:(2) NLP:人工智能的自然语言处理,NLP (Natural Language Processing) 是人工智能(AI)的一个子领域。NLP涉及领域很多,最令我感兴趣的是“中文自动分词”(Chinese word segmentation):结婚的和尚未结婚的【计算机中却有可能理解为结婚的“和尚“】(四)射频/通信/信号算法工程师类包括3G/4G无线通信算法工程师, 通信基带算法工程师,DSP开发工程师(数字信号处理),射频通信工程师,信号算法工程师要求l 专业:计算机、通信相关专业;l 技术领域:2G、3G、4G,BlueTooth(蓝牙),WLAN,无线移动通信, 网络通信基带信号处理l 技术要求:(1) 了解2G,3G,4G,BlueTooth,WLAN等无线通信相关知识,熟悉现有的通信系统和标准协议,熟悉常用的无线测试设备;(2) 信号处理技术,通信算法;(3) 熟悉同步、均衡、信道译码等算法的基本原理;(4) 【射频部分】熟悉射频前端芯片,扎实的射频微波理论和测试经验,熟练使用射频电路仿真工具(如ADS或MW或Ansoft);熟练使用cadence、altium designer PCB电路设计软件;(5) 有扎实的数学基础,如复变函数、随机过程、数值计算、矩阵论、离散数学应用领域:通信VR【用于快速传输视频图像,例如乐客灵境VR公司招募的通信工程师(数据编码、流数据)】物联网,车联网导航,军事,卫星,雷达相关术语:(1) 基带信号:指的是没有经过调制(进行频谱搬移和变换)的原始电信号。(2) 基带通信(又称基带传输):指传输基带信号。进行基带传输的系统称为基带传输系统。传输介质的整个信道被一个基带信号占用.基带传输不需要调制解调器,设备化费小,具有速率高和误码率低等优点,.适合短距离的数据传输,传输距离在100米内,在音频市话、计算机网络通信中被广泛采用。如从计算机到监视器、打印机等外设的信号就是基带传输的。大多数的局域网使用基带传输,如以太网、令牌环网。(3) 射频:射频(RF)是Radio Frequency的缩写,表示可以辐射到空间的电磁频率(电磁波),频率范围从300KHz~300GHz之间(因为其较高的频率使其具有远距离传输能力)。射频简称RF射频就是射频电流,它是一种高频交流变化电磁波的简称。每秒变化小于1000次的交流电称为低频电流,大于10000次的称为高频电流,而射频就是这样一种高频电流。高频(大于10K);射频(300K-300G)是高频的较高频段;微波频段(300M-300G)又是射频的较高频段。【有线电视就是用射频传输方式】(4) DSP:数字信号处理,也指数字信号处理芯片(五)数据挖掘算法工程师类包括推荐算法工程师,数据挖掘算法工程师要求l 专业:计算机、通信、应用数学、金融数学、模式识别、人工智能;l 技术领域:机器学习,数据挖掘l 技术要求:(1) 熟悉常用机器学习和数据挖掘算法,包括但不限于决策树、Kmeans、SVM、线性回归、逻辑回归以及神经网络等算法;(2) 熟练使用SQL、Matlab、Python等工具优先;(3) 对Hadoop、Spark、Storm等大规模数据存储与运算平台有实践经验【均为分布式计算框架】(4) 数学基础要好,如高数,统计学,数据结构l 加分项:数据挖掘建模大赛;应用领域(1) 个性化推荐(2) 广告投放(3) 大数据分析相关术语Map-Reduce:MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。(六)搜索算法工程师要求l 技术领域:自然语言l 技术要求:(1) 数据结构,海量数据处理、高性能计算、大规模分布式系统开发(2) hadoop、lucene(3) 精通Lucene/Solr/Elastic Search等技术,并有二次开发经验(4) 精通Lucene/Solr/Elastic Search等技术,并有二次开发经验;(5) 精通倒排索引、全文检索、分词、排序等相关技术;(6) 熟悉Java,熟悉Spring、MyBatis、Netty等主流框架;(7) 优秀的数据库设计和优化能力,精通MySQL数据库应用 ;(8) 了解推荐引擎和数据挖掘和机器学习的理论知识,有大型搜索应用的开发经验者优先。(七)控制算法工程师类包括了云台控制算法,飞控控制算法,机器人控制算法要求l 专业:计算机,电子信息工程,航天航空,自动化l 技术要求:(1) 精通自动控制原理(如PID)、现代控制理论,精通组合导航原理,姿态融合算法,电机驱动,电机驱动(2) 卡尔曼滤波,熟悉状态空间分析法对控制系统进行数学模型建模、分析调试;l 加分项:有电子设计大赛,机器人比赛,robocon等比赛经验,有硬件设计的基础;应用领域(1)医疗/工业机械设备(2)工业机器人(3)机器人(4)无人机飞控、云台控制等(八)导航算法工程师要求l 专业:计算机,电子信息工程,航天航空,自动化l 技术要求(以公司职位JD为例)公司一(1)精通惯性导航、激光导航、雷达导航等工作原理;(2)精通组合导航算法设计、精通卡尔曼滤波算法、精通路径规划算法;(3)具备导航方案设计和实现的工程经验;(4)熟悉C/C++语言、熟悉至少一种嵌入式系统开发、熟悉Matlab工具;公司二(1)熟悉基于视觉信息的SLAM、定位、导航算法,有1年以上相关的科研或项目经历;(2)熟悉惯性导航算法,熟悉IMU与视觉信息的融合;应用领域无人机、机器人等。
apple樱子
软件工程师(Software Engineer),是从事软件职业的人员的一种职业能力的认证,通过它说明具备了工程师的资格。软件工程师是从事软件开发相关工作的人员的统称。通常人们会和程序员(英文Programmer)产生混淆,但其实是两种不同的性质。程序员是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统分析员,系统架构师,测试工程师五大类。软件工程师的工作不同于程序员但是一个软件工程师必定是一个优秀的程序员。首先软件工程师与程序员工作上最大的不同,可以打一个比喻:把一款软件比做一座大桥,那么软件工程师相当于施工总指挥,而一般的开发人员也就是程序员相当于建筑工人,所以很多人就说自己是IT民工就是这么来的。想要成为一名优秀的软件开发工程师,就必须具备以下能力:1、需求分析能力对于软件工程师而言,理解需求就可以完成合格的代码,但是对于研发项目的组织和管理者,他们不但要理解客户需求,更多时候还要自行制定一些需求。2、项目设计方法和流程处理能力软件开发工程师必须能够掌握不少于两到三种的项目设计方法,并能够根据项目需求和资源搭配来选择合适的设计方法进行项目的整体设计。3、复用设计和模块化分解能力作为一个从事模块任务的软件开发工程师,他需要对他所面对的特定功能模块的复用性进行考虑,而作为一个系统分析人员,他要面对的问题复杂的多,需要对整体系统按照一种模块化的分析能力分解为很多可复用的功能模块和函数,并针对每一模块形成一个独立的设计需求。4、整体项目评估能力作为系统设计人员,必须能够从全局出发,对项目又整体的清醒认识,比如公司的资源配置是否合理和到位,比如工程进度安排是否能最大化体现效率又不至于无法按期完成。5、团队组织管理能力(1)工作的量化没有量化就很难做到合适的绩效考核,而程序量化又不是简单的代码行数可以计算的,因此要求技术管理人员需要能真正评估一个模块的复杂性和工作量。(2)对团队协作模式的调整一个优秀的软件开发工程师应该能够根据程序员之间的能力水平差距,以及根据项目研发的需求,选择合适的组队方式,并能将责权和成员的工作任务紧密结合,这样才能最大发挥组队的效率。
美食界女王
java开发工程师一般做以下开发:
一、初级部分
1、Java 程序设计基础,包括 J2sdk基础、Java面向对象基础、Java API使用、数据结构及算法基础、Java AWT图形界面程序开发;
2、J2SE平台Java程序设计,包括Swing图形程序设计, Socket网络应用程序设计,对象序列化,Java 常用数据结构,Applet,流和文件,多线程程序设计;
3、Java桌面系统项目开发,4~5人组成一个项目组,项目大小为(15人*工作日)
4、Linux的基本操作,Linux下的Java程序开发,Linux系统的简单管理;
5、Oracle数据库,包括SQL/PLSQL;数据库和数据库设计;简单掌握ORACLE9i 数据库的管理。
二、中级部分
1、Java Web应用编程,包括 Java Oracle 编程,即JDBC;
2、JavaWeb编程,包括JSP、Servlet,JavaBean;
3、Java应用编程,包括Weblogic、Websphere、Tomcat以及利用Jbuilder开发Java程序;
4、MVC与Struts,学习业界通用的MVC设计模式和Struts架构。
三、高级部分
1、J2ME程序设计,包括J2EE程序、J2ME;Java高级程序设计(J2EE),包括J2EE体系结构和J2EE技术、EJB;Weblogic使用、 JBuilder开发;
2、Java和XML,包括Java Web Service,JavaXML, 业界主流XML解析器程序设计;
3、软件企业规范和软件工程,包括UML系统建模型和设计(Rational Rose 200x)软件工程和业界开发规范;CVS版本控制、Java Code书写规范。
优质工程师考试问答知识库