百科问答小站 logo
百科问答小站 font logo



计算机的书籍动辄几百上千页,作为学生真的有必要啃这些大书吗?如果有必要,该如何提高效率的看书? 第1页

  

user avatar   drjinying 网友的相关建议: 
      

这些书读少了没用,读多了助眠。我啃过Java核心技术、Java编程思想、代码大全、CSAPP等板砖一样的书。过程很痛苦,事后没记住。现在复盘,认为是低效的学习。任何无法学以致用的知识都会被迅速遗忘。

亲测最高效的是做个有难度的项目。不用多,一个就行。遇到困难,去做有针对性的查阅。这时当你找到答案,会兴奋会膜拜。先啃书后实践,顺序反了。

你去学游泳,教练会先让你下水游起来,然后一点点优化你的动作,让你越游越快。正常的教练不会在岸上给你描述全部动作细节,胳膊怎么动、手掌什么角度之类的。你会抓狂。那为什么学计算机,在学生阶段,要拿那一千多页的书给自己找麻烦。

我手艺提升最大的是实习时,mentor让我做个AI的云服务。那时的我连题目都看不懂,后来勉强着做了出来。记得当时奶茶妹妹在楼上实习,我都忘了去看热闹。但完成时,我感到无敌是多么的寂寞。从效率上看,这样一个项目,完爆了我在啃书、上课、抄作业上花的精力。

书该看的时候还是要看的,但要讲时机,讲方法。要带着目的去看。

计算机的书很厚,计算机的好书在于其完全。它们一般是系统性完全指南。当你在任何一方面遇到问题,你能在书中查到Google不到的信息,这是看书的价值。有一类书就是当字典用的,编程类大部分的书皆如此。

大厚书不适合入门用。林子太大了会迷路。学计算机要先长树枝后长树叶。先有个粗略的了解,再填补细节。开始阶段,看知乎,看攻略,看W3School那种,学习效率更高。然后去实践。最后通过啃书镀金。学生时代基本不需要到最后这步。时间多余不如实习。工作后选定技术路线了,再去往深了专研即可。

关于如何实践,可以看这个回答,最后放了个例子。


user avatar   lu-luce 网友的相关建议: 
      

这其实是一个读书方法的问题。

学习计算机书籍的方法和学习邓小平理论的方法不一样。

学习计算机书籍的方法就是:把书里面给的操作步骤和代码敲一遍。

你以为是理论分析和概念理解。

其实是操作手册。


user avatar   bian-cheng-zhi-bei 网友的相关建议: 
      

当然有!但是重点是如何去啃。

这个问题我曾经也疑惑过,现在算是有了一点经验,来聊聊的感受。

在我做公众号后,经常有读者在后台问我:

  • 有些书看的找不到重点,看不下去了,怎么办,比如深入理解计算机系统,UNIX 网络编程,APUE,求指教
  • 我不是科班 CSAPP 可能不是全部看得懂,该怎么办?
  • 大佬,这么多书看得完吗?
  • 刚开始看这些书很痛苦怎么办?

学习计算机一定不要想着速成,要下苦功夫,去啃那些经典书和源码,然后自己动手写,我大学整理了一套计算机必读的经典书籍,对于CS学习的同学帮助非常大,且十分系统,现在免费分享给大家:

书籍分享:

这也正是我今天最想说的部分,「该如何去看大厚书」。

就拿我当时亲身经历来说,在网上搜网络编程如何学习,很多人都推荐 UNP、APUE 这两本砖块似的书。

好嘛,买来看,从第一页挨着挨着看,而且书中的示例代码我大部分也照着敲了,最后看了七八章,发现始终是在学一些 socket api 和 系统 api 的用法,没摸到网络编程的框架思维。

后面我又去搜,看到有人推荐《Linux高性能服务器编程》,去豆瓣看了下了目录,似乎正是我想要的东西。

直接找来 PDF 开始看,果然这本书才真正让我理解了网络编程的整个套路和框架,学到了各种事件处理模式、计时器、信号处理、线程池这些网络编程中很重要的东西。

当然 UNP 和 APUE 也是不能丢的,这两本书我当做了字典查询,比如学到了 IO 部分,回去看 UNP 中关于五种 IO 模型的介绍。

用到 connect、listen、bind 这些函数,再回去看 UNP 第四章,不得不说,UNP 关于这些 socket API 的使用和各种异常情况的处理方式都介绍得非常详细和深入,不愧是网络编程领域的圣经。

但是初学者看却容易在细节中迷失,抓不到纲领,这也是这类书的缺点。

类似 UNP、APUE 这种书本身是面向知识体系的,而不是面向读者,它们其实更像字典,把这个领域内的所有知识,非常细致的堆叠在一起,看上去就是平铺直叙,充斥着细节,对读者极其不友好。并且书里内容实在大而全,很多根本不用学。

但是它们又是经典的,确实是这些领域内在体系性和深入性上都做得非常好的书。

什么书才是面向读者的呢?

那就是抓住该领域的核心主干,提纲挈领,带领读者由浅入深,同时又有一定的细节,看完让人茅塞顿开。

比如《计算机网络:自顶向下》、《Linux高性能服务器编程》、《Linux多线程服务端编程》、《STL源码剖析》、《Effective C++》、《CSAPP》、《程序员自我修养》等都有各自想要论述的主线在里面,看起来也是一环扣一环,非常循序渐进。

我的看书方法就是:

对于面向知识体系那种堆砌细节的书,我们先浏览目录,做到对整本书有映像,再大致看一些我们关心的部分,比如 UNP 和 APUE 中 IO、文件、进程控制、信号、线程、线程控制、基本套接字编程 这些是比较重要的模块,其它边角知识,可以用到再去查。

对于非常循序渐进的书,比如 CSAPP ,那么就可以去挨着挨着看,这是没有问题的。


还有一点,很多同学反映看不懂类似 CSAPP 这样的书,那我们都知道,任何一本书基本上都是有前置依赖的。

没有掌握要求的背景知识去看肯定很吃力的。

就比如我大一下只有基础的 C 知识和一丁点计算机导论知识,然后屁颠屁颠的跑去看 CSAPP(学长毕业摆地摊卖书我瞎买的),那时候只知道这本书被誉为神书,但是看到前两三章就蒙了,真的有点难,对于当时的我来说太底层了,根本不知道在说啥,看过也只是看过,就像天空飞过鸟儿,但没有痕迹。

直到后来大三再次拿起,我才意识到这本书的伟大之处就在于将计算机不同学科知识有机的串在了一起。那时候看,更多是一种补充、深入学习以及完善了,因为很多知识分别在数字逻辑、汇编语言、操作系统这些课程中学过了。


所以要明白,你看不懂不是因为你笨没天赋,而是你有前置依赖的知识没有完成,还没学会走,就想跑了。

当然了,我还有自己整理的电子书库,绝不是在网上那种打包下载的,而是自己需要学到某个方向知识的时候,需要看了,去网上挨个找的,最后汇总而成。这部分我是会不断把它完善的,当成自己的小电子书库,不多,但贵在精。

我整理的这些书大家可以在这里获取,对于学习计算机的同学帮助非常大,且十分系统

书单:

一般来说,每本书的首页会介绍看这本书需要哪些前置知识,可以关注一下。

大家记得收藏的时候,帮学长@编程指北点个赞呀!!只收藏不点赞的都是耍流氓,╭(╯^╰)╮

推荐阅读:

CS那几门课在计算机知识体系有怎样的地位:


user avatar   davidtsang 网友的相关建议: 
      

学校读书方式不适合学计算机技术。

学校都是精读,研读。恨不得一个标点符号一个标点符号的分析。

计算机技术不能这么读。因为计算机技术更新快,知识点多。

除了少数书籍需要通读一遍——比如《代码大全》

大部分书籍随便翻翻,知道知识点在那里,需要的时候查阅就可以了。

也有例外,当你接触一个全新的语言或者框架,需要快速达到一定水平的时候,可以找一本好的教程,对着教程做一遍。这也是很好的学习方法。

如果你要精通某种技术,可能需要找本专业的书籍(最好是引进版的精品书),仔细的研读。

不要花大量时间阅读国内作者的计算机技术书籍,绝大部分都是垃圾,不值得太多时间研读。

当你的阅读量达到一定程度的时候,你会发现大部分计算机书都差不多。那时候可能你就不需要专门的读书了,阅读文档就可以了。


user avatar   lin-zhi-rong-8 网友的相关建议: 
      

我在知乎写了 60 多篇的技术文章,平均每一篇都 1W+字,写的内容都是计算机基础类的,比如计算机网络、操作系统、计算机组成、数据库等等,在写这些文章的时候,看了很多答住所说的动辄几百上千页的计算机书。

作为过来人,中途也踩过很多坑,浪费了很多的时间,好在及时反思,调整了看书的方法,后面学习的效率立竿见影。

所以,我教大家怎么看这些厚的不行的计算机书!

一、不要直接选择困难模式

大家应该知道计算机书里有个黑皮系列的书,黑皮系列的书有一个共同的特点就是厚重

我相信不少小伙伴在想要学习计算机基础类知识的时候,就买了这类黑皮书,书到货后,我们满怀信心,举着厚重的黑皮书,下决心要把这些黑皮书一页一页地攻读下来,结果不过几天就被劝退了,然后就只有前几页是有翻阅的痕迹,剩下的几百页都完全是新的,最终这些厚厚的黑皮书就成了垫显示器的神器

黑皮系列的书确实都是经典书,豆瓣评分都很高,知识点很全面,是好书无疑。但是这类书并不适合新手入门,你想想我们学习中文的时候,你是拿着新华字典学的吗?很显然不是。

黑皮书就好像游戏里「困难模式」,新人一上来就玩这个模式,根本就体会不到游戏的乐趣了,卸载了游戏那还是小事,如果留下心里阴影,造成不可逆的伤害,这就非常不好了。

说白了,这些厚的不行的计算机书不适合入门,我们应该先从「简单模式」慢慢过渡,要屠龙,得先从新手村起步

就拿我亲身经历举例。

当初在学习计算机网络的时候,看见大家都说《计算机网络-自顶向下》和《TCP/IP 详解》这两本书好,我立马买了学习,这本也是黑皮系列大厚书,奈何小林当时太菜,根本就砍不动这本书,砍两下,刀钝了,就想睡觉。

后面又找了一波书,发现《图解 TCP/IP》、 《图解 HTTP》、《网络是怎么连接的》这几本书都不厚,而且搭配了很多图,我又立马买回来学习。

这几本书读起来不会太困难,不出一个月,我就把这三本书看完了,立马对计算机网络有了个整体且清晰的认识,终于知道了网络七层模型是什么,也知道了两台电脑是如何通过网络进行相互通信的,也知道 HTTP、DNS、TCP、UDP、IP、ICMP、DHCP、ARP 这些常见的协议是用来干嘛的了,成功突破了新手村。

虽然突破了新手村,但是学的知识还不够深入。

所以,我后面回来看《计算机网络-自顶向下》和《TCP/IP 详解》这两本厚厚的书,不过这次就不会那么吃力了。

后面回看这两本书时,我也没有选择从头看到尾,因为有些内容和在新手村看的书的内容重叠了,而且由于在新手村里知道了哪几个协议是常见的,于是就选择了这几个协议的章节进行深入学习,比如:

  • 我想进一步学习 TCP 协议的特性,于是就跳到《TCP/IP 详解》书里讲 TCP 协议的几个章节,我就从中学到了 TCP 流量控制、超时重传、拥塞控制等等。
  • 我想进一步学习 IP 协议,于是就跳到《计算机网络-自顶向下》书里讲 IP 协议的章节,我就从中学到了 IP 协议更多的细节,IP 包头的各个字段用途、寻址、路由转发的原理等等。

看了黑皮书,我也深刻感受到黑皮系列的书确实经典,知识体系很全面,也很细节。

但是这种大且全的书并不意味着适合入门,新手很容易就在各种细节中迷失,而且书上有些不常用的协议我们是可以选择不看的,如果不知道重点很容易就把时间浪费在这些地方,得不偿失。

我是在新手村学习里抓到学习计算机网络的方向,也就是把「键入网址,到网页显示,期间发生了什么?」这个问题所涉及到的协议都要掌握,比如 HTTP、DNS、TCP、UDP、IP、ARP、MAC 等等,然后再查黑皮书对应的章节来深入学习对应的协议。

就这样学成计算机网络后,我在知乎共输出了 20 多篇图解网络系列的文章,总字数高达 15W 字,并且手绘的图共有 500 张,收获了很多读者的认可和支持,不少读者跑来感激我,说我的图解网络在面试中帮助到他们,不少人拿到了阿里、腾讯、字节等大厂的Offer。

为了帮忙阅读我把图解网络整理成了PDF,大家可以作为面基突击的手册,开源给大家下载:

不仅仅是计算机网络,我在学习操作系统、计算机组成原理、网络编程等等也是用这套方法,都是先看新手村的书,得知了哪些是重点知识后,再跳到黑皮书里对应该知识的章节进行深入学习。

当初在学网络编程的时候,看见网上的人都说 UNP(Unix 网络编程)、APUE(Unix 高级环境编程)这两本书是网络编程圣经的书,那么好学的小林,那肯定毫无犹豫买了。

书到货后,我瞬间就懵逼了,这两本书是我买过最厚的书,这尼玛怎么学?

跟着书本的节奏,学了一段的时间,是懂了些 Linux 网络和系统 API 的用法,摸索来摸索去都是各个 API 的细节,始终不知道高并发网络框架是如何实现的

后面我又重新找了一波关于网络编程的书,找到了这两本:《TCP/IP 网络编程》和《Linux高性能服务器编程》。

  • 《TCP/IP 网络编程》绝对是新手村级别的书,书里的内容不会有过多的术语,作者都用大白话来表达,配图也很清晰,也有介绍我想知道的网络框架,虽然是比较基础的多进程服务端模型、多线程服务端模型、异步 IO 模型。而且最后一章实现了简单的 HTTP 服务端,让我知道了从代码角度是怎么解析 HTTP 报文的,以及状态机是如何实现和运转的。
  • 《Linux高性能服务器编程》这本书主要是网络框架为主,前几章关于网络基础知识对于掌握了计算机网络知识的同学可以直接跳过的,你看,很多知识是想通的,当我们知道掌握了这块知识后,在学习新一本书的时候,就可以跳过重叠的内容。在这本书我学到了,Reactor、Proactor、信号、定时器、多进程编程、多线程编程、进程池和线程池等。

这两本书让我大概知道了如果一个服务端要服务多个客户端时,不是就简单写个 socket 编程就完事,而是还要结合 IO 多路复用 + 多线程的思想,也就是 Reactor 的设计理念,知道了这些事情后,后面我在看很多开源框架的网络模型时候,发现大多数基于 Reactor 的思想来实现的。

有了网络编程总体的视角后,在需要深入理解 socket api 中各种属性设置(超时、非阻塞 IO、阻塞 IO 等)和异常处理就要回归 APUE 这本书。

到这里我才知道 UNP 和 APUE 为什么会被称为网络编程圣经级别的书,原因是书里各种细节和异常都写的很全,也很细致,可以应对工作中很多问题。

但是事实证明,它并不是个入门级的书,所以 UNP 和 APUE 的用途比较像字典,在需要的时候去查阅就好。

学习算机组成也一样,我先看《程序是怎么样跑起来的》这本书,知道了程序跑起来的大概过程以及涉及到的知识点,然后带着这个问题,从《计算机组成与设计》这本黑皮书找到每一部分的细节,通过进一步学习,知道了程序编译过程,知道了 Intel x86 的指令结构,知道了计算机是如何存储并计算浮点数的,知道了 CPU 执行程序的工作流程,知道了计算机存储结构金字塔模型等等。

所以,大家在学习的时候,应该避免直接学大而全的书,我们要先从入门级别的书看起,抓住了主线重点知识后,再通过查阅这类大而全的书来进行深入学习。

二、不要只局限学一本书

我在学习的时候,有个习惯,喜欢找同类型的书一起学,就不会说学操作系统的时候,就只看一本理论书,而是结合 Linux 系统编程和内核分析的书一起看,一层层的深入一个知识点

比如,我在学习操作系统的时候,在《现代操作系统》学了「进程与线程」的内容,而这本书介绍的内容比较概念性的,知识点也比较笼统,不够具体。

然后我就会去学《Unix 高级环境编程》第 7 章「进程环境」、第 8 章「进程控制」、第 11 章「线程」、第 12 章「线程控制」、第 15 章「进程间通信」,这一系列章节看完后,就知道了 Linux 是如果通过创建进程和线程,不只局限于理论了,还学会了应用。

当然这还不够,我还会去学《深入 Linux 内核架构》第 2 章关于进程和线程的Linux 源码分析,发现 Linux 中进程和线程实际上都是用一个结构体 task_struct 来表示的。让我很惊叹的是, Linux 操作系统对于进程和线程的创建,都是调用 do_fork 函数实现的。

只不过传递的参数不同,通过参数的不同来控制是复制父进程的资源(内存、文件描述、信号量等),还是引用父进程的资源,这样会更加深刻知道进程和线程的区别。

我学成操作系统后,也写了图解操作系统系列文章,现在已整理成PDF。

现在开源给大家下载:

再比如,我在学习计算机网络的时候,在《图解 TCP/IP》学到了第六章关于 TCP 超时重传、流量控制、拥塞控制等内容,这本书讲的比较浅。

为了更深入理解 TCP,我就会去看《TCP/IP 详解》第 17 到 24 章,这几章都是详细介绍了 TCP,在这里会学到更全面的 TCP,比如 同时打开或关闭、negle 算法、往返时间 RTT 的计算、还有拥塞控制、快速重传、快速恢复、慢启动这些过程中的拥塞窗口是怎么变化的等等。

但是我在学《TCP/IP 详解》遇到了点困难,因为书里的案例有些地方看的不清晰,也不容易懂,特别是那些 TCP 抓包图,看到瞎眼。

后面我找到了本神书:《TCP/IP Guide》,很可惜只有英文的,我只看了这本书讲滑动窗口和流量控制的章节,因为这本书的精华就是这两个,其他的一般般,这两个章节的配图特别多,也很清晰。

我就在这知道了发送窗口和接收窗口的工作过程,也知道了滑动窗口对流量的影响,也知道了操作系统内存紧张的时候,也会影响滑动窗口,以及糊涂窗口综合症等等。

所以在学习一个知识的时候,大家不一定要把一本书从头看到尾后,才去学另外一本书。

最好的方式是在一本书看完某个章节的知识点后,马上去学另外一本相对比较深入的书的对应章节的内容,这样一层一层的深入下去,你对这个知识点的掌握就会很深刻了。

三、不要只看不动

计算机类的知识都比较庞大,单纯只看很容易就忘记的了,当然即使做了笔记也会忘记。

就像小林写了很多文章,每篇文章的内容我也不一定都记得住,但是当我回看文章后,知识点很快会被唤醒起来。

所以记笔记的好处在于后面复习的时候,可以很快就能回想起来。

记笔记的方式有很多种,手写在笔记本、在书上标注、在 world 文档记录等等,但这些我觉得都不是好的方式。

我觉得比较好的方式是思维导图,把思维导图当作一课自己的知识树,每深入学一个知识点的时候,就开一个分支去记录,记录的内容最好是用自己的话来描述,而不是复制书上的内容,这样只是单纯的 copy,最好经过自己大脑的思考,用自己的话做个小总结,这样的知识点不容易忘。

还有很多知识其实可以结合生活中的场景来记忆,这样想忘记都难,比如阻塞 IO、非阻塞 IO、同步 IO 和异步 IO,我之前文章用去饭堂打菜的场景来介绍它们之间的区别。

再比如介绍各种进程调度算法,我之前文章用银行业务办理的场景来介绍。


曾经我也苦恼于那些晦涩难弄的计算机基础知识,但在我啃了一本又一本的书,看了一个又一个的视频后,终于对这些“家伙”有了认识。

我想着,这世界上肯定有一些朋友也跟我有一样的苦恼,为此下决心,用图解 + 通熟易懂的讲解来帮助大家理解,利用工作之余,坚持输出图解文章两年之久,我的文章都汇总到了网站:

网站内容共 1000 张图 + 50 万字,网站宗旨让天下没有难懂的八股文!(口嗨一下,大家不要当真),网站地址(xiaolincoding.com):

希望图解网站成为你们上班摸鱼必备网站哈哈!

如果对你有帮助,别忘记给个三连呀,这对我非常重要

也欢迎大家关注 @小林coding


user avatar   UNSC711 网友的相关建议: 
      

去打游戏




  

相关话题

  为什么计算机无法精确计算小数? 
  如何激怒一位计算机科学爱好者? 
  用宏观的电路来模拟现在的计算机随比如电路板都用宏观电路来部设速度大概会比现在的普通电脑慢多少? 
  2021 年,你读了些什么好书?推荐其中一本书给朋友你会选哪本? 
  如果能将意识数据化,您愿意放弃肉体吗?如果可以的话,算进化吗? 
  有哪些书名气并不大,但却非常值得一看? 
  2021你看了多少本书 ,印象最深刻的是哪个? 
  为什么Linux用户用sudo命令而不直接使用root用户? 
  高三毕业生的选专业问题,有支持的吗? 
  电脑主机后面的VGA或DVI接口,可以转换成USB接口吗? 

前一个讨论
舒服的代码和不舒服的代码,差距是怎样的?
下一个讨论
《除暴》最后一幕张隼的表情含义是什么?





© 2024-05-22 - tinynew.org. All Rights Reserved.
© 2024-05-22 - tinynew.org. 保留所有权利