如何讲解自己开发的程序_如何说程序是自己写的-程序员宅基地

技术标签: 讲解程序  程序员  展示作品  非技术  不局限于技术  

在很多人的潜意识里,程序员就是一群口头表达能力欠缺的技术人。作为程序员,我们必须用实际行动去反驳。

首先我们得学会展示自己的工作,自己开发出一个软件,要怎样想其他人进行讲解,偶然看到这么一篇文章,觉得非常不错,转载之,顺便附上自己的一些阅读笔记。


采用PPT展示自己的软件

采用以下思路做ppt分享:

 

  1、首先预估好分享用的时间,一开始就要告诉自己时间有限,要讲重点,不要事无巨细。人的平均连续专注时间据说只有40多分钟,大约是一节课时间。在我们平常紧张的开发节奏之下,大家可能会更容易疲倦,因此时间应该更短点。最好控制在20分钟以内,再不够就半小时,别超了。

 

  只要一开始定好量定好时间,整个ppt分享的调调就基本定下来了,后面做ppt就容易把握重点,讲ppt时也不会一开始就很悠闲,后来就越来越悠闲(让听众想睡),或者反过来发现时间不够用。如果觉得系统太大内容太多,那就将内容再压缩,讲的粒度再粗点。任何系统任何内容都可以有针对性地以任何粒度表述给别人听,这是我读研究生那几年做学术报告的一个重要体会。

 

  2、ppt开头,先告诉大家我做的这块东西是为了解决什么问题,实现什么功能。比如我最近做的随机名字搬到服务端的工作,是为了保证玩家申请到一个随机名字后,一定可以用这个名字创建新角色,而不会出现“名字被占用”的情况。另外,一个新的游戏系统的目的可能最好还从策划的角度做一点阐述(顺便帮助拉近程序与策划之间的距离)。

 

  3、如果系统涉及服务器间、进程间的交互与架构,接下来就给出涉及的服务器架构图,这样就让大家知道我负责的系统在架构中处于哪个位置。比如我做登录的ppt分享,会通过架构图告诉大家,玩家看到的每个游戏服在技术上包含了哪些进程哪些数据库,游戏服和游戏服之间怎么划分,大区和大区之间又如何划分,游戏服和游戏服之间的交互是通过哪个进程。之所以会有这一步是因为我负责的工作经常会涉及框架搭建和进程间交互的事情,比如在老东家负责的集群后台管理与监控、补丁机制;还有现在负责的登录、跨服和gm工具的搭建。大部分系统应该不涉及这一步。

 

  4、接着阐述主要业务流程。这时可以用流程图,也可以用时序图。我倾向用时序图,因为这更便于展现进程与进程之间、类与类之间、模块与模块之间的交互。注意只要阐述主要流程、关键步骤就可以了,不要每个细节每个点都讲出来。流程中的异常处理和保护逻辑统统忽略。如果有比较了解的同事问到异常处理的问题,可以一两句简单介绍一下处理方案,并告诉他ppt最后会专门讲。如果流程时序比较复杂,可以先出一个简化的时序图,然后再出一个更详细的版本。详细版本的时序图不一定要当场讲(视乎同事的掌握程度和兴趣),留在ppt中可供以后查阅。另外,在阐述流程的过程中,顺带介绍每个相关类、模块的职责。重要的协议、接口也在这一步给出。

 

  5、介绍主要数据结构。我现在越来越有一种感觉,就是实际产品开发中,甚少有精妙复杂的算法需要我们操心,但相对而言数据结构却重要得多关键得多。采用什么样的数据结构在很大程度上可以决定你的代码长什么样子、性能如何。对其他同事而言,他们知道了我的系统的数据结构,心里对这个系统也会更有底。尤其我们做游戏的,基本上都是在操纵玩家身上的数据,了解清楚玩家身上带了什么样的数据非常重要。数据结构的描述,能画图就尽量画图;然后用开发语言写出数据结构的示例,比如我们用lua,我可能会这样描述玩家已经学会的职业技能:

job_skills_ =

{

    [技能1的ID] = 技能1的等级,

    [技能2的ID] = 技能2的等级,

    ...

}

  一目了然。

 

  6、如果系统涉及数据库存储,则阐述数据库表结构,并从数据库中查询几条实际记录,贴在ppt中,如果记录太长就现场演示。不要将建表用的sql语句直接贴在ppt里。我尝试过,即便表里只有一个字段,当我看见ppt上密密麻麻的一连串字母时,心里都会有点抗拒厌烦。用表格来描述数据库表结构会清晰得多,大学里的数据库课程应该都这么干。

 

  7、ppt最后,阐述开发过程中遇到的一些容易出bug的点,以及异常处理与保护逻辑。这时可以适当贴一些代码。但也不要全贴上来。每页ppt讲一个点,把相关函数贴上来;函数名和文件名保留,方便日后查找;函数中和这一页要讲的异常点无关的代码都删掉,用省略号代替;关键的那一两句用高亮颜色标出。大家在前面对流程和数据结构都有了解了,对这里的细节问题就更容易理解,更能听进去。到这一步,了解比较多的同事会问些更深的问题,这时就可以打开原始代码给大家看。

 

  于是ppt到这里就讲完了。整个过程中,除非同事要求,否则只有到最后一步才展示原始代码。记得有一次主程用ppt讲单机版战斗的做法,整个过程中也是没展示什么代码,但后来当我的工作涉及到这部分时,我能回想起他讲的内容,并通过他的ppt快速理解相关代码,应该说那次分享的目的是完美达到了。

 

  给QC(QUALITY CONTROLLER(品质控制员),),一对一讲代码的思路也大致如此。不同的地方在于:给QC讲代码不会事先准备ppt,所以涉及架构、流程的东西最好在纸上画。不要一开始就直接对着代码讲流程,从这个函数跳到另一个函数,跳来跳去,那样虽然自己讲得很投入,但QC看着屏幕上翻来翻去的代码也会晕——这是我亲身体会,我就这样听过别人讲代码。虽然这时QC可以充当一部分小黄鸭的作用,但毕竟人家的时间也宝贵,所以还是让人家听懂掌握为好。另外,因为这时是一对一讲,而且QC对我做的东西一般也比较了解,所以有的地方可以讲得比较细。但最好也是放到最后讲,先在口头上或纸上把大致流程过一遍,然后再对着代码把流程更具体地过一遍。


参考

如何更好地给同事讲代码? by zz翔


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hzy38324/article/details/45021469

智能推荐

rpm方式离线安装ansible(超快)_ansible centos6 rpm 离线-程序员宅基地

文章浏览阅读2k次。#在同等版本有外网的机器上下载ansible全部rpm+依赖包然后上传到无网络服务器进行安装[root@localhost ~]# yum install epel-release -y[root@localhost ~]# yum install yum-utils -y[root@localhost ~]# mkdir ansible[root@localhost ~]# yumdownloader --resolve --destdir /root/ansible/ ansible/roo_ansible centos6 rpm 离线

mysql卸载报错1606_MySQL-程序员宅基地

文章浏览阅读139次。第1章 初涉MySQL1.1 MySQL文件(1)MySQL目录结构(2)MySQL配置向导文件(安装后配置时使用)(3)MySQL配置文件(配置后改配置时使用)主要配置:(默认安装为C盘,本人安装在D盘)1.2基本命令操作命令位置:cmd:在系统命令提示符执行MySQL Command Line Client:在MySQL命令行客户端执行mysql>, MySQL登录状态,以上两者内执行都..._惠普电脑mysql卸载

Java流与文件操作_java从流里操作文件-程序员宅基地

文章浏览阅读521次,点赞2次,收藏4次。Java流与文件操作数据流的基本概念总体流程图文件相关操作创建文件获取文件的相关信息方法目录的操作和文件删除Java IO流原理流的分类FileInputStreamFileOutPutStream文件拷贝文件字符流FileReaderFileWriter节点流和处理流节点流和处理流的区别和联系处理流的功能主要体现BufferedReaderBufferedWriter字符处理流拷贝文件字节处理流拷贝文件对象处理流序列化和反序列化注意事项ObjectOutPutStream(序列化)ObjectInputP_java从流里操作文件

操作系统复习笔记--第四章 线程_多对多模型允许系统创建足够多的-程序员宅基地

文章浏览阅读8.7k次,点赞3次,收藏5次。四.线程1、线程的引入目的:减少进程切换和创建开销,提高执行效率和节省资源2、实现:将进程的资源申请和调度属性分开。即进程作为资源的申请和拥有者,但不作为调度的基本单位,这样,就产生了线程的概念。3、线程:是进程中的一个实体,是独立调度和分派的基本单位。4、优点:响应度高、经济、资源共享、多处理器体系结构的利用5、线程是CPU运行的一个基本单元,包括程序计数器、寄存器集、栈空间6、一个线程与它的对等线程共享代码段、数据段、操作系统资源7、传统的或重型进程等价于只有一个线程的任务_多对多模型允许系统创建足够多的

windows安装perl_windows perl-程序员宅基地

文章浏览阅读949次。windows安装perl_windows perl

结构体知识总结_结构体 知识总结-程序员宅基地

文章浏览阅读143次。结构体基本语法数组是把相同类型的变量集中在一起,而结构体则是把不同类型的变量集中在一起。例如:下面的例子包含如何赋值,如何引用结构体变量。#include<stdio.h>struct weapon{ char name[20] int atk; int price; };int main(){ int a=0; float b..._结构体 知识总结

随便推点

常规功能和模块自定义系统 (cfcmms)—045模块导航功能的重构(3)导航的定义_@fielddefine-程序员宅基地

文章浏览阅读1k次。045模块导航功能的重构(3)多层控制  导航树中的导航值不能只是单一属性,也可以是多属性的组合。例如对客户单位可以按照二级导航:“省-市”来进行。_@fielddefine

laravel 创建新项目时出现 You made a reference to a non-existent script @php -r "file_exists('.env') || copy(...-程序员宅基地

文章浏览阅读1.2k次。laravel 创建新项目时出现You made a reference to a non-existent script @php -r "file_exists('.env') || copy('.env.example', '.env');"You made a reference to a non-existent script @php artisan key..._you made a reference to a non-existent script @auto-scripts

IO等待慢分析_i/o等待时间长-程序员宅基地

文章浏览阅读1.9k次。数据库io请求很少top 10等待事件:tablespace io Stats:(磁盘平均读取时间>20ms,磁盘存在性能问题,这里ndsc_index和ndsc_data所在磁盘平均读取已经超过40ms。)附oswatch报告各磁盘的平均service timeOperating System Statistics:..._i/o等待时间长

基因编辑技术:能让人类永生下去?_乔治丘奇 逆转衰老-程序员宅基地

文章浏览阅读1.1w次。图:有争议的哈佛大学研究人员丘奇称猪器官将可以用于人体器官移植,利用脑移植治疗老年痴呆症  凤凰网科技讯据《每日邮报》北京时间 7 月 5 日报道,未来有一天,人类将利用猪培养用于人体器官移植的器官,利用脑移植治疗帕金森氏综合征。  这是颇有争议的哈佛大学遗传学家乔治·丘奇(George Church)所说的,他认为,DNA 技术的进步将很快改变我们的生活方式。  这位科学家目前正在研究培育能用于..._乔治丘奇 逆转衰老

Human3.6m数据集_human 3.6m database-程序员宅基地

文章浏览阅读4.3k次,点赞8次,收藏23次。最近用到了Human3.6数据集,整理一下链接1、原数据链接http://vision.imar.ro/human3.6m/,需要注册申请,时间可能很长,也很大。看别的帖子说很长,没试,好像是cdf文件。2、 3d pose baseline(https://github.com/una-dinosauria/ ) 中的链接,已经失效了https://www.dropbox.com/s/e35qv3n6zlkouki/h36m.zip3、知乎上的帖子-3D人体姿态估计-Human3.6m相..._human 3.6m database

vmware 主机ping不通虚拟机,但是虚拟机能ping通主机_vmware vnett8 ping不通-程序员宅基地

文章浏览阅读215次。重启vnet8网卡就好了。。。。_vmware vnett8 ping不通

推荐文章

热门文章

相关标签