编程范式(Paradigm) Lesson 1 读书笔记:
列举几种常见的编程语言(范式):
C
Assembly
C++
Concurrency programming(并行编程) (只是一种范式,而不是语言,可以使用C/C++实现并行编程)
Scheme
Python
C是面向过程,C++面向对象。C语言是函数调用函数,因此就像一个多级标题一样,通过函数A调用B, 而函数B调用函数C,因此是有过程来决定一个函数的功能,我们首先看到的也就是一个过程(函数),通过指针来调用的。
C++是面向对象的,因此是通过“->”或者“.”来进行访问的,我们首先看到的就是指针或者引用,也就是一个完整的对象。
这系列课程会详细讲述底层是如何将C/C++编译为汇编语言的,会进行指针的详细讲解,让你使用到**&p-> i = 7 这些很复杂的用法,虽然过程可能有些头疼,但是对于了解底层很有帮助,让你知道崩溃的时候是为什么,而不是看着它崩溃。当然,这种用法还是不值得提倡的。通过这些课程,可以让你成为一个高级C/C++工程师。
汇编语言是很古老的,不会详细讲。有一个语言MITS,有点意思,可以研究下。会重点讲述C和C++如何编译为obj文件,然后生成可执行的二进制文件,会发现原来C和C++最终生成的二进制代码(0和1形式的),其实差不多。
C++去掉了面向对象的部分就是C,很多牛逼的工程师都倾向于使用C,尽管有很多优秀的语言在不同方面要比C优秀。
并行编程并不是真的并行。原来的语言,如C/C++,实际上都是执行完一条之后再执行,而并行编程则是并行执行(感觉上并行,实际上是交替执行,只是这个交替的频率很高,用户看不到这个交替的过程而已,从而认为是并行执行)。
并行编程很多地方使用不到,但是在网络编程上面很有用处。一个例子就是,两个用户同时从取款机上取一定的钱,比如余额为100,要保证他们不会同时取走,就是这样一个过程。将这一次操作成为事务(transaction)。
Scheme是一个函数式的语言,和LISP有很深的渊源。可能大家不大了解,函数式的语言就是执行依赖于函数的返回结果。传统的语言有缺陷,比如C/C++,可能在传递指针的过程中,修改了这个结构体,然后再返回这个值,引起混乱。而函数式的语言就是,需要根据函数的返回值,决定下一步的执行。因此就不会出现这种问题。这门语言很有意思,大家可以学习一下,实际上比其他语言都要有意思(老师原语)。
Python是一门年轻语言,在Google和facebook有相当多的工程师使用这门语言来进行开发,很适合网络编程,不要认为网络编程就是HTML,网页之类,动态网页还需要处理后台数据库的交互等问题。Python才16~17年的历史,所以不会有想C/C++,Java那样的缺陷,课程的最后有个大作业,做一个网页服务器,不会像Apache那么大,但是能够解析XML,HTML,后台进行处理,生成动态页面。Python有很多类库,是面向对象的语言,解释执行,可以一边写一边解释执行,还有很多函数库,可以借用Scheme的思想来做函数式编程,处理网络编程很有用户。
在过去课程最后是C++高级编程,后来就使用Java,,但是后来另外一个班教授的内容更深入,所以不交Java了。后来使用python,效果不错,课程最后是用python开发,会领会到其中美妙之处。
最后还会介绍一下其他语言和范式,不过你们在今后15年碰到的编程范式,我应该都见过(这个老师好自信啊)
最后课程结束,整个过程17分钟左右。下周会发超多讲义,并会让你们做一个C/C++中指针的底层原理的研究报告。Over。