登录 立即注册
安币:

查看: 3839|回复: 10

那些程序员们都相信过的九大谎言【Bus Weekly】45期

[复制链接]

32

主题

34

帖子

5678

安币

管理员

Rank: 9Rank: 9Rank: 9

发表于 2017-4-5 16:33:48 | 显示全部楼层 |阅读模式
   

那些程序员们都相信过的九大谎言
如今,大家似乎越来越相信计算机的能力,更加期望将现实变成一段段代码,程序员也因此感到自豪,因为程序员有能力通过代码传达他们的想法,有机会改变现实,越来越多的事情开始依靠电脑来界定如何运作,程序员也变得越来越强大。

事实上,程序员的能力非常有限,只有完美的代码才足以满足我们的幻想,而完美的代码往往毁于程序员的一念之差,大部分程序员编程前总是先想好逻辑再下手,然而最致命的错误往往就是逻辑有误,当然有时电脑也会出错。许多问题源于程序员所做的假设根本不正确。正如马克吐温所说,“(译)不是你不知道会让你陷入困境,而是你所知道的确实不是这样。”

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

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呢? 你离正确答案越来越近了,但还有很多固件埋在你的机器里。磁盘驱动器、网卡都可以自己思考。即使是驱动器也有一个内置的处理器,所有这些嵌入式处理器可能都隐藏了恶意软件,可悲的是,这一切我们都不曾察觉。

来源:it168



【Bus Weekly】45 期




【一周优秀博文】

Android登陆页面仿拉钩动效,你总会需要它!
http://www.apkbus.com/blog-719059-63447.html

App冷启动,你还要我怎样?
http://www.apkbus.com/blog-719059-63436.html

Android:如何从堆栈中还原ProGuard混淆后的代码
http://www.apkbus.com/blog-705730-61887.html

Android7.0适配心得
http://www.apkbus.com/blog-705730-61857.html

Android ARM下的的so注入
http://www.apkbus.com/blog-705730-61822.html

有没有必要阅读 ANDROID 源码
http://www.apkbus.com/blog-705730-61721.html

Android Studio 的 10 个你很有可能不知道的技巧
http://www.apkbus.com/blog-705730-61720.html

Android使用 SO 库时要注意的一些问题
http://www.apkbus.com/blog-705730-61719.html

Gradle实现的两种简单的多渠道打包方法
http://www.apkbus.com/blog-705730-62665.html

Android逆向分析APK的打包与安装
http://www.apkbus.com/blog-705730-62667.html

【一周Android精品源码推荐】

Fragment完美嵌套
http://www.apkbus.com/thread-265917-1-1.html

RxJava 和 Retrofit 结合使用的几个最常见使用方式举例
http://www.apkbus.com/thread-265889-1-1.html

使用MVP架构的一个图片查看项目
http://www.apkbus.com/thread-265738-1-1.html

我的心中只有你【客户端】
http://www.apkbus.com/thread-265729-1-1.html

京东 Android 客户端样式的级联地址选择器
http://www.apkbus.com/thread-265684-1-1.html

高仿真哔哩哔哩动画客户端
http://www.apkbus.com/thread-265265-1-1.html

基于RecyclerView的封装支持下拉刷新,上拉加载更多
http://www.apkbus.com/thread-265256-1-1.html

仿某直播app实现直播画面与互动画面的切换
http://www.apkbus.com/thread-261736-1-1.html

高仿腾讯QQ终结版
http://www.apkbus.com/thread-270437-1-1.html

Android开发之常用的loading等待效果实现
http://www.apkbus.com/thread-270611-1-1.html


【一周优秀库&代码】


Fakeit (https://github.com/moove-it/fakeit)

Kotlin fake数据产生库!

Cicerone (https://github.com/terrakok/Cicerone)

Cicerone是一个可以使安卓应用程序中的导航变得简单的轻量级的库。

data-binding-validator (https://github.com/Ilhasoft/data-binding-validator)

基于数据绑定适配器的安卓字段验证库。

LabCoat (https://github.com/Commit451/LabCoat)

适用于安卓系统的GitLab客户端。


优秀博主: suisui0614

精品源码热心巴友:muxiangzhou

问答区热心巴友:
lilongfei0504

see you 咱们下期见~
安卓巴士官方微博链接


Bus Weekly回顾




[官方活动] 安卓巴士菁英会会员招募中~

安卓巴士线下活动【主题】【形式】我做主!!回复可得50安币~

http://www.apkbus.com/thread-266712-1-1.html?_dsign=88e7cfaf

【独家】老罗最新一季Android教学视频之旅(总汇)



致安卓巴士版主(及2016年版主招募计划启动中!)



原创文章,2016年APKBUS助你上头条


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0

主题

9291

帖子

2424

安币

Android大神

Rank: 6Rank: 6

发表于 2017-4-5 16:56:47 | 显示全部楼层
写的真的很不错

4

主题

9540

帖子

809

安币

代码手工艺人

Rank: 4

发表于 2017-4-5 16:58:17 | 显示全部楼层
感谢大神~

14

主题

9308

帖子

4743

安币

码皇(巴士元老)

Rank: 8Rank: 8

发表于 2017-4-5 17:14:38 | 显示全部楼层
感谢大神~

20

主题

9137

帖子

2364

安币

Android大神

Rank: 6Rank: 6

发表于 2017-4-5 17:19:08 | 显示全部楼层
好好 学习了 确实不错

0

主题

1万

帖子

2418

安币

Android大神

Rank: 6Rank: 6

发表于 2017-4-5 17:20:28 | 显示全部楼层
mark,收藏了

7

主题

9822

帖子

2346

安币

Android大神

Rank: 6Rank: 6

发表于 2017-4-5 17:21:18 | 显示全部楼层
感谢分享,安卓巴士有你更精彩:lol

60

主题

1614

帖子

5238

安币

码皇(巴士元老)

Rank: 8Rank: 8

QQ达人突出贡献元老勋章灌水之王热心会员原创勋章资源达人终身成就奖推广达人明星会员最佳新人签到达人

发表于 2017-4-8 23:28:43 | 显示全部楼层
我只是路过打酱油的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区
联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表