Bob大叔忠告:专业软件开发者必须精通的事项

开发 项目管理 后端
路漫漫其修远兮,吾将上下而求索,学习技术之路很漫长。做一个专业的程序员不容易,需要多加努力,使自己成为一个专业的程序员,成为一个具备职业素养的程序员。

enter image description here

Bob 大叔(Robert C. Martin是Object Mentor公司总裁)认为作为一个专业软件开发必须精通以下几点:

  1. 设计模式。必须能描述GOF书中全部24种模式,同时还要有POSA书中的多数模式的实战经验。
  2. 设计原则。必须了解SOLID原则 ,而且要深刻理解组件设计原则。
  3. 方法。必须理解XP、Scrum、精益、看板、瀑布、结构化分析及结构化设计等。
  4. 实践。必须掌握测试驱动开发、面向对象设计、结构化编程、持续集成和结对编程。
  5. 工件。必须了解如何使用UML图、DFD图、结构图、Petri网络图、状态迁移图表、流程图和决策图。

自我总结,在Bob 大叔说的这几点中,我能做到几点呢?认真思考一下,发现大概有这么几点能做到:

  1. 设计模式,这些年来国内很多关于设计模式的书,读大学时代看《大话设计模式》,只是把大鸟和小菜的对话当做故事书来看,很多设计模式的知识只是看了就忘记。后来工作后买了本《Java与模式》来看,发现其中设计模式的思想挺好的。作者通过讲些中国传统故事来形容和讲述设计模式,通过这本书学习到了不少设计模式的思想,但总是会忘。后面随着编程经验的增长,了解到设计模式其实就是OO思想和设计原则的产物,设计模式不是去学的,应该是感悟的,是我们程序员通过工作经验去感悟的。感悟设计模式才能掌握设计模式的精髓,才能学会怎么去开发高可扩展性程序。设计模式是一种怎么开发高扩展高可维护性程序的思想和实践。说来惭愧设计模式现在24种大多数都了解其思想,但是现实编程使用的不多。如果要学习重构编程法,设计模式必不可少,福勒的《重构》很多手法就是往设计模式方面靠拢。
  2. 设计原则SOLID,以下这些是我这几年个人的感悟:
    • SRP The Single Responsibility Principle 单一责任原则 :当需要修改某个类的时候原因有且只有一个,让一个类只有一个职责,当这个类需要承当其他类型的责任的时候,就需要分解这个类。这也是bob大叔在《代码 整洁之道》关于类这一章说的,让类小尽可能的小,承担的职责单一,这样才能保持代码的整洁性,不会让这个类经常由于其他职责的原因而需要修改,这也是达到 关闭修改的方式和手段。

    • OCP The Open Closed Principle 开放封闭原则 :对扩展是开放的,而对修改是封闭的。这个原则是诸多面向对象编程原则中最抽象、最难理解的一个。其实这个原则我感觉是OO思想最核心的思想,怎么样提高 程序的扩展性而又不用去修改以前的代码,这是我们变成中需要注意的问题,当然很多设计模式就可以达到这种效果,工厂、策略模式等都是为了这些而工作的。

    • LSP The Liskov Substitution Principle 里氏替换原则:所有的子类都可以替换其基类,这个原则其实是对编程语言的要求,只有实现这个原则,我们才能使用多态去创造灵活的程序。

    • DIP The Dependency Inversion Principle 依赖倒置原则 :高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。其实这些都是为了对扩展开放这个原则服务 的,Spring的IOC,策略模式这类东西都通过接口去声明其实现类,达到修改和替换子类不影响现有代码的实现。一切都依赖于接口,程序直接的耦合在于 其抽象而不在于其具体实现,bridge模式和抽象工厂就是其经典实现。

    • ISP The Interface Segregation Principle 接口分离原则 :不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口总要好。 这个原则想表达的思想和单一责任原则有点像,一个接口的方法多了,所有的子类都需要去实现它们,当有一天某几个子类需要增加一个方法时候,考虑把它放到接口里面,但是又影响了其他子类,使得其他子类需要实现这个方法,所以接口要尽可能的小。

  3. 方法:XP、Scrum、精益、看板、瀑布、结构化分析及结构化设计,这些只是对瀑布、Scrum、迭代开发实践过,极限编程(XP)、精益、结构化分析及结构化设计都是了解一些皮毛,这些方面都得努力去学习和实践。
  4. 实践:测试驱动开发、面向对象设计、结构化编程、持续集成和结对编程,对面向对象设计有所涉及但不深入只能说刚入门,测试驱动开发了解这种思想,只会写简单的单元测试,没有在项目中经历过测试覆盖开发的工作,其他结构化编程、持续集成和结对编程都是了解一点没有深入理解和实践过。
  5. 使用过UML和流程图,其他几个图都没有用过和了解过。UML图在工作中只有半年多的设计工作中使用过,需要深入理解。

路漫漫其修远兮,吾将上下而求索,学习技术之路很漫长。做一个专业的程序员不容易,需要多加努力,使自己成为一个专业的程序员,成为一个具备职业素养的程序员。


原文链接:http://a5728238.iteye.com/blog/1890259

 

 

责任编辑:陈四芳 来源: ITeye博客
相关推荐

2013-05-15 10:02:08

软件开发开发者

2009-02-13 10:00:41

面试软件开发程序员

2010-11-08 09:36:23

移动软件开发者

2017-02-28 15:08:08

架构微服务数据库

2021-03-03 15:47:51

HarmonyOS应用开发物联网

2022-09-07 11:56:53

汽车软件

2020-03-20 11:43:20

开发编程语言技术

2023-10-16 08:00:00

2021-03-08 15:00:14

鸿蒙HarmonyOS应用

2014-12-22 09:37:50

软件开发

2012-12-17 10:00:09

2016-05-26 10:57:51

2022-09-06 09:47:13

CodeRAT恶意软件网络犯罪

2010-12-03 11:17:12

2021-02-14 18:44:58

GPL协议代码

2014-01-06 03:08:29

2009-12-01 11:25:03

iPhone地图软件

2024-04-11 13:30:06

AI开发框架

2018-08-23 09:36:10

软件开发编程

2010-08-12 14:13:01

Flex开发者
点赞
收藏

51CTO技术栈公众号