Programming Languages

开始时间: 04/22/2022 持续时间: Unknown

所在平台: CourseraArchive

课程类别: 计算机科学

大学或机构: University of Washington(华盛顿大学)

授课老师: Dan Grossman

课程主页: https://www.coursera.org/course/proglang

课程评论: 5 个评论

评论课程        关注课程

课程详情

Learn many of the concepts that underlie all programming languages. Develop a programming style known as functional programming and contrast it with object-oriented programming. Through experience writing programs and studying three different languages, learn the key issues in designing and using programming languages, such as modularity and the complementary benefits of static and dynamic typing. This course is neither particularly theoretical nor just about programming specifics – it will give you a framework for understanding how to use language constructs effectively and how to design correct and elegant programs. By using different languages, you learn to think more deeply than in terms of the particular syntax of one language. The emphasis on functional programming is essential for learning how to write robust, reusable, composable, and elegant programs – in any language.

课程大纲

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)来介绍相关的概念,感兴趣的同学可以关注

课程简介

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.

课程标签

编程 编程语言 函数式语言 函数式编程 ML Ruby Racket SML Lambda Mixin Closure 闭包 UW OOP 华盛顿大学

61人关注该课程

主题相关的课程

Creative, Serious and Playful Science of Android Apps 关注

Functional Programming Principles in Scala 关注

High Performance Scientific Computing 关注

Learn to Program: The Fundamentals 关注

Ruby 关注

Introduction to Computer Science 关注

Compilers 关注

关注

关注

C++ For C Programmers 关注