没事看到Lisp教程,尽管作者鼓吹它多么amazing,看完之后我觉得实在是非常简单的语言。
主要介绍了递归和高阶的应用,递归就不说了,高阶(high-order)说白了就是函数能当参数用,其实没不稀奇,java里不都有回调函数么。
其实也不意外,48年历史的语言,那么古老的东西,能有多厉害?
Lisp作为函数式语言(functional program language),顺便学习了一下wiki里所谓的编程范例(programing paradigm)。
编程范例可是个重要的概念, 所谓编程范例其实就是编程的一种风格,一种如何思考并解决问题的思想模式。
一般一种编程语言支持一种以上的编程范例,以c++为例,支持过程式,OO,命令式,泛型等编程范例。
支持的多并不一定好,很多人用java/c++写的都是过程化思维的代码。如果java只支持OOP,我看未必不是一件坏事。
大约在一年多以前,我老是搞不清自己什么时候在用什么范例思考问题。
用户描述问题的时候,往往是工作流思维,BA写的文档往往是数据流处理的思维,然后我用java写出来的也往往是过程化思维的代码。
OO大师鼓吹OO是符合人性的思维,但是实际上一旦涉及到软件系统,往往连用户都变得很专业,他们会抛弃原有的OO思想,“数据库”,“表”,“数据”这些专业词汇都是从
他们口中冒出来,于是很难从需求分析开始以OO的思维考虑问题了。
老板也会给你一个过程化思维的文档模板,要求你为项目补写文档。
附常见范例:
主要介绍了递归和高阶的应用,递归就不说了,高阶(high-order)说白了就是函数能当参数用,其实没不稀奇,java里不都有回调函数么。
其实也不意外,48年历史的语言,那么古老的东西,能有多厉害?
Lisp作为函数式语言(functional program language),顺便学习了一下wiki里所谓的编程范例(programing paradigm)。
编程范例可是个重要的概念, 所谓编程范例其实就是编程的一种风格,一种如何思考并解决问题的思想模式。
一般一种编程语言支持一种以上的编程范例,以c++为例,支持过程式,OO,命令式,泛型等编程范例。
支持的多并不一定好,很多人用java/c++写的都是过程化思维的代码。如果java只支持OOP,我看未必不是一件坏事。
大约在一年多以前,我老是搞不清自己什么时候在用什么范例思考问题。
用户描述问题的时候,往往是工作流思维,BA写的文档往往是数据流处理的思维,然后我用java写出来的也往往是过程化思维的代码。
OO大师鼓吹OO是符合人性的思维,但是实际上一旦涉及到软件系统,往往连用户都变得很专业,他们会抛弃原有的OO思想,“数据库”,“表”,“数据”这些专业词汇都是从
他们口中冒出来,于是很难从需求分析开始以OO的思维考虑问题了。
老板也会给你一个过程化思维的文档模板,要求你为项目补写文档。
附常见范例:
- Annotative programming (as in
Flare language)
- Aspect-oriented programming (as in AspectJ)
- Attribute-Oriented Programming (as in Java 5 Annotations, pre-processed by the XDoclet class; C# Attributes)
- Class-based programming, compared to Prototype-based programming (within the context of object-oriented programming)
- Concept-oriented programming is based on using concepts as the main programming construct.
- Constraint programming, compared to Logic programming
- Dataflow programming (as in Spreadsheets)
- Flow-driven programming, compared to Event-driven programming
- Functional programming
- Imperative programming, compared to Declarative programming
- Logic programming (as in Mathematica)
- Message passing programming, compared to Imperative programming
- Object-Oriented Programming (as in Smalltalk)
- Pipeline Programming (as in the UNIX command line)
- Policy-based programming
- Procedural programming, compared to Functional programming
- Process oriented programming a parallel programming model.
- Recursive programming, compared to Iterative programming
- Reflective programming
- Scalar programming, compared to Array programming
- Component-oriented programming (as in OLE)
- Structured programming, compared to Unstructured programming
- Subject-oriented programming
- Tree programming
- Value-level programming, compared to Function-level programming