什么是计算机网络?它有哪些功能

作为计算机相关专业学生 , 当我进入大学计算机课堂之后 , 却发现所学的东西并非我憧憬的那样丰富多彩 , 当计算机原理教材发到手中 , 曾经作为学霸的我照例提前预习 , 结果是 , 非常枯燥乏味 。让我感到最迷惑的是 , 书中出现大量的、我从未见过的词汇和知识点 , 而很少提及这些知识点具体是怎么被应用的 , 怎么被发明或者发现的 , 为什么会是现在这样、为什么就不能是那样 , 而且这些知识点给我的感觉是离散的 , 他们之间的关联到底是怎么样的 , 我很想弄明白 。我感到大学计算机教材中的知识体系与高中基础学科知识体系有明显不同——你需要具备太多让人绝望的知识背景 。高中的数理化等基础知识不会因为某个人的设计而改变了它的底层机制 , 丁是丁卯是卯 。而计算机完全是人为设计出来的 , 学习的时候 , 就会想不通 , 我到底为什么要去学习这些“超自然”的知识呢?只是某个或者某些人设计出来就可以强塞给我么?我一度感觉非常迷茫 。
但是借助高中的学霸基础 , 我并没有被这种迷茫所左右 , 我依然跟随着课堂 , 并没有挂科或者厌学 , 我只是在尝试思考这些问题 , 尝试找出其中本质所在 。我是在大二期间隐约有了一些系统化的思考结果 。我觉得以下几点是导致我迷茫的关键点:
1.没有目标或者场景的单向知识灌输 。比如讲软件工程以及开发项目管理的时候 , 概念先灌输了一大堆 , 大多数东西对我来说神秘莫测 。理想的方式 , 是给出一个场景 , 比如从一个idea开始 , 到一个产品基本构思 , 然后落地到实际的开发任务 , 在模拟开发过程中 , 逐渐引出软件工程以及项目管理方面的各种知识 , 犹如彻底体验了一次 , 形成深刻印象 。这就是我认为的所谓场景教学 。而目前的状况是本末倒置 , 由经历过这些场景的人总结抽象出知识点 , 失去了支撑这些知识的原有场景、背景、历史 , 变成了完全孤立的天书 , 而恰恰是这些辅助信息 , 至关重要 。当然不可否认的是这些知识点都是精华 , 但是直接把别人的精华生生灌输到大脑中 , 就会成为自己的精华么?我认为完全不可能 , 这种填鸭式的灌输结果 , 只能生成无用的“脂肪” 。我作为一个学生 , 不敢指点老师 , 也不敢质疑教材中的知识 , 但是我作为一个被灌输者 , 对知识学习过程是有发言权的 。再举一个可能不太妥当的例子 , 为什么大学生对网游如痴如醉 , 有些甚至通宵不顾学业?仔细思考 , 网游的强烈目标驱动可能是原因之一 , 比如一些所谓极品装备 , 多少人为了获得这些无非就是游戏公司数据库中的一条记录的装备 , 而耗尽了大好青春?而如果计算机知识也能做到如此吸引人去探究 , 那才是对抗网游的最佳方法 。
2.知识点之间完全孤立 , 找不到联结点 。比如C语言 , 为什么要有这么多数据类型(int , char , float等)?不同数据类型定义好之后 , 后面又是怎么处理的?如果不定义数据类型会怎样?C语言、汇编语言、机器指令、CPU之间是怎么联系起来的?我写了一段C语言程序 , 它被编译执行的全过程是怎样的?软件怎么就能控制硬件了?如果上面这些解释不清 , 我有何动力来写这段C语言代码?我就感觉自己像僵尸一样任人摆布 。我憧憬中的C语言应该是这样的:先介绍汇编语言出现的背景 , 然后介绍C语言是为了解决汇编语言可读性差的问题 , 然后发现有了函数后 , 可读性和可维护性更好 。当然 , 介绍汇编语言的话就得先介绍CPU执行这些机器码的基本过程 , 把这些背景以及大致框架原理都介绍清楚之后 , 起码在后续认知上不会留坑 。知识之间如果缺乏关联 , 那么读者脑海中无法形成一个框架 , 只局限在一个小范围内 , 而出了这个范围完全不知所措 。