“程序员”和“软件工程师”的概念常常被混淆在一起使用,很多人以为搞软件就是编程序、就是“程序员”,而很多各种各样的培训学校却宣传培养的是“高薪软件工程师”;有很多资深的软件开发高手称呼自己为“老程序员”,而很多新入行的年轻人就号称“软件工程师”或者“高级软件工程师”。那么,一个普通的程序员和一名软件工程师的区别到底在哪些方面呢?带着这个问题,笔者采访了号称“培养真正的软件工程师”的昂立·慧桥软件人才项目实训中心的负责老师:
所谓培养“真正的软件工程师”,就是用项目实训的教学模式,全程案例式教学,不仅学习企业需求的实用前沿开发技术(如 Java EE 中的 Struts2 、 Spring 、 Hibernate , .Net 中的 Visual Studio2008 、 ASP.Net 4.0 等),还在经验丰富的老师的带领下,参与到真切的项目开发流程中,体验团队合作的工作环境和压力。通过项目实训锻造出的一名真正的软件工程师,应具有以下能力:
1. 熟练掌握Java 语言, 深入理解OOP,OOA,OOD 等编程思想.
2. 掌握Java EE 各个技术模块( JSP/Servlet, JDBC, EJB, Websphere / Weblogic 等)
3. 熟悉各种Java IDE 和相关开发工具 (Eclipse, Jbuilder, WSAD, CVS, ANT, Junit)
4. 理解ROB 的设计原理, 熟练掌握Oracle/SQL Server/DB2 其中至少一种
5. 熟悉UML 建模, 熟练掌握Rational Rose
6. 深入理解Design Patten, 熟悉Struts 、Spring 、Hibernate 等框架技术
7. 有中大型项目开发经验, 能独立完成整个软件模块分析, 设计开发, 单元测试
8. 熟悉软件工程, 了解前沿技术规范(CMM) 和先进开发模式(RUP, XP)
9. 能迅速接受新技术, 快速学习和应用
10. 英语, 逻辑思维能力, 团队精神等非技术要求.
对比 1 :
A 、普通开发人员:
掌握了计算机基础知识;
熟悉计算机资源,学会了编程语言,喜欢卖弄技巧,喜欢比较编程语言的优劣;
以能编出某种特殊功能的程序为荣,不懂原理,不求甚解;
喜欢个人开发,不重视文档编写;
B 、软件工程师:
计算机基础知识扎实;
精通 1 ~ 2 门编程语言,很少停留在表面上去比较编程语言的优劣;
以编写出用户满意的高质量软件为荣。
懂得个人开发和团队开发的利弊,文档规范,齐全。
对比 2 :
A 、普通开发人员:
只重视功能的实现,不重进度和质量的把握。
怕被“管”得太死,动不动就说限制了思路,没有发挥空间。
不喜欢做测试工作,认为测试低人一等,从来没有做过测试工作。
只根据自己的爱好学习技术;
B 、软件工程师:
懂得在进度、质量(功能)和成本之间平衡。
懂得规范的目的在于重用,重用有利于提高效率和集中精力创新。
认为测试工作比编码更具挑战性,自己经常为同伴的代码做白盒测试。
根据企业项目的需求和自己发展目标的共同点选择学习内容和方向;
对比 3 :
A 、普通开发人员:
认为别人程序很差,不喜欢看别人的代码;
总认为自己比业务专家还更理解需求。
项目开始时,喜欢说 : “没问题, SO EASY ”。
项目大大延期时,喜欢说:“设计太烂,没法编程”。
B 、软件工程师:
喜欢为同事走查代码,并以此获得学习他人优点的机会;
懂得自己只是可能比业务专家更懂编程。
项目开始时,喜欢问 : “那是什么?这是为什么?”。
项目大大延期时,喜欢说:“我为什么就没想到…”