欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构,操作系统,计算机网络,计算机组成原理这几门课在大学生计算机专业知识体系中有怎样的地位?

程序员文章站 2022-03-03 10:13:23
...

数据结构,操作系统,计算机网络,计算机组成原理这几门课在大学生计算机专业知识体系中有怎样的地位?

以上几门课程较HTML、Android、Java等课程的重要性如何?上述几门课程对软件工程专业学生的发展有怎样的影响?

 

 

作者:兔子老大

以下为亲身经历,这四门课重不重要自行体会……

前一段时间某个大数据比赛,因为智商不行只能洗数据和刷特征,有一次因改变了脚本数据结构(以及相对应的算法),把原本O(n^2),优化成O(n),对于需要频繁尝试不同的特征来验证模型的需求说,显然我加快了进度。而对于其他偏向底层和实时性的应用来说,数据结构和算法更为重要。

操作系统,这门课你可千万不要觉得,“我又不需要写一个Linux,写一个windows所以我就不需要学习”。这门课不是叫你写一个操作系统的,讲的是资源的调度和分配,以及大型软件的设计。稍微写过一些并行并行的程序,都能体会到这门课的重要性。

计算机网络,是不是觉得现在网络应用框架这么多,socket不用手写,物理层和链路层就更加不用理了是吧。最近尝试把一个网络应用部署到云服务器上,网络没问题,端口全开,云主机上localhost可访问,但从公网死活访问不了,至于原因就等题主你学习计算机网络的时候来思考一下吧。

计算机组成原理,你还真不需要理解cpu的每一个电路怎么运行,但当我懂得内存与外存的区别,以及缓冲区这些概念时,代码的书写思维和我入门时真的有很大不同。

所有的语言,框架说白了就是在某种规则(语法规则,API)上进行利用(编写代码),而一旦遇上瓶颈,或者某些bug的定位,需要为某种环境而进行方案的选择折衷(比如存储空间),这个时候就是你说的那些基础知识辅助决策的时候了。

当然了,后面说的问题可能有些程序员很少遇到甚至未遇到过,可是一旦遇到了,你真的有信心马上现学现用吗?说不定这个瓶颈就是一个升职机会呢?你要不要?

如果你真的打算在技术这条路上走下去,听楼上金老师的话,好好打好基础吧……


数据结构,操作系统,计算机网络,计算机组成原理是计算机专业最核心的课程,而像 HTML、Android、Java 属于应用型课程,写的都是业务代码



如果核心课程学的非常扎实,完全可以花一个月时间学习一下就能做项目,尤其是 HTML 这种,甚至可以做到在完全没有接触过的情况下,一上来就边看文档边做项目,而这一切都建立在熟练掌握核心课程的基础上!

打个比方,HTML、Android、Java 这些课程是开车;数据结构、操作系统、计算机网络、计算机组成原理这些课程就是造车,是后期工作的底层框架。

N.Wirth 教授说过:数据结构 + 算法 = 程序设计
➤数据结构和算法是基石

现在高级编程语言繁多,例如Java,C#,PHP 等等,这些编程语言有很大一部分都是在讲如何使用数据结构,包括但不限于堆、栈、链表、哈希表等。

这些数据结构在高级语言里面是被高度封装过的,学好数据结构对于理解语言内部的原理和使用这些数据结构至关重要。并且,在某些情况下你会发现,在没有现成的工具可以使用,需要自己造*时,没有数据结构是不行的,比如当服务器并发量极大,需要做队列时,或者要对海量的数据进行处理的时候。
➤操作系统是所有软件理论的集大成者

操作系统知识包括四大模块:进程与线程管理、内存管理、IO与文件系统、设备管理,其中每一个模块都对工作中的软件开发起到关键作用。

「进程与线程管理」对应软件开发中的进程与线程,比如进程间通信,如何防止线程死锁;「内存管理」对于在软件开发过程中防止内存泄露问题,和理解高级语言的垃圾回收机制至关重要;学好「IO与文件系统

」和「设备管理」,对于软件开发过程中文件访问、磁盘加密、并口和串口操作可以更得心应手。
➤计算机组成原理:属于最基础的一些东西,好比游戏规则

计算机里有 ASCII 码、GBK、UTF8、UTF16、Unicode 等经常出现的各种编码,但将一种编码转换为另一种编码时,往往会遇到乱码的情况,此时,便需要理解计算机组成原理。此外,在计算机世界里,尤其是设计大型软件时,经常应用到空间换时间,时间换空间,这些都需要强大的计算机基础来支撑,可以说,只有懂计算机组成原理,才能设计出更稳健、响应速度更快的软件系统。
➤网络让计算机互联,计算机网络可以理解为,激活整个运行体系

在现在软件开发中,单机的软件除了一些小工具之外几乎没有了,基本都是 B/S,C/S,P2P,构建这些系统的一大基础就是计算机网络,比如在服务器带宽资源有限的情况下如何减少文件传输次数,CDN 加速的原理和如何使用 CDN 加速,当各个用户端需要进行通信时,如何利用 Websocket 搭建通信服务器

等。

“数据结构,操作系统,计算机网络,计算机组成原理” 这些课程知识可能比较枯燥,学习的时候面对的是黑底白字的控制台窗口,相比较这些核心课程,学了 “HTML,Android,Java” 可以直接做出绚丽的产品。

做出一个完整 Java Web 站点,需要利用 Spring Boot 框架,ibatis 连接 MySQL 数据库,前端用 bootstrap。网上还有很多免费的 Bootstrap 主题。

虽然这些业务代码有现成的框架可以用,还有各式各样的语法糖和插件。然而访问人数的增多,支付功能的增加,对整个系统的稳定性、带宽、安全性的要求会急剧上升。这些只能使用核心课程的知识才能解决。

目前的软件开发分的非常细,这种业务上的分级导致每个人只需要负责好自己的事情,再加上操作系统、编译环境、网络基础、框架、语言都是现成的,可以直接使用,我们完全可以凭借这些工具打造一款成功的网站、APP、桌面软件,所以,在绝大多数情况下确实不太需要深入了解数据结构,操作系统,计算机网络,计算机组成原理这些知识。

可是一旦你的工作是去分析一种语言,处理大量的数据库完成不了的数据,在服务器资源有限的情况下去优化网站,处理各种软件掉线,消息同步等问题,这些都是基础知识才能解决的。

所以,这些课程如此重要,更需要我们去踏下心来打牢基本功。

作者:匿名用户

大概...相当于道与术的关系吧……

html,java等语言只是工具,一般学过C或者C++再折腾一下语法花不了多少时间就可以折腾明白,建议最好在实践中,做项目,跑代码等过程中加强锻炼...

《数据结构》是各类编程的灵魂,相当于是各类框架,不会数据结构,那和没有学过编程无异....建议《算法导论》原版

《计算机网络》,一般讲计算机网络构架,TCP/IP协议,路由器原理,网络知识等...在最近火得飞起的“空间网络安全”之后,计算机网络很显然会重新得到最足够的重视……如果自认为这部分有些学得不扎实,建议读《通信网络》与《随机过程》...清华大学出版社翻译的《计算机网络》翻译的比较好,可以读一读...

至于《操作系统》,介于软件和硬件之间的一个部分,一般意义上认为其重要性介于软硬件之间,不会操作系统,不了解基本的计算机形成过程,玩计算机恐怕无异于痴人说梦……

《计算机组成原理》书入其名,值得好好玩味...

加一门《离散数学》,学起来很难,用起来很重要和普遍...图论,计算机逻辑,数理逻辑等都包含于该门课..咬牙学下去,收获会很不一样……

当然,数据库也可以了解一下。比较SQL语言等也是用的比较多.

个人觉得,要是不学好以上几门课,恐怕都不好意思说自己是计算机系毕业的....都是计算机行业最核心,最重要的课程。而且,个人觉得,计算机系开这几门课就足够了)哈哈


数据结构:一切数据的组成形式,不懂数据结构,就像现实世界中你无法描述一个气球是“球形”的,会被其他人认定为有“认知障碍

”。

和数据结构齐名的,还有“算法”:如果洗碗有100种方法,那么当你把某个问题用“碗”的数据结构描述出来,它就拥有了100种“洗法”。算法优劣,决定了数据处理效率。

操作系统:计算机资源的管家。有了它,你才不必去动手操作管理硬件。目前你所用的应用程序都运行在操作系统

之上,由操作系统为它们提供资源分配,当然也包括在多个应用争抢资源时作出裁决。

计算机网络

:一切从计算机除去的数据通信,都需要网络承载。计算机网络是互联网存在的前提。你经常抱怨网络慢,在学完计算机网络后,你会发现,我们现实世界的网络是多么的脆弱……想要更优质的网络就得付出更大的代价,前提是你付得起建设和维护费用。

计算机组成原理:硬件视角下的计算机,如果比较喜欢完组装烧机,不管是PC还是手机,你都可以从这里了解到基本知识。当然,现在大部分的教材,都无法直接还原你现实世界的硬件。毕竟现在的技术发展太快了,每个核心部件背后,都有一大批*科学家在持续创新。但你依旧可以在这门课里从上帝视角看到硬件架构。

HTML是一种应用,说语言都有点大了,其实就是一种结构化文本表达方法,早前和HTTP一起撑起了第一代互联网,但不是那么标准。也因为这个原因,早期的巨头打了不知道多少架,就是为了争夺标准权。直到后来才成为XML的一个子集。目前你能看到的互联网应用,大部分都已经是HTML5版本。

Android是一种Linux系的操作系统,运行在手机,由Google发扬光大,建立起了Android联盟。但,国内大部分的Android课并不会教你这个操作系统,而是教你在上面开发应用。相信我,移动App的时代已经过去,现在的利润核心点已经不在开发,而在流量推广,已经成了一门生意,而且属于夕阳阶段。也因为Android的开放生态,你会发现有不少流氓软件开发,游走在灰色地带。

Java应该算是在工程实践中最规范的生态,相比在Android下开发的客户端应用,它更大的市场在服务器端,最擅长的功夫是分布式架构

。银行、电信、*、电网等大量的系统都是构架在Java之上,如果是大型系统,后端必然会配Oracle数据库,(其实我看过不少大企业内部那些小系统也配Oracle ^-^),属于标配。所以Oracle后来也收购了Sun,少了Java的Oracle数据库,就像少了四肢的巨人,行动不变。Java的入门门槛低,但是要成为一代大师,必须懂大规模系统的架构。淘宝早期团队中有不少Sun技术团队人员,合并后才有了大规模系统架构能力。但如果光学门Java语言,最后一定是某个公司的搬砖工。

相比Java,Python在数据分析领域,以及自动化处理领域,有更大优势,在选择的时候可以结合考虑未来的就业方向选择。

数据结构、算法、操作系统、计算机网络、计算机组成原理,这几门课,相比后面的那些个应用,等同于基础设施。

从个人角度而言,如果你未来的职业方向是程序员,建议你一定要深度学好前面这些基础设施,因为到后面,你会发现自己的技术职业生涯天花板,就是由这些基础设施决定的。

如果你并非想以程序员作为职业方向,建议把这些基础设施作为了解的目标,帮助自己建立起计算机互联网

的知识图谱,至少可以指出问题是在哪个层面出现的,硬件?网络?应用软件?操作系统?……这样你就有机会找专门的人帮你精准解决问题。没准还能省不少咨询费……

数据结构和算法,是通往数据世界的入口,更是上层信息处理效率的根本。哪怕你不当程序员,只要你还在信息世界混,就逃不了跟数据打交道。举个例子:在一个递增整数序列里找到某个数字,相比一个个按顺序找,“二分法”可以更快找到,数字越多差距越明显。你看,就算不是程序员,如果能有这样的“思路”(其实就是算法),你就比别人更高效。如果不巧你从业了金融,那就更需要这些知识。