《程序员-设计师.ppt》由会员分享,可在线阅读,更多相关《程序员-设计师.ppt(21页珍藏版)》请在三一办公上搜索。
1、程序员成长系列之,从程序员到软件设计师,软件技术发展到今天,分工越来越细。程序员作为一 个通用称谓已经无法确切定义各种工作的性质和特点。因 为软件开发中各种职责区分不清,无论是刚刚写代码的新 手还是具有多年经验的老手,一概被扣上程序员的通用名 称,这也使得很多进入这个领域的软件开发人员无法制订 自己未来的职业发展之路。实际上,软件公司也认识到了对程序员分类的重要性 开始将各种职位定义得更加准确。对于从事软件开发的程 序员来说,更需要尽快明确自己的发展方向,并在此方向 上将专业知识积累得更深厚,这才能尽快摆脱对未来发展 方向的迷茫。,从程序员到软件设计师,程序员成长方向,程序员,软件设计师,测试
2、工程师,文档工程师,产品经理,配置管理员,项目经理,软件设计师可以构建软件结构,如同建筑架构师一般。比尔盖茨被称为微软公司的首席软件设计师,中国同样需要这样的人才。微软大中国区总经理黄存义,从程序员到软件设计师,2000年1月13日下午,世界软件业巨人、美国微软公 司突然在位于华盛顿州雷德蒙德市的总部举行新闻发布 会。比尔盖茨把微软CEO宝座拱手让给长期伙伴史蒂 夫巴尔默,只保留董事局主席一职,但同时出任新职务“首席软件设计师”。比尔盖茨说:“今后我将全力设 计开发面向未来的新软件,同时研究制定微软的总体技术 发展战略。”比尔盖茨的这一举动给软件设计师的称谓 蒙上了华丽的面纱。从程序员的技术方
3、向发展来看,软件 设计师无疑是职业生涯的顶峰。,从程序员到软件设计师,拿破仑说过“不想当元帅的士兵不是好士兵”,借用 这句话,不想当软件设计师的程序员也不是好程序员。不 过首先要了解什么是软件设计师,如何才能成为软件设计 师。明了这些,才有可能向软件设计师发展,创造更辉煌 的程序人生。,从程序员到软件设计师,软件设计师包括软件系统设计师(System Designer)和软件架构设计师(Architect)。,软件设计师的定义,软件设计师,软件系统设计师,软件架构设计师,系统设计师应对“系统结构”所使用的软件技术非常了解,自身具备良好编程技巧,才能成为优秀的系统设计师。系统设计师的职责是把结构
4、模型对应到实现模型上,从概念到实现期间规划和组合模型的优劣是决定软件系统设计师好坏的标准。软件架构设计师是程序员技术方向的最终归属,也是成长链中最神圣的一环,架构设计师的贡献最大。架构设计师彻底摆脱了语言的束缚,知道软件发展趋势。他们会开发 新一代产品或者制定新一代产品的方案。软件架构设计是面向未来的。全球大规模的软件公司并不多,很重要的一个原因是软件产品的发展都滞后于市场需求,即有需求后再研发产品,而不是预见需求,预先设计,因此往往软件设计局部是合理的,但从整体的角度看却不合理。要解决这些问题就要看的能力了。,从程序员到软件设计师,软件设计可以分三个层次。第一层属于标准层,像J2EE、.NE
5、T的框架设计;第二种属于系统层的设计,比如Delphi这样的开发工具就是工具系统级的设计;而应用最广泛的是第三层:应用软件设计。基于中国软件产业发展的现状,大部分设计都是这个层次上的基于应用的架构设计,本文非特殊标明,提到的软件设计师泛指应用软件系统设计师,当然有些也是架构设计师的能力所在。,软件设计的三个层次,从软件开发历史看,软件设计经历了很多阶段。最早是结构化设计,只是把复杂的问题逐层分解,通过流程图形式将任务标明,提到的软件设计师泛指应用软件系统设逐级细化;后来出现面向对象设计,从底层进行对象封装、继承、多态,这时更多的是考虑代码重用,面向的主要是类和对象。接下来出现组件设计,这主要是
6、面向应用方面。这三种都是面向功能的设计。从EJB、COBRA技术出现之后,人们开始基于框架进行设计,也就是架构设计。继续发展,就是基于规则的设计了,比如基于模块和工作流的设计,这时主要将客户化做的更详细以及考虑开放性、可扩展性、可靠性、效率方面的问题。,从程序员到软件设计师,软件设计师的工作 随着大型软件开发越来越多,整体把握软件架构变的 越来越重要。尤其当用户需求并不明确的情况下,就要开 始做软件,如何防止交付的软件产品与用户的要求距离很 远,这就需要软件系统设计师进行恰当的设计。在应用软件开发中,软件设计师担当承上启下的角色 也就是把用户的需求,基于应用的问题变成计算机系统中 可以解决的问
7、题。设计可以分为功能上的设计和技术体系 上的设计,但在实际工作中,这两者很难区分清晰。,从程序员到软件设计师,软件设计师的周围有很多角色,应用专家对应用需求 分析了解的更深。还有技术平台的专家,尽管设计师对技 术平台有一定的了解,但对于细节的内容还要请教技术平 台专家。程序员做出原型并进行验证也是必不可少的,这 样才能通过反馈和评估不断完善。,从程序员到软件设计师,做为应用软件开发中最顶层的角色,软件设计师需要各方面的能力更强,除了具备更强的编程技巧能力外,还需要了解系统结构、主流软件技术和软件趋势,同时要具备相当的专业知识。多年编程经验抽象能力面向对象的思想舍得抛弃领悟和突破非软件知识,软件
8、设计师的要求,多年编程经验:既包括在专业领域的经验,也包括在软件工程 领域的经验。对于一个构架团队,这些素质要求可 由各团队成员分别承担,但其中至少要有一名构架 设计师能够把握项目的全局。和任何行业一样,经 验是最重要的。软件设计不是纸上谈兵,一个软件 设计师首先要是非常好的程序员。软件设计师在编 程的时候,用的工具和普通程序员没有任何差别,但使用深度是绝对不一样的。,从程序员到软件设计师,抽象能力:一个程序员刚写程序的时候,无非就是为了 解决某个功能而进行代码编写。随着程序编写越 来越多,他对自己所做的应用方面的理解也越来 越多。不同的企业有不同的需求,但把这些企业 放在一起来看,就会发现他
9、们的一些共性。将这 些共性提炼出来,这就是抽象的过程。抽象出来 的共性形成的模型可以把这些企业的需求都包含 进去,这是做通用软件必须要走的一步。,从程序员到软件设计师,面向对象的思想:面向对象是软件开发出现以来最伟大的创新 之一,这是每个程序员都追求的,但是否真正掌 握了面向对象的思想,这是需要探讨的,面向对 象并不受开发工具和语言的限制。很多程序员在 用C+写面向对象代码时,实际上还是在写C代码。甚至使用C这种完全面向对象的语言写出来的还 是流程化的程序。面向对象可以应用的领域非常 广泛。不仅在写代码的过程中要考虑到面向对象,在设计和分析阶段也要用到面向对象的方法。,从程序员到软件设计师,舍
10、得抛弃:软件设计是一个渐进过程,是通过不断碰壁,不断调整提高的。要想取得突破,就需要舍得抛弃。很多人舍不得扔掉自己的代码,往往是不断的修改,最后进入一个恶性的循环。当然,这种抛弃 也是有继承的抛弃,不同时期产品的架构之间也有 连续性,不是一个架构就会完全取代前面的架构,好的东西还是可以继承的,像微软的.NET架构就是 从DNA架构上发展来的。,从程序员到软件设计师,领悟和突破:程序员技术的成长可以通过学习技巧而成长,也可以通过思想领悟而得到成长,后者更为重要。如果不能领悟开发的思想,仅仅掌握了技巧,一旦 改换了平台和语言,又要从头学起,所以很多人在 转型过程中失败了。而掌握了编程的思想,自动就
11、 移过去了。即便是很小的软件,也可以锻炼突破性的编程 思维。一种基本的设计原则和思路就是程序设计千 万不要回溯,否则就会崩溃,这是多少人脑袋碰墙 多少次之后才明白的。,从程序员到软件设计师,非软件知识:提起软件设计师,人们很喜欢拿建筑师做比较,的确这两个行业有很多相似之处。古罗马建筑师维特鲁威说“理想的建筑师应该既是文学家又是数学家,他还应通晓历史,热衷于哲学研究,精通音乐,懂得医药知识,具有法学造诣,深谙天文学及天文计算。”软件设计同样如此。,从程序员到软件设计师,向软件设计师发展 当然,并不是每一个程序员都适合向软件设计 师角色发展的。除了自身的努力之外,还同所处的 环境有很大的关系,如果只是几个人的小公司,对 软件设计的要求不明确,自然也就无法得到锻炼。只有早期接触到比较大的软件开发环境才能从中学 到很多东西。,从程序员到软件设计师,不过,即便你是一个普通的程序员,没有机会参与大 型的软件开发项目,也可以在开发中向软件设计师的思维 靠近,提升自己对软件开发的认识。例如:一个播放软件,不同的用户对界面有不同的需 求。如何满足这些需求也是需要设计的,还有播放软件对 不同格式文件的支持也是需要考虑的,尤其是为未来的格 式预留接口,这些问题是需要在设计层次上考虑。不管软 件大小,都可以应用设计模式。,从程序员到软件设计师,