编程是一场思维与意志的战争

重大的科学技术突破没有什么神奇的, 在其背后, 是将知识、方法、想象力、行动、尝试、测试反复无尽地投入的过程。

编程是一场思维与意志的战争,是与自己思维缺陷不断抗争的过程。解决问题,引起新的问题,再消解问题,一步步小心地缩小问题的生存空间,直到幸运地发现问题能缩减到可以接受的范围,或者郁闷地发现问题在逐级扩大无法收拾只得从头再来。思维能力和意志力有多强大,决定了编程能力所能达到的高度。

最开始, 热情是 100%, 投入工作。 随着时间的推移, 热情逐渐降低, 任务也趋于完成状态。 当热情降到 60% 左右, 任务终于基本完成了, 意外发生了。

假设是在做数据订正脚本, 将多个集群的分数据库的数据合并到一个主数据库中。

1.  半路杀出个程咬金。 本来是负责5个表 A,B,C,D,E 的订正。 然而最近的项目又新增了一个表 C‘, (C 和 C’具有相似的字段, 但是针对不同的实体) , 而且在数据订正所在项目之前上线(但是此时还没有上线, 因此线上没有相关数据参考)。 必须把这个表的合并工作考虑进去, 将 C 和 C‘ 均合并到主数据库的 C 表中; 此时, 还是有不少热情来完成工作的; No Problem.

2.  再一次完成后, 突然又被告知: C 表的线上集群的多个分数据库的一些主键数据重复(由于历史上的手工维护导致), 合并时会导致冲突, 于是, 需要在主数据库的C表增加一个集群标识的字段区分出来。 再一次修改;

3.  再一次完成后, 与虚拟化网络团队的成员讨论发现, 将 C 和 C‘ 表合并, 与线上某个已知待解决的遗留问题结合, 会导致一些小概率的不可靠, 这些不可靠可能会导致大的网络故障。 经过讨论, 决定再增加一个字段来解决问题。 此时, 突然发现对 C 和 C‘ 表存在着重大的理解错误。 原来以为 C‘ 表的主键是包含在 C 表中, 现在发现是完全无交集的关系。由于相关项目还没有上线, 无法抓取线上进行验证, 只能采用潜规则和人工沟通的方式来确认。毫无疑问, 这需要一次较大的改动。

4.  数据合并订正是必须考虑合并验证、回滚和回滚验证的。 数据验证分单表数据验证和表关联数据验证。回滚是将主数据库对应于每个集群的分数据库的数据重新迁移到原来的分数据库。每一次改动, 都必须确保“合并、 合并后验证、 回滚、 回滚后验证”均正确无误。并且, 由于涉及到的是客户的敏感数据, 几百万条数据, 只要有一条数据订正出错, 都可能导致不小的故障。 必须一遍一遍地修改,运行验证程序, 查找数据验证失败的原因(由于线上数据存在脏数据, 出现若干条数据验证失败是很容易的, 需要程序具有很好的健壮性和容错能力), 修复, 再验证, 再修复, 再验证, 就像改论文、拍电影一样, 几个步骤翻来覆去, 真是令人头晕目眩, 思绪混乱, 濒临崩溃。即便如此, 也无法保证绝对不出问题。与此同时, 还需要负责一个重要系统的维护和技术支持, 时不时有一些其它事务打断。

5.  凭借最后的热情, 终于再一次完成。 由于部署上线要通过 DBA 系统来创建新表。 问题又出现了:  由于 D 表的字段 usage 与 mysql 关键字冲突, 该字段被 DBA 系统直接屏蔽, 不可以使用, 因此, 必须将主数据库的 usage 字段改成其他字段。 新一轮的修改又要开始了。

6.  细节问题。 一些特殊值, 比如 NULL, 在 mysql 与 python 之间的转换, 从 mysql 取出的 NULL, 在 python 会变成 None ,  如果不小心, 插入到 MySQL 就会变成 ‘None‘ , 而不是 NULL, 这会导致某些查询失效。

也许无需多言, 你已经经历过类似的“折磨”。 有时技术的强弱并不是最重要的, 耐心和意志反而是最关键的。就像马拉松一样, 速度并不是最重要的, 耐心、策略和坚持才是最有力的品质。

代码已经不那么重要了,重要的是,在你的脑海里,内心里,灵魂里,孕育着怎样的图景。你所见的,不再是电脑与代码,它们只是思维粒子,蕴酿,冲突,碰撞,迸发出最终的火花。 

时间: 2024-10-07 06:00:32

编程是一场思维与意志的战争的相关文章

DELPHI下多线程编程的几个思维误区(QDAC)

有几个网友私下问我一些有关线程的事情.过节写个东西上来大家交流. 思维误区1,自己新建的THREAD是线程,自己的主程序不是线程. 很多人在多线程编程没有把主线程也当作线程.其实主线程也是线程.看起来是废话,这个话确实很重要,这个就意味着,在DELPHI中,不光你开的线程,还有你的主线程所有的内存分配也是串的,进锁排队的.主线程和线程的区别 A.一般来说主线程的优先级高了点.(当然你也可以自己设置) B.主线程在WIN下是处理APPLICATION的消息. 其他基本与你自建线程无区别. 所以这一

java编程思想-枚举类型思维导图

后续加深理解,感觉java编程思想内容博大精深,java每个特性都有很全面深入的讲解,实际工作中一般很难会遇到,期望以后会用到 把书中的代码copy到eclipse中,理解会更快一些

微软2017年预科生计划在线编程笔试第二场 Queen Attack

排序. 分别按照$x$,$y$以及对角线排序,统计一下方案数就可以了. #include<bits/stdc++.h> using namespace std; int n; struct X { int x,y; }s[100010]; bool cmp1(X a, X b) { return a.x<b.x; } bool cmp2(X a, X b) { return a.y<b.y; } bool cmp3(X a, X b) { return a.x+a.y<b.x

微软2017年预科生计划在线编程笔试第二场 Diligent Robots

模拟. 不断分裂,然后计算时间,取个最小值.我也不知道这做法对不对的,读完题猜了一下,抱着$WA$的心态$submit$了,然后跳出一个$AC$. #include<bits/stdc++.h> using namespace std; long long n; int q; int main() { scanf("%lld%d",&n,&q); long long now=1; long long ans=n; long long ci=0; while(

微软2017年预科生计划在线编程笔试第二场 EL SUENO

树上背包. 简单的树形$dp$,计算出摧毁每一个节点所需的最小费用,背包即可. #include<bits/stdc++.h> using namespace std; struct X { int fa; int in; int ip; int c; }s[2010]; int dp[2010][20010]; int cost[2010]; int f[20010]; vector<int>g[2010]; int n,root,ans; void dfs(int x) { i

Problem E. Matrix from Arrays(杭电2018年多校第四场+思维+打表找循环节)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6336 题目: 题意:给你一个l个元素的数组a,用题目中的程序构造一个新的矩阵,询问q次,问以(x1,y1)为左上角,(x2,y2)为右下角的矩阵内的元素之和(原点在左上角). 思路:我们通过打表可以发现这个大矩阵都是以左上角2l*2l的小矩阵M循环出现的,所以对于每次查询我们只需统计他要查询的矩阵包含多少个完整的M,对于那些不构成完整的行列和,我们首先用前缀和统计出来,最后加起来即可.我的方法用下图

青少年、大学生、职场精英给你一个学编程的理由

<图解C++--轻松学编程>序计算机编程已经成为欧美学生必修课程之一,过几年当你再遇到这些歪果仁的时候,吓到你的不是他们的英文表达能力而是他们熟练的编程能力.目前在国内编程还只是程序员的工作,大多数非计算机从业人员没有接触过编程知识.随着信息传输5G时代的来临,科技发展的速度会像闪电一般.未来智能家电充斥楼宇,假如学生少年掌握编程技能就可以控制.改善智能家电的控制程序,也可以扩展兴趣爱好,像机器人AI编程.趣味小游戏开发都是有益身心的课外实践活动:校园内大学生在论文课题的研究中,算法模型需要进

结对编程项目--电梯调度(合作伙伴叶思维)

我们所完成的项目是电梯调度,具体要求如下: 一.项目以及合作伙伴 项目:现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示: 电梯编号 客服务楼层 最大乘客数量 最大载重量 1 全部楼层 10 800kg 2 单层 10 800kg 3 双层 20 1600kg 4 全部楼层 20 2000kg 其使用规定如下: 1.楼层号为0到20,其中0为地下一层. 2.有楼层限制的电梯不在响应楼层停靠,如单双层. 3.所有电梯采用统一按钮标志. 合作伙伴:叶思维博客网址http://

程序员怎样锻炼编程思维(学习方法)

1.明确学习目的 学习编程对大多数IT业人员来说都是非常有用的.学编程,做一名编程人员,从个人角度讲,可以解决在软件使用中所遇到的问题,改进现有软件,可以为自己找到一份理想的工作添加重要得砝码,有利于在求职道路上谋得一个好的职位:从国家的角度,可以为中国的软件产业做出应有的贡献,一名优秀的程序员永远是被争夺的对象.学习编程还能 锻炼思维,使我们的逻辑思维更加严密:能够不断享受到创新的乐趣,将一直有机会走在高科技的前沿,因为程序设计本身是一种创造性的工作.知识经济时代给我们带来了无限的机会,要想真