您当前的位置:首页>课程>卓越程序员之 ——编写稳定可靠的优质代码

卓越程序员之 ——编写稳定可靠的优质代码

浏览:2186
分享

康凯 Read more

百林哲咨询(北京)有限公司专家团队成员

国内资深高级系统架构师,UML/RUP专家,现任国内某知名企业研究院首席架构师,软件设计师,15年的从事IT行业的软件开发、系统架构设计分析经验。

简介

IT人,当我们接下来一个项目的单子,或开始一个产品开发时,最头疼的问题是什么?不同角色的人员关注点不同,但有一点可能是所有角色都会关注的:项目迟迟无法结项,或产品的发布一再拖延,尾款迟迟不能收回。其中的原因何在?我们总习惯于从高层分析问题,把问题归咎于项目管理不力、用户关系不到位、用户需求未把握好。其实,大多数情况下,影响软件结项的主要原因在于产品质量本身。可以想象,一个需要隔三差五重启服务的系统是很难让用户签收的;其次,系统无法快速实现用户多变的需求,加入新功能时无法沿用已有的机制,修改代码的代价高昂是另一个重要的原因。

什么是好的软件系统?我们耳熟能详的是:高效、可扩展、灵活性、可复用、动态插拔…,这些指标被如此频繁地提及,以致于我们认为它们是软件必备的基本的特征了。但实际上,我们可以回顾一下自己做过的系统,能达到这些指标的系统恐怕并不是很多,很多系统仍然挣扎在基本的稳定性上——能保证软件能正常运行,别出现死机、崩溃等现象就不错,恐怕还暂时顾不上灵活、复用之类的特性。

有很多软件系统,从其技术白皮书上看,采用的技术可谓先进,架构可谓精心设计。但是在实际使用中,频繁地down掉,用户提出新的需求后,很容易在实现新需求的同时引入新的错误。这样的软件,很大程度上是软件研发人员的代码基本功不过硬。从技术的角度,软件质量除了与常被强调的架构设计相关,与代码质量也是紧密相关的。这一点,无论使用了什么开发技术,都很难否认。

好的代码应该是,除了满足所有功能需求,还应更好的支持易修改和易扩展,同时应该清晰准确地传递作者的想法。质量可靠的代码为后期维护,升级奠定了良好的基础. 该课程给出了一系列有效的重构实践,并且以来自现实项目的正,反两面的范例.只要遵循这些实践,就能编写出干净的代码,从而有效提升代码质量.   

代码是软件工程师的基本功,这个基本功如此重要,它决定了软件本身的质量。许多程序员自己探索,没有经过系统的学习,写了多年代码仍然不得章法,甚至养成了不少错误的编程习惯,这导致很多企业,工作效率低下,产品或项目交付延期且要不断地加班加点的恶性循环局面。

本课程收集了大量的真实案例,针对项目过程中技术人员常犯的错误进行了汇总研讨,形成改进解决方案的培训教程。试图通过大量的真实案例和代码,以“魔鬼训练”式的代码训练方式让学员通过亲自动手操作来理解代码设计,编写,重构以及调试。

目标

本课程注重实战,采用案例贯穿方式完成实践,收集了大量的真实案例,针对项目过程中技术人员常犯的错误进行了汇总,研讨,并最终形成培训教程。本次培训从程序员的基本编程思维开始讲解,通过大量的真实案例,贯穿了设计、编码、重构等过程,详细地介绍了各个阶段需要注意的要点以及难点,这些知识都是多年编程经验的总结,使学员尽量避免重复犯错,让代码更具健壮性。 

受众人群

对学习编码感兴趣的人员

希望提升编码与设计技能的程序员

软件架构师、开发工程师、架构师

课程时长

2天(12H)

分享提纲

课程项目培训内容
第一单元 成为卓越的程序员内容一:成为卓越的程序员----代码能力及关键因素

1. 软件的核心是什么(市场?客户关系?管理?技术?需求?销售?测试?)

2. 做一个优秀的程序员并不简单!

3. 低头看路与抬头看天——理论与实践的结合

4. 优秀代码的评价标准

5. 优秀的代码,而不仅是可以运行的代码

6. 劣质代码的代价

内容二:案例—通过实际项目演示优秀的代码及不佳代码

1. 介绍项目背景,展现设计细想

2. 阅读代码指出代码坏症状

3. 重构为优秀的代码,介绍重构的思想及代码对比

内容三:养成良好的编程习惯

1. 努力避免错误而不是发现改进错误

2. 程序的易读性,程序编写风格的一致性

3. 学习阅读别人的代码(包括优秀框架的源码),但不要盲目跟在别人后面,不要说“别人也是这么做的”,要弄清这么做的理由

4. 阅读函数的实现代码有利于帮助你理解函数的功能

5. 尽早发现并改正错误

6. 最小权限原则(信息隐藏原则)

7. 避免重复的代码,使用函数来完成

8. 消除冗余的代码,删除不用的变量

9. 进行防错性程序设计,但不要隐瞒错误

10. 函数和功能模块的划分,功能单一,名符其实的函数

11. 减少关联性,尽量不依赖外界条件

12. 函数的长度,每个函数只完成它自己的任务

13. 明确函数的参数,尽量不要使用多种功能的参数类型

14. 设计并加入调试代码,用速度和大小换取错误检查能力

15. 消去随机特性,使错误稳定再现

16. 消去可能的错误隐患,不要给自己和别人犯错误的机会

第二单元 如何写出优质的代码——函数、类、模块内容一:如何写出优质的函数——每个条目都配置案例分析

1. 函数设计的原则

2. 函数的参数如何设计

3. 如何理解“函数要短小”的说法? —— 仅仅是因为编码规范要求吗?

4. Bool型参数的危害及避免的常用技巧

5. 如何处理函数中的硬编码

6. 如何组织函数的流程

7. 处理复杂逻辑的函数的技巧——即使业务逻辑确实很复杂!

8. 如何避免复杂的if-else结构

9. 如何处理“很长很复杂”的函数

10. 对switch-case结构的处理

11. 对try-catch结构的处理

12. 如何将不同流程步骤的函数进行统一处理

内容二:如何写出优质的类——每个条目都配置案例分析

1. 类的高扇入和低扇出原则

2. 类中临时成员变量的危害及处理方法

3. 如何处理“过大的类”

4. 将类从3个维度进行分解——类的设计

5. 流程控制类的设计技巧

6. 功能实现类的设计技巧

7. 设计为类与设计为类的不同对象的讨论

8. 设计为成员变量与设计为类的讨论

9. 处理“逻辑复杂的类”的技巧——即使业务逻辑确实很复杂!

10. 类的封装性使用——高性价比的方法

内容三:类的继承、多态、抽象及案例分析

1. 类的继承关系与聚合关系的选择及误用——实际案例分析,什么情况下使用类的继承,什么情况下使用类的聚合。

2. 类继承中父子关系与兄弟关系的选择及误用——实际案例分析,什么情况下2个类为父子关系,什么情况应为兄弟关系。

3. 子类中空函数的分析及解决方法——实际案例分析。

4. 类型判断的误用——多态

5. 类的多态在设计中的价值及案例分析

6. 复杂的类关系设计——既继承又聚合的关系,及实际案例分析

7. 如何写出抽象而可扩展的类

内容四:接口设计及案例分析——每个条目都配置案例分析

1. 接口设计的要素及实例

2. 接口与抽象类的区别

3. 类接口与外接口——案例分析

4. 如何通过接口进行边界隔离——案例分析

5. 接口在系统灵活性设计中的地位及实例分析

内容五:如何写出优质的模块——每个条目都配置案例分析

1. 模块划分的基本原则——超市收款系统案例

2. 模块划分中,如何处理2个模块耦合的部分

3. 模块设计中,如何做到统一和抽象

4. 运用层模块的设计要点

5. 服务层模块的设计要点

6. 模型成模块的设计要点

7. 实体层模块的设计要点

内容六:案例分析及练习

8. 分析已有的代码,看违反上述原则与遵从上述原则的代码。

9. 练习,反复训练每个原则,达到自然习得。

10. 本案例学习多种代码设计原则的实际使用。

第三单元 典型情况的应对编程——理解常见模式的本质内容一:案例---重点介绍重构基本类型依赖和对应模式

1. 通过案例学习以下重构到模式手段

2. 以State取代状态改变条件语句

3. 以Strategy取代条件逻辑

4. 以Composite取代隐含树

5. 以Interpreter取代隐式语言

6. 转移装饰功能到Decorator

7. 用Builder封装Composite

8. 重点学习案例的重构到模式的过程

内容二:案例---重点介绍重构代码重复和对应模式

1. 通过案例学习以下重构到模式手段

2. 构造Template Method

3. 以Composite取代一/多之分

4. 引入Null Object

5. 用Adapter统一接口

6. 用Fatory Method引入多态创建

7. 重点学习案例的重构到模式的过程

内容三:案例---重点介绍重构代码过长/过大的类/方法和对应模式

1. 转移聚集操作到Vistor

2. 以Strategy取代条件逻辑

3. 以Command取代条件调度程序

4. 转移聚集操作到Collecting Parameter

5. 重点学习案例的重构到模式的过程

内容四:案例---重点介绍条件逻辑过度复杂和对应模式

1. 以Strategy取代条件逻辑

2. 以State取代状态改变条件语句

3. 转移装饰功能到Decorator

4. 引入Null Object

5. 以Command替换条件调度程序

6. 转移聚集操作到Visitor

7. 重点学习案例的重构到模式的过程

第四单元 如何达到优秀的设计内容一:什么是好的设计以及如何预先设计实现

1. 什么是好的设计和衡量的手段

2. 可扩展性(Extensibility)容易添加新的功能. 结合案例,通过那些手段如何实现该目标

3. 灵活性(Flexibility)代码修改平稳地发生. 结合案例,通过那些手段如何实现该目标

4. 可插入性(Pluggability)容易将一个类抽出去,同时将另一个有同样接口的类加入进来. 结合案例,通过那些手段如何实现该目标

5. 软件的变化分析---发现变化/封装变化/隔离变化

6. 分析真实项目,如何预先设计,给我们哪些启示,我们可以学习到什么

内容二:类及函数实现实战演练

1. 要点:使用类进行封装及信息隐藏,案例分析。

2. 要点:对象创建及生命周期管理的原则,案例分析。

3. 要点:函数、类、模块间低耦合关系的实现要点。案例分析。

4. 要点:把握函数、类、模块核心职责,高内聚模及案例分析。

5. 要点:用逻辑类的函数、类来组织软件,重点案例分析。

6. 要点:深入分析面向对象中的多态及其使用。

7. 要点:用中间连接模块来粘合核心模块,案例分析。

8. 要点:抽象及间接的使用,案例分析。

9. 要点:隔离不同的关注面,保护变量模式的使用及案例分析

编码实践中,类及函数如何实现是达到优质代码的难点,也是重点。本节从多个案例进行分析, 每个要点从入门介绍到深入讨论,分析我们在项目之中是那些原因导致了没有实现这些目标.

内容四:案例—某项目设计思路分析

1. 案例情况

2. 演示如何发现设计坏味道,以及如何重构



我要参加

可同时提交您的需求,我们会及时与您联系

预约内训

将课程带入到您的团队,为您的团队进行一对一辅导。

相关课程