jasongreen
一篇《Web开发的重点在前端
》,让我想起了上一年年末的时候,七月十五
前辈的一篇《论PHP的倒掉
》引发了一场口水战
。接下来又一篇《有感于“论PHP的倒掉”
》也发到论坛上,引发更大的口水战
。在口水战中,可以看到很多人一边倒地骂七月十五把PHP和Javascript作比较是一个很无知的论断,让他去看这个书那个理论,让他回家修炼。
但我认为这当中有的人根本没有看懂七月十五说的是什么意思,更没有看到问题的本质。一定要怪七月十五的话,只能说他没有把意思阐述清楚,但是他的理念却正确得很,所谓内行看门道、外行看热闹。
你说前端能和后端比么?后端能和数据库比么?厨师能和服务员抢饭碗么?其实当你回顾一下历史,观察一下现状,你就会发现这些看似不同类型的东西虽然相辅相承、相依为命,但却存在着很微妙的竞争关系。
在互联网革命之前,企业管理软件的开发都是以数据存储(可以是数据库,也可以是具体的存储模型)为中心的,一切都围绕着数据存储来转。所有的程序都只是增强数据存储功能,帮助人类和数据存储工具(比如说数据库)交互的一个辅助型的工具。那个时候,你要搞企业IT应用,好啊,你得先把数据存储的事确定下来,其它都好办。程序嘛,可以找人写,专门为你的数据存储模型来写。操作嘛,可以培训人来用,当然也教他们怎么操作你的存储模型。总而言之一切的关于数据管理的应用,都是在为高高在上的这个数据存储(以数据库产品为代表)擦屁股。那个时候做数据库的可风光了,客户都屁颠颠地来求你帮他们搞数据库,还怕你哪天不高兴了撒手不干。反正我的数据库就是这个样子,你的程序能做就做,做不了你就另谋高就吧。老大,我的数据全在你那里哦,有什么事好说,好说。那时候的数据库产品和今天的Web 2.0网站一样,是百花齐放,也同时奠定Oracle今天成就。不过我们中国大多数的企业并没有经历过这个古老的IT年代,古老得连一个办公室秘书也懂写SQL的年代。
后来不知咋的,互联网革命就爆发了。爆就爆啊,它还要城门失火殃及池鱼,带着一些更为强大的工具(比如OOP)把古老的软件开发的理念给革命了。软件开发的着重点从围绕更接近机器层面的数据存储,往更接近人类的方向挪动了一大步,开始向业务逻辑这里集中起来。原因是这些新引入(并不是新发明)的技术被广泛地运用,使人们能征服更大规模的应用,在花费同样的资源的情况下能处理更复杂业务逻辑。这就引申出一个问题,软件开发的资源是有限的,而整个行业和社会在同一时间推动和发展软件技术的动力也是有限的,归根到底来说是人的注意力和大脑容量是有限的。大自然总体是很公平的,不可能老是让你两全其美,你得到了一些东西,就必须付出一些代价。为了去研究和让系统去处理比往日复杂几倍甚至十几倍的业务逻辑,人们必须把注意力和资源从数据存储模型中解放出来。所谓的两手都要抓,两手都要硬那是不实现的,要真是这样那就意味着你两手都抓得不够硬。那你说以前的那套封建的数据库王权制度,老让人把资源往它那进贡,怎么能解放出生产力?于是大家当然不爽了,不想再把资源往数据存储中投了,一场无声的革命就发生了。而这之中有很多技术作了非常大的贡献,像Smalltalk起到的作用甚至是决定性的(OOP和MVC的概念源自于Smalltalk)。这些软件开发技术都有一个共同点,拆分和封装复杂性、隔离机器层和存储层,把这些阻碍人类和机器对话的东西都关到笼子里去。
这当中有一员的嗓门最大,Java。虽然它不是这些概念的发明者,但却是很有影响力的传播者。Java把一些解放产生力的理念融入其中,而这正是这些理念把这场革命推向胜利。比如JDBC,把具体的数据库实现给封装掉了。从此你开发一个系统时,不再需要先担心你用具体的哪套数据库的哪个版本,因为一但数据库操作封起来的,在上层调用的时候几乎是一样的。连所谓的“低级JDBC”都能够做到,更别说把数据库封了几十层的高级ORM了。又如内存回收机制,把内存回收工作让机器去做了--您放心写,有个GC帮你打扫呢。当然这里面带来的副作用是有的,但不是本文讨论的重点。重点是,有了这些工具,作为一个应用系统的开发人员,不再是每一个细节都为Oracle(或者其它具体的数据库)而考虑、去设计的了。我的重点是放在业务逻辑,只要我的业务层走通了,剩下的就交给工具去为我打理存储的细节。现在应该轮到Oracle来帮应用程序擦屁股了,也就是数据存储沦为应用开发的仆人。可以那么说,这些封装存储操作的工具和方法的广泛使用,使应用层在争夺存储层的王位的战役中,取得了全面的胜利。事实上近年的数据库(特别是大型数据库)不断地增强为应用层服务的组件也正反映了数据存储的以前那种不可挑战的核心地位的全面溃败。不仅如此,应用开发界在赢得了战争之后,也在不断地推陈出新,一直打压数据库的对上层应用的影响力,大有不雪耻辱不罢休的架势。我这里只用了Java来举例,是鉴于它的知明度。但有一些相对不太出名的工具,基于各种语言(包括Java)的都有,把这弱化数据存储件事做得很牛,甚至连数据结构的定义都从数据库中抢走,转移到应用层中。至于具体名字可能大家心里有数,我就不说了,免得被人骂是托。
要是我直接说Java和数据库产生了竞争,就像七月十五说前端和后端产了和竞争那样,肯定是要有大一群人跳出来骂的。表面看来,职责不同的东西怎么竞争?但当你分析这背后的暗流,却发它们确实在竞争着,这种竞争的目的并不是像同类的竞争一样为了消灭对方,而且也不可能消灭对方。事实上应用软件这几十年的发展,不单止没有消灭数据库,反而更依懒数据库了。最好的一个例证是我之前问一个新新程序员,说要让你做管理信息系统,没有数据库你怎么做,他瞪大眼晴像看外星人一样看着我,反问:没有数据库你能做管理系统?
这些不同职责的技术所真正竞争的并不是消灭掉对方,而是在争一个主仆关系,在争谁应该服务于谁。在本文中我说了业务逻辑的技术是怎么和数据存储模型竞争的,我将在下一篇文章中继续扩展七月十五的话题,来讨论一下前端是怎么和后端产生竞争的。当然,我觉得要是和只看标题或者没有看懂全文意思的人讨论的话,会挺浪费时间的。
分享到:
相关推荐
【标题】"Hotel+厨师、服务员.zip"是一个针对初学Java学者设计的项目,它结合了酒店管理和餐饮人员的角色,提供了实践SSM(Spring、SpringMVC、MyBatis)框架学习的机会。在这个项目中,你可以了解到如何在实际场景...
为了防止多个厨师同时修改菜单,我们可以使用互斥锁来确保任何时候只有一个厨师能操作菜单。 2. **条件变量**:当顾客下单后,需要等待食物准备好才能消费。我们可以设置一个条件变量,厨师完成食物后通知顾客,...
有无厨师帽口罩数据集.详细:https://blog.csdn.net/qq_34717531/article/details/122536003?spm=1001.2014.3001.5502 。该数据集分为二个部分,JPEGImages和Annotations.JPEGImages文件夹中有6400+张各种场景的图像,...
数据集格式:Pascal VOC格式(不包含分割的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):2090 标注数量(xml文件个数):2090 标注类别数:2 标注类别名称:["chef hat","head"] 每个类别标注的框数: ...
10. 报告的易理解性与可访问性:为了让非IT专业人员也能够理解和使用报告,报告制作中应当考虑数据的可视化和用户界面设计,这涉及到人机交互界面设计知识。 总而言之,从给出的文件内容来看,可以了解到IT技术在...
6. 多行业多岗位薪酬概况:报告涉及了众多行业的多类岗位,显示了各个岗位的薪酬水平,这不仅限于餐饮行业的厨师岗位,还可能包括管理、行政、技术、销售等多个部门的岗位薪酬数据,为各行各业的薪酬分析和制定提供...
- 数据结构如服务员、房间、餐桌、菜、厨师等,定义了这些实体的属性和关系。 6. **数据流和处理过程**: - 数据流描述了数据在系统中的流动,如服务员信息的变更、菜单的查询等。 - 处理过程涵盖了顾客的点菜、...
数据集标签分2类:分别是“戴厨师帽”和“不戴厨师帽”。适用各种目标检测算法,如yolo系列算法,数据图片包含多种厨师帽,多种实际后厨场景拍摄,数据集质量可靠,纯手工标注,精确无误,经测试YOLOv5准确率达到98%...
2. 薪酬数据分析:报告中提到的大数据系统每年处理超过3000万条薪酬数据,覆盖200个行业和180多个城市和地区,这说明报告基于广泛的薪酬数据进行分析,确保了数据的全面性和可靠性。 3. 行业薪酬介绍:文档内容提到...
餐饮行业的绩效考核是衡量员工工作表现和贡献的重要工具,它涵盖了店长、前厅领班、吧台、厨师长、后厨、服务员、收银员、库管、后勤等多个岗位。这份考核表旨在通过具体指标评估各岗位的工作效率和服务质量,以提升...
数据集-目标检测系列- 帽子 厨师帽 检测数据集 chef_hat >> DataBall 标注文件格式:xml 项目地址:https://github.com/XIAN-HHappy/ultralytics-yolo-webui 通过webui 方式对ultralytics 的 detect 检测任务 ...
Java开发的点菜系统是一个典型的业务流程管理系统,它涉及到多个外部实体,如顾客、服务员、厨师、收银员和系统管理员,以及多个功能模块。以下是该系统的主要知识点和流程: 1. **外部实体**: - **顾客**:发起...
5. **厨师_弹出提示类库**:在移动应用开发中,弹出提示是必不可少的元素,用于向用户提供信息、警告或确认。此库提供了各种弹出提示的样式和功能,让开发者可以自定义提示样式,以适应不同的应用场景。 6. **厨师_...
【高级服务员岗位职责详解】 高级服务员是餐饮业中不可或缺的角色,他们的主要...综上所述,高级服务员不仅需要具备专业的服务技能和知识,还需要良好的人际交往能力和高度的责任心,以确保为顾客提供一流的服务体验。
【餐饮业绩效考核表】是餐饮企业用于评估员工工作表现的重要工具,主要涵盖了店长、前厅领班、吧台、厨师长、后厨、服务员、收银员、库管和后勤等多个岗位。考核表旨在确保各个岗位的员工能够有效地执行职责,提高...
餐饮业绩效考核表店长前厅领班吧台厨师长后厨服务员收银员库管后勤.pdf
6. 点菜信息:服务员号、厨师号、房间号、餐桌号、菜号、点菜时间、是否已做、是否已上 数据结构 数据结构包括以下几部分: 1. 服务员信息:服务员号、姓名、性别、出生日期、参加工作时间、备注 2. 房间信息:...
【餐饮业绩效考核表】是餐饮企业用于评估员工工作表现的重要工具,涵盖了多个关键岗位,如店长、前厅领班、吧台、厨师长、后厨、服务员、收银员、库管、后勤等。这份考核表通过一系列量化指标,确保了绩效评估的公正...
- **概念结构设计**:定义了数据实体及其关系,如服务员、房间、餐桌、菜品和厨师的关系模型。 - **逻辑结构设计**:将概念结构转化为具体的表结构,包括字段类型、长度和约束等。 - **物理结构设计**:考虑...