管理

1、软件工程师角色指南 - 软件项目角色指南系列文章

Posted on 2010-06-11 10:00  lzhdim  阅读(14599)  评论(6编辑  收藏  举报

 

第1章 软件工程师指南

 

把软件工程师放在第一个进行介绍,绝对没有贬低的意思。所谓排名不分先后,就是这个道理。项目成员没有身份贵贱之分,因为他们是一个团队,只有拧成一团的团队,才是成功的团队。其实,软件工程师是最伟大的项目成员,项目的成功与否离不开他的左右,项目的质量,同样离不开他的左右。虽然在项目实现的分层结构中,他在最基础的层次中。

1.1、工作职责

    项目成员的工作各有千秋,每个人负责的项目的那部分都是不可替代的,其工作职责自然也不一样,但有些是相辅相成的。但是有些项目因为人手问题,有些项目角色不得不身兼多职,既做这个也做那个的,所以其工作职责就混杂在一起。虽然界限划分不是那么详细,但是却是行之有效的方法,因为有时候项目团队中的某个角色,也会请教其他角色以解决项目中碰到的问题。

软件工程师的工作职责大致划分如下:

l  充分理解文档中提出的需求内容

l  参与系统概要设计和详细设计

l  参与概要设计和详细设计文档的编写

l  系统模块编码

l  系统单元测试模块编码

l  参与系统单元模块测试

l  参与系统模块整体测试

l  参与用户手册文档的编写

很多人认为软件工程师的职责就是编写代码,这个只是最基础的职责。软件工程师同时还参与其它的项目活动,并从中起到辅助的作用。

软件编码的基本,是从理解需求开始的。首先,必须从理解需求入手,分析需求,转化成模块设计,建立模块模型,然后从模型出发,转换为模块代码。这期间,就需要参与系统的概要设计和详细设计。这个是对需求理解的基础上才能进行的建模工作。随后,项目执行阶段开始了,这时候即开始系统模块的编码工作,同时辅助以编写单元测试代码,为后期的测试工作做准备。接着,就是模块单元测试和整体测试了,这方面需要配合测试人员进行。最后,还需要参与用户手册文档的编写,因为软件工程师对自己所涉及的那部分需求是最了解的。

当然,这是个“理解需求-设计-编码-测试”的循环,这里借用下迭代模型的术语。

                       

这个循环也体现了软件工程师日常的工作内容。从这里看,貌似比较枯燥。特别是在严格的编程规范的压力下,软件工程师的编码工作看似无趣,完全代码民工的概念,其实不然。一个系统要具有规范化的管理,规范化的开发等,就必须从小做起,所以这个代码编写的活是一个很重要的工作。其中你可以发掘编程语言的特点,优化,乐趣等等内容,特别是你在用新学习的知识高效地搞定一个模块的时候。这个个中滋味,只有软件工程师才能理解。

 

1.2、应具备的知识

软件工程师(我们习惯叫程序员,但叫软件工程师更书面化和理论化)所具备的知识,不一定具有很高的深度,但是要有一定的广度。语言之间是相通的,各语言之间学起语法来应该不难,难的是深入的做一个优质的系统或组件。我们提倡多学几门语言,特别是具有相对意义的语言,比如.Net和Java就是相对的语言,好比windows和Mac等。

之所以要学习这些相对的语言,一个是因为他们的互通性,另一个它们是相互借鉴的语言,比如.Net,实际上很多内容就是抄袭了Java的思想,比如跨平台,中间语言,反射等等。这样对比的进行学习,比单独学一门语言要来得快些,同时可以借鉴相对语言的思想,把好的思想继承下来使用,也是一个乐趣所在。

下面我们总结下软件工程师所应具备的理论和实际知识:

l  掌握数制及其转换、算术和逻辑运算、应用数学的基础知识;

l  了解计算机的组成以及各主要部件性能指标;

l  掌握操作系统、程序设计语言的基础知识;

l  熟练掌握基本数据结构和常用算法;

l  熟练掌握C程序设计语言及其它一门相关语言;

l  熟悉数据库、网络和多媒体的基础知识

l  了解软件工程的基础知识、软件过程基本知识、软件开发项目管理的常识;

l  了解常用信息技术标准、安全性以及有关法律、法规的基础知识;

l  了解信息化及计算机应用的基础知识;

l  正确阅读和理解计算机领域的简单英文资料。

    上面是泛述的软件工程师应具备的知识,其实在实际中,往往软件工程师给大家的印象就是什么都做,某件事没人做就由他来做,到处打杂的样子。所以很多时候软件工程师也蛮自豪,自己啥都会做。这个跟我们所讨论的软件工程师具备的知识没有直接关系,也不冲突,我们只是总结各角色的内容而已。 

 

1.3、日常工作

我们工作时所对应的工作不外乎两种:工作和学习。对于日常工作,就是每日基本都在做的工作。

基于每天进步一点的思想,对于软件工程师,我们总结的日常工作如下:

l  编写代码(包括新代码和修改Bug)

l  进行单元测试

l  参与系统测试

l  相关设计文档编写

l  参与用户手册文档的编写

l  查找解决问题的方法和内容(查书或者Google、Baidu)

l  学习新的技术和思想(看书或者网上的资料等)

l  小组内问题讨论或者培训学习

其实看到这里,我们把日常工作确实分为工作和学习两种。但是,估计有很多人就会抱怨了:平时工作忙得要命,哪有时间学习。这里我想说的是,学习是自己的事,要善于挤和钻,趁着中场休息的时间,看些自己感兴趣的知识内容。一来可以缓解下工作的紧张程度,二来可以学习到或者关注到自己喜欢的内容,这个是一举两得的事情。

    而且,项目经理有责任安排员工学习和整理内容的时间,这个也是我做项目管理时所需要安排的内容。

 

1.4、经验提升的方法

对于项目团队来说,成员经验提升的方法,一部分来自自学,另一部分可以由项目团队内部的项目经理组织的团队学习和讨论的会议进行。

但是,个人认为,自学是很大的一部分。通过自学,你学到的才是真正理解了的知识,才是真正充实了自己的知识,才是真正符合自己兴趣的内容。

不过,仅仅通过自学是不够的,这样只能是培养出团队的英雄,而不是一个相对平衡的团队。所以,这时候项目团队内部的交流就派上用场了。通过交流,可以将团队成员间的差距缩小,进而将团队的核心竞争力提高。

对于自学,可以通过阅读相关书籍,或者网络上的资料来进行。这部分学习的时间,可以在项目实现之余,或者自己找时间去学习了,因为工作时间相对来说是限制了学习的时间。对于交流,除了项目团队内部的交流会议之外,项目经理可以使用XP极限编程的方式来直接的使某几个人的编程风格和水平的差距进行缩小。当然了,也可以通过博客、提问等方式与网络上的友人进行交流,这样既增长了自己的见识,也使自己的朋友圈子扩大,同时也会找到志同道合的友人,且能够在实际工作中帮助自己的友人。

 

1.5、与其他角色的沟通

    程序员与团队的其他角色的沟通还是比较多的。

1)   一部分是开发经理,由他来进行工作的划分;一部分是软件设计师,由他来指导和编写代码;一部分是需求分析师,由他来确定软件功能实现是否符合用户的需求;一部分是测试人员,由他们反馈回来软件功能的测试的结果,确定是否要更改代码以修订BUG。

2)   在沟通过程中,沟通是需要技巧的。因为程序员是代码的直接编写者,代码的质量、效率、是否符合需求都由他们来实现。所以,在系统功能与用户需求的实现差异上就得看程序员是否真正理解了需求。其它的,就是与团队其它成员的协作部分了。

    总的来说,程序员在团队中与其他成员的沟通还是比较多的。但是,一般程序员做好自己的本职工作就可以了,这个已经包含了沟通的技巧。

 

1.6、应阅读的书籍

    软件工程师要阅读的书籍应该是一些基本的、浅显易懂的书籍,但是面一定要广,覆盖面一定要全一些,这样在以后的工作中如果需要到的话,再回头找回来也很快。下面罗列一些基本的书籍。

1)   语法(入门编程系列)

    对于程序员来说,语法是编程语言的根本,必须做到精通。当然,语言基本都是相通的,这个只要将面向对象等编程思想容纳到代码里,估计就没问题了。

2)   数据结构

    数据结构是一门必修的课程,因为数据结构代表了数据存储的方式以及效率问题。每门语言都有自己的数据结构方面的数据,建议做到熟悉程度,这样在实际工作中能够与大家的程度差别不大即可。

3)   高级编程系列(参考书)

    高级编程系列,可以做到熟悉即可,当做参考书来进行阅读。因为程序员本身不需要很深入的层面以及很高的架构知识。

4)   线程

    现在多线程的程序还是比较多的,尤其是Intel正在积极推广多线程程序的应用。而且,对于一个业务网站来说就是一个典型的例子。这部分可以在实际工作中进行实践。对于程序员来说。做到熟悉还是挺重要的。

5)   网络

    网络编程对于大部分的公司业务来说还是比较多的。特别是游戏编程方面,需要用到这部分的知识。对于一般的公司,估计实践的机会比较少。

6)   框架

    程序员必须对现在正在使用的框架结构做到熟悉,才能更好的发挥出架构的优越性。不过貌似框架部分的书籍还是部分语言有部分语言比较少。这个就得看架构师的水平了。

7)   设计模式

    程序员对常用的设计模式的书籍应该进行阅读,以了解架构师在现有的软件系统中所使用到的设计模式。或者应该召开会议,以讲解系统中使用到的设计模式。程序员对于设计模式只需要做到阅读即可。

8)   软件工程

    软件工程对于程序员来说是必修的课程。但是深入程度就得看个人的修行程度了。软件工程还是得看,以理解项目经理在实际过程中所应用到的内容,提高项目团队的综合水平。

 

 

1.7、应铭记的话

    软件工程师要铭记的话不多,基本都是和编程相关的内容。但是这些内容都是和实际工作相关的内容。下面仅对个人的一些经验进行总结的话。

1)   要做单元测试(中型及以上的系统);

2)   一定要按照规范来编写代码(保证团队的规范性);

3)   要时不时优化代码(提高代码质量和效率的方法);

4)   要补充其它语言的编程思想;

Copyright © 2000-2022 Lzhdim Technology Software All Rights Reserved