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

# 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. SQL DBA 学习

    http://www.cnblogs.com/CareySon/category/389500.html SQL Pass(13) SQL SERVER(42) SQL Server DBA生涯(1) ...

  2. zkw线段树专题

    题目来自大神博客的线段树专题 http://www.notonlysuccess.com/index.php/segment-tree-complete/ hdu1166 敌兵布阵题意:O(-1)思路 ...

  3. spring-boot-starter-data-redis学习笔记01

    1.Redis在Unbuntu14开启, 进入安装的src目录: 1.修改redis.conf,因为redis默认是受保护模式. protected-mode yes   (改为no) bind 12 ...

  4. CentOS6下用yum升级系统内核版本至最新

    首先当你决定升级内核时,要想清楚为什么升级内核,因为升级内核会带来很多麻烦.所以这种事情能避免就避免 导入 Public Key rpm --import https://www.elrepo.org ...

  5. 我也来Show一下我的VisualStudio2017

    1.首先,在微软官方网站下载VS2017的安装程序,后续的安装将通过这个安装程序来引导.这里有三个版本可供选择:社区版.专业版和企业版,社区版免费,专业版和企业版可以免费体验,之后收费,当然,在中国盗 ...

  6. 云服务器、虚拟主机和VPS的区别

    虚拟主机就是利用网络空间技术,把一台服务器分成许多的"虚拟"的主机,每一台网络空间都具有独立的域名和IP地址,具有完整的Internet服务器功能.网络空间之间完全独立,在外界看来 ...

  7. 前端三部曲之Html -- 1(html的基本结构和常见的meta标签的作用)

    一个H5页面的基本结构是什么 我么在编辑器中输入html:5可以得到 <!DOCTYPE html> <!-- 声明文档类型 --> <html lang="e ...

  8. Angular.js思维导图

    AngularJS的四大特性的思维导图如下: 将AngularJS应用于工作:其思维导图如下: AngularJS服务思维导图:

  9. 管理docker容器

    如果在容器中启动sshd,存在开销和攻击面增大的问题.同时也违反了Docker所倡导的一个容器一个进程的原则. docker attach 37d61466c69e \\注意:如果在stdin中exi ...

  10. ubuntu 16.04 单用户____修改忘记密码

    1.开机按ESC,出现如下界面,选中如下选项 2.按回车键进入如下界面,然后选中有recovery mode的选项 3.按e进入如下界面,找到图中红色框的recovery nomodeset并将其删掉 ...