从语言到库到框架,再到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 ...
随机推荐
- EF Power Tools 数据库逆向生成时T4模板修改
VS2013上使用EF Power Tools的Reverse Engineer Code First逆向生成. 发现数据库中的decimal(18, 4)字段在生成的mapping类中没有精度和小数 ...
- Spark大数据的学习历程
Spark主要的编程语言是Scala,选择Scala是因为它的简洁性(Scala可以很方便在交互式下使用)和性能(JVM上的静态强类型语言).Spark支持Java编程,但对于使用Java就没有了Sp ...
- SQL Serve里你总要去改变的3个配置选项
你用安装向导安装了全新的SQL Server,最后你点击了完成按钮.哇噢~~~现在我们可以把我们的服务器进入生产了!抱歉,那并不是真的,因为你的全新SQL Server默认配置是错误的. 是的,你没看 ...
- QT学习第2天
回顾: 1.构建一个QT工程步骤 (1)qmake -project (2)qmake (3)make 2.两个常用的组件 QLabel 标签 QPushButton 按钮 --------- ...
- Android之drawable state各个属性详解
android:drawable 放一个drawable资源android:state_pressed 是否按下,如一个按钮触摸或者点击.android:state_focused 是否取得焦点,比如 ...
- C++ 中 typename
声明template参数时, 前缀关键字class和typename可以互换; 使用关键字typename标识嵌套从属类型名称, 但不需在基类列表和成员初始化列表内使用. 从属名称(dependent ...
- 关于C语言中的位域
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可.为了节省存储空间,并使处理简便,C语言提供了一种数据结构,称 ...
- [转]NopCommerce How to code my own payment method
本文转自:http://docs.nopcommerce.com/display/nc/How+to+code+my+own+payment+method Payment methods are im ...
- java utf-8文件处理bom头
UTF? UTF,是UnicodeTransformationFormat的缩写,意为Unicode转换格式. 即怎样将Unicode定义的数字转换成程序数据.utf是对Unicode的一种编码格式化 ...
- UESTC 1015 Lweb and pepper --前,后缀最值
题意: n种食物,每种含花椒的概率为Pi,现在已经选择了[L,R]这个区间(下标)的食物,要再选一个,使总的食物只有一种含花椒的概率最大,问选哪个最好,相同的选下标小的. 解法: 就不写解法了.此处有 ...