上一期我讲到了数据结构怎么学,当时我的学习方法是先看视频,再看书,然后刷一刷基础算法题做巩固。
作为一个非科班考研党,当时觉得这个学习路线还是比较平滑的,毕竟能让我一个小白快速学会,这门课相对来说还是比较简单的。
于是,等我读研的时候,打算以相同的学习方式来补一下其他几门计算机基础课程,首当其冲的就是计算机网络。
因为这门课实在重要,几乎是面试必问的内容,什么TCP/IP三次握手,四次挥手,TCP和UDP区别,HTTP协议的一堆面试题,在程序员面试时都是很常见的考题,你们应该也深有体会。
计算机网络中的复杂概念远不止这些,那么按照老规矩,我们先来看一下计算机网络到底是个啥。
根据百度百科的介绍,计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
相比于数据结构的介绍,百科上对于计算机网络的介绍更加好懂一些,简单来说,计算机网络就是把计算机通过通信线路连接起来,实现网络互联和信息传递。
为什么要学计算机网络在这个时代,离开了网络,简直没有办法生存,而我们所学的编程知识,脱了网络去谈也将毫无意义,毕竟没有哪个编程语言是只支持单机运行的。
作为一个编程学习者,当你在学习一门语言时,比如Java,你可能会学到一些基本语法,面向对象的基础、集合类的使用,甚至是多线程、IO流以及异常处理,这种时候你往往意识不到计算机网络的重要性,反正我写代码也不涉及网络传输,平时的工作也只是CRUD,学习计算机网络也没有什么用武之地。
曾几何时我也是这么想的,但是到后来,我开始接触Tomcat,接触Nginx,以及Java中的网络编程技术,比如BIO和NIO,甚至是网络编程框架netty,在没有计算机网络基础的情况下来看这些东西,绝对会让你怀疑人生。
最早我开始意识到自己计算机网络基础薄弱时,还是我在学习docker容器方面的知识时,接触到了docker的网络原理,比如docker的网络模式有桥接和host两种,然而我当时基本上看不懂这是什么东西。
类似地,我在学习OpenStack的时候,也完全看不懂里面的网络组件是做什么用的。
就算你不学习网络编程、虚拟化和容器调度,你也得学学平时家里的ip地址、DNS和子网掩码怎么配置吧,没认真学习计算机网络之前,我对这些东西甚至都是一脸懵逼的。
不懂计算机网络的我,想要学编程,真的太难了!
如何学习计算机网络 第一次接触本科的时候,我们本有一门选修课就是计算机网络,但是当时我没有选它(现在觉得选了可能也听不大懂,但是多少有点印象)
读研的时候,开始狂补计算机基础,当时为自己选了第一本书《计算机网络(谢希仁)》作为入门教材,现在想想当时真是年幼无知,自己完全可以去某乎看一下推荐书单的。
这本书作为一本大学通用教材,年代之久远,内容之枯燥,都是在这么多计算机网络书籍里排的上号的,我已经快忘记当时是怎么把这本书啃完的了。
虽然这本书还没有到大部头的级别,但是里面的内容真的对新手不怎么友好,通篇的都是概念的堆叠和并不容易理解的概念介绍。
教科书,大家都懂的,大部分都已经脱离时代,虽然计算机网络这几年的变化不大,但是它里面的一些教学方法确实是和时代脱节了。
我只记得这本书,当初看完一周就忘光了,后面不管是笔试面试,还是重新复习的时候,基本上也想不起来当初都学了啥,真是一本神奇的好书。
入门学习阶段吃过了教材的亏之后,我终于学会了上某乎找书单了,当时除了购买了一堆Java书籍之外,还特地买了一本《TCP/IP卷一》以及《图解HTTP》准备开始第二轮对于计算机网络的死磕。
当时也投了一些简历,准备了一些面试,刷过一些面试题,其中面到计算机网络的概率很大,于是我每天都会花一些时间来看着两本书。
不知道是不是我理解能力有问题,当我看《TCP/IP详解卷一》这本备受推崇的计算机网络书籍时,我竟然有一种再看当初那本教材的感觉,这本大部头,貌似也是在讲一堆复杂的概念,并且用一些不好懂的讲解去解释这些概念。
当时我的自信心就有点受挫了,难道计算机网络真就这么难么,为什么这本书我仍然看不懂?