Podcast Script (zh)
[0.120-3.010] SPEAKER_01: 你最早爱上哪种编程语言? 对吧?
[3.310-10.554] SPEAKER_02: 我管它叫“六十”。 之后我记得是“雪球”。 我记得Fortran,但没爱上。 Pascal也一样,没爱上。
[10.634-16.961] SPEAKER_02: 它们都拦着我。 后来发现汇编,有趣多了。 然后我转去搞微码。
[17.261-20.070] SPEAKER_01: 所以你就被吸引了…… 你觉得底层的东西很酷。
[20.370-33.248] SPEAKER_02: 我试过很多语言,汇编花了很多时间 还有微码。 那算最早赚钱的东西,我用它付了硕士学费。 然后我发现了…… 然后发现了Simula,简直太棒了! Simula。
[33.328-43.509] SPEAKER_02: Simula是Algol 60的扩展,主要做模拟。 但他们在发明面向对象时,引入了继承和运行时多态。 当他们…… 他们在做的时候。
[43.589-53.921] SPEAKER_02: 那种语言让我明白,程序规模能线性增长,不是平方增长。 程序规模能线性增长,不是平方增长。 就是说,模块化能做得很好。 这让我很惊讶。
[54.001-69.711] SPEAKER_02: 同样惊讶的是,比帕斯卡更严格的类型系统有用,而 帕斯卡的类型系统却总妨碍我。 所以你需要强大的类型系统来... 对。 你需要强大类型系统来组织代码,但必须可扩展
[69.791-72.763] SPEAKER_02: 而且要灵活。 我们来深入细节。
[73.063-82.083] SPEAKER_01: 如果你还记得,帕斯卡的类型系统什么样? 阿尔戈六十的类型系统呢? 帕斯卡是尼克劳斯·维尔特当时能定义的最简语言,
[82.383-91.218] SPEAKER_02: 满足了他当时的需求。 它有一种... 它语气高度道德化。 就是说,能用帕斯卡表达就好,不能就没那么好。
[91.298-96.882] SPEAKER_02: 能用帕斯卡表达就好,不能就没那么好。 Simula让你可以自己构建类型系统。
[96.962-105.762] SPEAKER_02: 所以,与其迎合维尔特,尼加德和达尔的语言让你自建。 达尔的语言允许你构建。 是的。 构建你自己的。
[105.842-114.305] SPEAKER_02: 这和你构建DSL的初衷很像。 实际上,你构建的是类型和它们的关系。 让你表达适用于应用的内容。
[114.605-118.912] SPEAKER_01: 所以你谈类型,和面向对象编程有共鸣。
[119.212-126.119] SPEAKER_02: 是的。 是他们发明的。 所有用“类”表示类型的语言,都是Simula的后代。 或者间接的。
[126.199-135.695] SPEAKER_02: 尼加德和达尔是数学家,他们不按类型思考。 他们懂集合和元素,所以把类型称为类。 嗯。 嗯。 嗯。
[135.775-139.664] SPEAKER_02: 嗯。 Simula的类就是用户定义的类。
[139.964-150.703] SPEAKER_01: 要不你试试这个不可能的任务?简单讲讲编程语言的历史。 从你的角度呢? 我们从ALGOL 60、Simula、ASCAL开始,不过那是六七十年代的事。
[151.003-158.630] SPEAKER_02: 我试试吧。 好的。 嗯好。 没问题。 好的。 可以。 好的。 Fortran,第一个Fortran。因为之前代码都是为特定机器写的,
[158.710-166.569] SPEAKER_02: 每台机器都有自己的语言,比如汇编或宏汇编。 但你要用那台机器的语言来编程。而
[166.649-177.388] SPEAKER_02: 巴卡斯和IBM团队开发了一种语言,让你能直接写你想要的。 也就是说,用更接近人类自然语言来写。这些人恰好
[177.468-187.452] SPEAKER_02: 是工程师和物理学家,所以语言对别人来说有点怪。 但基本就叫公式翻译,因为他们希望 把数学公式翻译成编程语言。这就是他们做的。
[187.532-192.477] SPEAKER_02: 机器。副作用是获得了可移植性,因为他们用
[192.557-200.683] SPEAKER_02: 人类术语和思维方式写,然后就有了程序。 把它变成机器的需求,很新颖也很棒。而且它
[200.763-211.722] SPEAKER_02: 值得记住。我们想把语言提升到人类水平,但不想 失去语言。我们想提升语言到人类水平,但不想失去
[212.022-214.831] SPEAKER_01: 效率。那是迈向人类的第一步。
[215.131-225.649] SPEAKER_02: 那是第一步。当然,他们是特定类型的人类。 商业人士不同,所以他们得到了钴等等。而且 Simula出现,不,先谈Algol。Fortran当时没有,
[225.729-232.915] SPEAKER_02: 当时没有……概念。 没精确类型概念,没精确作用域概念,没一套翻译
[232.995-244.851] SPEAKER_02: 阶段,就像我们现在这样。词法、语法、语义。它有点像 早期模型,但嘿,他们刚完成历史最大突破 编程,对吧?所以不能怪他们没掌握所有技术细节。
[244.931-253.893] SPEAKER_02: 于是有了Algol,很漂亮。但大多商业和科学界的人认为它 没用,因为不够灵活,效率也不高,等等。
[253.973-257.142] SPEAKER_02: 但从技术上说,那是突破。
[257.222-263.003] SPEAKER_02: 然后Simula出现,让这个想法更灵活,你可以自定义类型。而且
[263.083-280.500] SPEAKER_02: 我想那是我很感兴趣的点。克里斯蒂安·纽高特,他是Simula主要设计者。 Simula。那是已故的……背后被贬低的设计者。 那是后来的模型……Pepit Xix。 60年代末,他是奥胡斯客座教授。于是学到面向对象。
[280.580-285.270] SPEAKER_02: 编程方法就是坐着理论和Kirsten讨论。
[285.350-300.677] SPEAKER_02: Kristen Newcaugh常聊旅行、foroda之类的 葡萄酒种植、风险业务等。Christian又一次 一旦开始进入状态,就很难插嘴,只能听着 所以,我学到不要浪漫化这个概念,但似乎是个大的
[300.977-310.636] SPEAKER_01: 面向对象编程是一个飞跃,确实是抽象上的飞跃,而且 现在回顾,那个飞跃是否像看起来那么巨大?还是当时明显?
[310.936-318.703] SPEAKER_02: 当时不明显,许多人试过类似的事 但大多数没想出这么美妙的东西。很多人获得了
[318.783-335.341] SPEAKER_02: 他们的博士学历,以此为职业,忘了模拟,而且而且 从来不知道它。对我来说,关键思想就是我可以有自己的类型 这个想法延伸到C++,在那里我可以有更好、更灵活的类型
[335.421-346.241] SPEAKER_02: 类型和更高效的类型,但这仍是基本思想。当我想写程序时,我 想用适合问题的类型来写,并在我的约束下 在
[346.321-354.656] SPEAKER_02: 与硬件、软件环境等。那就是人们领会到的关键思想 关于类层次、虚函数和继承,还有
[354.736-364.174] SPEAKER_02: 那只是一部分,它有趣且重要,现在仍然重要,而且很多 图形相关的东西,但不是最根本的。当你想要时,它
[364.254-376.514] SPEAKER_02: 把不同类型关联起来,不希望各自独立,经典例子就是 实际你不想写那种城市模拟程序,里面你会说,嗯
[376.594-384.175] SPEAKER_02: 如果是自行车,就写左转代码;普通汽车就 普通车右转,消防车右转,结果就一大堆 case语句
[384.255-388.121] SPEAKER_02: 还有大量if语句。相反,你告诉基类,嗯
[388.201-397.396] SPEAKER_02: 就是车辆说“按你想要的方式左转”。这真实例子 用来模拟优化紧急服务,为某个地方 在60年代的挪威
[397.476-405.614] SPEAKER_02: 哇 所以 这是证明需要继承的早期例子之一 而且需要运行时多态 因为要以可管理方式处理这组车辆
[405.694-409.118] SPEAKER_02: 不能每次有新车型就重写代码
[409.418-418.102] SPEAKER_01: 是的,这想法优美又强大 当然,这思想贯穿你的工作——UC++ 我们回头会讨论 但我觉得你组织得很好
[418.182-422.744] SPEAKER_01: 编程语言历史上还有哪些突破? 要是我们那样讲历史呢?
[423.044-428.268] SPEAKER_02: 其实我更擅长讲历史的一部分。 那只是我走的路,不是全部。
[428.568-433.989] SPEAKER_01: 对,你跳过了嬉皮士约翰·麦卡锡和Lisp, 是我喜欢的语言之一。
[434.289-443.286] SPEAKER_02: 但Lisp不算我喜欢的语言。 它很重要。 它很有趣。 很多人用它写代码, 但一用到生产,就重写成C或C++。
[443.366-451.063] SPEAKER_02: 它在我这个领域存在。 这个领域受性能和可靠性约束。 还有可部署性和硬件成本。
[451.143-459.722] SPEAKER_02: 我不喜欢太动态的东西。 写完全灵活的代码很难, 既要在小型机上跑, 又得用在波哥大的电话交换机上。
[459.802-471.795] SPEAKER_02: 出错进调试器,概率多大? 波哥大电话交换机周日晚上有程序员吗? 概率是零。 所以我觉得很多事情, 很多时候都受不了那种灵活。
[471.875-476.658] SPEAKER_02: 我很清楚,大概七到八成代码 并不在我喜欢的约束里。
[476.738-483.518] SPEAKER_02: 但总得有人来做我现在的工作, 因为要从高级灵活语言转到硬件。
[483.818-503.395] SPEAKER_01: 那些能撑十年、二十年、三十年的东西, 那些能撑十年、二十年、三十年的东西, 那些能撑十年、二十年、三十年的东西, 那些能撑十年、二十年、三十年的东西, 那些能撑十年、二十年、三十年的东西, 很结实,在极有限条件下运行。 对,完全正确。
[503.695-504.368] SPEAKER_02: 没错。
[504.668-512.446] SPEAKER_01: 而且它有自己独特的魅力。 C++是我最喜欢的语言之一,Lisp也是。 作为一名程序员,我也能感受它的美,但原因不同。
[512.746-522.231] SPEAKER_02: 我理解Lisp为什么那么受欢迎, 也能看到这些思想有多美妙, 小型计算机也一样。 在我这,它就没那么相关了。
[522.311-533.270] SPEAKER_02: 我还区分了那些更函数式的语言。 其中我接触了ML和Haskell这类东西。 Haskell。 不同类型的语言。 它们有种不一样的美,而且很有趣。
[533.350-541.767] SPEAKER_02: 我试着从所有遇到的语言中学习。 看看有什么能让我处理感兴趣的问题。 在我感兴趣的约束条件下,
[541.847-544.633] SPEAKER_02: 到底哪些事能做得更好?
[544.933-547.986] SPEAKER_00: 因为我们当然可以比现在做得更好。
[548.286-564.867] SPEAKER_01: 所以我认为那是关键。 但我相信,当我们看其他语言中的东西时, 那些我无法从自己角度计算的东西, 而且我相当确信, 因为我能看到这个世界, 这就是我看事情的方式。 所以我要继续,继续,进入视频这部分。
[564.947-573.073] SPEAKER_01: 我要进入这个Sabrina部分。 而且我要试着拍下它。 我想回到我刚才讲的那个问题。 这是我第一个问题。 后来我又问了一遍。 呃。