sicp,为什么有人说弄懂了算法导论的90?
其实不管是对于在校生来说还是已经工作的程序员,一般很少都会接触算法。

学生的话也只有计算机相关专业的开设了数据结构和算法相关课程的才需要用到,但如果只是对付期末考试的话也没啥难度。
但是如果在大学期间接触到算法竞赛就不一样了,需要花费比较多的精力。
的确在工资上任何公司都是10%的算法大佬拿的工资比其他90%的业务开发程序员或者其他的程序员都要高,不过就凭只懂《算法导论》这本书的话还是不太行的,算法离不开业务的。就算超越也是超越那10%的算法工程师里的90%,如果能达到这个境界别说BAT了,微软谷歌都是可以考虑的。
说这个话在我看来他可能是想卖课,卖完再慢慢告诉你,“学到90%也没有那么容易”,或者“在刷我这套题这件事上超越90%的程序员 并不等于收入上超越90%的程序员”。
你多去拼多多参加几个活动,在文字游戏和预期管理上你应该就懂了;要是还不懂,大概你也不是那么适合做这一行以及算法导论。
公式:弄懂+一本名著+百分比+超越+百分比+你的群体。
例句:
弄懂sicp的67.9%,你就超越了95%的程序员。
弄懂本草纲目的72%,你就超越了93.7%的中医。
弄懂冰箱说明书的83%,你就超越了99.9%的冰箱使用者(这也许是最真实的,虽然冰箱说明书不是名著……)
至于为什么这么说……个人觉得就是对xx东西的一种崇拜,很大程度上是人云亦云。
算法导论是本不会动的书,不同人读效果不一样的。不要神化某一本书,参差多态乃幸福本源。不看算法导论你也可以会算法,你也可以会数据结构,你也可以进大厂。没有算法导论的时候也依然有研究算法的科学家。你能通过他学会知识很好,但你觉得它晦涩,搞不懂,没有c的代码让你学的不舒服,那就不看他。
人生中见书,书中见人生。读书有时候不一定是为了学东西,可能更多的是一种享受。就像你没学看过csapp之前,通过各种课程,学了零零碎碎的知识。忽然有一天你看了csapp,你觉得好过瘾啊,好爽啊。你觉得你学习的第一天就看csapp能有这种效果吗?
好书不会变少只会变多,更何况帮到你的也未必需要是好书。也许一本书只是很普通的书,不严谨,还都是大白话,但未必就帮不到你。
学东西莫要搞崇拜。很多程序员学习的时候都不是通过算法导论这本书学的,可他们依然很杰出。
interface上调用方法?
golang的interface,和别的语言是不同的。它不需要显式的implements,只要某个struct实现了interface里的所有函数,编译器会自动认为它实现了这个interface。 SICP里详细解释了为什么同一个接口,需要根据不同的数据类型,有不同的实现;以及如何做到这一点。在这里没有OO的概念,先把OO放到一边,从原理上看一下这是怎么做到的。 先把大概原理放在这里,然后再举例子。为了实现多态,需要维护一张全局的查找表,它的功能是根据类型名和方法名,返回对应的函数入口。当我增加了一种类型,需要把新类型的名字、相应的方法名和实际函数入口添加到表里。这基本上就是所谓的动态绑定了,类似于C++里的vtable。对于SICP中使用的lisp语言来说,这些工作需要手动完成。而对于java,则通过implements完成了这项工作。而golang则用了更加激进的方式,连implements都省了,编译器自动发现自动绑定。麻省理工学院是如何培养计算机学生?
谢谢邀请,因为没有相关经验,所以我专门请来一个能给你解答这方面的大牛人---吴军老师,吴军老师女儿就在MIT上学,他在硅谷来信中也专门介绍了MIT培养大学生的内容,现在转述出来,回答你的问题。
首先我们说说MIT的招生。美国绝大多数私立名校,招生时都和哈佛类似,30%看学习成绩,70%看学习之外其他的东西。这样除了可以考察学生未来的综合水平外,还可以方便地照顾给予了捐赠的校友的孩子,以及成绩较差的少数族裔的孩子。但是MIT和明天要介绍的加州理工是例外,它们70%看学习成绩,30%看和课程无关的内容,而且MIT是少数没有将捐赠和录取挂钩的学校。当然,对于少数族裔,MIT还是要留出25%左右的名额的。顺便说一句,亚裔在美国虽然人数少,上大学时可不算少数族裔。
至于学习成绩,除了高中的平均分之外,最重要的要看学了多少门大学的先修课。如果你学了不到10门,录取的希望就很渺茫了。我的女儿在MIT转了高中7门课的学分,她学了十来门大学先修课,不过在她的高中里,大约有10%甚至更多的学生先修课学得比她还多。MIT每年大约招收1800名学生,他们来自全世界1000多所高中,也就是说,除非你在美国最好的几所私立高中,否则你需要是全年级第一名,才有比较大的被录取的把握。
此外,任何与学习有关的竞赛成绩,在MIT都是管用的,当然,这些竞赛也需要在州以上的水平。简单地讲,MIT喜欢学霸。当然,如果你不仅是学霸,又有艺术天才,可以向MIT提交你的艺术作品,比如绘画和摄影,音乐的录音等等,MIT为这些学生留有特殊的通道。当然,如果学习能力不够,即使能通过其它方式进入MIT,我觉得也最好不要去,否则在里面受罪。
在高中的成绩好代表学生可能是不错的苗子,但是如何将他们培养好,就有技巧了。和普林斯顿一样,MIT首先非常重视本科生的教学。美国很多研究型大学拥有不少世界一流的教授,但是他们未必都能到一线上课,比如在斯坦福大学,经费充足或者在外面办公司的教授可以花钱把自己的课时买回来,只搞科研而不再教课。
说起来很多大学有不少大教授,却与本科生无关。麻省理工学院不是这样,学校经常会请最好的教授来讲授大学一年级的大课。比如一年级的微积分课,麻省理工会根据新生的水平,将所有新生编入几个班,每个班几百人,全部由最好的数学教授授课。麻省理工学院的教授讲课很认真,而且大部分教授都乐于教学,愿意花时间给学生答疑,这可能与美国东部地区的教授们较少在公司兼职有关,相比之下,加州或南方各个大学的教授常常在外面给公司做顾问,甚至自己办公司,没有多少精力投入到教学中。
培养人光靠大师还是远远不够的,因为大师数量有限,具体做起来需要一个认真负责的团队。
在MIT,不仅名教授们自己教学认真,而且对助教的要求非常严格,他们会和助教一起仔细设计作业和实验环节,保证学生能最大限度地掌握课程内容。
麻省理工学院的一位博士生助教告诉我,他的教授要求他每周花够20小时的规定辅导时间,而事实上他有时花的时间甚至要超过20小时,这对于自己还在上课的博士生来讲是不小的负担。虽然美国各大学给助教规定的每周工作时间都是法定的20小时,但是在大部分大学里,助教实际花费的时间只有一半左右,即每周10小时。我在约翰·霍普金斯大学当一门大课的总助教时,会替教授出考题和改考卷,即使如此,每周也就花费十五六个小时而已,这已经是相当多的了。在麻省理工,助教们辅导本科生花的时间可能是全美国大学中最多的。
为什么教授和助教们要在本科生身上投入这么多时间和精力呢?除了课程比较难以外,学校还希望能兼顾好学生和有些吃力的学生,让他们都能有收获。
对于好学生,麻省理工的教授会在作业或项目上提出一些额外的要求(有点像考试的加分题),完成这些任务的难度很大,因此总有一些好学生不断地找教授和助教答疑。
对于学习吃力的学生,教授们会想尽办法让他们掌握好课程内容,而助教和同学们也乐于帮助他们。这样一来,教授们和助教们都需要花费大量的时间和精力。相比之下,哈佛和耶鲁在教学上是保证95%的学生能够学好,而加州理工则正相反,是为了保证前5%的学生能学好,因此在教学上所花的精力都不如麻省理工。
麻省理工学院的功课负担相比其他大学重得多。那些在高中已经修过AP课程的新生,入校时并不能跳过基础课,而是要经过分班考试后学习程度更深入的基础课。那些在高中紧张了两三年后想到大学来放松一年的学生,恐怕要失望了。
到了高年级,由于工程课程实验性强的特点,大部分课程都需要花大量时间做课程设计项目,工作量更大。在麻省理工,大部分课程设计(Project)都由两个同学(自由组合)一起完成,如果一个组有三个同学,那么在教授心目中,这个组就要多做50%的工作,以防止出现混学分的南郭先生。在美国有句形容大学特点的话——“哈佛难进,麻省理工难出”,讲的就是麻省理工功课之难。
别看在麻省理工功课负担这么重,功课给分却非常低,每门课大约只有20%~30%的学生能够得A,比哈佛的70%的得A率、斯坦福50%的得A率要低得多。
麻省理工的工程师思维。既然麻省理工的功课这么难,那么为什么还会有很多人喜欢上MIT呢?
这倒不仅仅是为了它的金字招牌,而是为了培养工程思维。
美国的本科生其实大多数人在进入大学之前并不知道自己将来想做什么,到MIT学习主要是打好理工科的底子,并非要一辈子做工程。实际上MIT的本科生后来学医,学法律和金融的比例极高。MIT从校长到教授,没有谁一定希望学生将来就是当科学家,或者从事工程工作,只要你在学校里养成了工程思维,他们教育的目的就达到了。对于学生从事任何职业,学校和教授们都很支持,相比之下,国内个别校领导,一看到自己学习科学的学生跑去做金融挣大钱了,就觉得学生们胸无大志,这完全没有必要。
顺便说一句,MIT虽然理工最有名,但是它的文科专业其实水平也很高。MIT虽然文科规模不大,但凡是它设置的专业,在美国排名都非常靠前。在2017~2018年《美国新闻与世界导报》的排名中,它的经济学、政治学和心理学分别排在全美第一、第九和第八名。因此,MIT的学生并没有人们想象的那样偏科。
MIT在科研上的特点,我们在之前有所提及,这里就简单介绍一下。相比斯坦福,MIT更多的经费来自于政府的基金而不是工业界,因此它首先强调从事长期的、影响力巨大的、基础性的研究,短期看得到看不到商业前景,那是次要的考虑。也正是因为这个原因,MIT的原创性发明非常多,但是它的教授要比斯坦福的穷很多。
MIT在科研上的第二个特点就是强调学科的交叉融合,今天很多重大的科研成果都是跨学科的,如果没有合作,没有交叉融合,就没有重大的科研上的突破。2017年清华的邱勇校长请我帮助建立一个各学科交叉融合的实验室,就是想借鉴MIT成功的经验。
本文内容来源于得到-吴军的谷歌方法论第176封来信,侵权删。cs61a主要讲的是啥?
CS61A 对应的教材是《计算机程序的构造和解释(SICP)》 ,核心思想是抽象,主要讲的是:
编程范式——包括函数式编程(FP)、面向对象的编程(OOP)、结构化查询语言(SQL);
如何对一个问题拆分和程序实现(这个很关键);
也教了一点编译原理的内容——写个scheme 解释器。
在学 CS61A Spring 2020 之前,我只是感觉要使用“抽象”,未曾料到其本身有一套成体系的方法。这门课给我的收获很大,由于洞察了编程语言的真相,能做到一周甚至半天内掌握一门高级程序语言(C 、MIPS 除外);以及利用“抽象”这一理念,掌握到科学的程序设计方法。
CS61A 课程作业里要写的代码并不多,即使是最后一个 project —— scheme 解释器,总共要写的代码行数也在 100 行左右。但代码的阅读量却较为巨大,可能要写的代码只有 5 行,但却得花半小时以上的时间理解其他代码是什么意思。
CS61A / SICP 提供的那套“抽象化”的程序设计方法,是看再多 Python 的 API,上再多程序语言课也学不会的。如果上了很多 Python 课,自己想写写小项目也还是无从下手,那么务必试一下 CS61A。
Scheme语言是怎么来的?
Scheme 是 LISP 的一个方言(dialect)。
著名的 SICP 书就是以 Scheme 为教学语言(实际上 SICP 的作者就是 Scheme 的作者)。虽然 Scheme 本身只是一个精简化的适合教学的语言,可它首先提出的一些重要的思想,引领了新一代的LISP语言的出现。实际上, LISP 语言发展的历史是连续的,之所以我在这里人为的把 LISP 的发展史划分为上一代和现代,是因为随着 Scheme 首次引入并规范化了一些重要概念, LISP 语言出现了很多以前从来没有大规模普及的新特性。以 Common LISP 为代表的 LISP 语言也因为这些新特性,而焕发了第二春。人所共知的 Paul Graham 大叔,借着这一波 LISP 复兴的浪潮,不光写出了 On Lisp 这样的好书;而且还用 Common LISP 写出了一个在线电子商务平台,在 1998 年的时候以近 5 千万美元的价格卖给了 Yahoo! (凭借这笔买卖, Paul 大叔现在经营着 Y Combinator 天使投资,成为硅谷著名的天使)。前段时间卖给 Google 的 ITA,负担着世界上大部分的航班资讯查询,核心系统也是 Common LISP。虽然不该把 Common LISP 的很多成就全部归结到 Scheme, 但 Scheme 作为一个重要的历史分水岭,探究一下它的历史来源还是很有趣的。

还没有评论,来说两句吧...