Programming Languages Part A Week 1笔记
之前一直想学习Coursera上Programming Languages系列课程,但去年一直在看SICP,所以这部分推迟到现在开始学习,这次回顾Week1的内容,主要是一些课程介绍。
课程主页:
https://www.coursera.org/learn/programming-languages/home
B站搬运:
https://www.bilibili.com/video/BV1dL411j7L7
Week 1
欢迎!(以及一些课程机制)
欢迎!
- 这是一个具有挑战性的学习编程语言基本概念的机会。
- 通过努力工作、耐心和开放的心态,本课程使你成为一个更好的程序员 :
- 即使是我们不会使用的语言 ;
- 学习每种语言的核心思想,尽管表面上存在着无数的差异和变化;
- “糟糕”的课程摘要:“使用ML、Racket和Ruby”;
介绍性材料
本视频:
- 课程机制,结构
其他介绍性视频:
- 我是谁和员工致谢
- 最初的“为什么这样学习编程语言”
- 2-3周内的真实课程动机
- 讨论推荐背景
- 为什么“课程”分为A、B和C部分
- 评分策略
- 总体“路线图”,特别是接下来的几周
简洁的待办事项清单
- 熟悉网页上的所有材料
- 无论这是否是你的第一门Coursera课程
- 几件不同/不寻常的事情
- 使用Emacs[可选]和SML[必需]进行设置
- 网页上的安装/配置/使用说明
- 以及视频(如果需要)
- 必要,非智力因素
- 没有理由拖延
- 网页上的安装/配置/使用说明
- 可选的“虚拟”作业0
课程材料
- 视频讲座:最必要的,其他标记为“可选”
- 阅读材料
- 与讲座内容相同,但更精确、更完整
- 因此:可选但推荐
- 讲座代码
- 避免从mp4/.pptx/.pdf中重新复制
- 家庭作业
- 根据测试案例进行评分,并进行同行评分
- 考试
- 涵盖了“单纯的编程”很难再加强的主题,因为这不仅仅是一个编程课程
家庭作业
- 每个主要课程部分一个(减去1)
- 每个作业都是“一次性”提交
- 比许多MOOCS更像一门具有挑战性的大学课程[10-12小时/周?]
- 做家庭作业包括:
- 理解正在讨论的概念
- 编写代码,展示对概念的理解
- 测试你的代码以确保你理解并拥有正确的程序
- “玩弄”变体、错误答案等。
只有(2)被评分,但专注于(2)会使家庭作业更难。
- 挑战问题:低分/难易比
- 不要公开解决方案
请注意我的写作风格
- 家庭作业的措辞往往非常精确和简洁
- 我是一名计算机科学家,并且我的写作风格很好(一件好事!)
- 技术问题值得精确的技术写作
- 简洁是重视读者的时间
- 你也应该努力做到精确
- 略过或不理解为什么选择某个词或短语,会使作业变得更难
- 如果有问题感到困惑,可以通过各种方式询问他人
- 感到困惑是正常的,可以理解的,甚至是鼓励的
- 一旦你不感到困惑,你可能会同意问题的措辞并没有引起困惑
欢迎!
- 对我们所有人来说都是一次伟大的冒险
- 希望能支持一个活跃的、有活力的社区
- 即使我不能见到你们所有人,也能一起获得更多的乐趣
- 这次MOOC是“我做过的最简洁的事情”之一
- 我希望你们也这么认为
- 希望在每一步都能扩展你的思维和带给你挑战
- 同时为你们提供成功所需的一切
我是谁/致谢
主要是老师的介绍,这部分略过。
课程动机
本课程是关于什么的
- 与任何编程语言相关的许多基本概念
- 以及这些部分如何组合
- 使用ML、Racket和Ruby语言:
- 它们让许多概念“闪耀”
- 使用多种语言展示了同一概念如何“看起来不同”或实际上略有不同
- 在许多方面比Java、C#、Python等更简单
- ·重点关注函数式编程
- 不使用mutation(赋值语句)(!)
- 使用first-class函数(还不能解释这一点)
- 但还有许多其他主题
为什么要学这门课?
- 这是课程动机的“正常”位置
- 为什么要学习这些材料?
- 但根据我的经验,我们没有足够的共享词汇表
- 因此,将全部动机推迟到函数闭包(第3节)之后
- (将在第1节末尾会介绍不可变数据)
- 在这期间,必须在没有太多证据的情况下“断言事情”
- 除了很多以前的学生
- 示例反馈:“我以前曾多次尝试学习。但在你的课程结束后,我很快就完成了教程…”
我的观点
- 学习以这种“PL”的方式思考软件将使你成为一名更好的程序员,即使你回到过去的方式
- 它还将为你提供终身自信地学习新语言和新思想所需的精神工具和经验
- 有点像《空手道小子》电影(1984,2010)的风格
一个陌生的环境
- 接下来的4-5周将使用
- ML语言
- Emacs编辑器
- 用于评估程序的读取-评估-打印-循环(REPL)。
- 需要把东西安装和配置好
- 看书面说明(仔细阅读;欢迎反馈)
- 可选:展示Windows安装的视频
- 只有这样,你才能专注于“真正的内容”和家庭作业1
- 在陌生环境中工作是一项计算生活技能
不是关于语言的
- 不能过分强调ML(A部分)、Racket(B部分)和Ruby(C部分)是“达到其他目的的手段”
- 被选为“特别适合这些主题”
- 也有其他可能的选择
- 也欣然承认,特别是ML不再被实际使用。
- 与之密切相关的语言有:OCaml, F#, Scala, Haskell
- 可以说是一个特点,而不是一个错误
- 没有人因为“已经知道它”而分心
- 对“空手道小子”的方法更有效
- 专注于核心功能,而不是库、花哨的东西,等等。
- 非常“干净、合成、优雅”的语言
文字已经够多了
- 非介绍性的讲座将编写代码
- 加上关键概念的幻灯片
- 加上“视频中的问题”
- 比这些“介绍性”视频要好得多
- 所以请原谅“无聊的介绍内容”
推荐背景
主要参加这门课程的先修背景,例如一到两门编程语言,以及一些基本的编程概念即可。
为什么分为A部分,B部分,C部分
拆分的原因
- 总的来说,比“大多数MOOC”更具实质性和挑战性
- 为你提供值得认可的艰难但中等的目标
- 在继续之前给你一个“休息”的机会
- 更接近“不同的步调”
如何拆分
- 不幸的是“按语言拆分的,而这并不是重点
- A部分大致相当于B部分和C部分的总和
- 在我看来,没有自然的地方可以细分A部分
- A部分:3个家庭作业,1个考试
- B部分:2个家庭作业(1个更具挑战性)
- C部分:2个家庭作业(1个更具挑战性),1个考试
评分策略
主要介绍了评分策略,这里略过。
非常高层次的大纲
课程概述
- 很难描述我们尚未介绍的主题
- 所以不要被吓倒,也许可以跳过这个这部分
A部分:
- 软件安装
- 基础知识、函数、递归、范围、变量、元组、列表……
- 为第1节留出额外时间
- 数据类型,模式匹配,尾递归
- first-class函数,闭包[和课程动机!]
- 类型推理,模块
B部分:
- 在动态类型的语言中快速“重做”(指再次学习)
- 延迟评估
- 用解释器实现语言
- 静态类型vs动态类型
总体而言,对函数式编程进行了精确的介绍,并逐条进行了阐述。
C部分:
- 动态类型的面向对象编程
- OOP与功能分解
- 高级OOP主题(如mixins, double dispatch)
- Generics vs Subtyping
小结
- 即使你“已经知道OOP”,也要“完成这个课程”。
- 一些有OOP背景的人认为第7部分 “不那么有趣”,但请继续关注第8部分。
- 有些人认为C部分是“反OOP”的,这大多不是真的
- 关于与许多“已经思考/知道”的内容进行对比
- 是的,有些人专注于“纯OOP”的承诺可能是不明智的,即使在“一种OOP语言”中也是如此(指的是不要专注于OOP)
环境配置
在网址https://www.smlnj.org/下载操作系统对应的版本,这里是windows,直接下载.msi文件然后安装即可。
测试,打开终端并运行sml:
λ sml
REM sml.bat
REM
REM Copyright 2020 The Fellowship of SML/NJ (http://www.smlnj.org)
REM All rights reserved.
REM
REM The standard driver for SML/NJ under the new runtime system
REM
Standard ML of New Jersey (32-bit) v110.99.2 [built: Tue Sep 28 13:04:14 2021]
-
运行指令并得到如下结果就说明安装成功:
- 1 + 1;
val it = 2 : int
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Doraemonzzz!
评论
ValineLivere