进度条可以救我也可以杀死我

# START

2018年4月17日晚我测试了11组四则运算的UI,每个exe程序生成的每一道题都有恐怖的倒计时。PSP表格清晰的记录了开发过程中消耗的时间,但是在结对作业中重构再重构的流程让我发现我不知道怎么填写待在一旁的PSP表格。

# Step 技术栈

part 1. 内存分配

C++中,内存分为5个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。直到在我个人开发的时候,我才明白C++内存分配还分区,并且内存溢出与内存不足完全不是同一个概念。采用C语言风格的hash table遍历文件内的单词时,我的珍贵内存被new node大量消耗。

收集的几个tips:a. 不要混用 new/delete 和 new[]/delete[]   b. new与delete一定要成对出现   c.

part 2. 代码重构

大多数时候我们讨厌重构,主要就是因为重构后的测试十分麻烦甚至会出许多新的bug。没有自动化的测试,手工测试就要花费大量的时间。

我们在结对编程的时候,曾希望把存储分数的空间从数组改为容器vector,但修改完之后却发现出现了很多预料之外的问题,有时候在无关紧要的地方添加一两句代码,可能造成一些非常诡异的结果,我们多次测试修改之后发现无能为力,最后只好放弃了我们的想法。重构代码的恐怖在于:有时候我们发现出了error,但是却解决不了,除非放弃这条重构的思路。

但无论如何,“代码重构永远是程序员们无法回避的话题,当你的软件在编写的那一刻起,重构就不可避免。做一个系统,我们为什么要费劲地不断抽象,竭尽全力让自己的代码能够被重用,说白了就是让我们今日所付出的时间,让未来的我们能够更轻松地工作而已。”

# Step 时间轴

part 1. 规范细化、交流记录

早在阅读《人月神话》时(http://www.cnblogs.com/chenzhikai/p/8529867.html),我们就知道文档化的规格说明、项目手册是巴比伦塔项目失败的重要原因。我认为此次编程项目的需求文档写的比较简略,由于组数多而没有规范化的接口设计,导致UI与Core之间对接困难。再加上两组之间的交流太晚、信息杂乱无章,版本更新速度太快,对接任务繁重。

part 2. 进度增长使专注度下降

随着进度的增长,在相同时间内项目的进展是越来越慢的。“时间"随着进度存在着某种加速度,进度越深入,我和我的同伴就变得越来越不耐烦。真正的效率是源于内心对目标强烈的热枕,有对结果的期待才会让我们的表层意识直至深层意识保持关注度。代码敲的越来越多,改动次数越来越多,再加上其他学习任务繁重,我就开始降低这种关注度,得益于同伴带病喊我码代码的提醒与督促才不得不坚持下来。

part 3. 亲身经历之后

亲身经历一个负面事件带来的情绪反应要比看着别人的血泪史所感受到的强烈的多,虽然认知偏差仍然存在,但这比单凭大脑“镜像神经元”的一番冲动形成的情绪记忆更加持久。项目刚开始时,我们经过一点点简单的思考,情绪系统就会给出倾向或感到迫不及待,但立马转向着手行动的匆忙态度为将来的代码重构埋下了伏笔。看了一些书,写了一些读书笔记,但正如刘未鹏说的:“要掌握一门专业知识,其实每天一点时间,专注、积累和持之以恒也就够了”。

强烈建议:为每个程序员配置程序员心理咨询师、程序员秘书、程序员生活管理员、程序员执笔人:)

【开发小结】Two Steps from Deadline的更多相关文章

  1. vue开发小结(下)

    前言 继前几天总结了vue开发小结(上)后,发现还有很多的点没有能列举出来,于是还是打算新建一个下篇,再补充一些vue开发中需要注意的细节,确实还是都是细节的问题,我只是在这里强调下,希望对大家有帮助 ...

  2. pdfjs viewer 开发小结

    此文已由作者吴家联授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1. pdfjs库简介 PDF.js 是由Mozilla 主导推出的可以将PDF文件转换为H5页面进行展示的 ...

  3. Android 即时通讯开发小结(二)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对IM 开发做一个全面的总结. 相关推荐阅读:. Android 即时通讯 ...

  4. Android 即时通讯开发小结(一)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对IM 开发做一个全面的总结. 相关推荐阅读:. Android 即时通讯 ...

  5. 5Spring动态代理开发小结

    5Spring动态代理开发小结 1.为什么要有动态代理? 好处 1.利于程序维护 2.利于原始类功能的增强 3.得益于JDK或者CGlib等动态代理技术使得程序扩展性很强 为什么说使得程序扩展性很强? ...

  6. 移动Web开发小结

    以下是做移动端Web开发过程中小结的几个事项:希望能够帮助到大家,同时也方便自己查看: 1,在移动开发页面中,主体盒子的max-width与min-width的设置原因: ①设置max-width是为 ...

  7. ipad开发小结

    项目小结 :布局的时候最后要用CGRectDivi.. :控制器的生命周期---->(init-->(当self.view==nil调用 loadView viewdidload)--&g ...

  8. redis开发小结

    随着缓存在web服务中用的越来越广泛,redis可以说成为了目前最流行的NoSQL数据库!redis与memcached最大的不同在于redis支持更多的数据类型,包括string.hash.list ...

  9. H5嵌入原生开发小结----兼容安卓与ios的填坑之路

    一开始听说开发H5,以为就是做适配现代浏览器的移动网页,心想不用管IE了,欧也.到今天,发现当初too young too simple,兼容IE和兼容安卓与IOS,后者让你更抓狂.接下来数一下踩过的 ...

随机推荐

  1. msfvenom 摄像头

    4.13 莫名其妙的心情不好 又回到了那个不想打游戏不想聊天不想说话的日子. 不用想.vm——>kali 很早以前看过用msfvenom生成木马的文章.然后……然后我的浏览器就崩溃了.Firef ...

  2. openStack vm备份

    由于VM是可能存在于不同节点上,所以当一个计算节点挂掉后,可以把挂掉的节点运行的VM在新的节点上继续运行. 虽然快照功能可以做恢复使用,但是毕竟快照只能恢复固定时间的VM,所以虚拟机备份很重要!对做好 ...

  3. .NET&nbsp;下的&nbsp;POP3&nbsp;编程代码共享

    前一段时间在论坛上看见有人问如何使用.net进行POP3编程,其实POP3的使用很简单,所以.net没有向SMTP那样给出相应的类来控制. 废话少说,程序员最需要的使代码. 1.打开VS.NET 20 ...

  4. Finding Comments in Source Code Using Regular Expressions

    Many text editors have advanced find (and replace) features. When I’m programming, I like to use an ...

  5. 在 Ubuntu 上安装 Protobuf 3

    什么时候需要安装 如果使用 protoc 命令,遇到 Protoc not found,表示未安装.或者,执行时出现错误:This parser only recognizes "proto ...

  6. Python机器学习笔记:朴素贝叶斯算法

    朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.对于大多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.比如决策树,KNN,逻辑回归,支持向 ...

  7. 51nod1117【贪心】

    思路:哈夫曼树~~哇塞,那么有道理. 利用堆维护:每次从堆里取两个最小加起来,然后还是最小的两个,最后只剩一根总的 #include <bits/stdc++.h> using names ...

  8. 原生JS和jQuery中基本的节点操作

    js中节点操作**document.createElement()**用来生成网页元素节点,参数为元素的标签名: **document.createTextNode()**用来生成文本节点,参数为所要 ...

  9. 1366 - Incorrect string value:'\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' a 错误修改

    把name的字符集修改成 utf8 ,然后把表关了从新打开,就可以了 如果还不行,就从新创表,在创表的时候修改name的字符集 如果还不行,就修改my.ini 它在你的mysql安装路径里 [mysq ...

  10. 特殊形状图片之遮罩蒙版CSS3-Mask效果

    前不久做了一个项目,需要一个小效果,就是获取用户头像以心形的形状展现在页面上,开始小五想的实现方式是canvas画图或CSS3的clip(剪切),发现都不理想,和设计稿里的图形美观度相差太大,而且实现 ...