程序员的烦心事——工作计划

2023-10-28

     差不多每个程序员都要写工作计划,尽管工作计划的格式和提交流程随公司和项目组的不同而有所差别。但不管是哪种方式程序员的工作计划都是在详细设计完成之后编码开始之前进行的。有些项目组会根据它来制定进度计划,有些则用于进度计划的修订。无论是哪种情况,它都会在项目结束前影响着程序员的开发。

      对于写工作计划,程序员(至少是我和我认识的大多程序员)都会觉得头痛。这里的原因是多方面的,但又都集中在时间和工作量的预估上。从详细设计中考虑各子功能点的代码长度和算法难度并结合自身的技术实力来进行时间预估是时间预估的一般方法。然而,无论是代码长度还是对自己技术实力的预估又都受到工作经验的限制。实际的开发时间超出预计时间一倍并不是件罕见的事情。当然也有预估过于悲观的时候。这时对程序员的影响并不会十分严重。除非你的工作计划因此被项目经理驳回或者因为是新加入团队的成员而被人小觑。

      预估过于乐观的情况就大大不同了。一个预估为10个工作日的工作实际上做了20个工作日,这会给程序员带来灾难性的后果。我带过的一个应届生就曾经发生过这样的事情。当时她对一个功能模块的工作量预估是5个工作日,尽管进度会上我对此提出了质疑,可是项目经理还是通过了工作计划,并据此进行了进度安排。我当时的考虑是经理是怕打击她的积极性(刚刚毕业又是女孩子),而且她的模块是边缘模块,进度并不影响整个项目的推进。结果时间一天一天过去了,在5个工作日过去后我按照制度催促她提交延迟报告。她自然也非常焦急,每日延长了工作时间,想尽可能早的结掉项目。但因为缺乏经验,她在开发中又屡屡出错,延迟就这样继续着。直到第17个工作日(或18个工作日,具体时间有些忘了)她第一次提交了代码。简单的验收后,发现好多问题,甚至是功能上的问题(出于着急的遗忘或是偷工减料),我写了验收报告打回源码,她就又开始了漫长的修改阶段。如此反复多次后,她的项目终于算是验收合格了。而此时据她开始编码已经过了30个工作日。这个案例极其极端,它的形成有着很多的原因:程序员自身经验不足;程序员希望尽快完成工作的“热情”;项目经理的纵容;包括作为项目组长的我考虑到项目经理的“威慑”没有过于干预……但无论怎样,预估的失误给程序员本身带来了极大的影响。加班、负面情绪、受挫感、以后做计划的怯懦(不仅仅是保守)甚至是自责,影响范围已经远远超出了项目本身。

      因为工作上经常做工作计划,过去也负责参与审核其他人的计划,我对工作计划的制定有一些心得,写下来给大家参考:

      1、任务评估。如果你的项目组在编码前有详细设计这个步骤(很多小公司或者小项目可能处于鲁莽编码阶段),那会大大的降低误差。但详细设计不是编码,它可能仍然“不够详细”,需要程序员继续将之细化成更小的单元。这样做的另一个好处是你可以在细化的同时发现许多隐藏在任务中的子任务,比如某些数据结构的创建与维护,某些出于程序健壮性和安全性考虑的子任务。

      2、子任务性质划分。根据不同情况,对子任务进行属性划分。有些子任务偏重算法实现,算法困难但代码量低;有些子任务算法简单,甚至只是赋值和转换,但代码量却很高。两种情况需要区分,不能一概而论。

      3、根据子任务不同属性评估代码行。这还要建立在有“自知之明”的基础上,需要平时多总结,了解自己对某种子任务的代码编写能力。

      4、留出调试和单元测试时间。它们不是某个子任务的附加任务,而作为单独的一个或多个子任务存在。

      5、根据个人性格评估。就像学生估分一样,有些人总是高估有些则总是低估。应该注意自己的性格特点,在预估时加入“权值”。

      6、不要精确或给人精确的感觉。这是十分重要的。如果你预估时写时间区间,如XX工作日-XX工作日,则一定要考虑到边界的设定。如果你写时间点,如XX工作日,那一定不要出现“0.5”这种字样。它会误导你的项目经理,给人以“你可以控制误差在1个工作日内”的假象。

      7、预估的单位是工作日。除非万不得已,否则不要将工作与自然日期挂钩。因为你将“工作日”的概念扩展到“自然日”的同时,连自己是否会在此区间内请病事假都要一起评估了。

      8、及时调整评估。在编码过程中,如果发现预估误差过大,超出“微调”范围,要及时调整开发计划并向项目组汇报。一定要“亡羊补牢”,不要“一错再错”。

      最后我想说,预估的手段再高明方法再科学也无法做到分毫不差(除非巧合),就像你无法预估今天上班路上是否会堵车一样。要牢记,我们做工作计划的目的只是为了使开发过程可视化更强,工作上更有条理而已。所以,不要过分追求工作计划的精准,否则就是自寻烦恼了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序员的烦心事——工作计划 的相关文章

随机推荐

  • matplotlib画图、标点、打标签

    Rendering 这是想要的效果 Notes 记录几个功能的做法 函数作图 座标轴 下 左边框 移到过原点 上 右边框去掉 标出一个点 虚线描出这个点的横 纵坐标所在 给这个点打标签 图片标题 保存 Code import matplot
  • 一款优秀持久层框架Mybatis详解!

    Mybatis ssm框架 配置文件的 最好的方式 看官方文档 1 简介 1 1 什么是Mybatis MyBatis 是一款优秀的持久层框架 它支持定制化 SQL 存储过程以及高级映射 MyBatis避免了几乎所有的JDBC代码和手动设置
  • CTF-杂项与密码学总结

    杂项 01文件操作与隐写 文件类型识别 1 File命令 当文件没有后缀名或者有后缀名而无法正常打开时 根据识别出的文件类型来修改后缀名即可正常打开文件 使用场景 不知道后缀名 无法打开文件 格式 file myheart 2 winhex
  • 怎么将服务器中图片显示出来,服务器显示图片

    服务器显示图片 内容精选 换一换 将图片导入图片索引库 该图片可以是同一区域OBS桶内的图片或请求消息体里的图片 只有导入图片索引库的图片方可被搜索到 添加或搜索的图片存储在OBS的桶中时 需要对OBS的桶授权 在图像搜索服务管理控制台实例
  • sublim python提示插件

    python解释器的路径 python interpreter C Users xy AppData Local Programs Python Python36 32 python exe 去掉白框 anaconda linting fa
  • SpringCloud服务发现-ribbon

    服务消费者 api order add 通过 eureka 查找服务提供者 order add 通过服务调 组件调 提供者 创建springboot应用 添加依赖 eureka server ribbon 配置application yml
  • 智能车图像处理20-进阶篇12--正入十字补线1

    前言 希望大家多多点赞评论收藏哦 不懂的地方评论区留言就好 这篇文章主要讲述基本的正入十字补线方法 场景图 效果图 一 函数主体 思路讲解 void buzhongxian2 secondmid 0 if
  • 基于减法优化SABO优化ELM(SABO-ELM)负荷预测(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及数据 1 概述 基于减法优化的 SABO ELM Sub
  • IDEA反编译jar包源码

    1 maven 项目查看jar源码 如何在idea中查看jar包源码 文章目录 准备jar包 idea打开文件夹 最后一步 准备jar包 例如 我准备看resin的jar 在桌面准备了一份 idea打开文件夹 在idea中file gt o
  • spring redis 永不过期_Springboot-Redis分布式锁

    随着现在分布式架构越来越盛行 在很多场景下需要使用到分布式锁 分布式锁的实现有很多种 比如基于数据库 zookeeper 等 本文主要介绍使用 Redis 做分布式锁的方式 并封装成spring boot starter 方便使用 一 Re
  • C++输出中文字符 C/C++多字节字符与宽字符的输出

    原文 http www cnblogs com lixiaohui ambition archive 2012 07 17 2596490 html C 输出中文字符 1 cout 场景1 在源文件中定义 const char str 中文
  • (一)TiDB简介

    TiDB是PingCAP公司自主设计 研发的开放源分布式关系型数据库 NewSQL 是一个款同时支持在线事务处理与在线分析处理 Hybird Transactional and Analytical Processing HTAP 的融合型
  • Android Studio JNI开发入门教程

    概述 在Andorid Studio不支持JNI开发之前大家一般都是使用Eclipse开发JNI 各种配置让人觉得很蛋疼 从Andorid Studio支持JNI开发后 让我们开发JNI变的如此简单 下面我就介绍一下Android Stud
  • Python+Selenium_UI自动化操作(1)——将浏览器最大化

    UI自动化 最大化浏览器 语法 maximize window unittest框架执行顺序 1 先执行setUp 做测试数据准备 2 执行测试用例方法testXXXX 测试用例都是以test开头的方法 可以有多个测试用例 3 所有的测试用
  • LInux脚本- 将一个路径下的前500个文件复制到另一个路径下

    需求 从 home majn llvm project extract main 路径下复制前500个 c 文件到 home majn llvm project extract main 500 目录 以下是一个用于实现该功能的 Bash
  • 将本地的代码上传到github ,Github提交更改的代码,

    1 将本地的代码上传到github 首先你需要一个github账号 所有还没有的话先去注册吧 https github com 我们使用git需要先安装git工具 这里给出下载地址 下载后一路直接安装即可 https git for win
  • OpenvSwitch实现简单VLAN

    需求 现有拓扑结构如下的网络结构 s1 s4为交换机 h1 h9为主机 现欲让单数主机 h1 h3 h5 h7 h9 之间互相能ping通 双数主机之间互相能够ping通 但单数和双数主机之间不能访问 拓扑结构 s1
  • BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)

    原文地址 https blog csdn net ochangwen article details 51531866 一 简介 Java在java math包中提供的API类BigDecimal 用来对超过16位有效位的数进行精确的运算
  • 深度学习小车中的cv应用

    深度学习系列教程 深度学习小车中cv应用 一 get images py中的cv应用 1 调用摄像头demo 2 操作视频文件demo 深度学习小车中cv应用 主要解决串口问题 一 get images py中的cv应用 get image
  • 程序员的烦心事——工作计划

    差不多每个程序员都要写工作计划 尽管工作计划的格式和提交流程随公司和项目组的不同而有所差别 但不管是哪种方式程序员的工作计划都是在详细设计完成之后编码开始之前进行的 有些项目组会根据它来制定进度计划 有些则用于进度计划的修订 无论是哪种情况