我学的是python的字典,学习的目的是会用,具体说就是看到他人的代码能从中识别出哪些变量是字典类型,字典对象如何传递,字典里的结构是怎样的,分别是什么类型,代表什么信息;再就是我可以自己编写代码使用字典来承载我需要的信息,解决我的程序问题。这两种应用哪个是靠经验预测就够的?
如果我要学习的是字典,那也要看目的。如果还只是使用,那跟学python字典区别不大;如果是要写一个新字典类型(加特定接口或改善性能),那需要深入到字典内部,学习字典内的对象组成和实现算法,并理解其与迭代器的交互方式,迭代器与遍历语法、生成器、kwargs的交互方式等,然后改写数据结构和相关算法实现新字典的功能。这种层面的泛化确实要了解相关原理。
行文中用到的变量和对象之类的概念都是编程领域有特指的,跟课程里的不一样,请自行分辨。
面向对象编程是一种设计方法,是特化了的一种图示应用。我是将这种方法的结构拿出来去分析其他知识,对于我来讲这是泛化。当然这种泛化能力来自于UML之类的建模工具,我是在用了很久之后才明白这层关系的。
62e692e2
(wwl=碳基Ce)
55
是的,他压根都没听懂。将课程中的概念,往其它学科中的概念上硬套。
本课程的理论体系是重组和调整多学科后的产物,并不等于这些学科本身
同感。不仅词(概念)用错了,而且连概念间关系也用错了。例如他说的:“泛化越强越没法解决具体问题,细节都抽象掉了呀”,这句话完全和课程中的内容相反…
唉,啥也没搞懂也不曾实践过就瞎评论。抽象程度越高,共性越少,泛化能力越强,但这个泛化只能在高的抽象层进行。具体的问题则在低得多的具象层。这层里面的联结模型组要关注更多的细节属性,高层的泛化能力当然解决不了低层的具体问题啦。
结合课程中的内容,我上面的发言并不是在攻击你本人,而仅是对你的发言做出评价,具体指你句子中用的概念及其关系和课程不匹配。
【1.啥也没搞懂,2.也不曾实践过,3.就瞎评论】这几个回复,你的判别依据是什么,感觉是恼羞成怒?
你先别急着攻击,你可以试着考虑一下,我说错了吗。
仅从你的发言来看,你应该是没有用课程中对「泛化」一词规定的内涵,然后也没有用课程中的概念间关系。
你的发言“渐构这套理论只是一种泛化能力强的学习框架。泛化越强越没法解决具体问题。”
如果是用课程中的内容,“泛化越强越没法解决具体问题”这句话就不成立。
本课程对「泛化能力强」的定义,是遇到未见情况时,凭此模型,可以成功预测未见对象。但是把这种含义代入到你的句子中,显然不成立。
因此,你说的「泛化越强越没法解决具体问题」这句话,如果用课程里的含义,完全不成立。那这句话成立的唯一可能,就是你没有采用课程中的定义。
我说的:“这句话完全和课程中的内容相反”,就是指你并没有用课程中的内容,而是用课程之外的内容。仅是对你的发言做出评价,我认为我没有攻击你本人,仅评价你的发言问题(难道你认为我说你没有用课程中的概念,这点说错了吗?),而你却攻击我本人,但是我犯不上和你计较。
大哥,我建议你先别发言了。
说的越多,和课程中内容差的越多。
先仔细看看课程吧。
你说的:“抽象程度越高,共性越少,泛化能力越强,但这个泛化只能在高的抽象层进行。具体的问题则在低得多的具象层。这层里面的联结模型组要关注更多的细节属性,高层的泛化能力当然解决不了低层的具体问题啦。”
我没法评价了…
你说的给我cpu干冒烟了…你说的这还是《世界模型》吗?
你最好还是评价一下吧,争论的焦点在是泛化并不发生在相同的抽象层次上,例如基于语言的外显继承学习的方法,没办法在具象层直接泛化到基于实践的内隐创验学习上。但在高抽象层次的渐构的框架下,后者也是找最适材料,找最适方法,执行迭代,当然能在这个层次上泛化了。不过,这种泛化没有什么实际意义,还是要把所有被抽象掉的细节都加回来,才能形成适用于基于实践的创验学习方法。
你打了这么多字,唯一的有效信息就是我用的概念与课程不一样,到底哪个不一样了?
1 个赞
以下内容为AI回复。
核心论点:学习编程 ≠ 学习编程语言
在我们开始之前,必须先破除一个最根本的概念错位:
- 大众误区: 认为“学习编程”就是“学习Python/Java/C++等语言的语法”。
- 渐构视角: “学习编程”的真正
目标,是获得「利用计算机语言,创造出能够预测并解决未见问题的可泛-化模型(即程序)」的能力。 编程语言,只是建构这些模型的工具(语言材料),而非目标本身。
搞错这一点,就会陷入“学了语法却写不出程序”的「有联无判」(对象层丢失)困境。
「渐构分析」:系统性解构编程学习
现在,我们运用「渐构分析」的七步法,来解构编程学习。
第一步:判断推测类型
编程学习的核心,始终是面对未见的问题(需求),所以它本质上依赖于**「模型推测的泛化能力」**。
第二步:明确输入输出
编程学习的信息推测任务是:
输入空间: {所有可能的需求和问题}
输出空间: {所有能够解决这些需求的程序}
- 学习的目标: 建构一个强大的
大脑模型,这个模型的映射关系是:“给定一个需求,能够输出一个有效的程序实现”。
第三步:拆组学习任务
“学会编程”是一个宏大的综合任务。为了避免一开始就陷入困境,我们必须将其拆解为多个核心的**子任务**。这与“听说读写”的拆解逻辑一致:
- 学识义 (Concepts Learning): 建构
编程世界的核心概念的判别模型。这是基石。
- 学识语 (Syntax Learning): 建构
编程语言的符号(语法)的判别模型。这是工具的掌握。
- 建指代 (Reference Building): 建立
概念(如“循环”)与其语言符号(如for循环语句)之间的指代关系。
- 练应用 (Application Practice): 建构
联结模型,即如何组合这些概念和语法来解决问题。
第四步 & 第五步:分析知识类型、材料与方式
这是分析的核心。我们将结合「方向视角」(自下与自上)来分析每个子任务。
子任务1:学识义 (Concepts Learning) - 理论基础
- 知识类型: 主要是
外显知识,包含大量的判别模型和联结模型。
- 学习方向: 典型的**「自上学习」**。你需要
继承计算机科学数十年发展总结出的抽象概念。
- 核心
概念: 数据结构、算法、设计模式、计算机体系结构、网络协议等。
- 最适学习材料: 高质量的教科书、大学公开课、严谨的教程文档。
- 最适学习方式:
- 应用「单概念学习」工具: 对于“哈希表”、“递归”、“多态”等每一个核心
概念,都通过抽象描述、正反例、验证题来建构其**判别模型**。
- 理解
关系: 不能孤立地学习概念,要理解它们之间的联结关系(例如,栈和队列都是线性结构,但操作方式不同)。
自上而下练习: 理解了概念后,主动去寻找具象的例子来实例化它,以避免**对象层丢失**。例如,学完“哈希表”,就去想想“用户登录系统”是如何应用它的。
子任务2 & 3:学识语 & 建指代 - 语言工具
- 知识类型:
判别模型(识别语法是否正确)和对应关系(记忆)。
- 学习方向: 主要是**「自上学习」**。
- 最适学习材料: 官方文档的“Getting Started”部分、交互式教程(如Codecademy)、速查表(Cheatsheet)。
- 最适学习方式:
- 最小化原则: 不要试图“背”下所有语法! 只需要掌握最核心、最高频的语法,足以让你能“读懂”和“写出”简单的代码即可。语法细节永远可以通过查阅文档来解决。
- 在“用”中学: 将
学识语和建指代,融入到练应用的过程中。
子任务4:练应用 (Application Practice) - 核心战场
- 知识类型: 主要是**
内隐知识**。解决问题的模型建构(编程思维),很多时候是一种内隐的、需要自主化的能力。
- 学习方向: 这是**「自下学习」和「自上学习」**的交织地带。
- 最适学习材料:
- 精心设计的编程练习题(如LeetCode、HackerRank)。
- 真实世界的开源项目代码。
- 自己的项目需求。
- 最适学习方式 (核心):
- 从「自下学习」开始:
- 模仿与修改: 找一个简单的、能运行的程序(
已见的对象)。不要只是看,要去修改它、弄坏它、再修复它。观察每次修改导致的输入和输出变化,这是在搜集感官经验。
- 解决微小问题: 从最简单的问题开始(“如何打印Hello World”、“如何计算1到100的和”),自己动手写代码。这是**
创验学习**的开端。
- 切换到「自上学习」:
- 当你在
自下的探索中遇到一个问题无法解决时,这时你已经有了具体的**“问题意识”**。现在,你再带着这个问题,去自上地学习相关的概念(学识义),效率会极高。
- 循环迭代(渐构):
- 「学识义」 → 「自上应用」 → 遇到新问题 → 「自下探索」 → 遇到障碍 → 再去「学识义」… 这是一个不断循环、螺旋上升的
渐构过程。
第六步 & 第七步:执行与验证
- 执行: 坚持每日编程。编程能力,尤其是
内隐的编程思维,是通过高频率的练习建构起来的,而不是靠“突击学习”。
- 验证:
- 单元测试: 这是对你程序(
模型)泛化能力最直接的验证。
- Code Review:
继承学习的绝佳方式,通过他人的反馈,比对和更新你的模型。
- 教授他人(费曼学习法): 当你能把一个
概念或算法清晰地教给别人时,说明你已经对它形成了稳固的知识结构。
总结:渐构编程学习框架
不要把编程学习看作是一个线性的、先学完A再学B的过程。而应将其视为一个动态的、迭代的系统。
- 启动: 以**
自上学习的方式,快速掌握一门语言最基本**的学识义和学识语,目标是能写出第一行代码。
- 核心循环: 以**
自下学习为主导,通过大量解决具体问题**的实践,在做中学,在做中遇到困难。
- 迭代提升: 将
自下实践中遇到的困难,作为学习的驱动力,回过头去进行**自上学习**,有针对性地补充学识义。
- 最终目标: 将
外显的知识(你从书本上学到的数据结构、算法),通过大量的练习,**自主化**为你内隐的、近乎直觉的“编程思维”。
通过这套框架,我们就避免了常见的学习误区:
- 避免了「有联无判」: 不再是只背语法而不会用。
- 避免了「对象层丢失」: 不再是只懂理论而无法与现实问题连接。
- 避免了「无意义学习」: 每一个学习行为都由真实的问题驱动。
3 个赞