从语言到库到框架,再到API,再到标记最后到DSL语言
计算机技术发展很快,而且越来越快,结果也是越来越复杂,那么我们到底怎么搞定复杂性并重用代码?
很明显,这是个大难题。一开始我们要解决计算问题,发展了基本的编程语言。
很快,编程语言不能满足需求,我们需要重用一些代码,算法,我们把这些重用部分写成库。
随着库越积越多,需要组织这些库了,这就形成了框架。
这就是我们今天面对的问题,.net,Java,甚至JS,都形成了框架,各种各样的框架,从解决问题,到带来问题。
为什么这么说?因为如今的框架太庞大了,除了JS,其它的动辄几十个名字空间,成百上千的类库,当然API要是少于1万,都不好意思拿出手的。
哪怕我们只是写一个简单的Hello World,也不得不引入一整套的框架。再加上一个巨大的IDE,当然还需要再巨大的执行环境,代码已经无法脱离生态圈生存。
框架这种为了解决通用问题而蛋生的东西,在初期比较有用,但一复杂后,带来的问题比能解决的问题还多。常见的有:
- 引入Bug,这么庞大的类库和API,有Bug很正常
- 复杂,无数的API交织在一起,相当复杂
- 版本问题,因为使用了框架,一个版本API变更,很可能就会引发连锁反应,以前基于框架的东西不能运行了
- 其它无数问题
基本上,框架这玩意,是程序员的朋友,同时也是噩梦。
现在计算越来越复杂,每一个人,已经只能在狭小的领域内工作了。其实通用框架,用处不大,写A应用,只能用它的1/10API,写B应用,又用了另外的1/10,那干麻还要全部使用或学习呢?
于是,借互联网的东风,很多公司推出了API接口,这玩意比框架简单多了,按接口调用就能用。发短信,读博客,提交定单,分享等。
但是问题又出来了,大量的这些东西,不会比框架更简单,好处就是用什么,可以取什么,不象框架那样,不用的也得包进去。但问题就是,这些API虽然都是按标准协议提供,但直接写接口也是相当麻烦。
有没有办法更进一步?当然有,我们把它们变成“标记”,然后在后台去解析这个标记就OK了,比如转发,就@XXX,关键字,就#关键字#,把Html简化成可书写的文本,就成了Markdown,比如这一篇。
这种巨大的进步,现在只看到一个开头,但其传播及流行速度惊人,甚至将来不久,Markdown可能会成为基础教育的标准课程
说这里,继续鄙视一下传统教育,节奏太慢了。在人机交互高度发达的今天,输入,Markdown,还是不能成为基本的课程。
Markdown是标记语言,如果能再进一步,调用各种WebApi,引入编程的一些基本概念,那么将成为一种更高级的页面语言比如机器人语言
同样,我们再来看框架,如果把通用框架,打散变成专业框架,那就进化成了引擎,一种很时髦的东西。大面全的框架,可以靠边站了。
这同时也带来一个问题,通用化的程序员需要选择方向了,妄想靠一套通用框架,通吃所有行业在将来是很困难的。选好方向,学习使用特定领域的引擎,并要结合进此特定领域的领域知识。
比如,熟练使用Unity3D的童鞋,去搞企业开发就不行。这和换行也差不多了。而使用SAP开发企业应用的,换成Hadoop搞数据,也不成。
计算机发展到现在,我们必须面临更艰难的选择,除了选择计算机行业,还要再选择这行业里的细分分支。这个细分要选不好,对职业生涯及技术提升会带来潜在的大影响。
同时,引擎技术要再进一步进化,就会进化成DSL语言,比如JS引擎,Lua语言等,更复杂的应用,会内置或好几种引擎,比如浏览器,有图形,有JS,未来还有语音视频等。
而在基于浏览器的开发上,是不是也可以这么进化呢?当然可以。
如果我们把行业的应用,从库,到框架,到形成一个行业引擎,是完全可行的,这样的专用引擎,能极大的解决行业开发问题,如果在引擎之上进一步抽象,形成“行业语言”也就是DSL语言,那更是贡献,比如Sql,这种建立在数据库之上的东西,还有JSON。
通过抽象出基本的行业规则,规范,标准,形成一些通用表示法,标记,再使用一个底层引擎搞起来,通过这种模式来复用,是一个非常好的方向,是一种比Api更高层次的复用。
从语言到库到框架,再到API,再到标记最后到DSL语言的更多相关文章
- javascript,从库到框架再到平台
对于库,框架,平台,从事过后端开发的人并不陌生,一直基于.net平台做开发,本人懒惰,面对庞大的体系,基本只掌握一点开发上用得着的技术,到是在程序结构,业务过程等方面花了点精力. 随着VS开发工具的成 ...
- 【Go语言系列】第三方框架和库——GIN:GIN介绍
1.Gin 是什么? Gin 是一个用 Go (Golang) 编写的 HTTP web 框架. 它是一个类似于 martini 但拥有更好性能的 API 框架, 由于 httprouter,速度提高 ...
- 前端之移动端库和框架bootstrap
学习移动端场景下的js事件:制作移动端特效常用的js库:介绍移动端常用开发框架Bootstrap:介绍动态样式语言less.sass.stylus的基本使用. 移动端js事件 移动端的操作方式和PC端 ...
- Standard C 语言标准函数库介绍
全面巩固所知所学,往精通方向迈进! Standard C 语言标准函数库速查 (Cheat Sheet) from:http://ganquan.info/standard-c/function/ C ...
- 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解
Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解 多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...
- 在Linux使用GCC编译C语言共享库
在Linux使用GCC编译C语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...
- Redis学习之路(008)- Redis C语言客户端库hiredis文档翻译
Hiredis是Redis数据库一个轻量的C语言客户端库. 之所以轻量是由于它只是简单的提供了对redis操作语句支持的接口,并没有实现具体的操作语句的功能.但正是由于这种设计使我们只要熟悉了通用的r ...
- 从jQuery谈库与框架的设计之优劣
jQuery是业内知名的javascript框架,它的实现和设计可以说代表了javascript界最高的水平,本文试从四个方面来以jQuery为例总结库与框架设计的原则和优劣判断. 解决问题 首先请看 ...
- Erlang的Web库和框架
ChicagoBoss,Nitrogen ,Zotontic,BeepBeep,ErlyWeb,Erlang Boss. 转自:http://bbs.chinaunix.net/thread-3764 ...
随机推荐
- PHP MSSQL 分页实例(刷新)
<?php/* '页面说明:*/ $link=mssql_connect("MYSQL2005","sa","123456") or ...
- mongoDB怎样拷贝一个collection从一个数据库到另一个在同一个主机上
new_database是目的数据库 db.<collection_name>.find().forEach(function(d){ db.getSiblingDB('<new_d ...
- 损失函数(Loss Function)
转载请注明出自BYRans博客:http://www.cnblogs.com/BYRans/ 线性回归中提到最小二乘损失函数及其相关知识.对于这一部分知识不清楚的同学可以参考上一篇文章<线性回归 ...
- iNeedle日志下载功能问题
问题: iNeedle系统本身包含日志下载功能,主要是将web服务器中的用户访问日志按照一定条件进行筛选并下载,提供管理者分析.但是这次的测试中发现iNeedle日志下载一直会卡住,web界面显示正在 ...
- linux基础-第十单元 系统的初始化和服务
第十单元 系统的初始化和服务 Linux系统引导的顺序 Linux系统引导的顺序 BOIS的初始化和引导加载程序 什么是BIOS GRUB程序和grub.conf文件 什么是grub grub配置文件 ...
- java对redis的基本操作
一.server端安装 1.下载 https://github.com/MSOpenTech/redis 可看到当前可下载版本:redis2.6
- 用FineReport报表系统构建资金监管平台
一.应用背景 计算机的应用已经渗透到日常工作的许多方面,无论是其自身还是所发挥的作用,计算机都标志着一种高科技,使工作高效率和高水平.为了能更方便,更轻松,更好的管理,信息化建设正在日益发展壮大,更加 ...
- [转]Asp.net MVC使用Filter解除Session, Cookie等依赖
本文转自:http://www.cnblogs.com/JustRun1983/p/3279139.html 本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应 ...
- 退役了退役了-AJAX
hi 昨晚打球悲剧的把脚崴了. 要知道,上一次崴脚是四年前:那一次伤的是左脚,也是我这么多年打篮球的生涯中,这么多次崴脚中,最严重的一次受伤.休息了整整一个月,受寝室兄弟们的无微不至的照顾,最后也买了 ...
- 荒芜的周六-PHP之面向对象(三)
hi 又是开森的周六了.积攒的两周的衣服,终于是差不多洗完了.大下午的才来学点东西~~ 1.PHP面向对象(三) 四.OOP的高级实践 4.3 Static-静态成员 <?phpdate_def ...