要仔细回答这个问题,我们首先需要问这个数据结构是否“通用”:它是否可以方便地满足那 10 个更专门的数据结构的作用? 就此而言,我们还可以问:我们真的需要 100 个函数吗?...在我 1998 年的演讲“语言的成长”中,我评论说,一个优秀的程序员“不仅仅是编写程序。一个优秀的程序员建立了一个工作词汇。”...不幸的是,随着程序变得庞大和复杂,几乎总是如此,规范的充分性、一致性和正确性本身变得值得怀疑,因此完整的正确性论证很少伴随大型程序。...这提供了书中的所有程序和丰富的教师资源,包括大量额外的练习和关于在典型大学学期中可以涵盖的 SICP JS 子集的建议。...:整个重点是始终将其视为肥皂泡吗?
我曾经苦苦思索这个问题,直到我在SICP上看到了答案。说的白话一点就是,能像机器一样思考的人就适合做程序员。 那么“计算机”这台机器是怎么思考的呢?...这里是我的答案: 我们所有的计算机,都可以用下面这个模型来表示,江湖人称“冯・诺伊曼体系”。 ? 从这个模型上我们看到了什么吗?嗯,可能太多干扰了,看的不够清楚,我给你们再抽象一层: ?...听起来好简单啊,有那么神吗?不是编程的人都应该会吗?然而并不是的,很多人思考编程这件事情是靠感觉的。 我前几天面了40多个外包公司外派来的人,只有5个人,可以按照输入输出来对问题进行分解。...回到数据与过程不严格区分那半句,当我们试图模糊数据和过程的界限,将过程像数据一样纳入输入输出的范畴,我们就走上了函数式编程之路。 题外话-3: 有人觉得练习不够吗?...请留言,如果感兴趣的人多,我就加紧写更多练习的解析。
那一段时间,在跟学弟学妹们扯皮的同时,我也在思考讨论班究竟以什么样的形式来进行活动。哈工大大一的所有学生都在黄河路的二校区,大二以上年级的学生基本都在西大直街的一校区。一起活动吗?还是分开活动?...让高年级的学生直接给大一同学开小灶吗?还是内部轮流分享?能做到每周都有东西可以拿来分享吗? 最终,我采取的方案是:讲书。...有一天,有一个选了C语言讨论班学弟在群里面甩下一句话,让我非常的不爽:大意就是说,这个学期学校不是上C语言课吗?干吗组织这个讨论班?——我真的没好意思在群里面怼回去:你当时投票的时候眼睛xia了吗?...5 在一区的这两个讨论班,情况也不容乐观。我没看过SICP,也参加了SICP的讨论班,准备尝试学一学。...选了参加SICP讨论班的同学,有的甚至不清楚SICP说了个啥——那天SICP讨论班算上我只有3个人参加,一个同学问我,“学这个语言有什么用”?说实话我愣了一下。
比起 MIT 的课程,它更加完善,更适用于初学者。 我们建议至少学完 SICP 的前三章,并完成配套的习题。如果需要额外的练习,可以去解决一些小的程序设计问题,比如 exercism。...我们推荐把此书的前六章读完,并完成对应的项目练习。这么做,你将更加深入地理解,计算机架构和运行其上的软件之间的关系。...书中的小项目和习题相当值得练习,尤其是其中的 “Wireshark labs”(这部分在网上可以获得)。...一定要严格遵守推荐的学习次序吗? 事实上,所有主题之间都有一定程度的重叠,彼此循环引用。...我们努力对这份指引中的课程加以限制,仅仅包括那些你作为软件工程师 确实需要了解的,不论你的专业方向,并且对每门课程为何必要做出了解释以帮助你理解。
他的推荐词说: SICP是一本无论如何都应该去仔细阅读的书。...其实,在2013年,我还在ThoughtWorks时,就曾经和同事一起整理了一份ThoughtWorks读书雷达,在编码实践象限中推荐了SICP。...可惜当时我出差在外,没有机会参与这个有趣的活动。至今想来抱憾。 按:clojure是我一直想学却一直未学的一门语言,而SICP是我一直想读却一直未读的一本书。...——于是,我买了中文版的SICP,却从来没有翻开它;我在GitBook下载了LFE(Lisp Flavored Erlang)版本的SICP,却从来不曾点开它。我将它藏起来了,貌似珍藏,实则逃避。...说是拖延症吗?其实未必呢。 ? 隐隐地,我总觉得阅读此书是重要的,却并非紧急的;于是无意识中让许多紧急却并不重要的事情抢到了前面,阅读的优先级一退再退。
现在,营长特意为这些小伙伴准备了一套大餐,希望能帮你厘清方向,消除困惑。 为什么要学好 CS? 首先,为什么要学习 CS? 我们知道,任何行业的从业人员的专业水平都是参差不齐的。...视频则推荐伯克利大学 Brian Harvey 的 SICP 课程。建议至少学完 SICP 的前三章,并把练习题做完。...如果你觉得 SICP 的课程太难,可以选择 How to Design Programs。...传送门: https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html https://archive.org/details...营长推荐 Computer Networking: A Top-Down Approach 这本书以及搭配的练习题,不过这本书实在太贵。
这篇文章的内容对此不仅会有一些方向性的建议,还会包含一个基础核心向的编程入门导引。...》,它为你指明了这三个变量的方向。...8 其他 编程入门阶段比较容易忽视的几点: 1.学会提问:学习中肯定会遇到问题,应该学会正确的使用搜索引擎。...当然,为了掌握这些东西你依旧需要大量的练习,腰还是会疼,走路还是会费劲,一口气也上不了5楼。...不,我说错了,即使是高富帅也不会有强力精神力,他也会怀疑自己,觉得自己没钱就什么都不是了。但总之,你遵循指南好好看书,那就会体验「会当凌绝顶」的感觉。
作者 | 梁唐 大家好,我是梁唐。 最近在B站里找到了一门神课,它是伯克利的CS61A,也是伯克利计算机科学专业的核心必修课。...号称是CS必学,我上了几节课,发现内容的确非常高,比当年我在学校上的计算机概论那些不知道高到哪里去了。 首先来介绍一下这门课,CS61A是一门SICP的入门理论课,非常扎实。...SICP是Structure and Interpretation of Computer Programs的缩写,翻译过来就是计算机程序的构造和解释。...我个人看的是18年的视频: 这版视频只有英文字幕,但老师讲得语速不快,而且我感觉导师水平很高,讲得很好。 还有最新21年的版本,有中英双语字幕。 大家如果感兴趣从这两个版本当中选就行。...由于是公开课,所以课件、作业、project都是公开的。我们旁听生虽然不能提交作业,但一样可以拿来练习和学习,这也是公开课的最大意义。
我现在认为,学习编程跟学习交税是一样的,都是学习实施的细节。一旦外部环境变了,原来的实施细节就没用了。 当代编程由于层层的抽象和封装,我们已经不必接触底层真正具有通用性的知识了。...我觉得,程序员应该要警惕,不要落入实施细节的陷阱,不要把全部精力花在实施细节上面,然后以为自己学到了真正的知识。...对待各种语言和工具,正确的态度应该是“进得去,出得来”,既要了解足够的细节,也要能够站在宏观的角度看待它,探寻底层到底是怎么实现的。...如果不懂知识,死记硬背,熟练练习技术,你能干活吗?能干,但是要想干好,那就必须得懂。就像开车一样,光学会了驾驶技术,但是要想安全行车,必须懂得交通规则。...知识是符合文明方向的,人类对物质世界以及精神世界探索的结果总和。知识,至今也没有一个统一而明确的界定。
如何进行刻意练习呢? 我认为主要有下面几点 1、激发刻意练习的意识 人最最重要的是思维,思维指导你前进的方向,刻意练习也是一样。那所谓激发刻意练习的意识是什么呢?...好了,我们怎么进行刻意练习呢。我认为最重要的是识别出你需要什么做哪些方面的刻意练习?只有正确的识别出来,达到目标的条件是哪些,然后我们刻意练习才有方向。...我们发现程序员的编程能力是一个核心能力,但是这个能力太大,太广泛了,如果我把它设定为刻意练习的目标,这显得太大了,一下难以达到,无法具体实施。...这里我想说的是,没有什么人、什么方法可以保证你的计划完整顺利的实施。...3)学会延时享受 这个就不多说了,即时激励很重要,但是同时如果能够提升延时享受的能力,这会帮助你更快抵达你的目标。 好了,另外要有一定要记住要有耐心,方向正确慢就是快,祝各位早日成为领域专家。
如何进行刻意练习呢? 我认为主要有下面几点 1、激发刻意练习的意识 人最最重要的是思维,思维指导你前进的方向,刻意练习也是一样。那所谓激发刻意练习的意识是什么呢?...好了,我们怎么进行刻意练习呢。我认为最重要的是识别出你需要什么做哪些方面的刻意练习?只有正确的识别出来,达到目标的条件是哪些,然后我们刻意练习才有方向。...我们发现程序员的编程能力是一个核心能力,但是这个能力太大,太广泛了,如果我把它设定为刻意练习的目标,这显得太大了,一下难以达到,无法具体实施。...这里我想说的是,没有什么人、什么方法可以保证你的计划完整顺利的实施。...3)学会延时享受 这个就不多说了,即时激励很重要,但是同时如果能够提升延时享受的能力,这会帮助你更快抵达你的目标。 好了,另外要有一定要记住要有耐心,方向正确慢就是快,祝各位早日成为领域专家。 end
而所学习到的新思维方式,你可以运用在你所熟知的语言中。甚至有时你会使用新学的语言进行你的重要项目。...这种具有挑战性的书籍包括《The Art of Computer Programming》、《Structure and Interpretation of Computer Programs (SICP...8.书写代码(Write about coding) 在博客上练习书写代码。你也可以在不同的问答网站上回答问题。同时你也可以写一些教程(DreamInCode)。...在你编写代码时,你会想着要正确编写,为了能够解释其中的问题和技术。编写代码还能够体现你的编程知识,提供你英语语法,这些在编程中都是很重要的。...代码出错时,你可能会急于用最少的时间去解决它。你会怎么做呢?上baidu(google也行)网站吗?Don‘t do this。要认真思考问题,拿出纸和笔,认真想出解决方案。
如何进行刻意练习呢? 我认为主要有下面几点 1、激发刻意练习的意识 人最最重要的是思维,思维指导你前进的方向,刻意练习也是一样。那所谓激发刻意练习的意识是什么呢?...好了,我们怎么进行刻意练习呢。我认为最重要的是识别出你需要什么做哪些方面的刻意练习?只有正确的识别出来,达到目标的条件是哪些,然后我们刻意练习才有方向。...我们发现程序员的编程能力是一个核心能力,但是这个能力太大,太广泛了,如果我把它设定为刻意练习的目标,这显得太大了,一下难以达到,无法具体实施。...这里我想说的是,没有什么人、什么方法可以保证你的计划完整顺利的实施。...3)学会延时享受 这个就不多说了,即时激励很重要,但是同时如果能够提升延时享受的能力,这会帮助你更快抵达你的目标。 好了,另外要有一定要记住要有耐心,方向正确慢就是快,祝各位早日成为领域专家。 ?
很多自学的内心深处肯定都有这样的疑惑,我自学能可以嘛?怎么找到怎么的方向,怎么到达工作的水准,能达到培训人的水平嘛?一系列的疑问,有一点首先要搞清楚,不是每个人都适合自学。 那么什么人适合自学?...所以自学学到一半的人,很多中途废弃,针对这种情况,自制力稍微差的可以找同学一起学习,或者找个对应的学习群去学习。 第二:具有探索精神,因为需要选择正确的学习方向,教材,以及对应的学习路线。...选择好就业方向,自学还是冲着找到合适工作或者自己创业的需要,首先选定正确的方向,方向尽量选择风口方向或者未来有前景的方向,选择夕阳产业学出来用处不是很大,这个需要问一些有经验的人或者去百度搜索,多去调查研究...选择好了方向,就开始具体的实施,选择一个合适的教材,或者视频,选择好了就不要轻易去换,选择好了,给自己制定个计划,大约用多长的时间来完成,同时在学习过程在看懂理论的基础上,一定要动手操作,不能只是看,要在电脑上多实践...,并且在网上找一些练习题目去做。
方法入门 1.1 概述 1.2 方法的定义 1.3 方法的调用 1.4 调用练习 1.5 注意事项 2. 扩展知识点 2.1 +=符号的扩展 2.2 常量和变量的运算 1....举例: 1.3 方法的调用 方法在定义完毕后,方法不会自己运行,必须被调用才能执行,我们可以在主方法 main 中来调用 我们自己定义好的方法。...在主方法中,直接写要调用的方法名字就可以调用了。 1.4 调用练习 将三元运算符代码抽取到自定义的方法中,并调用。...,运行结果是 2. 2.2 常量和变量的运算 下面的程序有问题吗?...,可以赋值给变量 b3 ,因此 b3=1 + 2 是正确的。
这就是完全没有测试的问题。 要用这些自动化单元测试去测多少代码呢?还要说吗?全部!全部都要测 这一种方法,就是TDD,来规避这个问题。...与采用测试先行的方式编写的测试代码比起来,后写的测试在深度和捕获错误的灵敏度方面要逊色很多 一个开发方法,业界已经得到普遍认可,但国内有多少公司实施了?至少我所经历的公司都没有。...,当时流线性的写出代码,事后经常会发现偏离了方向,不得不重写。...书中有两个章节与近期订阅的李笑来老师文章有重合 练习 任何事情,只要想做得快,都离不开练习。 两个武者搏斗,每个人都必须能够迅速识别出对方的意图,并且百分之一秒内正确应对。...实际上,真正做出反应的是你的身体,大脑是在更高级的层面上思考 也就是李笑来老师提的刻意练习,如果程序员不去刻意练习,写各种demo,那么我想水平永远是hello world的水平了 注意力 注意力是稀缺的资源
已经本网协议授权的媒体、网站,在使用时必须注明"内容来源:ThoughtWorks洞见",并指定原文链接,违者本网将依法追究责任。 我曾经和我认为优秀的程序员一起工作,但是他们是真正优秀的程序员吗?...“演进式设计”所带来的优越性,没错,就是TDD 除了面向对象,你用别的编程范式根本写不出好的软件,因为只有OO能降低复杂度 你认识这类程序员吗?...如果是,你认为他们的水平如何?经验表明这类极端的思维,既不是完全正确也不是完全错误,只是不合逻辑。 更加切实的考虑和合理的推理才能帮助你成为一名优秀的程序员。...磨练技艺,增强技能固然很好,但是当我们在做这些事情的时候,应该从实际情况出发,认真考虑实施其所需的范围、成本、环境等各种因素。将这些合理的因素纳入考虑范畴需要成熟的思考,才能成为优秀的程序员。...当然,也需要大量的练习。
1.3学习内容——方向选择 后面这些就不是就不属于基本技能了,到你选择自己方向的时候了,python可以做的东西很多,对应的要求的能力也是有很大区别的,当然全栈很吃香,但是全栈也不是所有都精通,只是所有都懂...而且每个方向下都有对应不同的职位,这个不是技术能解决的了,看你自己的职业规划咯。 这里有意思的是,最后有个高级教程,放了个类,到这里应该能明白我前面为什么不让你们看类和对象了吧。...测评意见 先说下优点: 首先学习路线很全面,小白能很快有自己的思路 根据不同进度进行学习,有练习题为辅 有在线运行环境很方便(这里我没写,是因为需要开会员,我没体验,用过其他家的,挺方便,不用管环境,只管自己代码就行...,自己决定需不需要) 对创作者的浏览量有帮助 练习题难易度标签挺好,有助于检验 可以优化的地方: 提交优质内容按钮太难找了,我提交了一个试了下,滑了半天才滑到,真半天不是虚词,建议可以挪到显著位置,或者固定...,不随浏览资料动 参考资料缺少明确的质量指标,只要过了练习题都可以提交,一个模块下参考资料又很多,也有很多重复的,建议增加浏览量,收藏量等指标,方便学习者快速定位质量较高的博文 练习选择题的代码,前面基础的还好
Http和Https的区别 HashMap的具体实施原理,HashMap和Hashset的区别 Java的垃圾回收机制 JVM的原理及线上调优 string,stringbulider,stringbuffer...12:TCP保证可靠的手段? 初级、中级 Android 工程师可能因离职而失业吗? 针对朋友找工作难的问题,我特意咨询了我在腾讯负责面试的朋友,为何Android开发普遍感觉找工作难。...坚持学习: 有的同学可能工作了五年,但是学习的时间可能一年都不到。学技术不能急于求成,只要学习方法正确,量变一定会引起质变。...听和看只是第一步,更重要的是实践,通过刻意练习把听到和看到的知识内化成你的能力。 刻意练习,就是有目的的练习,先规划好,再去练习。 4.广度和深度的选择 技术人员的学习路径有两个维度,深度和广度。...没有人会专一做某一块,但是自己一定要想好哪一块是自己以后要走的方向,那么这一个方向确定了就要深入的学习这一块的知识,多看源码,多做练习,如果接触到具体项目,要在项目中沉淀自己,最后形成自己的知识体系。
不会,因为互联网技术更迭太快,纸质书籍的内容无法实时更新,一本书动辄百元,很快就成为垃圾,你会发现目前市面的上区块链书籍至少是一年前写的,内容已经过时,很多例子无法正确运行。...1.3. 我们应该怎么做? 1.4. 如何学习区块链 1.5. 区块链能做什么 1.6. 区块链不能解决的问题 1.7. 理解去中心化 1.8. 理解不可撰改 1.9....如何学习区块链 我学习区块链技术是没有看过任何书籍的,我采用的是碎片化学习方法,主要是通过搜索引擎和官方文档。我比较擅长自学,也很少和人交流。...学习区块链有两个方向,一个是代币开发,另一个才是区块链开发,现在媒体将两个方向混为一谈,这是两个独立的方向。...所以在实际的应用中,区块链不能替代数据,只能互补。 所以在项目实施前,仔细想想自己需求,真的需要区块链吗?还是需要区块链上的一些特性?例如数据不可撰改。如果仅仅是需要区块链的某一个特性。
领取专属 10元无门槛券
手把手带您无忧上云