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和数据库产生了竞争,就像七月十五说前端和后端产了和竞争那样,肯定是要有大一群人跳出来骂的。表面看来,职责不同的东西怎么竞争?但当你分析这背后的暗流,却发它们确实在竞争着,这种竞争的目的并不是像同类的竞争一样为了消灭对方,而且也不可能消灭对方。事实上应用软件这几十年的发展,不单止没有消灭数据库,反而更依懒数据库了。最好的一个例证是我之前问一个新新程序员,说要让你做管理信息系统,没有数据库你怎么做,他瞪大眼晴像看外星人一样看着我,反问:没有数据库你能做管理系统?
这些不同职责的技术所真正竞争的并不是消灭掉对方,而是在争一个主仆关系,在争谁应该服务于谁。在本文中我说了业务逻辑的技术是怎么和数据存储模型竞争的,我将在下一篇文章中继续扩展七月十五的话题,来讨论一下前端是怎么和后端产生竞争的。当然,我觉得要是和只看标题或者没有看懂全文意思的人讨论的话,会挺浪费时间的。
分享到:
相关推荐
SPD-Conv-main.zip
目录: 1-1 虚拟化技术发展史 1-2 虚拟化技术是什么 1-3 虚拟化技术的分类 1-4 虚拟化技术的优缺点(1) 1-4 虚拟化技术的优缺点 1-5 容器技术的发展 1-6 Docker的发展历史 1-7 Docker是什么 1-8 容器和虚拟机的区别(1) 1-9 容器和虚拟机的区别(2) 1-10 为什么要使用Docker 2-1 Docker的版本 2-2 Docker的安装 2-3 Docker服务启动 2-4 Docker服务信息 2-5 Docker使用初体验-Docker的运行机制 2-6 Docker使用初体验-Docker镜像仓库 2-7 Docker使用初体验-Docker镜像下载 2-8 Docker使用初体验-Docker镜像启动运行 2-9 Docker使用初体验-访问容器中的Tomcat服务 2-10 Docker使用初体验-Docker的网络访问机制 2-11 Docker使用初体验-进入Docker容器内部 2-12 Docker使用初体验-补充说明 3-1 Docker的体系架构(1) 3-2 Docker的体系架构(2)r ..........
《狼》教学设计
对于在外工作或生活的人来说,寻找合适的住房是首要解决的问题。传统的租房方式包括直接联系房东、通过房屋租赁公司或在线搜索房源。直接找房东可能耗时且不便,尤其是需要提前看房的情况;通过中介虽然方便,但需支付额外费用;而在线租房则提供了随时随地的便利性,因此越来越受到青睐。 本房屋租赁平台使用Java语言配合Idea开发环境进行构建,后端数据库选用了Mysql。平台提供了在线预约看房的功能,包括浏览出租房源、在线预约看房、收藏心仪房屋以及留言咨询等。该系统不仅方便了租房者在线预订和管理看房计划,也为房东提供了房屋信息发布和预订管理的便利。
四轮独立驱动横摆角速度控制,LQR 基于LQR算法的 基于二自由度动力学方程,通过主动转向afs和直接横摆力矩dyc实现的横摆角速度跟踪 ,模型包括期望横摆角速度,质心侧偏角,稳定性因素,lqr模块等模块,作为lqr入门强烈推荐。 还有详细的lqr资料说明,可以作为基本模板,和其他算法(mpc smc)做对比等
ESP8266、ESP32平台支持AIRKISS自动配网,但是实际使用中,发现失败的次数挺高的,影响体验,因此另辟他法,偶然发现EPS 支持webserver,通过webserver进行配网可大大提高成功率。 webserver.c实现网页的显示,及获取用户配置的wifi名称和密码; wifi_config.c根据是否已经配过网,决定是否开启ap配网模式还是st连接wifi模式; data_persistence.c实现保存用户设置的wifi名称和密码,防止断电后丢失;
圣诞节倒计时与节日活动管理系统是一个基于Python的桌面应用程序,旨在帮助用户庆祝和管理圣诞节期间的活动。随着圣诞节的临近,许多人希望能够清晰地了解距离节日还有多少时间,同时也希望能够有效地组织和安排各类活动,如家庭聚会、朋友聚会、圣诞晚会等。这个应用程序通过直观的用户界面和实用的功能,满足了这些需求。 该系统的核心功能包括一个实时更新的倒计时器,用户可以看到距离圣诞节还有多少天、小时、分钟和秒。倒计时器通过Python的datetime模块实现,确保准确性和实时性。用户可以自定义圣诞节的日期,以适应不同的庆祝习惯。 除了倒计时功能,用户还可以添加、编辑和删除节日活动。通过简单的输入框,用户可以记录活动的名称、时间和地点等信息。所有活动将以列表的形式展示,用户可以轻松查看即将到来的活动,并进行相应的管理。 在技术实现方面,该应用程序使用了Python的Tkinter库来构建图形用户界面。界面设计简洁明了,用户可以轻松地进行操作。程序还使用了matplotlib库来绘制活动的统计图表,帮助用户直观地了解活动安排情况。
双目立体匹配三维重建点云C++ 本工程基于网上开源代码进行修改,内容如下: 1.修改为 VS2015 Debug win32 版本,支持利用特征点和 OpenCV 立体匹配算法进行进行三维重建及显示,相关代码需要自行修改,代码中添加了修改注释。 2.工程依赖库为 OpenCV2.4.8,内部已完成 OpenCV 相关配置。 无论电脑中是否配置Opencv 都可以运行。 并且增加了点云保存,可以用MATLAB 显示点云。 一、操作步骤 1.解压后将 Reconstuction3d bin 中的所有 dll 拷贝到C: windows sysWOW64 或者system32 根据电脑版本决定,64 位为 sysWOW64。 2.双击 Reconstuction3d.sln 打开工程,运行后出现结果。 二、程序详解 Reconstuction3d.cpp 为程序主函数 cvFuncs.cpp 为特征点三维重建。 包含SIFT、SURF、FAST 等算法。 cvFuncs2.cpp 为视差图三维重建.包含 BM、SGBM 等算法可以选择两者中的一个进行重建,推荐特征点。 特征点三维重建流程:
course_s5_linux应用程序开发篇.pdf
ESP32+DS1302芯片【简单DIY制作时钟】
扑克牌数字检测48-CreateML、Darknet、Paligemma数据集合集.rarPCC3.0 Yolov8-V1 2023-12-04 5:04 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括4471张图像。 播放卡分类以创建格式注释。 将以下预处理应用于每个图像: *像素数据的自动取向(带有Exif-Arientation剥离) *调整大小为640x640(拉伸) 应用以下扩展用于创建每个源图像的2个版本: * 0到6像素之间的随机高斯模糊
政务大数据资源平台设计方案
【资源说明】 基于SSM框架一个比赛裁判管理系统校园赛事管理系统,主要技术(SpringMVC + Spring + Mybatis+Hui+Jquery+Ueditor)全部资料+详细文档+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
ANSYS Fluent Tutorial Guide ANSYS Fluent是一种基于 Finite Element Method(有限元方法)的计算流体力学(CFD)软件,广泛应用于航空航天、汽车、能源、医药等领域。下面是ANSYS Fluent Tutorial Guide的知识点总结: 1. ANSYS Fluent简介 ANSYS Fluent是一个功能强大且灵活的CFD软件,能够模拟复杂的流体力学、热传导、质量传递等物理过程。该软件广泛应用于航空航天、汽车、能源、医药等领域,用于模拟、设计和优化各种流体力学系统。 2. ANSYS Fluent的主要特点 * 基于Finite Element Method(有限元方法),能够模拟复杂的几何形状和边界条件 * 支持多种物理模型,包括流体力学、热传导、质量传递、化学反应等 * 具有强大的后处理功能,能够输出丰富的结果数据 * 可以与其他ANSYS产品集成,实现多物理场耦合分析 3. ANSYS Fluent在航空航天领域的应用 * 飞机和导弹的气动设计 * 飞机发动机的热传导和燃烧模拟 * 航天器的热保护和气动设计 4. AN
JavaWeb教务系统是基于Java技术构建的网络应用程序,用于管理高校的教学事务。这个期末大作业可能涵盖了多个关键知识点,包括但不限于以下内容: 1. **Servlet与JSP**:JavaWeb开发的基础,Servlet用于处理服务器端逻辑,而JSP则用于生成动态网页。学生可能需要了解如何创建Servlet类,实现doGet或doPost方法,以及如何在JSP页面上使用EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)标签。 2. **MVC模式**:Model-View-Controller模式是JavaWeb开发中常见的设计模式,用于分离业务逻辑、数据模型和用户界面。学生可能需要设计并实现一个MVC架构的教务系统,如Controller负责接收请求并调用Service,Service层处理业务逻辑,而Model层则封装数据。 3. **数据库操作**:项目可能涉及到MySQL或其他关系型数据库的使用,包括数据表的设计、SQL查询语句的编写以及JDBC(Java Database Connect
Python之正则表达式基础知识
《我的白鸽》教学设计
【资源说明】 基于Spring、SpringMVC、Mybatis的校园二手交易平台全部资料+详细文档+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
非常好的音视频会议系统项目全套技术资料.zip
UR5 3D模型