从程序员到软件设计师

软件产业发展到今天,分工越来越细。程序员做为一个通用的称谓已经无法确切定义各种工作的特点和分类。正因为软件开发中各种职责区分不清,无论是刚刚写代码的新手还是具有多年经验的老手,一概被扣上程序员的通用名称,这也使得很多进入这个领域的软件开发人员无法制定自己未来的技术职业发展之路。

实际上,软件公司也逐渐认识到了对程序员分类的重要性,开始将各种职位定义的更加准确。对于从事软件开发的程序员来说,更需要尽快明确自己的发展方向,并在此方向上将专业知识积累的更深厚,这能让你尽快逃脱对未来发展方向的迷茫。为此,我们专门推出程序员成长系列的特别策划,将分别深入探讨软件设计师、测试工程师、文档工程师、项目经理、产品经理几种角色的成长之路。

程序员成长系列之一

软件设计师可以预先构建软件结构,如同建筑架构师一般。比尔·盖茨被称为微软公司的首席软件设计师,首先是因为他是一个优秀的架构设计师,中国同样需要这样的人才。
-微软大中国区总经理黄存义

从程序员到软件设计师

2000年1月13日下午,世界软件业巨人、美国微软公司突然在位于华盛顿州雷德蒙德市的总部举行新闻发布会。比尔·盖茨把微软CEO宝座拱手让给长期伙伴史蒂夫-巴尔默,只保留董事局主席一职,但同时出任新职务“首席软件设计师”。比尔·盖茨说:“今后我将全力设计开发面向未来的新软件,同时研究制定微软的总体技术发展战略。” 比尔·盖茨的这一举动将软件设计师的称谓蒙上了高贵的面纱。从程序员的技术方向发展来看,软件设计师无疑是职业生涯的顶峰。

拿破仑说过“不想当元帅的士兵不是好士兵”,我想不想当软件设计师的程序员也不是好程序员。但首先要了解什么是软件设计师,如何才能成为软件设计师。明了这些,就有可能向软件设计师发展,创造更辉煌的程序人生。基于这些想法,我们采访了佳软CTO廖恒毅,用友软件副总工程师彭六三和U8产品总设计师邓适宜,这些中国软件产业技术带头人从他们的切身体会谈了对软件设计师的看法。

软件设计师的定义

软件设计师包括软件系统设计师(System Designer)和软件架构设计师(Architect)。系统设计师应对“系统结构”所使用的软件技术非常了解,自身具备良好编程技巧,才能成为优秀的系统设计师。系统设计师的职责是把结构模型对应到实现模型上,从概念到实现期间规划和组合模型的优劣是决定软件系统设计师好坏的标准。

而软件架构设计师是程序员技术方向的最终归属,也是成长链中最神圣的一环,架构设计师的贡献最大。架构设计师彻底摆脱了语言的束缚,知道软件发展趋势。他们会开发新一代产品或者制定新一代产品的方案。软件架构设计是面向未来的。全球大规模的软件公司并不多,很重要的一个原因是因为软件产品的发展都滞后于市场需求,即有需求后再研发产品,而不是预见需求,预先设计,因此往往软件设计局部是合理的,但从整体的角度看却不合理。要解决这些问题就要看软件架构设计师的能力了。

软件设计可以分三个层次。第一层属于标准层,像J2EE、.Net的框架设计;第二种属于系统层的设计,比如Delphi这样的开发工具就是工具系统级的设计;而应用最广泛的是第三层:应用软件设计。基于中国软件产业发展的现状,大部分设计都是这个层次上的基于应用的架构设计,本文所非特殊标明,提到的软件设计师泛指应用软件系统设计师,当然有些也是架构设计师的能力所在。

从软件开发历史看,软件设计经历了很多阶段。最早是结构化设计,只是把复杂的问题逐层分解,通过流程图形式将任务逐级细化;后来出现面向对象设计,从底层进行对象封装、继承、多态,这时更多的是考虑代码重用,面向的主要是类和对象。接下来出现组件设计,这主要是面向应用方面。这三种都是面向功能的设计。

从EJB、COBRA技术出现之后,人们开始基于框架进行设计,也就是架构设计。继续发展,就是基于规则的设计了,比如基于模块和工作流的设计,这时主要考虑客户化做的更详细以及产品的开放性、可扩展性、可靠性、效率方面的问题。

软件设计师的工作

随着大型软件开发越来越多,整体把握软件架构变的越来越重要。尤其当用户需求并不明确的情况下,就要开始做软件,如何防止交付的软件产品和用户的要求差的很远,这就需要软件系统设计师进行恰当的设计。

你可能感兴趣的:(程序人生)