上篇说到了软件设计师,有许多朋友认为是指拿到各种证书和具有这方面职称的人,这是一个误解。我说的软件设计师,是相对于程序员而言的,是其职能使然。你可以理解成一个虚拟的软件设计师。无论这个人有什么强大的证书,有什么明确的职称,有什么明确的岗位,只要不从事软件设计师本质的工作,都不在我话题谈及的范畴。
软件设计师与程序员之间有着千丝万缕的关系,尤其是我们称之为开发人员的时候,这两种角色就被模糊起来了。现实中单纯的程序员很多,但是单纯的软件设计师很少,很多软件设计师也干着编程的工作。就两者关系来说我有以下几点的看法。
1、 软件设计师是程序员的高级阶段。
我不知道软件设师是不是不要经历程序员经历就可以了,是不是考上什么软件设计师证书就可以从事软件设计师的职能了。在我看来,软件设计师是程序员的高级阶段,是程序员一步一步向前走的必然结果,跨过程序员这个阶段直接成为软件设计师理论上可能成立,但是实践中,能成为优秀的软件设计师几率就不很大。因为,任何成就的高低和其基础厚薄是成正比的。
如果这个观点成立,程序员就应该努力积累编程经验,努力地向软件设计师学习,努力地成为软件设计师。
如果这个观点成立,那种想单凭一纸证书就以为能成为软件设计师的就会成为一种笑谈。(我声明,我对证书持中立的态度,既不反对,也不迷信)
如果这个观点成立,那些自认为是软件设计师的人就要好好考虑一下,自己是不是一个好的程序员。如果不是,那软件设计师就会大打折扣了。
我要特别说明的是,程序员和软件设计师只是职能上的不同,并没有高低贵贱之分,程序员可以做得很强大很强大,软件设计师也可以做得很了不起很了不起的。
2、 软件设计师具有其特有职业特性
软件设计师和程序员一样都具有各自的职业特点,从这个意义上来说没有什么高低贵贱之分。
程序员面对的是计算机、程序、以及软件设计方案(详细设计方案)
设计师面对的是需求、需求分析、软件设计方案(方案中应该包括需求的技术实现)。
可以说软件设计师是上游,程序员是下游。注意!我这里说的软件设计师比较广义,其中包括了需求分析师、软件构架师、软件功能设计师、数据库设计师、界面设计师等。
软件设计师具有以下职业特点:
1) 和人打交道
我认为软件设计师相比于程序员要更多的和人打交道,而且是和不同行业的人打交道。很多软件或项目都是来自于用户的需求,要弄清必须要和用户进行沟通,这样才能对需求进行深入的理解。
2)脑力劳动
程序员一般动手能力比较强,动手意识比较强,而软件设计师更注重于脑力劳动,他们把各种需求放在脑子里,进行分析、分类,在脑子里进行功能设计、在脑子里完成技术实现。可以说基本上是一种脑力劳动,当然,最终还是需要通过方案文件形式记录下来的。和程序员相比,软件设计师基本上脱离了程序设计语言级的约束了。
3) 经验积累
软件设计师很多工作例如,需求分析,功能设计基本上是靠经验的积累,没有经验积累做设计工作是非常非常艰难的。好的软件设计师会主动学习业务,主动积累项目设计经验,为今后可能的项目打下良好基础。在现实中,那些开发项目多的人,那些具有开发经验的人往往受到用人单位的青睐,这也是用人单位利用经验积累的一个结果。
那些经常做过项目的软件设计师和很少做过项目的软件设计师差别就非常大。
4) 技术水平
软件设计师一个非常具有技术含量的工作,他比程序员要有更多的技术上的选择,比如,软件构架、功能实现、算法设计、模型建立、数据库设计、参数化、新技术运用等等各方面都是很技术很水平的工作,可以说十个软件设计师面对同一个项目有十个设计方案。其中,有的方面可能相同,有的方面则根本不同。这样,软件设计师的水平的差异要比程序员水平的差异要大了许多。
5) 设计方案
无论如何软件设计师的工作都会反映在设计文档之中,这些文档是指导项目开发的纲领性文件。因此,编写各种文档,例如,需求书(有时候用户需要你写)、需求分析报表、项目可行性报告、项目设计总体方案、项目可行性报告、项目详细设计书等等,可能因软件公司和企事业单位的不同而有所不同,但是,写文档则是软件设计师其中的职业特点。
3、 程序员变成软件设计师要做好角色的转换
现实中我们遇到的问题是,程序员一方面渴望成为软件设计师,但是一旦有机会成为软件设计师后,往往还是延续程序员思维惯性,把工作重点放在程序的编制上,还是把自己当作程序员使唤,这样使得软件设计师的职能和作用大大降低了。
我遇到过不少程序员,开始的时候仅仅是项目的参与者,每天就是按照设计方案编制软件,一干就是许多年。后来随着自己的水平提高,在公司的地位也提高了,被公司提拔到项目经理的岗位,承担软件设计师的工作。但是,开始很长时间,依旧保持程序员的独立工作的作风,别人干不放心,干什么都是自己行。白白浪费了项目经理和软件设计师的称号。 后来慢慢地,转移了工作重心,把工作放在需求和需求分析上,放在软件设计上,放在项目的重点难点上,把工作放在项目管理上,很多工作可以放手交给下面的同事去做。项目开展得就顺利地许多,个人能力也得到了提高。但是这个过程很漫长很痛苦。我在旁边看了真的很着急。
现实中也存在另外一个情况,一些程序员变成了软件设计师之后,感觉到编程太累,主观上就放弃了编程,一心做些软件设计和项目管理工作。当时,有一个软件公司项目经理他把这个想法告诉我之后,我曾劝他无论如何,只要不离开IT这个行业,都不要完全放弃编程工作,否则,项目经理和软件设计师都是很难当好的。结果,由于技术发展很快,脱离了技术去当软件设计师,很快就会力不从心了。
有的人为软件设计师后,还在编程;有的成为软件设计师后,则放弃了编程工作。软件设计师一方面要与程序员拥抱之密,不可不知程序员所能,不要放弃程序员之能;另一方面也要摆脱程序员的之纠缠,不能被程序员细节所困,不能深陷编程不能自拔。要明晰自己的角色,学会在不同角色中承担不同的职能。优秀的软件设计师在设计时候是设计师的角色,在编程时候是程序员的角色,这些角色转换在瞬间就完成了。知道和了解软件设计师的职业特点,有助于程序员平时多注意观察和学习身边软件设计师的方方面面,逐步把自己推向软件设计师的层次。
下篇:《需求是软件设计师永远的痛》