开发思想 – 代码的4重:重质、重构、重视和重用

重质

好的程序员的代码:前人栽树,后人乘凉。差的程序员的代码:前人挖坑,后人躺枪​。

问一下自己,我们有多少次,复制粘贴代码?数不清,是吧?

我知道有一些开发人员,读这个专业纯粹是因为当年火热,从事这个职业单纯是知道它赚钱,并不是单纯的热爱开发这个创造性事情。

我还知道,有一些开发人员,完全漠视代码质量,他们的想法大体可以总结如下:

  • 不管我写的代码质量多好,总会有人把它瞎改,所以,我没必要写好代码,犯不着!
  • 不管我写的代码质量多好,客户看见不见,产品也不会漂亮写,所以,犯不着!
  • 不管我写的代码质量多好,老板也不会给我加工资,给我升职,所以,犯不着!

如果你觉得自己鹤立鸡群,身边的都是猪队友,那更应该起带头作用,言传身教,把队友的水平逐步提高,你的工作也舒服很多,这样是双赢的。

代码质量决定了产品的性能、稳定性等等,有问题的代码,不但会影响用户体验,更加可能会对客户造成损失,而你的公司会可能因此付出代价,譬如口碑、市场、赔付等。

如果你真的水平过硬,帮助了队友、产品成长,你觉得老板不会器重你吗?

重视

某司,我给一个代码改动做审查,该改动包含了80多个新文件,总代码量不少,然而该开发人员使用的时间却是相对极短的,所以,要么这个开发人员是超人,要么这个代码是复制粘贴过来的。我随机打开一个文件细看,心想:”咦,这些代码怎么看着这么熟悉?我肯定在什么地方看过!“,再检索一下大脑这么多年来记住的那些代码,我确实是9年前在codeproject上看过这个代码。我当年每天泡各个开源网站看优秀的代码,看过不少优秀的开源项目,所以我肯定它就是我看过的诸多开源项目其中一个。打开codeproject一看,果不其然。

使用开源项目在这里不是问题,因为其许可是允许我们使用在商业产品中的,但是,许可明确指出我们必须:

  • 保留其版权
  • 发布版本中保留一份许可

这个开发人员完全无视了这2条要求,他把80多个文件里面每个文件头都有的版权去掉了,许可也没附带上。

而且,他还把代码直接签入到我们的核心代码中,而不是把这些代码作为NuGet包进行合理的维护,其实,这个codeproject上的版本是有一些问题的,GitHub上有其它网友Fork的版本修正了,还在NuGet上发布了类库包。

而且,该开发人员已经白发苍苍,50多岁,还是不懂得尊重别人的代码。

不管什么代码,我们都应该敬而畏之,不管是害怕它造成问题,还是当宝贝那样珍惜。

不管我们是什么水平,年纪多大,如果要别人尊重我们的代码,我们首先要尊重自己的代码,写高质量的代码,还需要尊重别人的代码。

代码的重构和重用

我们下一篇文章继续详谈。

爆栈之旅

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

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

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

版权所有

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

开发思想 – 不确定性雪糕筒、薛定谔的猫、海森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个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

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

版权所有

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

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

一技防身

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

全栈

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

那该掌握什么?

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

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

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

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

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

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

 

爆栈之旅

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

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

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

版权所有

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

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

目录

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

 

 

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

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

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

版权所有

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

第十讲-数据存储-基础

目录

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

 

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

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

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

版权所有

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

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

目录

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

 

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

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

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

版权所有

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

爆栈之旅-.NET-面向对象与调试

目录

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

 

 

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

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

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

版权所有

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

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

目录

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

 

 

 

 

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

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

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

版权所有

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

爆栈之旅-第六讲-.NET-基础

目录

这是爆栈之旅的1对1私人定制授课的第六讲,手把手实战开发,视频+讲义+问答+测试+代码审查等等。

 

 

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

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

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

版权所有

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