计算机技术发展很快,而且越来越快,结果也是越来越复杂,那么我们到底怎么搞定复杂性并重用代码?

很明显,这是个大难题。一开始我们要解决计算问题,发展了基本的编程语言。
很快,编程语言不能满足需求,我们需要重用一些代码,算法,我们把这些重用部分写成库。
随着库越积越多,需要组织这些库了,这就形成了框架。

这就是我们今天面对的问题,.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语言的更多相关文章

  1. javascript,从库到框架再到平台

    对于库,框架,平台,从事过后端开发的人并不陌生,一直基于.net平台做开发,本人懒惰,面对庞大的体系,基本只掌握一点开发上用得着的技术,到是在程序结构,业务过程等方面花了点精力. 随着VS开发工具的成 ...

  2. 【Go语言系列】第三方框架和库——GIN:GIN介绍

    1.Gin 是什么? Gin 是一个用 Go (Golang) 编写的 HTTP web 框架. 它是一个类似于 martini 但拥有更好性能的 API 框架, 由于 httprouter,速度提高 ...

  3. 前端之移动端库和框架bootstrap

    学习移动端场景下的js事件:制作移动端特效常用的js库:介绍移动端常用开发框架Bootstrap:介绍动态样式语言less.sass.stylus的基本使用. 移动端js事件 移动端的操作方式和PC端 ...

  4. Standard C 语言标准函数库介绍

    全面巩固所知所学,往精通方向迈进! Standard C 语言标准函数库速查 (Cheat Sheet) from:http://ganquan.info/standard-c/function/ C ...

  5. 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解

    Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解   多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...

  6. 在Linux使用GCC编译C语言共享库

    在Linux使用GCC编译C语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...

  7. Redis学习之路(008)- Redis C语言客户端库hiredis文档翻译

    Hiredis是Redis数据库一个轻量的C语言客户端库. 之所以轻量是由于它只是简单的提供了对redis操作语句支持的接口,并没有实现具体的操作语句的功能.但正是由于这种设计使我们只要熟悉了通用的r ...

  8. 从jQuery谈库与框架的设计之优劣

    jQuery是业内知名的javascript框架,它的实现和设计可以说代表了javascript界最高的水平,本文试从四个方面来以jQuery为例总结库与框架设计的原则和优劣判断. 解决问题 首先请看 ...

  9. Erlang的Web库和框架

    ChicagoBoss,Nitrogen ,Zotontic,BeepBeep,ErlyWeb,Erlang Boss. 转自:http://bbs.chinaunix.net/thread-3764 ...

随机推荐

  1. Mac SVN 命令行

    Mac自带了SVN命令行,如我的升级到10.10(OSX yosemite)后命令行版本为1.7.10 以下是一些常用命令 1.将文件checkout到本地目录 svn checkout path(p ...

  2. 使用elasticsearch的关键技术点

    前言 最近有一个项目用到了搜索引擎,这里记录下使用过程中遇到的一些问题和解决方案. 0.准备工作 1)安装elasticsearch 2)安装Marvel 3)安装head tips:在es的配置文件 ...

  3. Docker+OpenvSwitch搭建VxLAN实验环境

    一.概述                                                    1.环境:我这里是2台linux机器(host1和host2),发行版是kali2.0, ...

  4. DedeCms文档关键词替换,优先替换长尾关键词

    本文教大家:dedecms文档关键词维护之关键词出现多次,只给出现的第一个加链接的 举例:当文章中出现了一百次台历时,按官方的原理,他会给一百个台历都加上链接的.dedecms这如何是好? 解决方法( ...

  5. Eclipse启动时布局不合理调整

    1. 关掉 启动页 2. 关掉InstSearch页 3.修正InSearch布局 3.1 默认InstSearch不合理,影响使用. 3.2 Inst 搜索一次,然后最小化InstSearch框,再 ...

  6. Zygote进程【2】——Zygote的分裂

    在Zygote的诞生一文中init进程是如何一步步创建Zygote进程的,也了解了Zygote的进程的作用.Zygote进程的诞生对于整个Java世界可以说有着"开天辟地"的作用, ...

  7. iOS 使用证书时遇到的错误一

    证书概念: 那么现在就牵扯到几个名词,Development证书,aps_Development证书(推送证书),测试描述文件,AppID,同理也就有Distribution证书,aps_Distri ...

  8. LazyInitializationException: could not initialize proxy no session

    这完全是框架设计者的锅,讲道理  无论是SSH SSM都太重了, Hibernate几乎把SQL完全封装了一遍,简单的一对多关系,如果开启LazyLoad 这样实体类会被代理,直到访问这个多方实体的属 ...

  9. iOS 关于版本升级问题的解决

    从iOS8系统开始,用户可以在设置里面设置在WiFi环境下,自动更新安装的App.此功能大大方便了用户,但是一些用户没有开启此项功能,因此还是需要在程序里面提示用户的. 虽然现在苹果审核不能看到版本提 ...

  10. wk_04

    函数 函数是对程序逻辑进行结构化或过程化的一直编程方法.能将整块代码巧妙的隔离成易于管理的小块,把重复代码放到函数中而不是进行大量的拷贝--这样既能节省空间,也有助于保持一致性,因为你只需要改变单个的 ...