软件工程师software engineer,是从事软件职业的人员的一种职业能力的认证,通过它说明具备了工程师的资格。软件工程师是从事软件开发相关工作的人员的统称。
它是一个广义的概念,包括软件设计人员、软件架构人员、软件工程管理人员、程序员等一系列岗位,工作内容都与软件开发生产相关。软件工程师的技术要求是比较全面的,除了最基础的编程语言(c语言/c++/java等)、数据库技术(sql/oracle/b2等)等,还有诸多如javascript、ajax、hibernate、spring等前沿技术。此外,关于网络工程和软件测试的其他技术也要有所涉猎。
工作内容:
软件工程师针对目标用户的需求,进行产品研发;负责产品的上线推广,软件功能的维护,和bug的紧急修复;根据产品的需求变化,不断改进产品。
任务:
编写功能代码,根据用户反馈维护历史代码,控制软件开发过程中的风险和bug的修复。
职责:
完成新需求的软件研发,维护历史软件功能的稳定,控制软件开发过程中的多类风险。
工作考核:
主要依据测试用例覆盖率、文档完善程度、bug提交情况等定性或定量数据评定工作的考核结果。
行业知识背景:
参与过一定规模的软件开发工作,积极参与开源社区并贡献过代码,自己编写过一定规模的代码。(积极参加项目和实习)
专业知识背景:
1、对于计算机科学的基本知识:操作系统、计算机组成原理、数据结构、算法分析与设计、基本的编程语言、编译原理等学科;要求能熟练掌握其概念和原理,并能将其应用到实际场景。
2、对于软件工程方面的实验训练,能够熟悉基本的软件开发流程和工具,包括版本控制软件﹙git\svn等﹚,代码质量分析工具﹙gerrit等﹚。
大学核心课程:
算法分析与设计、操作系统、数据结构、程序设计语言、软件工程、数据库原理、编译原理、机器学习、自动机理论、专业英语
专业技能:
一、熟悉常用编程语言,诸如c/c++,java,python等,并对某一门或多门语言的特性有着较深入的理解;
二、基本的数据结构和算法设计能力,熟练掌握数据结构的应用和复杂度分析并灵活运用;
三、操作系统和网络方面:
能够熟练运用系统api接口,设计良好的程序,熟悉linux操作系统,熟悉tcp/ip、http等通信协议,有socket网络编程和大规模并发服务器开发经验或有搜索相关领域﹙如信息检索、索引、排序﹚经验。
常用工具:
软件集成开发环境,如visual stuio、eclipse、myeclipse等;
数据库软件,如mysql、oracle、sql server等;
基本的代码编辑器,例如vim/emacs等;
其他工作如python解释器、filer等。
通用技能:
沟通能力、表达能力以及团队合作能力,能够与团队中的成员协同开发,共同完成任务。
行业发展前景:
软件开发、程序设计越来越成为一项基本技能,特别是在我们现在所处的大数据的时代,各行各业都会和信息技术结合起来,所以我认为软件开发领域是一个前途十分光明的职业。
个人发展路径:
1、个人发展的一个路径是技术路线,具体的方向可以有很多,包括客户端/移动端软件开发、服务端软件开发、机器学习算法方向、大数据处理领域等;可以学习的技术有很多,可以就职的职位也很多,向每个领域成为专家的方向发展是很好的,另外也可以各个领域都有所涉猎,成为全栈人才;
2、在技术方向的路上,避免不了要和团队合作,另外一条路径便是走管理方向。能够有效的管理团队的人员完成开发任务,并制定开发计划;合格的技术管理人才同样需要扎实的技术水平,能够为团队选取技术方案等。这两条路线是相辅相成的。
职业的就业趋势:
软件开发工程师的细分类别越来越多,例如前端开发工程师、后端开发工程师、算法工程师等,伴随着互联网进程的加快,对软件开发工程师的需求会越来越旺盛。