我希望能够从规范中学习协议,通过阅读文档来熟悉应用程序,并通过结构化的课程吸收编码技巧,但在我深入某个项目,专注于一个明确的目标,并能在调试器中运行实时代码之前,这些东西对我来说还不够生动。...但我怀疑我不是唯一这样操作的学习者。在任务上有了一些进展之后,我会参阅文档来丰富我的理解。但我很少想从那里开始。仅用文档来回答已知的问题已经够艰难的了,用它们来回答你没有想到的问题就更艰难了。...如果不理解它是什么,我会不舒服地使用它,但没有必要:我不仅得到了代码,还能要求并接收解释。 (?!\s*-):这是否定前瞻断言。它检查下一行是否不是以可选空格后跟破折号(-)开头。...非本地变量 当我要求 ChatGPT 重构一个变得太复杂的函数,并在此过程中使用嵌套函数时,我介绍了另一种我从未遇到过的惯用法。...但在这里我学到了 nearest-enclosing-scope-that-is-not-global 的变量概念。
一个语言能否有足够强大的 metaprogramming 的能力,取决于它多大程度将 自身的语法树暴露给程序员。语法数暴露给程序员,意味着程序员可以像操作数据一样来操作语法树,做出符合其希望的变换。...在给出具体例子之前,为了加深你理解的困难,我们再看看 wikipedia 是怎么定义 lisp 里面这几个概念的: 先看 quote: Any expression can also be marked...下面是 elixir 写一个最简单的例子(先别管语法),这个例子定义了 unless,使用过 ruby 的同学应该对此不陌生。...(注:以上返回值为了清晰起见,我把 AST 的 metadata 删除了) 从这里面,我们可以清晰地看到,macro 的输入是两个 AST:1 == 2 的 AST,和 3 + 4 的 AST。...一不小心写了这么长,作为 metaprogramming 的概念的入门,应该是够了。我们现在应该理解了 AST,syntax quote / unquote,和 macro 的基本概念和作用。
也就是说,我之所以要在文档一开头写那行XHTML 1.0的doctype,是为了告诉验证器,让验证器按照该doctype来验证我的文档。 浏览器反倒无所谓了。...这就是浏览器在解释那行字符串时真正看到的内容。它必须看到这些内容,根据就是伯斯塔尔法则,对不对? 我多次提到健壮性原理,但总有人不理解。...我觉得语言本身应该提供一种开关,让作者能够表明自己想做什么。”比如说,想使用某种特定的语法,像XHTML,而不是使用其他语法。我理解这些人的想法。但我不赞成在语言里设置开关。...我的文档中可能会包含一个分区,这个分区中可能会嵌套另一个分区,或者一篇文章,然后文章再嵌套分区,分区再嵌套文章、嵌套分区,文章再嵌套文章。而且每个分区和文章都可以拥有自己的H1到H6。...他在邮件中解释了对HTML的理解,他说:“你知道……知道我的想法,我认为H1、H2这样单调地排下去不好,我希望它成为一种可以嵌套的元素,或者说一个通用的H元素,我们可以在其中嵌套不同的层次。”
虽然在两种不同的前端框架之间进行切换确实需要学习很多,但是二者之间在很多基础概念、设计思路上是相通的。其中之一就是组件设计,包括组件层次结构设计以及组件各自的职责划分。...我认为最好的方法是给每个概念一个简洁精炼的名字,然后逐一解释每个概念是什么以及为什么重要,对于比较抽象概念的会举一些例子来帮助理解。...但是它们并不复杂,只是想通过这些例子来帮助更好的理解概念。 层次结构和类图 应用内的组件共同形成组件树, 而在设计过程中将组件树可视化展示可以帮助你全面了解应用程序的布局。...而这些类图的以下优点可以帮助你有效的规避以上问题,优点如下: 一个易于理解的组件组成和关联视图 一个易于理解的应用程序 UI 层次结构的概述 一个结构数据层次及其流动方式的视图 一个组件功能职责的快照...最后,我提到了这一点,因为如果我们过分关注优势,就很容易忘记达成目标所需要做的努力,所以在做出决定以前需要权衡这两个方面。
相比于其它的代码,它是相对独立的,这里我理解的是我需要使用它的时候,它才能起作用,我不需要使用它的时候,它也能存在于咱们的代码里这里我举个例子来证明一下: 大家可以看到,在这个代码中,我们编写了一个求两数之和的函数...下面来举例子说明strcpy在结构体中的应用: 这里我们可以看到,我们定义的结构体struct book中的成员name是一个字符数组,我们在第一次使用时,数组中的元素是“5元如何用7天”这个字符串,如果我们需要修改这个里面的内容的话...下面我们通过实例来理解自定义函数; 3.自定义函数实例理解 为了更好的理解自定义函数,下面我们借助之前做过的题目找出两个整数的最大值来说明自定义函数的各个组成部分及其作用; (1)写一个函数可以找出两个整数中的最大值...嵌套调用 理解:我对嵌套调用的理解就是在函数体内调用其它的函数。...可能不太好理解,怎么我们在将函数,你这里又是函数嵌套又是函数递归,现在又说迭代,咋又提到了循环呢?没关系,下面我们通过题目进一步理解: 求n! 这一题大家还有印象吗?还记不记得我们在哪里提到过?
每当写了很多业务代码之后,我都会停下来反思一个问题,你的代码写的干净么,有需要重构的地方么。...而给类命名则正好相反,再举个栗子: AddressManager.php MacAddress.php 上下两个类名,这里我写的有点争议,其实在不同的语境里两个似乎都可以完成可读性的使命,但是假设一个程序...虽然我上面反复提及了名字简短,但是只有很少比例的命名能又短又明确的阐述命名意义,所以如果是为了增加可读性,长命名也不是完全不可取,虽然很多人黑Objective-C命名是又臭又长,但是这种命名带来的便利就是你扫一眼便知道函数要完成的目的...这次的手环模块,因为有很多蓝牙的连接状态判断,写了很多Swich ifelse等判断,而ifelse因为业务逻辑复杂,还在初次编写的时候夹杂了很多嵌套,所以需要重构的地方还是很多的。...而提到了维护,那么测试又不能不提,很可惜,我还没有看全测试,平时的工作中因为很多是移动端的编码,view层占的比重很大,有时候疏于测试,好好理解,好好实践,再来写下一篇心得吧。
,并且有单位元)并没有帮助我更好地理解程序的意义和结构。...于是我开始思考,**偏向工业的程序员们应该如何对待抽象概念(尤其是从数学界借用的)?**学习这些抽象概念到底能不能(以及如何能)提升一般程序员、或者是计算机产业界对代码的理解和认识?...一个程序员应该以(且只以)使用或编写了技术上更佳的东西为荣,而不是数学上更佳的东西。 所以这就是我的疑问,而我急切地期待着您的回复。...Others will, naturally, vehemently disagree. :-) 这些都是很好的问题,但我无法回答,因为很容易就会走上 “学习或理解某件事情意味着什么” 的道路,而这是一个意识问题...我们的这个 “高阶过程” 得到的残差程序其实是一个编译器,而我们的这个 “高阶过程” 所做的,正是在生成编译器,即,这一过程其实是编译器的编译器——如此,我们终于见到了本节概述中提到的 A 的 A 这样的结构
如果你能在社区里跟社区里的大牛交流得到答案,那么你算是领先于这个时代了。 所以,我认为你的信息源要有下面几个特质。 应该是第一手资料,不是被别人理解过、消化过的二手资料。...我觉得,只要我有时间,极客时间上的所有专栏都不用写了,我一个人就 OK 了。 我可以写得又快又好,而且超出所有的人。那我可以挣到很多钱。...但我想通过这些简单链接的方式,为我的读者打开一个全新的世界,他们可以在这个世界中自己找食吃,而不需要依赖我,这才是我想给大家带来的东西。...当学习算法和数据结构到一定程度的时候,你就会知道,算法不仅对于优化程序很重要,而且,会让你知道,该如何设计数据结构和算法来让程序变得更为健壮和优雅。...最后,我指出,学习时一定要使用知识图,学习并不是为了要记忆那些知识点,而是为了要找到一个知识的地图,你在这个地图上能通过关键路径找到你想要的答案。
打工还是要打工的。。我最后也没发出去。 紧急处理以后,现在写复盘,大家随我看看我到底是在学习哪些内容。...下面命令安装了cobra生成器程序和 cobra 库: $ go get github.com/spf13/cobra/cobra PS: 如果出现了golang.org/x/text库找不到之类的错误...如下main.go文件中的调用命令入口: import "cmd" func main() { cmd.Execute() } 最后为了编码方便,在helpers.go中封装了调用外部程序和错误处理函数...,我就不展开写了,有兴趣去看我的源码。...cobra 库的使用非常广泛,很多知名项目都有用到,前面也提到过这些项目。学习这些项目是如何使用 cobra 的,可以从中学习 cobra 的特性和最佳实践。这也是学习开源项目的一个很好的途径。
理解:我对于迭代的理解,就是在函数体内使用循环。 我们在探讨函数的嵌套调用的时候有提过,所谓的嵌套就是在函数体内调用函数。...到递归的时候,我也提过,递归就是一种特殊的函数嵌套,只不过这时嵌套的函数是它本身。...在上一篇内容中我们在编写按顺序打印1 2 3 4时,我也提到过,在进行递归时,函数就进入了循环,此时也就不需要在额外使用循环了。迭代也就是在函数体中通过使用循环来让函数重复的做一件事。...可能不太好理解,怎么我们在将函数,你这里又是函数嵌套又是函数递归,现在又说迭代,咋又提到了循环呢?...结语 那函数迭代的内容到这里咱们就介绍完了,希望这篇能够帮助大家更好的理解函数递归与迭代。接下来随着学习的深入,我会继续给大家分享我在学习过程中的感受,感谢大家的翻阅,咱们下一篇见。
模块中提供功能的开发者可以定义一个模型,从而可以创建对于所提供功能的更简单的、数据类型的API。因此降低了通过服务抽象层提供的数据结构的错误交互。...下面简单引出NETCONF协议的configuration data store。 Pic YANG模型通过树形结构的节点定义描述了数据模型的层级嵌套结构以及各属性的数据类型。...为了描述控制器元素所提供的数据结构,YANG模型作为一种服务和数据抽象的建模语言就起到了作用。...) 有些container 即出现在config里,又出现在operational里,我理解 一个container要么是config要么是operational,为啥会出现2个都是的情况?...没有两个都是哦 Q3:遇惠君 另外好像通篇都木有看到xml文件呢,倒是提到好多次,xml文件哪去了,干啥用的,用来传参数的?
例如,Hinton最近的“capsule”(Sabour, Frosst, & Hinton, 2017)就是一个尝试,通过使用更结构化的网络,来构建更强大的由部分到整体的图像识别。...确实,我没有找到一篇很好的、可以引用的总结性文章(LeCun也在电子邮件中告诉我,现在还没有这样的总结文章),但我明确提到了他的兴趣: 深度学习先驱Geoff Hinton和Yann LeCun最近都指出...我还指出: 显然,深度学习和无监督学习在逻辑上并不是对立的。深度学习主要用于带标签数据的有监督环境,但我们也可以通过其他途径,以无监督的方式来利用深度学习。 我的结论也是积极的。...我很犹豫要不要谈这个问题,但是各种回复里都提到了这一点,甚至很多知名人士也在说。正如Ram Shankar所说,作为一个社区,我们的批评必须限制在基于科学和价值的讨论上。...与之相反的是,我在街上开车,可能会把树当成路灯,但不会像这些深度学习应用一样犯这么离谱的错误,因为我对意义和语境有深刻的理解。
为了引导大家思维,下面先来点简单的,例如将如下接受两个参数函数转成只接受一个参数(curry) def add (x, y): return x + y; print(add(1, 2)) 为了对上面...提示 每当你觉得xxx很难时,往往还是基础不扎实,很多人学编程时难免犯一个方法错误,他把编程知识分成两类: A:看一眼似乎能学会的。 B:看一眼似乎不能学会的。...对于A类知识,他的反应是:这TM太简单,没必要学习;对于B类知识,他的反应是:这TM太难了,完全超出了我的学习范畴,没法学习。 ——所以天底下就没有值得学习的东西。...最后解决 可能有人会说 ,但我们的要求是一个add函数同时支持下面这几种的用法呢: add(1, 2, 3) add(1, 2)(3) add(1)(2, 3) 如果你理解了上面两个例子的运行机制(嵌套函数和函数返回值...为了帮助读者能理解我的解决思路,所以顺手写了本文。
这可以通过对称性来实现;如果需要添加和删除方法,应该在适当的地方应用这些变化。 一个好的 API 包含了少量的概念;如果我在学习它,我不应该学到太多东西。...这不一定适用于方法、类或参数的数量,而是指 API 所涵盖的概念表面积。理想情况下,一个 API 应该只致力于实现一件事情。 最好也避免为了添加而添加任何东西。...数据结构到底是什么?” 通常情况下,错误处理是一个容易被忽视的地方。例如,如果你正在使用数据库作为后端存储,不要让 SQL 错误传播出去,因为如果随后想要更改存储机制,你就无法做到这一点。...保持规范的简短使其更有可能被阅读,并防止你过度投入解决方案。如果你花了几个月时间写了一个100页的规范,你就不太可能承认它不好。...这是危险的胡言乱语。 虽然你希望你的 API 易于理解和学习,但它的文档仍然非常重要。它应该是完整而全面的,至少应该涵盖每个方法、每个字段的作用以及错误条件。
我在文章的第一页就提到了: 自那以后,深度学习在语音识别、图像识别、语言翻译等领域取得了许多最先进的成果,并在当前AI的广泛应用中起着重要作用。...“我不理解的一点是,GaryMarcus说DL对分层结构不好,但在LeCun在他发表在《自然》的评论文章中说DL特别适合于开发这样的层次结构。”...[注3] 我在讨论中提到的层级结构的概念是不同的,聚焦在能够进行明确推理的系统周围。一个经典的例子是乔姆斯基提出的层次结构,他认为一个句子是由越来越复杂的语法单元组成的。...诚然,我找不到一篇好的总结文章来引用(当我问LeCun,他通过电子邮件告诉我目前还没有这样一篇文章),但是我明确地提到了他的兴趣: 深度学习的先驱Geoff Hinton和Yann LeCun最近都指出...而人类则不同,在街上行驶时,我可能会把一棵树错看成一个灯柱,但我错得不会太离谱(因为我深深地理解了意义和场景)。
1 深度学习的概念在变化 Yann LeCun:我觉得有一个很笼统的定义,即通过组装那些函数没有被完全定义的组块来组装一个机器,然后通过使用梯度下降最小化某种目标函数来解决这些函数。...可微分编程(differentiable programming)这个概念可以被泛化地理解为深度学习,其含义是编写一个程序,其中函数调用不被完全定义,而是在训练中加以调整。...Sanjeev Arora:Yoshua 你谈到了自治系统,好像这些系统是在许多时间段或在无限的时间里运行,但我们还不清楚是否对系统的决策做出持续性的解释,因为它是一个动态程序。...但我认为,我们有一个错误的假设,即在我们的世界中,存在于人类身上的符号足以理解复杂的自动驾驶汽车和其他复杂系统。...我认为这是一个非常重要的问题。 提问:请问 Bengio 教授,您提到了推理和归纳偏差的必要性,我个人更多是在适应不同模态的空间中处理归纳偏差,我想知道您在这方面是怎么做的。
因为我曾经就是这么掉到坑里的,这种狭隘的观点让我浪费了大量的时间去学习琐碎的细节,又让我迟迟不能接触到更重要的知识,结果是眼高手低——知道许多别人不知道的无用知识,但是又写不出什么真正像样的程序来。...课本里也没提到? 那是因为你看的是入门教材,着重讲解语法,顺带提到了少量的 C 语言自带的库函数而已。...这就是我需要向大家强调的第二个观点,要想写出实用的C程序,一大关键就是研究并学会使用各种库函数。 你看见隔壁王二写了个三维程序能让一个彩色的立方体在空中旋转?快找 OpenGL 库函数来用。什么?...这就是一般的学习规律。说得很简短,但是要做到真的很不容易。 四、参考书籍 首先第一本,也是我认为最重要的书,是这本《计算机科学导论》。...合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
领取专属 10元无门槛券
手把手带您无忧上云