Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2013-12-05) 终于把Programming Languages课学完了

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

今天提交了Programming Languages课程的期末考试,得了86分,虽然不太理想,但总算把这门课学完了。回想起过去的十周时间,收获很多,最开心的是终于坚持了学完了,没有半途而废。

Programming Languages是coursera网站上的一门免费公开课:https://www.coursera.org/course/proglang,主讲人是华盛顿大学的Dan Grossman。

这门课通过多种风格不同的编程语言来讲解贯穿于函数式和面向对象语言中的各个概念,比较同一个概念在不同语言中的实现方式,以及类型系统的知识。课程中使用了三种语言作为主要的教学语言,分别是SML(Standard ML),Racket和Ruby。其中前两种语言对于多数人来说都比较陌生,但它们简洁有特色,用来讲解某些概念非常合适。

SML是一门静态类型的函数式编程语言,有我们熟悉的模式匹配和类型推断,Haskell有很多地方跟它很像,都属于ML家族。Dan说之所以使用SML而不是更热门的Haskell,是因为Haskell里表达式默认都是lazy的,不太好讲,而SML更简洁一些。

而Racket是Scheme的增强,跟Lisp一个家族。它的特点是语法极为简洁,动态类型,函数式,当然,满眼都是括号。

而Ruby是一种动态类型的面向对象语言,这个不多说了。

课程共分为8讲,每周都有两个小时左右的视频讲解以及一个大作业,每周需要大约10个小时完成学业。还有一个期中和期末考试,每个考试90分钟。其中有两周作业难度比较大,一个是在Racket中实现一个简化的语言和相应的解释器(帅!),另一个是使用SML和Ruby分别使用函数式和面向对象来实现同一个功能(酷!)。

这门课非常值得一学,当然难度和挑战也比较大,因为对于多数程序员来说,并没有多少函数式语言的经验,里面的很多概念都需要学习。但这门课的质量非常高,可以算得上是course里编程类课程中最好之一。Dan说话简洁流畅,重点突出,深入浅出,教学方式互动,布置的作业既有趣又有难度。上了这门课以后,再看其它类似的课程,总有种失望的感觉。

有一个让我印象深刻的片断。在讲到函数类型参数是逆变时,Dan离开座位,弯着腰,像青蛙一样不停的跳,说“这是一个连聪明人也很容易弄错的问题,希望你以后在看到它时,会想到有一个博士跳来跳去,就是为了提醒你”。

虽然学完了,但没有学好,一是因为这门课的信息量很大,很多概念还没有掌握清楚;二是由于这段时间工作实在太忙,很多地方勿勿看过,现在已经记不太清了。所以我打算再重头好好学一遍,力争把每一个概念都搞清楚,彻底掌握。我认为这才是重要的基础知识,如果不能把这些东西都弄懂,就没有必要去学Scala,浪费时间。

好久没有写博客了,以后会尽量多写一些博客来记录学到的知识点。

最后要感谢群里的老猪同学,他是我这门课唯一的同学,给了我很多指点和帮助。

 

comments powered by Disqus