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

# 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. python3 + selenium + eclipse 中报错:'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

    解决:提示chrome driver没有放置在正确的路径下,于是下载chrome dirver,然后放置到C:\Python36的目录下,再次运行就OK了!

  2. web.xml中的<jsp-config>的用法详解

    <jsp-config> 包括<taglib> 和<jsp-property-group> 两个子元素. 其中<taglib>元素在JSP 1.2时就已 ...

  3. 创建maven parent project & module project

    1.命令方式: 1)Create the top-level root: mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo.arc ...

  4. Robot Framework基础学习(六)

    网页弹窗 参考:http://blog.csdn.net/Allan_shore_ma/article/details/65629246 常见的网页弹窗,有如下几类: alert ajax ifram ...

  5. 在Android工程中导入外部动态连接库(so文件)

    假设要导入的so文件命为libtest.so,导入的方法如下: 给工程加入Native Support,将libtest.so复制到在jni文件夹下,在Android.mk文件中,加入以下代码: in ...

  6. 洛谷P3382 【模板】三分法(三分找凹凸点)

    P3382 [模板]三分法 题目描述 如题,给出一个N次函数,保证在范围[l,r]内存在一点x,使得[l,x]上单调增,[x,r]上单调减.试求出x的值. 输入输出格式 输入格式: 第一行一次包含一个 ...

  7. ACM-ICPC2018沈阳网络赛 Lattice's basics in digital electronics(模拟)

    Lattice's basics in digital electronics 44.08% 1000ms 131072K   LATTICE is learning Digital Electron ...

  8. iOS证书和描述文件的配置

    1.登录Apple开发者账号,进入Apple Developer主页,点击Account 2.点击Certificates,ID&Profiles 3.生成CRS文件 1.打开mac上的钥匙串 ...

  9. logging 模块使用

    1. logging 1.1 什么是 logging logging 模块是 Python 内置的日志管理模块,不需要额外安装. 使用: import logging logging.critical ...

  10. MVC+Linq+EF笔记

    using (DataContext ctx = new DataContext()) { /*foreach (var item in ctx.employees) { ViewData[" ...