博客园整改之思考_整改思路

博客园整改之思考_整改思路在博客园写博客写了三年半的时间了,当初为什么会选择在博客园写,我也记不清是什么原因了,或许这大概是缘分吧。今年3月份后半段的时候,博客园突然访问不了了,如今通过搜索资料,仍然发现有部分文章访问不了,


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在博客园写博客写了三年半的时间了,当初为什么会选择在博客园写,我也记不清是什么原因了,或许这大概是缘分吧。

今年3月份后半段的时候,博客园突然访问不了了,如今通过搜索资料,仍然发现有部分文章访问不了,如下图所示:
博客园整改之思考_整改思路

博客园给园友致歉,内容如下图所示:
博客园整改之思考_整改思路

从这张图中引发我的一些思考,最核心的一句就是:
7天还17年欠下的债(网站运营工作),四两拨万斤,我们的任何努力都是杯水车薪。

一、技术债务的思考

技术债务又称代码债务。定义如下:
交付第一次代码就像陷入债务。 债务是可以加快开发速度,只有通过重写代码,及时偿还债务。如果不偿还债务,就会发生危险。 把时间花在写一些不正确的代码上的每一分钟都算作该债务的利息。 整个软件项目可能在未合并代码的部署,面向对象设计或其他方面的债务问题而陷入停顿-著名的计算机程序员沃德·坎宁安

在创业公司的时候,从智能酒店+智能门锁、快速开发平台、编程教育平台到电商平台二次开发等,写了大量的代码(至少十万行代码量,不含空格),代码虽然写的多,但技术债务也不少,这导致的一个结果就是bug越写越多,最后不得不以周末的时间来改bug。

1.为什么bug越写越多?以我的经验总结如下:

  • 写之前想的太少,没有想清楚就直接开敲,一切凭感觉(凭感觉写代码,在没养成良好的编码习惯和研发制度的约束下,凭感觉写代码很不可靠);
  • 工期紧,任务多,注重功能实现,忽略实现细节(对输入进行参数校验、复杂的业务逻辑处理考虑过于简单、不合理的数据库/IO操作、无异常机制或大量不必要的try/catch等)。

2.那么如何减少bug率?

  • 团队编码规范一定要落实(可以参考阿里巴巴的Java开发规范);
  • 每写完一个功能,一定要自测(如果你平时bug率很高一定要这样做,当你的bug率大幅度降低时不一定都要自测(可能代表你逐渐养成好的编码习惯),不过我的习惯是不管代码bug率多么低,一定要自测);
  • 代码Code Review(不管是Review自己的或者还是其他人的,多少都会有些收获的);
  • 一定要有责任心(记得当初在创业公司的时候,整个后台的前后端都是由我和另外一个同事负责,我们俩写了一堆bug,整个后台管理系统可用性非常差,根本原因就是我们责任心缺失,写的很随意)。

3.技术债务如何从源头控制?

此次博客园被审查,很大原因是因为对于内容审核不严,内容审核太松的话,某些非法分子就会借此进行非法宣传和传播,最后遭殃的一定是平台,微信公众号在这块就做的很不错(可以借鉴)。之前在纵横网写小说的时候,发现纵横网的内容编辑器对内容审核还是比较严的,特别当内容出现违禁词的时候,强制性不准发布。

回归正题,技术债务如何从源头控制住?或者是已经发生要如何控制?

  • 制度(光靠人的主观能动性是不行的,还要从制度上约束,合理的制度能充分调动人的主观能动性和积极性);
  • 定期团队内部培训(代码规范、业务讲解、问题复盘、技术分享);
  • 工程师要有主人翁的意识(开发前熟悉业务和理解需求、开发时画流程图(针对业务逻辑复杂的)和写代码遵守公司代码规范、开发后自测);
  • 定期处理技术债务(功能实现了,但可读性和可扩展性非常不好需要重构,定期抽时间处理不一定要一口吃一个大胖子);
  • 推行代码Review(利于发现系统的技术债务,同时也是为了提高团队的编码质量,好的推广落实,不好的引以为鉴)。

二、面向搜索编程受阻

平时开发基于以往的经历(踩过的坑),基本上能解决开发过程中的不少问题,但面对有些问题还需要搜索,没有搜索很难进行的下去。
这次说的面向搜索编程搜索受阻,不是指不会用搜索引擎,而是指我想要搜的关键信息,其中有一篇文章在博客园平台,但因为博客园平台整改,看不到我想要的信息。于是我便只能转向CSDN、思否、简书、StackoverFlow或其他个人博客,从中得到我想要的信息。
不禁想起导师曾写过的一篇wiki关于技术管理的,其中提到一点
“一定要自己把问题搞清楚,不要寄希望于别人来帮你搞清楚事情,可以借助别人的帮助,但不能过度依赖”
对于面向搜索编程时,有些时候我会犯这样的错误,只是看到报错部分的信息,没有注意到是那一行出现这样的错误,就直接搜索了(有些时候这样的搜索很低效,因为你没有弄清楚真正的错误是什么),这种情况就是过于依赖搜索引擎,不过好在这种现象自去年下半年和至今基本犯的比较少,这或许是一个好的兆头。

1.面向搜索编程让我看到自身的一些不足?

  • 基本功有待加强(体现在Java中对String、List、Set、Map、I/O和多线程的合理应用,应用不等于合理应用,当然了不仅仅是Java);
  • 没有总结出自己的代码库(最直接的体现没有将以往的工具类总结出来,直接网上复制(不少代码是有问题的)或者将之前公司的代码迁移过来,总结自己的代码库不仅仅是为了方便以后复用,也是为了更好的深入理解)。

2.如何避免面向搜索编程形成的机械思维?

面向搜索编程有利也有弊端,

  • 利是能在一定程度上提高学习或工作效率;
  • 弊是如果过于依赖大脑会变得不思考,长此以往,不利于长远发展。

这里提到的如何避免面向搜索编程形成的机械思维或者是依赖性思维不等同于不使用搜索引擎。

刚好之前有一个活生生案例,是我写的一个复盘,文章如下:
ssh问题之复盘

这篇文章提到的问题,问题的根源在于我没有弄清楚真正的问题是什么,仅仅是依据是没有权限导致重复输入密码,结果是没有找准问题的关键,搜索了一堆,参考了网上各种解决办法都没有解决这样的问题(花费大量不必要的时间,仍然没有解决)。最后冷静下来,复现这个问题,一步步来,才找准了问题的根本原因。

面向搜索编程的机械思维也可叫惯性思维,这种惯性思维会让我们产生一个错觉(前面提到过),当遇到一个问题时,我们看到错误信息,只看一部分不看很整体,发现解决不了就直接复制一些关键字搜索,其实这些问题原本是不需要搜索的,错误信息看全了,定位到关键代码(必要时可以借助Debug)实际是可以解决的。

作为程序员平常工作中用到搜索引擎,主要为如下几个方面?

  • 个人学习(网上教程、博文、在线视频、技术官网等);
  • 工作中高效解决问题(站在巨人的肩上,前人踩过的坑,我们不必从头来过)。

过去近几年的时间,我过于依赖搜索给我带来的一些快感,这些快感让我养成了问题的浅度思考习惯(所谓问题的浅度思考习惯指仅仅满足于问题的解决,而不去深究问题背后的原因以及如何避免类似的问题再现等)。

说了这么多,那么我们如何避免面向搜索编程形成的机械思维?
答案很简单,那就是多给自己提问(凡是多问个为什么),随着不断提问和回答所提的问题,问题的本质也就找到了,本质定位到了,对应的解决方案自然会有,这一个过程中,深度思考能力也在不断提升。

当然了突破人的惯性很难,习惯一旦养成,不是一两天就能改的掉的,所以我选择用复盘来提高自己深度思考的能力和看问题的视角。

三、总结

舒婷有一首诗叫做《这也是一切》,其中有一句我印象深刻,即”一切的现在都孕育着未来,未来的一切都生长于它的昨天“,从18年到至今,我比较关键的三年经历(从2018年初到至今),深刻地验证着这句话。这关键的三年有太多的经验教训,我都没有好好复盘总结过,导致至今还时不时犯这些错误,不过好在近来定期复盘一些事情,能规避不少曾经的错误。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167896.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 原码补码反码在线计算_补码的补码是原码

    原码补码反码在线计算_补码的补码是原码[-3]反=[10000011]反=11111100原码反码负数的补码是将其原码除符号位之。两个说法都没有错,我们举个例子来看看就明白了:1、10001的补码是取反后在再加1,也就是11110+1=11111;2、如果是11111变回原码呢?我们可以采取逆过程先减1,.(1)原码表示法原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示。设有一…

    2022年9月17日
  • resnet18 pytorch_pytorch全连接层

    resnet18 pytorch_pytorch全连接层创建各版本的ResNet模型,ResNet18,ResNet34,ResNet50,ResNet101,ResNet152原文地址:https://arxiv.org/pdf/1512.03385.pdf论文就不解读了,大部分解读都是翻译,看的似懂非懂,自己搞懂就行了。最近想着实现一下经典的网络结构,看了原文之后,根据原文代码结构开始实现。起初去搜了下各种版本的实现,发现很多博客都是错误百出,有些博文都发布几年了,错误还是没人发现,评论区几十号人不知道是真懂还是装懂,颇有些无奈啊。因此打算自己手动实

    2022年10月7日
  • 7. QFile读写文件的基本操作「建议收藏」

    7. QFile读写文件的基本操作「建议收藏」QFile的基本读写操作

    2022年5月4日
  • 一款小清新版的java代码生成器,springboot脚手架「建议收藏」

    一款小清新版的java代码生成器,springboot脚手架「建议收藏」在我们进行软件开发的时候,很多都只是单纯的增删查改,没有太大的技术含量但是却非常占据我们开发的时间,而且如果稍微一不注意,细节的bug就可能耽误一上午的时间,得不偿失,届于此,自己动手开发了一版代码生成器,java在代码自动化方面做得确实不够好,瞧瞧人家.net,算了,不说了,进入正题吧!首先让我们看一下这款生成器的界面整体…

    2022年5月13日
  • CardView_cardminder是什么软件

    CardView_cardminder是什么软件本文介绍CardView这个控件的使用,CardView继承至FrameLayout类,是support-v7包下的一个类,使用时必须引入cardview依赖包,可在下载的sdk文件夹中找到。。。使用CardView可以实现卡片式布局效果,非常好看,卡片还可以包含圆角、阴影、背景。CardView是一个ViewGroup,布局时包含其它的View从而实现优雅界面效果。首先来看看个界面效果:…

    2022年10月11日
  • 冒泡排序详解_超详细电音

    冒泡排序详解_超详细电音1、什么是冒泡排序?冒泡排序的英文BubbleSort,是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。冒泡排序的原理:每一趟只能确定将一个数归位。即第一趟只能确定将末位上的数归位,第二趟只能将倒数第2位上的数归位,依次类推下去。如果有n个数进行排序,只需将n-1个数归位,也就是要进行n-1趟操作。而“每一趟”都需要从第一位开始进行相邻的两个数的比较,将较大的数放后面,比较完毕之后向后挪一位继续比较下面

    2022年10月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号