软件没那么简单

计算机系统是“傻瓜”

首先,我们必须认识关于计算机系统的一个“真相”:计算机系统是一个彻彻底底的“傻瓜”,它的每一个功能都必须由人准确地告诉它如何去实现,任何一丝一毫的偏差都会造成其功能和人的预期不符。所以,开发一个软件系统,就是人告诉计算机如何实现功能的过程。而计算机完全不懂人的语言,人必须通过一种(或多种)“编程语言”将人的意图翻译给计算机听。这是今天所有计算机系统开发的本质。记住这一点非常重要。

这样一张简单的表单,背后是极为复杂的计算机功能

今天大部分人经常接触的计算机系统,比如App(如头条、抖音、微博)、Web 页(如百度、各种 站等),基本上由三部分组成:界面层,应用层和数据层。界面层的作用是向用户展示,和用户交互。应用层负责处理逻辑判断的事情,比如用户输入了错误的信息,就要发出告警,不能把错误数据传输到数据层。而数据层用于存储数据和信息。

大多数应用都包含这3层结构

一般来说,界面层由专门的前端程序员或App程序员开发,应用层和数据层由后端程序员开发。有些大型企业或大型系统,数据层甚至单独拿出来,由专门的工程师负责。记住这一点也很重要。

  1. 用户名、简介是文字类信息,
  2. 性别、地区是字典类信息(意思是这些信息不是用户自行输入,而是从一个字典里选择的),
  3. 背景图、头像是图片信息,
  4. 生日是日期类信息。

由于信息的类别不同,它们在数据层的存储位置和存储方式就不能相同(知道这一点就可以了,如果深入研究的话,就得写一篇博士论文了)。所以,至少在数据层,会涉及到数据库和文件存储。而这些数据通过什么关联起来,也是需要各种信息去支持的。因此,虽然只是简单的7个信息,实际上,在数据层,恐怕有更多的数据用来处理它们。这些数据怎么组织,怎么存储,以及怎么供外部(比如上面提到的应用层)调用,都需要工程师设计、开发。

继续往前看,应用层会处理数据的一些业务逻辑,比如简介这个信息不能超过30个字。然而应用层本身是不存储数据的,它的数据来自于数据层或界面层,因此,应用层和其它两层之间有一个叫做数据接口的东西。可以简单把它理解为插座,三口插头插不进两口的插座,反之亦然。所以,应用层访问数据层,必须符合数据层的接口,而界面层和应用层的数据交互,也必须符合应用层的接口要求。前面提到,界面层和应用层的开发通常分由两个人负责,那么这两个人就必须对接口有共同的理解,不能你说应该传 123,我非要传 456,那么系统肯定没法正确处理。

最后到界面层,这是用户最直接感受到的部分,也是用户最挑剔的部分。布局是不是合理、颜色是不是好看、交互是不是方便,相信我,一百个人有一百个看法。就说界面的样子,每一个组成部分的尺寸、颜色设计,严格意义上都需要一个叫做UI设计师的家伙来设计。然后才能交给前端工程师或App工程师用程序语言实现。很多人误解只要画个草图交给程序员,他自然就做出来了。其实程序员离开了UI设计师的设计,真的是一头雾水,让程序员按照草图去做开发,结果很可能是不堪入目。这还只是界面的表象,如果继续考虑交互、和应用层的接口,那就更复杂了。就拿头条这个表单来说,其数据输入就有好几种方式:

  1. 文字输入方式:昵称、简介
  2. 上传或选择文件方式:头像、背景图。头像可能还涉及调用手机的摄像头、照相机功能。
  3. 单项选择方式:性别
  4. 日期选择方式:生日
  5. 关联多级选择:地区

以上描述的,还仅仅是一般的数据展示和输入,实际情况更加复杂。举几个例子:

各层之间的安全控制问题。比如有人(我们常说的“黑客”)冒充界面层向应用层发起请求,要求查看某个或某些用户的信息,应用层不能傻乎乎地就把数据交出来吧。

信息的审查机制。如果有人恶意地在简介里写下反动、淫秽或者中伤他人的话,头条就需要检查并且拒绝这种对信息的修改。怎么实现这个功能呢?首先可能是另一套计算机系统(传说中的极为复杂的“大数据”“人工智能”“分析引擎”)对简介进行扫描,如果发现问题或拿不准的情况,会提交给一个人工审查系统(对,又是一套计算机系统),人工审查员检查后,发现确实有问题,就会驳回用户的信息修改。然后,“个人信息修改”这个功能就会执行blahblah一堆后续的操作……

到此为止,还都是常规操作。再进一步,我们可以看到更复杂的情况,比如:

头条的用户有好几亿,每天同时在线的活跃用户也以亿计。而每次用户打开头条,必然会读取这个信息。想象一下,好比你去包子铺买包子,就一个窗口一个收银员。你一个人去买,感觉不出什么,同时来10个人,收银员和等的人就会感觉有点乱,如果来100个人、1000个人呢。在我的职业生涯中,亲身体会过 络流量向计算机系统涌来,把所有的带宽占满,或让计算机的CPU超过100%运行,系统崩溃,用户完全打不开 页的情况。就跟一个小小的包子铺一下涌进1000人买包子一样。

我常常听到某个老板说,我们的系统现在用户少,用1台服务器,将来用户多了,我们直接增加机器就好了。每当这个时候,我就有一种深深的无力感。支持不同级别的用户需要不同的系统架构,而这需要在系统建设伊始就进行规划。那老板说了,我们按照1个亿的用户来设计。大哥,要实现1个亿用户的系统设计,得花多少银子啊!您确定自己在还没多少用户的时候掏得起这个钱吗?

普通人看到的软件界面只是计算系统的冰山一角

对普通人来说,下一次,当你用一个你喜欢的软件(比如头条、抖音、微博、爱奇艺……)时,想象一下,背后其实有无数的码农、服务器和程序在为你服务呢。这也是一件很有趣的体验。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年8月17日
下一篇 2020年8月17日

相关推荐