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

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

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

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


采用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

智能推荐

python获取字符串真实长度实际长度 字符串宽度_python如何获取字号的长和宽-程序员宅基地

文章浏览阅读1.1k次。str2 = '1234567890'str3 = '你好啊我是'len(str2.encode('gbk'))len(str3.encode('gbk'))> 10> 10差不多了。_python如何获取字号的长和宽

ios开发 -Alcatraz第三方工具-快速管理Xcode中的代码(快速注释,对齐)_xcode 注释对齐-程序员宅基地

文章浏览阅读712次。网上有一些安装Alcatraz的命令行 执行以后都没有效果,去了它在github主页上拷贝了下面两个代码。这两天试着使用Xcode的 一些插件管理工具,自己记录一下。用的是Alcatraz,这个是github上的一个开源项目,用来管理Xcode上的插件。有搜索功能,界面也很人性化。在终端上输入如下命令即可完成安装:curl -fsSL https://raw_xcode 注释对齐

改变Unity项目使用的.net版本_如何为unity2021.3.29 没有net4.0选项-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏3次。Unity项目使用第三方库或代码时,提示代码错误:Feature `xxx' cannot be used because it is not part of the C# 4.0 language specification修改Unity项目使用的.NET版本1、Unity编辑器中,点击菜单Edit -> Project Setting -> Player2、找到Sc..._如何为unity2021.3.29 没有net4.0选项

鸿蒙OS应用开发之——Java UI框架-组件与布局开发_鸿蒙开发 javaui 基础-程序员宅基地

文章浏览阅读1.7k次。一 概述Ability和AbilitySlice两个类的关系组件分类创建布局二 Ability和AbilitySlice两个类的关系2.1 两个类的关系HarmonyOS提供了Ability和AbilitySlice两个基础类有界面的Ability绑定了系统的Window进行UI展示,具有生命周期AbilitySlice主要用于承载Ability的鸡腿逻辑实现和界面UI,是应用显示、运行和跳转的最小单元AbilitySlice通过setUIContent为界面设置布局接_鸿蒙开发 javaui 基础

MyEclipse中hibernate反向工程实例(一对多关联)_myeclipse hibernate 反向 包-程序员宅基地

文章浏览阅读5.7k次。1、数据库设计 实例对象为工作人员和部门,关系为一个部门对应多个工作人员,一个工作人员只属于一个部门 见表语句如下:(先用Navicat建的表,然后导出的sql语句),数据库名称为testSET FOREIGN_KEY_CHECKS=0;DROP TABLE IF EXISTS `t_department`;CREATE TABLE `t_departme_myeclipse hibernate 反向 包

20172308 实验一《Java开发环境的熟悉》实验报告-程序员宅基地

文章浏览阅读233次。20172308 2017-2018-2 《程序设计与数据结构》实验1报告课程:《程序设计与数据结构》班级: 1723姓名: 周亚杰学号:20172308实验教师:王志强实验日期:2018年3月21日必修/选修: 必修1.实验内容参考实验一 Java开发环境的熟悉(Linux + Eclipse)和Intellj IDEA 简易教程Eclipse 内容换成IDEA..._熟悉开发环境eclipse或idea实验总结

随便推点

微信小程序开发之——调查问卷-案例分析(2.2.1)_问卷原型图-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏11次。一 概述本节通过开发一个“调查问卷”的案例来学习常用表单组件的使用,以及如何收集用户填写的表单信息提交给服务器,或者从服务器获取数据后显示在表单中二 原型图2.1 原型图2.2 原型图说明上图中,有单行文本框、单选框、复选框、文本域,以及一个提交按钮。用户单击“提交”按钮后,会将表单中填写的值提交给服务器。..._问卷原型图

Vue2.0开发之——Vue基础用法-事件绑定$event(20)_vue2 $event-程序员宅基地

文章浏览阅读1.4k次。事件参数对象$event表示事件参数对象event事件修饰符more。_vue2 $event

芝麻信用综合评估未通过,请选择商户支持的其他方式使用服务_抱歉,芝麻信用综合评估不通过,请选择商户-程序员宅基地

文章浏览阅读5.7k次。如题:公司小程序发布上线的时候报这个错,因为在测试接口的时候都是可用的,发布上线之后不行了,官方的案例及解决方案地址是:点击链接给出的大致原因如下:因为在测试接口时能正常使用,所以排除1、3、4的可能性,那剩下的就是账户风控或者信用服务配置的问题了,直接打开芝麻信用商家服务平台查看配置,查看相关配置,发现原来是有新的信用规则,但是没有发布上线,发布上线之后就OK了。..._抱歉,芝麻信用综合评估不通过,请选择商户

Numpy、Pandas、SciPy、Scikit-Learn、Matplotlib的关系以及学习资料_pandas 与 scikit-learn 版本之间的关系-程序员宅基地

文章浏览阅读9.6k次,点赞14次,收藏126次。Numpy、Pandas、SciPy、Scikit-Learn、Matplotlib的关系1. Python的学习资料上述各种库的安装方法Python数据分析-初识numpy、pandas、scipy、matplotlib和Scikit-Learn等数据处理库1. Python的学习资料a.廖雪峰python学习笔记https://blog.csdn.net/datawhale/arti..._pandas 与 scikit-learn 版本之间的关系

Flutter开发之——国际化之Intl插件_flutter 国际化intl-程序员宅基地

文章浏览阅读1.8k次。一 概述Intl是官方出品的,包含用于处理国际化/本地化消息,日期和数字格式和解析,双向文本以及其他国际话问题。pub地址:https://pub.dev/packages/intlGithub地址:https://github.com/dart-lang/intl二 插件安装(Intellij)Flutter Intl插件安装:依次点击:Intellij IDEA—>Preference—>Plugins—>Marketplace,搜索Flutter Intl_flutter 国际化intl

Python 爬取极简壁纸图片 js反编译_python 获取极简壁纸的图片-程序员宅基地

文章浏览阅读1.2k次。文章目录代码如下来源博客:【Harryの心阁】代码如下import requestsimport timeimport osimport jsonimport hashlib# 爬取网站的地址# 控制台分析请求回复 使用ajax技术,在向下滑动时进行post请求# 请求地址api 为https://api.zzzmh.cn/bz/getJson# 获取13位字符的时间戳# 通过分析可知 access中的数据是由 contentType + location + sign + _python 获取极简壁纸的图片