`
- 浏览:
4121 次
- 性别:
- 来自:
北京
-
这两天读bob大叔的《程序员的职业素养》,感觉作为一个专业的软件开发人员不容易,身上顿时感觉压力山大。
bob大叔认为作为一个专业软件开发必须精通以下几点
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图在工作中只有半年多的设计工作中使用过,需要深入理解。
路漫漫其修远兮,吾将上下而求索,学习技术之路很漫长。做一个专业的程序员不容易,需要多加努力,使自己成为一个专业的程序员,成为一个具备职业素养的程序员。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
《嵌入式Linux软件开发从入门到精通》是由吕雪峰编著的一本关于嵌入式系统开发的专业书籍。这本书旨在帮助初学者和有经验的开发者深入理解嵌入式Linux平台上的软件开发技术。以下是对书中的关键知识点的详细阐述: ...
30本全部奉献(12):Linux嵌入式软件开发教程pdf完整版
《软件工程师精通》是一本深度探讨软件开发领域的电子书,旨在帮助读者提升在软件工程方面的专业技能和理解。书中的内容不仅涵盖了基础的编程技术,还深入到软件开发的各个环节,包括需求分析、设计、编码、测试以及...
讲解过程中步骤详尽、版式新颖,并在操作的内容图片上进行了标注,让读者在阅读时一目了然,从而快速掌握书中内容,能够适合作为软件开发入门者的自学用书,也适合作为高等院校相关专业的教学参考书。
这个压缩包很可能是包含了一系列的教程、实战案例和练习题,通过系统学习,你可以逐步提升在数据库领域的专业技能,为软件开发打下坚实的基础。记得理论结合实践,多做实验,这样才能更好地理解和掌握数据库技术。
在软件开发领域,一个完善的开发流程对于项目的成功至关重要。本课件“软件开发流程详细课件”深入浅出地讲解了这一主题,旨在帮助初学者和专业人士更好地理解并掌握软件开发的各个环节。以下是对该课件中可能涵盖的...
《ArcGIS开发宝典---从入门到精通》是为适应当前我国ArcGIS应用开发需要而编写的一本面向不同层次的开发指导教程。... 本书可作为高等院校GIS专业本科生、研究生的教材,也可作为GIS软件开发人员的参考书。
软件开发是一个复杂而精细的过程,合理的组织架构和明确的角色分工对于项目的成功至关重要。通过上述介绍,我们可以看到不同角色之间既独立又相互依存的关系。每种角色都发挥着不可或缺的作用,共同推动项目的顺利...
通过以上分析,我们可以看出,软件技术专业(嵌入式软件开发工程师方向)是一个综合性的专业,旨在培养具备技术实力和市场适应性的专业人才,为中国的互联网行业和相关产业输送高质量的嵌入式软件开发工程师。
综上所述,《精通LINUX设备驱动程序开发》不仅是一本介绍Linux驱动程序开发基础与进阶知识的专业书籍,同时也是一本为希望深入了解Linux内核技术、并在嵌入式系统领域进行设备驱动开发的程序员提供的实战指南。...
Visual Basic 6.0是一个功能强大的软件开发工具,拥有易于学习和使用、开发高效、功能强大、广泛的用户基础等特点。通过本教程,学习者可以快速掌握Visual Basic 6.0的开发技术,并应用于实际开发中。
STK是卫星工具包(Satellite Tool Kit)的简称,它是美国AGI(Analytical Graphics, Inc.)公司开发的一套用于海、陆、空和太空应用和仿真的软件。 本文所有信息来源于STK帮助文档、AGI网站以及国内一些中文资料。其实,...
在网络安全与执法专业中,软件开发技术是核心技术之一,因此,构建一个科学、系统化的课程体系至关重要。通过整合计算机科学与技术、信息与通信工程等基础课程,加强软件开发技术的学习,有助于学生建立扎实的专业...
这本书深入浅出地讲解了Android开发的基础知识和核心技能,适合于对Android开发感兴趣的读者以及希望提高Android开发能力的软件开发工程师。 Android是由Google主导开发的基于Linux内核的开源移动操作系统,广泛...
【软件技术(软件开发方向)专业知识能力素质分解】 在软件技术(软件开发方向)的学习中,学生需要掌握一系列的关键知识、能力和素质。以下是对这些关键点的详细解释: 1. **文化基础知识**:这部分涵盖了政治理论...
MCU 软件开发工程师岗位职责知识点 MCU 软件开发工程师岗位职责 MCU 软件开发工程师是指在动力电池行业中,负责 BMS 底层的开发与建立的工程师。其主要职责包括: * 开发和建立 BMS 底层 * 具有 MCU 单片机、...
信息系统部软件开发主管是信息系统部中的一名高级技术主管,负责领导软件开发团队,满足业务需求,实现信息系统部的战略目标。本岗位职责包括: 1. 软件开发:熟悉ORACLE等数据库系统,精通PB、DEVELOP、ASP等软件...
对于想要从事GIS行业的程序员来说,这是一个极好的起点,也是提升专业能力的有效途径。同时,这份资源也是解决实际问题的宝贵参考,可以在遇到特定挑战时提供解决方案。总之,《ArcGIS Engine开发从入门到精通源码》...