开发思想 – 不确定性雪糕筒、薛定谔的猫、海森bug、最不可能的可能

薛定谔的猫/海森bug

之前说过薛定谔的猫,在量子物理学中,这种状态叫纠缠态。在开发过程中,这叫做:“海森bug”,是开发过程中的不肯定性,具体参考这里:软件开发思想-1-斩草除根

 

不确定性雪糕筒

说起不肯定性,在开发过程中,我们对开发项目的估计,最开始的时候,是与实际情况偏离得最大的,随着开发的进度不断推进,这个不肯定性会不断缩小,到开发的末期,这个估计会和实际情况非常接近,这个过程,我们用2条曲线表示(正负误差),就是一个雪糕筒的形状,这就是不确定性雪糕筒(Cone of uncertainty)。

最不可能的可能

OCaml的主开发人员在给VIP客户做技术支持的时候发现一个诡异的bug,第一反应是CPU有问题,但是客户不配合验证不了他的想法,1年之后,Intel终于确认了其CPU有问题:http://gallium.inria.fr/blog/intel-skylake-bug/
一般来说,我们给系统排错,一般是这样的顺序:
  1. 首先是看某个具体的功能,可能性是95%
  2. 再看模块中各种类型/函数的调用,可能性是50%;
  3. 然后看整个系统的数据流转、API/服务调用关系等等,可能性是25%,
  4. 之后才会考虑可能是第三方的组件/服务的问题,可能性是10%
  5. 接着会考虑是系统的DLL/配置问题,可能是1%
  6. 如果上述都不是,我们才会考虑是编译器/解释器的问题,可能性是0.1%
  7. 如果还没有发现问题,我们才可能考虑是硬件问题,譬如磁盘、内存等,可能性是0.01%
  8. 如果这还没有发现问题,那我们只能怀疑CPU,可能性是0.001%
所以,你会发现,不管可能性有多低,排除了所有其他可能性,剩下了的,不管看起来多荒谬、多不可能,那也会是答案。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

爆栈之旅-.NET- C# – 数据访问

目录

这是爆栈之旅的1对1私人定制授课的第十二讲,视频+讲义+问答+测试+代码审查等等。

 

 

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

每周新技术/文章/心得 – 4

爆栈网会员服务包括每周新技术/文章/心得的分享。

本周,我们可以学一下:

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

软件开发思想-2-开发人员应该掌握什么语言/技术?

一技防身

每个开发人员,如果要做得好,都起码熟练掌握一门语言/技术。我们读书的时候学过:学会数理化,走遍天下都不怕。李永乐老师就是一个很好的例子,他的视频大家应该看看。

全栈

不是每个人都能达到全栈,甚至爆栈。

那该掌握什么?

生存和兴趣,你想选哪个?

如果是为了生存,那可以选择那些市场上热门、迫切需要的技术,因为这些技术一般意味着较高的薪酬,譬如最近比较火热的区块链、人工智能/机器学习等等。

如果是为了兴趣,那你可以尽情选择你喜欢的技术、语言。

单纯就语言来说,我觉得应该掌握以下三种:

  • 一种静态语言
    • 譬如C#因为高产开放和跨平台高性能
    • 譬如Java或者Kotlin
  • 一种动态语言
    • 譬如JavaScript因为前端现在是主流开发
    • 譬如Python/Ruby
  • 一种DSL领域专用语言
    • 譬如sql server的t-sql存取数据。

如果都掌握了,那就是初级的全栈:前端、后台、数据存储三个端。

 

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

学员问答精选 – 1 – 数据库表拆分

问题

有学员提问,说他在用一个数据库,里面有一个典型的ToDoList表:

  • id
  • title:标题
  • isFinished:是否完成
  • isRemind:是否提醒
  • remindDateTime:提醒时间
  • remark:备注

因为在用户长时间使用后,已完成的任务会很多,如果把两个表写成一个,可能会有比较多的不必要的检索。

所以,他把这个表拆成两个,结构完全一样,一个叫Undone(未完成),一个叫Done(已完成),Done里面的isFinished的值是true。

可是他后续写业务逻辑的时候,发现这样的写法,当切换任务是否完成的状态的时候,需要更新该任务的isFinish,并将该项从原来的表删除,再加入新的表。

因为该数据库没有提供能直接移动该项到另一个表的方法,后来他也想了想这个结构,感觉有点问题,可是他又说不上来是什么问题。

 

大家觉得这个设计有什么优劣点?你是否能提供更好的解决方案?我下面会提供我的建议。

 

阅读更多

爆栈之旅-.NET- C# – 基础语法

目录

这是爆栈之旅的1对1私人定制授课的第十一讲,视频+讲义+问答+测试+代码审查等等。

 

 

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

第十讲-数据存储-基础

目录

这是爆栈之旅的1对1私人定制授课的第十讲,数据存储,视频+讲义+问答+测试+代码审查等等。

 

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

每周新技术/文章/心得 – 3

爆栈网会员服务包括每周新技术/文章/心得的分享。

本周,我们可以学一下:

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

爆栈之旅-.NET-进阶-如何优化别人的代码

目录

这是爆栈之旅的1对1私人定制授课的第九讲,拿斗地主游戏源代码来做实战优化,视频+讲义+问答+测试+代码审查等等。

 

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。

软件开发思想-1-斩草除根

典故

古语有云:“斩草要除根”,这来自一个典故。往年,郑庄公请求与陈国讲和,陈桓公不答应。五父劝谏说:“亲近仁义而和邻国友好,这是国家可宝贵的措施,您还是答应郑国的请求吧!” 陈侯说:“宋国和卫国才是真正的祸患,郑国能做什么?” 于是就没有答应。君子说:“善不可丢失,恶不可滋长,这说的就是陈桓公吧!滋长了恶而不悔改,马上就得自取祸害。纵是挽救,何能办得到!《商书》说:‘恶的蔓延,如同遍地大火,不可以靠拢,难道还能扑灭?’周任有话说:‘治理国和家的人,见到恶,就要像农夫急于除杂草一样,锄掉它聚积起来肥田,挖掉它的老根,不要使它再生长,那么善的事物就能发展了。’”

所以,古代皇帝惩罚一个罪大恶极的人,会选择诛其九族,这样不会遗留祸害。

唐朝白居易名诗:离离原上草,一岁一枯荣。野火烧不尽,春风吹又生。说得就是这个道理。

 

软件开发

我们知道,一个系统,没有办法做到bug free。每个系统都有bug,或大或小,或明显或隐藏得很深。我们做bug修复的时候,关注点不是表象,因为一些时候,我们会陷入误区:只要呈现出来的问题不再被观测得到,那问题就是被修复。

或许大家听过Heisenbug这个词,以下是维基百科的摘录:

在程序设计术语中,海森堡bug(英语:heisenbug)是指在尝试研究它时似乎会消失或者改变行为的bug(程序错误)。该词汇是物理学家维尔纳·海森堡名字的双关语,他最先断言了量子力学的观察者效应——观察系统的行为不可避免地将改变其状态。电子学中的传统用语则是探针效应,指连接一个测试探针到设备将改变其行为。

类似的词语有玻尔bug(bohrbug)、曼德博bug(mandelbug)和薛定谔bug(schrödinbug),它们偶尔被用于指代其他类型的非寻常软件缺陷,但通常以开玩笑的心态使用。

很多时候,我们对bug进行排查、重现,这个bug就是不出现,或者更糟糕的是:随机出现。

所以,我们不应该只修复症状,而应该找到根源问题,并且修复之。

 

爆栈服务

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。