理解编程语言
1. 全栈工程师最佳实践
通用用途语言 VS 特定领域语言
很多编程语言倾向于通用解决方案,而不是只解决具体问题。这些语言都被设计为可以在任何领域使用,比如C、Java、Python和XML,它们被称为 “通用语言 ”(General Purpose Language, GPL)。我们可以看到用 C编写的所有类型的软件,从游戏到客户端软件,从服务器端软件到手机端软件。
与之相对应的,有些编程语言被设计为特定领域专用,叫做 “特定领域语言 ” (DSL)。DSL的目的是解决特定领域的问题,而不是像GPL一样可以解决任意的软件问题。DSL在计算机软件开发中十分常见,比如前端开发中常见的HTML和CSS就是一种DSL,专用于Web开发。MySQL是一种DSL,专用于操作数据库。Make是一种DSL,专门用来处理Shell脚本操作系统文件输入和输出。
如果您是一个以解决问题为目标的全栈工程师 ,我建议您在考虑发明一个DSL之前先考虑以下方案 。
- 尽量用您熟悉的通用语言来解决问题 ,比如Python、Java或C++。
- 优化您的解决方案,提炼出一种真正精简、优雅的扩展库。
- 开源您的扩展库,根据其他人的贡献来继续优化解决方案。
- 如果想简化配置文件的语法,可以创建一个脚本包装器来专门为库工作,这就是您自己的DSL。
- 如果最后您还是想进一步优化下去,那就发明您的DSL吧。
框架和库拓展了语言
在快速开发中,真正重要的是库,全栈工程师的目标往往是快速解决商业问题,不一定需要长期完美的方案。使用方便好用的框架能大大节省学习成本和开发时间,所以有些时候我们的技术选型步骤是:先选择框架,然后选择语言。
2. 脚本语言的优势
一个误解,Swift是一种语法很像脚本语言的编译语言。脚本语言跟编译语言的差异不在于语法,而在于编译机制。
脚本语言,是指支持用脚本的方式编写程序的语言,它无需编译即可直接在运行时环境中解析。在操作上,它缩短了传统的 “编写编译链接运行 ”过程。脚本语言通常具有简单、易用的特性,而且常常很短小。
相比编译语言脚本语言有更高的开发效率,但是在执行效率上会有所牺牲。由于现在的趋势是硬件成本越来越低,而工程师的人工成本越来越高,所以脚本语言的使用空间越来越大,有一些脚本语言( Python、Ruby )已经在成熟的商业网站中使用。
不同的脚本语言有不同的设计原则,但是它们往往有一个共同的目标,就是以简单的方式,快速完成某些复杂的任务。
脚本语言不需要编译
脚本语言的特点是无需编译即可运行,它在对应的运行环境中直接运行,运行时通过解释器来逐句解析。
因为语言跟对应的解释器(或者编译语言跟对应的编译器)是分开的两个概念,所以从科学上讲,只要给定合适的运行时环境和库支持,任何语言都可以作为脚本语言来使用(也就是编写脚本) 。也就是说, “编写脚本”是对语言的一种使用方法 ,而称某种语言为脚本语言是一种工程上的约定俗成的用法,而不是科学上的定义。
而且另一个问题是,无论是脚本语言还是编译语言,最终都需要编译成机器码让机器来执行。比如JS语言 ,在v8引擎中被编译为机器码然后执行,如果是使用Node.js。那么这个机器码可能会被缓存起来,这样的话,跟编译语言就没什么区别了。
脚本语言常常不需要关心清理内存
因为脚本语言的设计目标是快速写出能运行的程序,它更倾向于取悦工程师,而不是优化性能。所以在语法上就忽视内存管理,而该语言的解释器则各显神通,把清理内存垃圾的重担揽在自己的黑盒里面,无需工程师关注。
脚本语言常常会对特定领域优化
脚本语言常常是动态类型语言
脚本语言的抽象层常常更高
脚本语言常常有包管理器