【开发小结】Two Steps from Deadline
进度条可以救我也可以杀死我
# 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的更多相关文章
- vue开发小结(下)
前言 继前几天总结了vue开发小结(上)后,发现还有很多的点没有能列举出来,于是还是打算新建一个下篇,再补充一些vue开发中需要注意的细节,确实还是都是细节的问题,我只是在这里强调下,希望对大家有帮助 ...
- pdfjs viewer 开发小结
此文已由作者吴家联授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1. pdfjs库简介 PDF.js 是由Mozilla 主导推出的可以将PDF文件转换为H5页面进行展示的 ...
- Android 即时通讯开发小结(二)
<Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对IM 开发做一个全面的总结. 相关推荐阅读:. Android 即时通讯 ...
- Android 即时通讯开发小结(一)
<Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对IM 开发做一个全面的总结. 相关推荐阅读:. Android 即时通讯 ...
- 5Spring动态代理开发小结
5Spring动态代理开发小结 1.为什么要有动态代理? 好处 1.利于程序维护 2.利于原始类功能的增强 3.得益于JDK或者CGlib等动态代理技术使得程序扩展性很强 为什么说使得程序扩展性很强? ...
- 移动Web开发小结
以下是做移动端Web开发过程中小结的几个事项:希望能够帮助到大家,同时也方便自己查看: 1,在移动开发页面中,主体盒子的max-width与min-width的设置原因: ①设置max-width是为 ...
- ipad开发小结
项目小结 :布局的时候最后要用CGRectDivi.. :控制器的生命周期---->(init-->(当self.view==nil调用 loadView viewdidload)--&g ...
- redis开发小结
随着缓存在web服务中用的越来越广泛,redis可以说成为了目前最流行的NoSQL数据库!redis与memcached最大的不同在于redis支持更多的数据类型,包括string.hash.list ...
- H5嵌入原生开发小结----兼容安卓与ios的填坑之路
一开始听说开发H5,以为就是做适配现代浏览器的移动网页,心想不用管IE了,欧也.到今天,发现当初too young too simple,兼容IE和兼容安卓与IOS,后者让你更抓狂.接下来数一下踩过的 ...
随机推荐
- .NETFramework-Timers:Timer
ylbtech-.NETFramework-Timers:Timer 1.程序集 System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b7 ...
- poco时间操作
Poco::DateTime Poco::Timespan Poco::Timestamp 时间操作 Poco::DateTime dt; //c++ 20才有 Calendar dt = dt + ...
- Python 查看本机WiFi密码
http://www.lijiejie.com/python-get-all-saved-wifi-passwords/ 很早以前我写过一个,丢了. 今天偶然看到这篇文章 , 也是很久以前写的,他用 ...
- UniqueIdentifier 数据类型
UniqueIdentifier 数据类型用于存储GUID的值,占用16Byte. SQL Server将UniqueIdentifier存储为16字节的二进制数值,Binary(16),按照特定的格 ...
- nodebrew的安装与使用
创建: 2019/05/10 安装 brew install nodebrew 初始化 nodebrew setup ~/.bash_profile 里添加 export PATH=/usr/loc ...
- 杭电1002_A + B Problem II
这是该题的链接http://acm.hdu.edu.cn/showproblem.php?pid=1002 具体的题的内容就不过多描述了,想必你已经知道了,当我看完这道题后就知道咋写了,可是这道题从开 ...
- JSON parse error: Cannot deserialize value of type `java.time.LocalDateTime` from String
在使用Postman测试Spring Boot项目接口时,接口返回JSON parse error: Cannot deserialize value of type `java.time.Local ...
- SpringBoot2.0 基础案例(14):基于Yml配置方式,实现文件上传逻辑
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.文件上传 文件上传是项目开发中一个很常用的功能,常见的如头像上 ...
- 微服务监控神器Prometheus的安装部署
本文涉及:如何在k8s下搭建Prometheus+grafana的监控环境 基本概念 Prometheus提供了容器和云原生领域数据搜集.存储.处理.可视化和告警一套完整的解决方案,最初时是由Soun ...
- git push error: ! [rejected] failed to push some refs to . . .
报错情况: 报错原因:远程库与本地库不一致造成的,需要把远程库同步到本地库! 解决办法: git pull --rebase origin master 这条指令是将远程库中的更新合并到本地库,--r ...