• 别让“防御性编程”毁了我们的职业


      我一直认为程序员是一个技术和艺术并存的职业。我们的代码不应该是一些单纯的程序文本,而应该更像是一副富有艺术气息的作品,就如同画家作是画家的心血一样,我们的每一行代码都应该被善待和珍视。
      最近,随着一些大厂的陆续暴雷,以及一些裁员风波,我在不少自媒体平台都刷到了关于新式“防御性编程”的段子,初看感觉只是个文娱的文案,但之后回忆过往,再结合自己的工作经历,发现现在这种现象确实是越来越普遍了。

      对一些不太了解的同学,下面我说一说以前和现在“防御性编程”的区别。
     
    以前的“防御性编程”
    现在的“防御性编程”
    定义
    一种谨慎的编程方法,默认外部代码是不安全的,对外部调用不信任,需要自己完成检查和校验,最大限度的保护自己。是一种有效提高代码健壮性的手段。
    通过人为的保留 bug,弱化代码性能、健壮性,通过不写注释,不写文档,提高复杂度等方式,人为降低代码的可维护性,变相提高自己的不可替代性,以达到裁员避雷的目的。
    实现方式
    严谨的编码规范
    定义安全边界
    边界值检查
    权限检查
    异常处理
    保留 bug
    弱化代码性能,为优化保留空间
    不写有效的注释、文档以及提交说明
    引入多余的架构,多层嵌套,超类,超长方法,海量局部变量,复杂化程序结构,提高代码的复杂度
    类型、变量、方法的命名不具描述性
    目的
    得到健壮的代码
    造就“屎山”,让作者不可替代
    针对
    外部代码
    公司和领导
      刚看到那些短视频,感觉有些看不惯,感觉短视频的作者肯定不是开发。但过后想想,又觉得这是一件多么无奈的事情呀!哎~~~
    转眼间十几年过去了,我已经是两个孩子的父亲不再是那个刚出大学的少年了。我还记得,我当时的毕业设计是《基于 RFID 技术的仓库管理系统》,那时还不懂分布式,只是一个简单的 C/S 系统,当时是很用心的在做。在那个时代,我们称程序员和医生是两个不会老的职业,因为,都需要不断的学习实践丰富经历。十年磨一剑,方成架构师。
      随着 Hadoop 的到来,Win Phone 与 Andorid 对局的完败,国内各种去 .NET 化风潮,作为 .NET 开发者,我们迎来了至暗时刻。在那个时候,很多人都转了 Java 或别的语言,或者改做管理、猎头。但即便是在那个年代,也没有出现现在的“防御性编程”。开发者更多是通过对新锐技术的实践,来实现自身的不可能替代性。我们所面临的最大危机,不是35,而是大数据和移动应用的大方向下,语言和技术环境的厮杀。当时,催生了无数的大数据和移动开发培训班。大数据移动开发的高薪低学历门槛,吸引了大量的人员,涌入培训学校,为今天 Java 程序员的惨烈竞争埋下伏笔。(因为大数据培训班比较赚钱,所以 .NET 课程全停了,这也是为什么 .NET 开发会有断层,导致部分老系统,年轻程序员无法维护的原因,.NET体系自身变化很快,新增的多,淘汰的也多,产品线也广,当年的培训断层导致了今天的 .NET 不好招人。)
      从什么时候35岁开始有罪了呢?细想下来,也记不清了。大约是当自己的同事,因为年龄被裁员的时候,我觉得,我也快了,该想想自己今后的出路了。程序员吗,按我的印象,很多人都不善交际,围不住大领导,能进公司管理层的恐怕也是凤毛麟角。年纪大了,有了家庭了就多了份担当。大家都不得不面对35岁危机,很现实,也很无奈。
      想想过往,我接手的那些穿透几十层的代码调用,不知所云的缩写命名,没人敢动的“屎山”代码。这些真的是开发者能力问题吗?还是有意而为之,只为自保?如果是后者我觉得可能他们自保失败了。
      存在即是合理,有人为了有份工作连年龄都谎报,就别说有开发者在写代码时留个后手了。对于这种现象,我只能说”我理解,但我不认同”。市场能够调节供求关系,但这种人为的对35岁开发者的歧视,市场无能为力,恐怕长期都无法改变。目前这种避雷用的“防御性编程”,如果还能走通并大行其道,只能说贵公司项目管理就是垃圾。一个基本的代码检查都做不好的也就自认倒霉吧。对于一个管理过程严谨,有优秀人才把关的企业,这种方式往往行不通。
      从开发者本身讲,虽然大部分人是做开发只是份工作为了养家糊口,但如果长此以往形成习惯,恐怕今后就写不出高质量的代码了。以 .NET 的多线程开发为例,一套东西需要学习的文档在700页以上,从学会到吃透,可能需要1年时间甚至更久。但如果一味的留一手,工作中不用多线程,那最多半年就会忘记的差不多了。所以,从自身职业规划角度讲,我还是呼吁大家能重视自己的代码,不要养成坏习惯,毁了这个职业。对于大部分普通开发者,只有实打实的技术实力,才是我们真正的铁饭碗。
     

     

  • 相关阅读:
    激光雷达:自动驾驶的眼睛
    记录一次clickhouse报错max_query_size超过最大限制
    iOS App上传到苹果应用市场构建版本的图文教程
    c++学习之搜索二叉树
    自动驾驶系列(六)——谈谈车载人机交互技术
    安卓开发面试题
    07节-51单片机-矩阵键盘
    奇异矩阵与非奇异矩阵(广义逆)
    基准测试工具 --- BenchmarkDotNet
    rtl 开发必会技能
  • 原文地址:https://www.cnblogs.com/MeteorSeed/p/17899155.html