近一两年来在公司主讲代码培训差不多进行了二三十次,但是感觉效果都不是很好。很难调动起气氛,事后也看不到同事的代码水平有什么提升。深刻的体会到了大学时老师在台上声嘶力竭得讲,看着台下一片混混欲睡的学生是什么感觉
方法改进
为了提升培训的效果,本次培训采用了新的方式,以工作中的一个实际问题为例,逐步的讲解如何进行处理。本次的培训分为两部分,一是解决问题的流程以及实战演练,二是进一步深化,讲解设计代码的思路
培训内容
解决问题的流程
- 首先是找到问题所在
- 如何找到对应功能的代码
- 如何分析运作的机理
- 修改时应当注意的问题/影响范围
- 从表面的原因分析出深层的原因
并从这些实际的例子中,抛砖引玉插入代码设计、编写中的思路技巧经验和注意事项
然后是深化培训的内容,进一步讲解如何设计优化一项功能
- 例举所有的需求
- 提出基本的实现流程
- 从多个角度去分析、归类需求
- 按照分析和归类去整理出总的要求
- 设计数据结构
- 根据具体的实现去优化迭代设计
效果和心得
虽然培训会议持续了足足三个小时,但是总体的效果看起来比以前要好很多。通过现场演练,和加强提问的互动环节,听起来总算没那么干巴巴了的。而且根据现场反馈,这样一点点的讲,能够更好的掌握项目原有代码的思路,之前只是对着设计说明书一顿输出,听着云里雾里的,效果不好。
可能一两次培训难以立刻提升与会人员的代码设计能力和分析水平,毕竟演练中的实际问题作为主讲的我轻描淡写地就解决了,其实背后需要大量的积累。但是至少这个功能,都大概掌握了。
而且在过程中,像附文那样现场创建一个文档将内容边讲解边记录下来,起到了一个像板书一样的效果,也可以帮助现场理解和集中注意力。同时有一个现场的记录方便回忆和巩固。
总结上,这次的方式可以延续下来。
改进
附文
附当场的主讲记录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| /******************************************************************************* 2022年8月12号星期五15点—18点 与会:全体软件平台组10人 主题:从节点捕捉功能为实例讲述问题解决和代码设计 *******************************************************************************/ 节点捕捉到自身 节点捕捉的功能单一,比较简单
+ 找到代码在哪里 + 直接问设计的人,远古代码,领导很忙 + 设计文档,文档不全,很难看懂 + 自己找 + 分析功能的入口,mouseMove + 断点:循环事件每次都触发,无法筛选
+ 分析运作的机理 + 合理的运用断点 + 相关的文档 + 代码有足够注释 + 代码合理的名字和结构是更好的注释
qt mouseMoveEvent-》setMouseAutoCapture -〉View::AutoCapture->View::CaptureQuery -> 1.Scene::CaptureQuery 2.Mode::CaptureQuery 在空间索引里面查找,筛选的条件不够 -> Item::CaptureQuery 线索断了
根据 Item::CaptureQuery 的结果来绘制和设置数据 设置到 VMouseEvent + 开始修改 + Scene::CaptureQuery简单的修改了(增加 IsSelected()的判断) 带来影响几乎是全局的
+ 有别的地方和这里有同样的问题(面向对象,基类子类继承) + 改动会不会影响到别的不需要的地方,带来新的问题
+ 应该在 ViewMode 里面改
Mode,Scene,管辖的范围重合, 需求: + 针对不同的情况,可以进行特化,且互不影响 问题 + 处理范围重合(返回的情况过于单一,只用一个bool变量进行标示,只能标记有没有查询到 + 已经处理,但是没找到需要捕捉到点
CaptureData 有效的利用起来-》修正流程兼容更多的情况。captureItem也要根据对应的属性重新绘制
+ 节点、圆心、中点的捕捉 + 栅格的捕捉 + 交点、垂点、切点、最近点的捕捉
+ 程序: -》 输入:鼠标位置,捕捉范围
(最简单)—》捕捉的范围做空间查询-》对应图形-》(如果是路径对象-》对应线段
《- 输出:捕捉的点,捕捉的类型(扩展图像输出)
分类需求(可以从很多角度去区分): 输入需求的角度: 只需要鼠标点和捕捉范围的(隐藏的意义:剩下所需的属性只需要有对象本身提供) 节点、圆心、中点、栅格、已有交点的捕捉,只需要 Item::CaptureQuery 自己实现 需要只是额外的交互对象的: 交点、垂点、切点、最近点的捕捉(可以指示/储存额外对象)(any,type enum)
交互的需求: 需要提前指示的:圆心(不会一直显示的属性点)-》需要修改流程(多步合作)
实现难度: 交点(同一个图形之间的交点,不同图形之间的交点(不同的子类的))(只做单一对象的交点 运算速度,设计结构
数据结构 CaptureData
算法,需求,功能 ——》分析好需求-》设计数据结构-》实现调整 分类。
课后思考: 1. 怎么插入栅格的捕捉 2. 找出这里栅格的实现过程,插入自动的捕捉
|