IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    那些程序员们都相信过的九大谎言

    Hunter发表于 2017-03-30 07:30:03
    love 0


    下面看看很多程序员都相信过的谎言,不过也不用沮丧,毕竟程序员也只是凡人。

    1、一个问题只有一个答案

    关于这个,最简单的可能是关于电话号码的谎言。如果你认为一个人保存一个电话号码就像在数据库中放7个或者10个数字一样简单,你就错了。数据库表中的每列最多只有一个条目,如果一个人有多个电话号码该怎么办?如果一个人在多个国家有住房,每个地方的国家代码也不同,这时表就会失败,然后数据库设计人员就创建了可以存储多个答案的一对多和多对一映射,找出了一些解决方案。一些更现代化的NoSQL解决方案使用“文档”模型,将所有可能的答案与不同的标签聚集在一起。

    这些解决方案虽然好,但还是有限制。有时答案只在短时间内有效,比如停车位的规划可能是合理的,但除了下午4点至6点之间的高峰时段以及周末。潜在的例外情况列表是无法想象的,但无论如何,数据库都将通过存储问题的最终答案来模拟现实,答案越正确,模拟便会越真实。

    2、NULL是可以接受的

    有时候,写了一半的Java代码,想先检查指针是否为NULL。有时会试图在库上绘制一个边框,并且只在入口处(API对其他代码开放的位置)进行测试。这简化了一些事情,但当程序员想要进入库,并使用其中的一个小方法时,才发现测试根本无效,周边也已经被破坏。

    了解如何处理这个问题是现代语言设计的一个大问题。一些语言使用问号来检查无效,虽然有帮助但它并没有摆脱这个问题。简单的一个Null便使面向对象编程混乱且多变。

    3、人际关系可以被记录

    当某些地区同性恋婚姻合法化时,一名聪明的数据库管理员认识到,人际关系需要被重新定义了,而这个工作量远远超过我们的想象。为了解决这个问题,DBA在考虑如何处理这个挑战,随后诞生了众多数据库模式,每个都很复杂。最后DBA们得出的结论是,“最简单的解决办法就是彻底禁止婚姻。”

    但记录婚姻只是开始。想象一下,如果你正在为学校建立一个数据库表,以了解学生的基本信息,确定该由哪些成年人来接送孩子时,这个关系就变得极其复杂了。你可能会试着用一个“复杂的”条目来做这件事情,但会极大地增加代码的出错率和维护难度。

    4、Unicode代表普遍的沟通

    各种社交软件的兴起,带火了各种表情包,人们沟通交流时也会选用合适的表情来表达自己的想法,但其实这背后有一个委员会在很认真地讨论什么样的表情应该放在表情包中,什么样的设计可以更好地表达人们的想法,如果还要在图片上配字,还要考虑字体、颜色等等问题,不同品牌、不同版本的手机还会有不同的设置,这绝对不是一件简单的事情。

     5、数字是准确的

    大数据技术近年来风头正盛,很多程序员纷纷干起了数据挖掘、数据分析,计算机行业对数字的迷恋更深,硬盘上充满了数万个数字,随之而来的是各种算法,以期从这些数字中提取有价值的信息。

    在现实中,数字只表示非常具体的事情。数据确实非常有用,但它们并不完全准确,只是说可以用来预测一些事情。

    6、人类语言是一致的

    程序员开发一段程序时,通常是很灵活的,尤其是对文本的定义上。比如,你打开一个导航软件,输入你想去的目的地,即便输入时添加了多余的字符,系统也会匹配到相应的地址,所以不要完全相信人的输入,而要匹配最佳结果,一般的软件都会保留这样一个精巧的算法,用于将任意随机文本转换为规范形式,这对程序员的挑战也不小。

    7、时间是一致的

    大部分人的认知中,每天都是24小时,如果身为程序员的你也这么认为,那你最好先不要写时间相关的代码了,因为如果有人在美国东海岸上起飞并在西海岸登陆,那天会持续27个小时。更不要提地球上各种经纬线交错下,不同地区的时差、节令的变化了。

    8、文件是一致的

    系统内的很多文件似乎都在未经许可的情况下访问了我的信息,每当我要求我的Mac检查文件系统并修复错误时,它总是告诉我一个很长的“权限错误”列表,有的时候甚至在未经许可的情况下,电脑上多了一堆垃圾软件,有时甚至想格式化整个电脑,然而那样做会让数据丢失,所以,程序员在应用开发上是否应该考虑解决这个问题呢?

    任何程序员都会告诉你,你的电脑内有数百个文件示例包含我们不期望它们包含的内容。而数据库公司被支付了大笔钱,以确保数据能够以一致的方式写入,即便如此,还是会发生问题,所以应该怎么做呢?

    9、程序员控制整个编码过程

    当程序员在写代码时,就会发现自己其实被计算机控制了,因为所有程序员写代码时都会考虑以计算机可以看懂的逻辑展现出来,之后代码会进入编译阶段,此时代码也进入了操作系统的掌控之中,编译阶段的代码没准会有一些微妙的变化。

    如果从头开始编译Linux内核,只安装我们已经审核的代码呢?还是不行,BIOS首先在计算机上传输,并且可以秘密地对代码进行微妙的更改。如果你正在云端运行,虚拟机管理程序具有更多的权力。如果用自定义启动加载程序替换BIOS呢? 你离正确答案越来越近了,但还有很多固件埋在你的机器里。磁盘驱动器、网卡都可以自己思考。即使是驱动器也有一个内置的处理器,所有这些嵌入式处理器可能都隐藏了恶意软件,可悲的是,这一切我们都不曾察觉。



沪ICP备19023445号-2号
友情链接