灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2831回复:0

斯坦福大学开放课程:编程范式学习笔记《一》

楼主#
更多 发布于:2012-09-06 12:31


编程范式(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


喜欢0 评分0
游客

返回顶部