Programming Languages
开始时间: 04/22/2022
持续时间: Unknown
课程主页: https://www.coursera.org/course/proglang
课程评论: 5 个评论
评论课程
关注课程
课程简介
Investigate the basic concepts behind programming languages, with a strong emphasis on the techniques and benefits of functional programming. Use the programming languages ML, Racket, and Ruby in ways that will teach you how the pieces of a language fit together to create more than the sum of the parts. Gain new software skills and the concepts needed to learn new languages on your own.
课程大纲
Note: About half the students in prior offerings report that the 8-12
hour / week estimated workload is accurate while most of the other half
spent more time. Workload naturally differs for different people depending
on one's background. Do see the recommended-background section below.
Topics (most of which may not mean anything to you until you take the
course):
- Syntax vs. semantics vs. idioms vs. libraries vs. tools
- ML basics (bindings, conditionals, records, functions)
- Recursive functions and recursive types
- Benefits of no mutation
- Algebraic datatypes, pattern matching
- Tail recursion
- First-class functions and function closures
- Lexical scope
- Currying
- Syntactic sugar
- Equivalence and effects
- Parametric polymorphism and container types
- Type inference
- Abstract types and modules
- Racket basics
- Dynamic vs. static typing
- Laziness, streams, and memoization
- Implementing languages, especially higher-order functions
- Macros
- Eval
- Ruby basics
- Object-oriented programming is dynamic dispatch
- Pure object-orientation
- Implementing dynamic dispatch
- Multiple inheritance, interfaces, and mixins
- OOP vs. functional decomposition and extensibility
- Subtyping for records, functions, and objects
- Subtyping
- Class-based subtyping
- Subtyping vs. parametric polymorphism; bounded polymorphism
课程评论(5条)
0
|
大吃一惊异
2014-06-06 12:14
0 票支持; 0 票反对
因为已经比较熟悉FP了,这门课最大的收获是关于OO的那部分。第五个作业用了几十行代码写了个简单的解释器还是挺酷的。比较期待Grossman的PLT后续课程。
|
0
|
超級現實的超現實理想主義者
2013-12-21 21:39
0 票支持; 0 票反对
轮次:
Oct 3rd 2013
背景:
现在回过头来看这门课其实从某种意义上来说并不需要太多背景,虽然Dan Grossman在一开始说这门课不适合一点编程基础都没有的人,不过说实话即便将这门课作为第一门编程的课程,只要努力还是可以过的,前提是做好吃苦头的觉悟。我就没学过C和Java...(对应一楼的评论)
内容:
这门课的内容还是很多的,每周光是视频估计都要三个小时了,讲得很细,很清楚。期中前四个Section的内容和EPFL的Functional Programming Principles in Scala有很高的互补性。令人惊奇的是, Dan Grossman将讲解与当场打代码结合地天衣无缝,教学水平真是令人叹为观止,也难怪这门课一年内开了两轮以后产生了无数Dan Grossman的脑残粉。另外尤其喜欢他写的Notes,因为每当一个地方的知识点不理解的时候就瞄一眼,或者搜索一下很快就知道在哪个视频,省去了不少时间。顺便提一下我对计算机语言的看法:其实对于计算机语言,我觉得不用太绝对的把语言分为Functional,Imperative和OOP等,其实除了Static Typing 和 Dynamic Typing 两者是水火不相容,其他的都是可以商量的(体验过Scala这种奇葩语言就明白我的意思了)
作业:
这门课的评价方式还是挺完整、严格的,除了7个PA,还有期中、期末考,PA除了机器打分,还有Peer Grading,总之相当费时间...有的作业里部分题目还是蛮有难度的,但是鉴于接触CS快一年,懂得如何抓重点了,所以少了很多当初刚开始接触MOOC CS课程那种痛彻心扉的体验......
社区:
这门课的社区去的很少,不过总体来说挺热闹的。
感受:
这门课应该算是MOOC平台中少有的超高质量的课程,如果想要打下扎实的基本功那么强烈推荐这门课程,不过要做好花费大量时间和精力的思想准备,当时上的时候总感觉刚搞定一周的内容下一周就出来了,挺有压迫感的
|
2
|
王亮_eecs
2013-12-06 22:39
2 票支持; 0 票反对
先说一下我自己的编程语言基础:熟悉C++、Java,懂一点python、verilog、Javascript,不是神牛,但基础也算可以。
编程语言一般分为static type和dynamic type,也可以分成functional programming(FP)和object oriented programming(OOP),一组合就是4种语言。修这门课,最好已经学过Java、C#之类的OOP & static type的语言,这样更容易理解一点,不建议编程初学者学这门课,难度还是比较大的。
这门课程采用三种编程语言(Standard ML,Racket, Ruby)来阐述一般的编程语言设计技术,Standard ML是FP & static type;Racket是FP & dynamic type;Ruby是OOP & dynamic type(但相对来说Ruby讲得比较少)。这些语言相对Java、C++来说还是有点小众化的,可能实际中用到的时候不太多,但课程的目标主要是理解编程语言中的常见概念、帮助学生快速掌握新的编程语言,所以难免要有权衡取舍。
课程的负担还挺重的,每周基本上要花8-10个小时在这门课上(包括看video和做programming assignment的时间),课程共有7个programming assignment,一次midterm exam,一次final exam,其中programming assignment的得分包括peer evaluation(就是评价别人的代码)和auto grader评测两部分。
老师是个很风趣的人,英语也非常清晰,programming assignment都经过非常精心的设计(尽管这次还是有人找出了一个bug……),有些作业是要实现一些函数;有些是阅读现成的代码并进行扩展;还有的是写一个简单的解释器。instruction里面有一些提示,在刚开始用一门陌生语言编程时,这些提示就比较有帮助。
总体上还是一门非常值得推荐的课。
希望对大家有帮助~
|
3
|
基佬的愛__
2013-11-27 13:52
3 票支持; 0 票反对
Disclaimer: the review is more or less subjective. I have absolutely no intention to make it objective. You have been informed.
这门课教会你从语义理解程序,而不是通过学语法掌握某门特定的语言。我记得我大一的时候学过一门 Java 课,大二的时候学过 C,如果那时候有机会上这样的课,那两门课完全没必要。Java 作为一门工业语言不适合用来作为入门语言学,C 应该和像 UW 的 Software Hardware Interface (CSAPP) 或者操作系统那样的课一样结合起来一起学,C 是冯诺依曼体系上特有的语言,不是一门通用语言(只不过冯诺依曼体系是事实上的标准,所以对 CS 来说 C 才那么重要)。像我这样对系统底层不怎么关心,对 CS 里偏 EE 的部分都不怎么感兴趣人来说, C 暂时不需要学的很好。我个人对数学比对 CS 感兴趣的多,工作也只是用高级语言在我的舒服区域写 APP,底层的坑都是尽量避开的。
这门课是 UW sophomore 的课,假定你会编程。我记得高中信息课会教基本的 control flow,循环,教你看流程图之类的。这门课的 prerequisites 这些就够了。可以说是 self-contained 的一门课。Coursera 上还有门用 Racket 教的课是面向完全没编程经验的人的,我上了一周嫌太简单弃了。
这门课你上了就能体会到,Dan Grossman是很用心的在教,讲的很清楚又不罗嗦, Dan 的语速适中,口音也很清楚,上课表情不像 Jim Fowler 那么丰富,给人呆萌的感觉。我最喜欢的一点是他每周都给你10多页的Lecture Notes,Notes上的内容和他讲的是一致的。不像有些水课,有推销教材的嫌疑。如果写作业的时候忘了某个东西可以翻Notes,因为文本的检索要比视频快的多。如果你不想看视频,只看Notes也是可以的 ,视频蛮多的,一周你得花两三个小时看(单纯是播放的时间,不计算消化的时间)。顺便提下,Dan Grossman还有门面向 grad students 的课,不过 Coursera 上还没有。
Brow还有门 PL 的课也是研究生级别的,第一轮我错过了,据说今年9月可能再开。一个印度人教的, 名字 SK (缩写,阿三名字记不住),那人貌似是 Dan Grossman 学生时候的 TA 还是同学来着,论坛里听 Dan 提到过。Dan的课唯一的遗憾是没讲 continution, Scheme的 call-cc 看得我的脑袋想爆炸。
如果你上这门课的话可以去 freenode 上的 #coursera-pl ,里面讨论的很激烈,遇到问题会有热心的人帮你,CS 的学生应该熟悉去 IRC,mailing-list 这些东西而不是只知道 QQ 群。
|
0
|
课程图谱
2013-06-03 15:46
0 票支持; 0 票反对
华盛顿大学的“Programming Languages” ,曾于1月份推出过一轮课程,主要探索编程语言背后的基本概念,尤其对于函数式编程,会探讨其技术和优势。这门课同时会使用3种编程语言(ML, Racket, Ruby)来介绍相关的概念,感兴趣的同学可以关注
|