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