利用计算机的目的是为了解决这个问题。我们能够将程序看做是解决这个问题的过程和结果的描写叙述。这跟我们用流程和规范来指导做事并无本质的差别,并且更为简单。因此我们希望计算机有一天能理解我们的自然语言,这样,我们利用自然语言就能够与计算机交流,并指挥计算机做事。但不管是自然语言还是现有的编程语言,都须要计算机能够理解。这样的理解与和他人进行交流时的理解也是一致的。因此怎样清晰地,准确的对要做的事情进行组织和表达就非常关键。
这也从另外一个角度告诉我们。编程的能力和我们日常工作的表达(含组织)能力是相通的。但须要注意的是这样的组织和表达,能够是说(语音),写(文字),做和思维的单项或组合。眼下编程中的组织和表达主要倾向于文字和思维。这也是有些朋友不太会讲。但会做(编程)的原因。
人类在工作。学习和生活中积累的非常多经验,在编程中是非常实用的。由于编程本身就是将我们处理事情的模拟过程数字化而已。因此,在我们编程过程中遇到问题时,我们应该积极主动的向过去(经验)和如今(其它领域)学习。不须要将编程看成是一个神奇的东西。比方,面向对象和面向过程的编程思想,一系列的设计模式等都来自于现实生活。这也提醒着我们,假设在编程过程中遇到问题,能够抛开编程针对计算机的思维定势,看看没有计算机,我们会怎么做。
我们知道对于自然语言来说都包括语音。词汇和语法三要素。对于编程语言来说是基于自然语言的。因此构成上会有些差异,语音是取用自然语言的语音。词汇则比自然语言的词汇少非常多。编程语言仅仅有主要的词汇,这个词汇就是我们编程语言中的keyword。
相同。编程语言的语法也比自然语言的语法简单非常多。
编程语言的词汇和语法尽管比自然语言简单非常多,但编程语言是非常严格的。
一般不同意多义和歧义。
不同的编程语言一般都有自己的词汇和语法,但事实上差异并非特别大。在词汇上:数据类型词汇(字符串,数字等)。流程表达词汇(语句,推断。循环),辅助词汇(凝视)。语法上的类似性事实上更大(能够參考编译原理)。编程语言之间的最大差异,我认为来自于基本类库(但这本质上又不算语言本身的差异)。而高级语言与低级语言的差别主要是词汇方面。
强类型与弱类型语言的差异主要来自于对于数据类型的处理上。
主流的高级语言中主要有C风格,Pascal风格等。我们上大学的时候,具体的语言仅仅学了一门,一般的课程涉及到编程都是用伪代码,这样的伪代码介于自然语言和编程语言之间。而假设要实践,能够非常easy依据伪代码转换成目标编程语言。
基本词汇加上顺序(隐含的)。分支和循环三个表达流程的要素就构成了编程语言组织和表达的基础。
面向过程和面向对象的最大差别在于程序的组织方式方面。
面向服务,面向方面编程很多其它的则是一种视角的差别。
后面会比較具体的讨论到这些内容。
由于计算机本身的特性。编程语言的词汇和语法尽管比較简单,但正是由于这样的简单使得编程复杂化,工作量惊人。比方”把订单保存到数据库里",对于自然语言来说,表达非常简单。
但对于编程语言来说却须要大量的语句来表达(假设直接用01指令来实现,再牛B的程序猿要完毕这个任务。都不是一两天能搞定的)。因此封装,复用就变得非常重要。
1)假设编程过程中不明确业务怎样处理的时候,能够想象手工怎样做。
2)提高自己的组织和表达能力对于工作。学些,生活和编程都非常实用;
3)工作和生活中的一些经验模式也能够用于编程设计中。
(能够使用场景类比法)。
建议在学习设计模式的时候,应该多思考一下实际生活的中的类似场景。
关于设计模式,我前面有非常多文章。
有兴趣能够參考。