博客园整改之思考

2024-03-14 08:20
文章标签 思考 整改 博客园

本文主要是介绍博客园整改之思考,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

5548d3787543cfb0e723c92e5b1286e7.gif

bf022b872b98dfd8571757c479b2d16c.gif

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

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

795cea5232590ddca68f86070f7ab77f.png

博客园给园友致歉,内容如下图所示:

96a2e40ca35e7a3a2b1b4f01c4bc34ab.png

从这张图中引发我的一些思考,最核心的一句就是:
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年初到至今),深刻地验证着这句话。这关键的三年有太多的经验教训,我都没有好好复盘总结过,导致至今还时不时犯这些错误,不过好在近来定期复盘一些事情,能规避不少曾经的错误。

70c7f703d0f089ea4fe394185b20e83a.gif

83df8a1dee98ed73382105fd22c91eb2.gif

bb2f45aaa4313b27e5bf29fe9876c108.png

扫码二维码关注我

这篇关于博客园整改之思考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807791

相关文章

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

爬虫阶段思考

内容:写这篇文章是因为最近帮同学改了很多的爬虫代码,感触良多。 我用豆瓣为例,并不是不会用别的,而是这个我个人感觉最经典。然后还会写我遇到的一些问题以及解决方法。 首先,我们得先知道怎样爬取。我用的scrapy框架爬取。 我对此图的理解就是: 从spiders中获得一个请求(REQUEST),通过引擎传递给调度器,之后再返回给引擎,引擎把url封装好后传递给下载器,下载器将资源下载好后

关于微信没有接入鸿蒙NEXT的思考

6月21日,纯血鸿蒙发布,国内的质疑声终于停止,不再被人喊叫换皮 Android 了.就连编程语言都是华为自研的。 可是发布会后微信却成了热点,因为余承东在感谢了一圈互联网企业,如:淘宝、支付宝、美团、京东、抖音、今日头条、钉钉、小红书、微博、B站、高德、WPS等等. 唯独没有感谢腾讯. 中国互联网巨头只有哪么几家,腾讯、阿里、字节、拼多多、美团、百度、京东、华为 他们这些派系又诞生了无数

基于RAG的知识库AI代理机器人,问题思考

基于RAG的知识库AI代理机器人,问题思考 知识库内容分类 对于普通非qa问答格式的知识内容 在分段存储时,需要手动调整,保证每个分段的内容意思完整,不被分割,当然段落也不宜过长,保证内容表达的意思到不可分割为止就行 对于qa问答格式的知识内容 通常需要对问题增加格外索引,因为fastgpt的模式是将问题和回答,作为完整的文本作为向量化的坐标,当问题和回答的内容过长时,使用问题向量化匹配

JMeter对博客园进行性能测试

原文转自:http://www.cnblogs.com/yjlch1016/p/8320546.html 现在有这个一个场景: 普通用户在未登录的状态下, 先打开博客园的网站, 然后搜索JMeter的相关文章; 那么我们要对博客园进行性能测试, 分别模拟在100个、200个和300个并发的情况下, 博客园服务器的性能怎么样; 需要注意的是, 本次的场景是: 用户第一步同时打开博

关于后台实践的一些疑问、思考与建议

1. 关于工具类 建议一个公司或者一个产品线的项目,使用统一的工具包,而不是每个项目都建立自己的工具类。包括一些枚举类,基础抽象类等也建议加到项目的基础工具包中。 如果要在自己项目中编写的工具类,尽量多实现一些常用的函数。或者让工具类直接继承一些框架中的常用工具类,如StringUtils可以继承common.lang中的StringUtils。 2. 关于日期和时间 从contro

一个问题的思考

问题:在32位的机器上对long型变量进行加减操作存在并发隐患,那么到底是不是这样的呢? 分析:long类型是64位,所以在32位机器上,对long类型的数据操作通常需要多条指令组合出来 ,无法保证原子性,所以并发的时候会出现问题。 对于JAVA并发编程中的一些问题: 可见性问题: 对于可见性,我们先看下定义: 可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到。并发问题往往都是

Android不能调用java.awt的原因及解决办法和思考

android 里面不能使用awt,底层没有具体的实现awt android里面的窗口创建过程决定了界面只能是android里面的组建。 android的组件都是通过远程的IPC调用完成的,也就是说服务端有什么功能才能用什么功能。 不是所有用java写的程序都能在标准jvm中运行的。 android中的虚拟机是修改过的,跟标准的JVM不同,比如对一张图片的解析,android

关于Confluence的解析与思考

买Confluence上CSDN,特殊折扣购买通道:http://bss.csdn.net/module/btc/atlassian/prduct_detail?project=445&module=34&product=10 Confluence是一个专业的企业知识管理与协同软件,一个专业的wiki,通过它可以实现团队成员之间的写作和知识共享。 一、 Confluence开放API接

一道C面试题的思考

一、前言 C语言真的是学无止境的感觉,大部分同学大学都会开设C语言课程。很多人把C语言二级过了就感觉入门了;对于那些在做嵌入式开发的工程师,几乎每天都要接触C语言,很多人会感觉自己C语言学得很溜了。那好,咱们用一道C语言面试题来测试一下。 二、面试题 首先给出题目: 定义一个宏,求两个数中的最大数 OK,很多人应该能很快写出 #define MAX(x,y) x > y ? x :