软件工程师分级_理解


软件工程师的工作能力主要体现在三个方面:思想、态度、管理和专业技术。 思想确定态度“态度决定一切”,你常常会听到这种说法,事实也确实如此。充满热情、积极主动、认真、责任感,等等,这些确实有助于提高工作效率和质量,尽管你的专业技能可能差一些。这里探讨的是知识和技能,并据此对软件工程师进行分级,因此,工作态度不在本文的讨论范围之内。

本文按照完成任务的难度和质量对软件工程师分类,并阐述相应的类别所需要的技能。

一、软件工程师分级

1、初级软件工程师

可以在高级工程师的指导下完成模块编程。

面对一个编程问题,他们对实现方法了解不多,通常只要实现了就行,不会过多考虑更好的实现。因此,无法保证产品质量。

2、中级软件工程师

可以独立完成模块编程。

面对一个编程问题,他们对不同的实现方法有了解,通常也会选择更好的实现,但是,由于对原理了解不深刻,他们采用的实现方法常常无法保证产品质量。

3、高级软件工程师
《Pragmatic Programmer》 
有能力开发商用产品,可以指导低级别的工程师开发模块规模的软件。有一种特殊情况,有一些工程师的专业技术能力比较弱但管理能力很强,他们可以主动组织协调其他工程师完成商用级产品的开发。这些人也具有高级软件工程师的能力。


4、资深软件工程师 (架构师/产品规划师/项目经理)

《人人都是产品经理》《产品经理手册》 《人月神话》 
有能力设计大型软件系统的架构,具有产品设计(规划)能力,具有管理10人以上团队的能力。

5、CTO(Chief Technology Officer ):没有这方面经验

   可以参考《将才》《我也能做CTO之程序员职业规划》

   职业规划战略管理
   CTO之能力沉淀模型
   CTO之技术战略规划
   CTO之企业文化规划
   CTO之领导艺术能力
   CTO之笑傲江湖逍遥游

二、高级软件工程师的技能


管理:(识人、知人、)

1、可以参与招聘面试。
2、可以独立负责研发项目,具有一定的项目管理能力。

技术:
1、发现问题、分析问题、解决问题的能力 (why what how (who where when)) 5W2H检验归纳总结 (各行各业都需要通用能力)

能够查找到问题相关的主流解决方法(方法不是唯一的),了解这些方法的工作原理并分析其优缺点。这里涉及到几个方面的能力:
-发现问题(定义问题) 根据问题现象发现问题本质,《你的灯亮了吗?》Donald C.Gause;Gerald M.Weinberg;
           能够将问题(问题现象 及 问题本质)表达清楚(说清楚、写清楚)也算是一个点,
           因为能够把问题表达清楚,才能够很好的利用周边资源(网络、书籍、人)解决问题
-查找资料(快速查找并研究理解中英方式资料)google/图书馆/请教导师、老师、同事、朋友...... 这个需要加强:提高查找资料的能力和经验,提高阅读(中、英尤其是英文)理解能力
-理解和分析解决方法 《如何解题》波利亚  :做实验,验证可行性?
-实际执行能力及检验总结,举一反三,触类旁通。

2、编程(计算机系统结构、数据结构和算法、程序设计语言、软件工程、计算机网络、数据库 参考《ACM通讯》Computing as a Discipline)

编写的程序不仅结构合理,而且运行效率和稳定性都达到产品级,具体要求是:

-能够设计合理的程序结构,熟练掌握设计模式 《架构模式》《设计模式》《数据结构和算法》《重构》 ......
-能够分析算法空间和时间等复杂度并使用工具实际测量程序的资源占用情况,并据此进行优化  《数据结构和算法》Jprofiler...

3、操作系统(或java虚拟机)(数据结构和算法、计算机系统结构、操作系统、计算机网络、数据库、编译原理、软件工程、程序设计语言 参考《ACM通讯》Computing as a Discipline)

操作系统是程序运行的基本环境。要了解程序的运行状态,必须首先了解操作系统。

-熟悉内存、线程等资源管理原理,并可以观察资源使用状态 如:Window任务管理器,linux top等《操作系统概念》Linux Window.....
-熟悉类或模块加载原理,并可以观察 如:JProfiler工具查看  (java虚拟机)
-熟悉虚拟机内存管理机制,并可以观察,并与C,C++进行比较(内存创建,内存释放GC,内存管理等)

4、文档 (读写沟通能力 语言领域) 

良好的语文,思路清晰的表达、能够中英文表达
可以编写有质量的文档,具有可用的书面沟通能力。  《商务管理与沟通》《金字塔原理》......


三、高级软件工程师的技能的进一步阐述

作为高级软件工程师,你的第一重要的能力是编写商用级的软件。也许你的技术能力还不能满足商用软件开发的要求,但如果你能够主动协调其他人完成产品的开发,你的能力仍然配的上高级软件工程师的称谓。初级和中级软件工程师不具有上述能力,因此,他们只能从事小模块的编写。小模块的质量问题必须限制在小范围内,不应该影响整个软件系统的质量。

你已经有了多年的经验,对别人和对自己都观察了多年,因此,你看人会比较准确,沟通技能会比较熟练。识人是管理技能中最重要的。如果你这方面的能力有欠缺,你可以靠自己过硬的技术能力解决问题,不过,你要想更上一层楼就困难了,软件开发毕竟是团队活动。最佳实践所达到的境界是这样的:上下左右的人都知道你在干什么,你也知道别人在干什么。

你做事情也比较有经验了,掌握了一定的项目管理方面的技能,包括计划制定、监督、通报等。《管理学》

你对自己编写的程序非常了解,并知道如何测量它占用资源的情况。

你也许创新能力有限,但应该有能力找到已有的答案,从而解决曾经被别人解决过的问题。

四、中级工程师技能的进一步阐述

与高级工程师比较,除了在管理技能和商用产品开发能力两个方面不作要求之外,其它技能要求没有差别。

猜你喜欢

转载自afeigoo.iteye.com/blog/1390369