技术分析下!美社安烂账有人出来洗地
昨天遇到个不懂但自信的人,忍不住写了DEI是个什么东西。其实呢,很多人都知道DEI是啥玩意,途径有三:
亲身惨痛经历
工作需要,必须了解DEI,接受了正规培训
出于兴趣,上网搜索
有第三条途径,就说明了DEI也不是啥高深内容,普通人能自己搞明白的。但今天想说下社安烂账,是因为有专家出来洗地,还有很多半懂的人说些似乎有理的辩解,感觉要是不来个专业分析,还真能让他们把水搅浑了。
马斯克爆料:社安系统内存在大量寿星,第一名高寿360多!然后有IT专家洗地:美国IT专家大卫·吉尔伯特表示,这背后的真相其实很简单,就是早期使用的COBOL编程语言带来的误会。他举出一个例子:在马斯克贴出的统计中,150岁这个年龄段的老人异常多,这恰好说明这个bug可能出自计算机系统的缺陷,而非人为造假,否则的话,造假者完全可以把数据做得更加“平滑”。大卫·吉尔伯特解释说,在COBOL语言中没有日期这个数据类型,因此只能用字符来占据位置。当遇到出生日期不完整、资料缺失的时候,系统可能自动使用一些基准数据来填充空格,最常用的就是1875年(“米制公约”签署的年份)。到了2025年,系统中这部分出生日期显示为1875年的人,刚好显示年龄为150岁。然后还来了威胁:科技网站Fast Company担心的是,马斯克手下的年轻团队显然没有听说过COBOL这种早期的编程语言,如果他们贸然决定修改代码,后果可能不堪设想。“COBOL语言其实很脆弱,每做一处改动都需要经过大量的安全测试才行。如果这些年轻工程师们随便在后台修改代码的话,有可能某一笔救命的医疗补助就无法按时发到位。”本来这地洗的一点都不好,马斯克明明爆料寿星高达360多岁,你光解释个150岁就行了?结果我发现还真有人信,连那个威胁都有人信。只能说专家出马,还是挺能唬人的。
一条一条批吧。
1. 在马斯克贴出的统计中,150岁这个年龄段的老人异常多,这恰好说明这个bug可能出自计算机系统的缺陷,而非人为造假,否则的话,造假者完全可以把数据做得更加“平滑”。这种话骗谁呢?拜登曲线知道吗?造假水平取决于谁造假。要是让数据专家造假,是可以做的很好,但当初造假的人确定是专家?或者说确定不是DEI上去的专家?
2. 在COBOL语言中没有日期这个数据类型,因此只能用字符来占据位置。
早期的语言都没有日期这个数据类型。为什么?因为不必要。现在的编程越来越傻瓜化,编程语言提供了很多数据类型以及相关操作,写程序很容易。当年我们作业算一人以天计算的年龄,都是读取整数类型的出生年月日,然后自己写程序考虑各月多少天,还有闰年效应,算出来的。只有傻逼才会用字符类型来保存年月日。
3. 当遇到出生日期不完整、资料缺失的时候,系统可能自动使用一些基准数据来填充空格,最常用的就是1875年(“米制公约”签署的年份)。
一个很基本的要求是程序必须能处理异常数据,包括数据缺失。
数据缺失是可以用基准数据来填充,但有两要求:
基准数据不能出现在正常数据里。比如用1875年填充缺失的年份,那就要确保没有人是1875年生的。这里不仅仅包括活人,还有存档的死人数据。
按这标准,1875不是个好的基准数据。为什么不用-1?程序以后可能由其他人维护,用-1,一看就知道是基准数据。
处理数据时首先要判断是不是基准数据,如果是,必须有特殊代码处理。比如读到1875年出生,必须输出岁数未知,而不能傻傻的算出个岁数。
所以使用基准数据不应该造成错误,除非程序员傻逼。
4. 马斯克手下的年轻团队显然没有听说过COBOL这种早期的编程语言,如果他们贸然决定修改代码,后果可能不堪设想。
马斯克手下的年轻团队是可能没听说过COBOL,但谁改代码时发现语言不会,还敢改的?印度程序员?
这句话还有个隐藏错误,修改错误数据需要改代码?数据和代码混成一团,那除非是最最底层的机器语言,汇编语言都不会这样。还有人说数据改了,代码必须改,才能正常工作。他大概以为这是千年虫这种问题?千年虫的问题不光是数据,是代码本来就有错,读年默认只有两位,然后在前面加19,结果到了2000年就出错了。如果代码本身没有问题,只是数据有错,比如人工输入把生年1975敲成了1875,那么只要改数据就行了。
我的结论是,社安数据有问题,而且不是小问题。分配社保编号的人比总人口还多6000万。2023年美国人口3.349亿,按这个算就是多出约18%。2000万人的年龄超过100岁,这要是人为敲错,就是输入错误约6%?这样的员工还不开除?
有人说这只是数据错误,这些寿星也未必就领钱了,否则马斯克怎么不爆料?没看新闻吗?为了不让马斯克看领钱的数据,社安局长宁愿提前退休!这些人说不定还真领钱了,钱到哪就得查了。
jolly11