第2章 软件设计师指南
相比软件工程师这个角色,软件设计师可以说是高了一个级别。按照以前的说法,软件设计师就是高级程序员这个角色,只不过后来软考里将它改了个好听的名字(软考里软件工程师就是程序员角色,软件设计师就是高级程序员角色)。
2.1、工作职责
软件设计师的工作,其实就是比软件工程师高了一个层次。在软件开发领域里,它所做的工作,只是比软件工程师更高级些而已。在软件开发工作中,软件设计师将负责复杂的、核心的代码编码工作。软件设计师的工作职责与软件工程师差不太多,但是与架构师又差一个级别,与技术经理也是差一个级别。
软件设计师的工作职责大致如下;
l 充分理解文档中提出的需求内容
l 参与系统概要设计和详细设计
l 参与概要设计和详细设计文档的编写
l 系统重点模块编码
l 系统单元测试模块编码
l 参与系统单元模块测试
l 参与系统模块整体测试
l 参与用户手册文档的编写
这里,我把软件设计师的工作职责与软件工程师对比了一下,大家能看出差别不大了。仅仅区别在于编码模块的重点和难点方面。但是,软件设计师不仅仅要做编码工作,更要与文档打交道。这里可看出软件工程师和软件设计师都需要与设计文档打交道,因为他们是系统的直接编码员,需要把设计实现。
有些项目,有些软件设计师是先进行设计,然后再进行编码,但是有些软件设计师是先进行编码,然后再做设计。这里估计有些公司会根据项目的大小,复杂程度来进行定义。小项目可以先编码再进行设计文档的编写。但是对于大项目,特别是团队合作紧密的项目,就需要先做设计再进行编码了。这样做的好处是有依据可寻。但是,如果项目有变更,那么需要先更改设计再编码的话,就需要付出很大的努力了。
2.2、应具备的知识
软件设计师应该具有比软件工程师更深入的知识面,而不仅仅是代码编写上的广度。在实际的工作中,软件设计师基本上要负责复杂的代码段的编写,所以还是要比软件工程师具备的知识要多和精炼。基本上,除了基本的语法,软件设计师要熟悉设计模式等等相对高级些的代码框架等。
下面我们总结下软件工程师所应具备的理论和实际知识:
l 掌握计算机内的数据表示、算术和逻辑运算方法;
l 掌握相关的应用数学及离散数学基础知识;
l 掌握计算机体系结构以及各主要部件的性能和基本工作原理;
l 掌握操作系统、程序设计语言的基础知识,了解编译程序的基本知识;
l 熟练掌握常用数据结构和常用算法;
l 熟悉数据库、网络和多媒体的基础知识
l 掌握C程序设计语言,以及C++、Java中的一种程序设计语言;
l 熟悉软件工程、软件过程改进和软件开发项目管理的基础知识;
l 掌握软件设计的方法和技术;
l 了解信息化、常用信息技术标准、安全性,以及有关法律、法规的基础知识。
l 正确阅读和理解计算机领域的英文资料。
上面是对软件设计师具备的知识的一个大纲总结,这里说得相对比较广泛些,而且基本上是理论上的知识,更多的需要在实际工作中去进行实践。
2.3、日常工作
软件设计师的日常工作与软件工程师相差不多。不过软件设计师要面对的是相对更难点的项目设计与编码工作,其它的这里分类就不非常明确了。
基于每天进步一点的思想,对于软件设计师,我们总结的日常工作如下:
l 编写代码(包括新代码和修改Bug)
l 进行单元测试
l 参与系统测试
l 相关设计文档编写
l 参与用户手册文档的编写
l 查找解决问题的方法和内容(查书或者Google、Baidu)
l 学习新的技术和思想(看书或者网上的资料等)
l 小组内问题讨论或者培训学习
这里软件设计师的日常工作与软件工程师的工作没有区分那么仔细。日常过程中所涉及的工作内容我这里也不区分那么多了,毕竟下面有程序员,上面有技术经理和架构师。这里除了编写代码外,还有文档编写工作,这个只是参与,建议由专门的文档人员来编写吧。还有就是新技术的学习与交流了,这个通过开会来进行比较合适。
2.4、经验提升的方法
学习有很多种途径,比如看书,看资讯,看资料,看PPT,或者参加培训等等。学习能够获取知识,从学习中获取的叫做知识,但是从学习中领悟到的另一层意思那就叫做智慧了。
软件设计师应该多读多看资料,以补充工作获取的经验之外的知识以及领悟智慧,或者参加工作之外的和网络学院之外的培训等等。个人认为项目组内应该多举行一些培训活动以让项目组成员提高自身的素质和经验。这里推荐大家看看《程序员》杂志或者去51cto等网站以及博客园等论坛。
个人觉得软件设计师除了多看书积累经验外,也需要写些博客啥的沉淀经验,便于以后进行积累等等。对于项目组内的培训,建议由项目经理发起,由技术经理进行培训即可。所以技术经理的担子还是有些的了。至于资料,去CSDN网站的下载频道去搜搜看,会有所收获的呢。我也将一些书籍发在上面了,有空大家可以去看看。
2.5、与其他角色的沟通
程序软件设计师与团队的其他角色的沟通还是比较多的。
1)一部分是开发经理,由他来进行工作的划分;一部分是软件工程师,指导他和编写相关代码;一部分是需求分析师,由他来确定软件功能实现是否符合用户的需求;一部分是测试人员,由他们反馈回来软件功能的测试的结果,确定是否要更改代码以修订BUG。
2)在沟通过程中,沟通是需要技巧的。软件设计师是代码的直接编写者,代码的质量、效率、是否符合需求都由他们来实现。所以,在系统功能与用户需求的实现差异上就得看软件设计师是否真正理解了需求。其它的,就是与团队其它成员的协作部分了。
软件设计师与团队之间的沟通还是挺多的了,除了编写代码之外,还需要与需求打交道,以确定是否符合需求。具体软件设计师在团队中的作用在前面已经介绍过了。
2.6、应阅读的书籍
因为软件设计师与软件工程师之间差别不太大,这里借用了软件工程师的内容。
1) 语法(入门编程系列)
对于程序员来说,语法是编程语言的根本,必须做到精通。当然,语言基本都是相通的,这个只要将面向对象等编程思想容纳到代码里,估计就没问题了。
2) 数据结构
数据结构是一门必修的课程,因为数据结构代表了数据存储的方式以及效率问题。每门语言都有自己的数据结构方面的数据,建议做到熟悉程度,这样在实际工作中能够与大家的程度差别不大即可。
3) 高级编程系列(参考书)
高级编程系列,可以做到熟悉即可,当做参考书来进行阅读。因为程序员本身不需要很深入的层面以及很高的架构知识。
4) 线程
现在多线程的程序还是比较多的,尤其是Intel正在积极推广多线程程序的应用。而且,对于一个业务网站来说就是一个典型的例子。这部分可以在实际工作中进行实践。对于程序员来说。做到熟悉还是挺重要的。
5) 网络
网络编程对于大部分的公司业务来说还是比较多的。特别是游戏编程方面,需要用到这部分的知识。对于一般的公司,估计实践的机会比较少。
6) 框架
程序员必须对现在正在使用的框架结构做到熟悉,才能更好的发挥出架构的优越性。不过貌似框架部分的书籍还是部分语言有部分语言比较少。这个就得看架构师的水平了。
7) 设计模式
程序员对常用的设计模式的书籍应该进行阅读,以了解架构师在现有的软件系统中所使用到的设计模式。或者应该召开会议,以讲解系统中使用到的设计模式。程序员对于设计模式只需要做到阅读即可。
8) 软件工程
软件工程对于程序员来说是必修的课程。但是深入程度就得看个人的修行程度了。软件工程还是得看,以理解项目经理在实际过程中所应用到的内容,提高项目团队的综合水平。
2.7、应铭记的话
因为软件设计师与软件工程师之间差别不太大,这里借用了软件工程师的内容。
1) 要做单元测试(中型及以上的系统);
2) 一定要按照规范来编写代码(保证团队的规范性);
3) 要时不时优化代码(提高代码质量和效率的方法);
4) 要补充其它语言的编程思想;
![]() |
Austin Liu 刘恒辉
Project Manager and Software Designer E-Mail:lzhdim@163.com Blog:https://lzhdim.cnblogs.com 欢迎收藏和转载此博客中的博文,但是请注明出处,给笔者一个与大家交流的空间。谢谢大家。 |