【基础知识】卷王指南,大学计算机专业,面临分专业,计科,软工,大数据,物联网,网络工程,该选什么?

160 0

同学们好,我是王老师——二哥呀!(笑喷)

好巧!前几天有同学私信问过我这个问题:大学计算机专业,面临分专业,计科,软工,大数据,物联网,网络工程,该选什么?再加上高考结束后填报志愿,想必 CSDN 上有很多同学挺迷茫的。

我就来(主观地)一一分析下,从后往前。

网络工程,听起来还算是蛮高端大气上档次的,大家可以去百度百科或者维基百科看一下这个专业的解释。我的理解是网络工程是将计算机以及其他设备串联完成网络通信,以及智能化监控的学科。主要的分支有:路由交换、网络安全、无线网络等等。

我之前在的一个公司(十年前了),一百多号开发,但就两三个网络专业的人才,他们很重要,一旦机房的网络出问题,都得靠他们解决。嗯,说句“心怀鬼胎”的话,平常我们最喜欢的一件事就是网络出问题,或者公司断电,嗯,天赐的“摸鱼好时机”。当然了,这种机会不多,这两三位同事总是能在最短的时间内把问题解决掉。

物联网,也简称为 IoT,是近些年比较火的一个概念,是指将日常的物理对象连接到互联网的过程——从医疗设备,到可穿戴设备,小到智慧家居,大到智慧城市。

先说说我家的情况吧,比较常用的智能设备有两个,一个是扫地机器人,需要地面墙角比较规整一点才能比较顺利地完成清洁工作;一个是小夜灯,人经过的时候就亮起来,过一会自己就灭了,但经常夜里翻个身它就亮了,还有点“智障”。

相对来说,物联网还有很大的发展空间,比如智慧交通,再比如智慧农业,具体点的例子就是通过湿度传感器来自动触发灌溉等。

大数据,也就是 Big Data,我了解到的适用于大数据的技术有:分布式文件系统、分布式数据库、云计算平台、可扩展的存储系统等。奥巴马曾说“大数据”是未来的石油,可见其重要性。

大数据专业是典型的交叉学科,不仅涉及到计算机,还会涉及到数学和统计学,不仅对学校的学科实力有要求,对个人的硬性基本功也是有要求的。

软件工程专业是以计算机科学为基础的,更加强调软件开发的工程性,包括软件需求分析、软件设计、软件测试、软件维护和软件项目管理等。

计算机科学,也就是计科(Computer Science,简称 CS),不仅会研究计算机的硬件,也会研究计算机的软件,更具体的主题包括编程语言、程序设计等。

先插个楼,开局一张图:计科最佳指南。

我之前读过邹欣大佬(目前是 CSDN 副总裁)的一本书——《构建之法》,第一章就对软件工程和计算机科学的关系做了解释,它们开设的课程很相似,但本质上它俩是完全不同的。

计算机科学这一学术领域可以分为:计算机理论、信息和编码理论、算法和数据结构、形式化方法、编程语言等

偏实践的领域:计算机体系结构(或者叫计算机组成原理)、操作系统、计算机网络、安全性和密码学、人工智能、计算机图形学、人机交互、嵌入式系统和软件工程

按照武侠小说来讲,计算机科学更像是九阳神功、乾坤大挪移这种顶级内功;而软件工程更像是七伤拳、龙抓手、太极拳法等武功招式。在内功浑厚的基础上,武功招式就可以打出最大的伤害值。

另外还有一种比较功利性的说法:如果打算本科毕业后就参加工作,可选软件工程,如果打算考研进修,可选计算机科学

不过,在我看来,无论选择计算机科学还是软件工程,大部分同学最终的选择都是做一名软件工程师。(落脚点还是很实在,增删改查嘛,hhh)

当然了,软件工程师可以分为两种:一种是充分理解了计算机科学,从而有能力应对充满挑战的创造性工作;另一种仅仅凭着对一些高级工具或者框架的熟悉而勉强应付。

第一种工程师能随着时间的流逝,不停地成长,最终成为技术大牛;而第二种工程师往往浮于表面,只学习某些特定的工具和技术,而不研究底层的原理,慢慢就会停滞不前。

我个人的总结就是,软工的内核还是计科,计科学得好,软工、大数据、物联网、网络工程都是可以自如应对的

接下来就很重要了!怎么才能好学计科呢?怎么才能成为别人眼中的大牛呢?

先说理论。

如果你要学习物理,我推荐你顺着物理的发展史学习,先学习牛顿的经典物理,再学习热力学、电磁学,然后学习相对论、量子力学这些彻底推翻经典物理的,最后学习电动力学这种硬核的。

整个学习过程,是自底向上的。学计科也要这样吗?

先学习电路,然后学习冯诺依曼结构,造一台计算机?接着再学习如何用汇编写个 mini os?接着学习如何写一个简易版的编译器?最后再学习高级编程语言,比如说 Java、Python、C++?

显然这样是行不通的!计算机科学的学习最好是自顶向下

什么是顶?在我看来,就是一门高级的编程语言,比如说 Java、C++ 或者 Python。我个人从事 Java 后端开发的时间比较久,所以还是拿老本行来说。

当你学习到 Java 并发编程中的“原子性”、“同步”、“异步”、“进程”、“内存分配”这些概念的时候,你自然而然会产生很多疑问,然后就会去学习操作系统,学习计算机组成原理,然后你的一系列问题就会逐渐被解决。

当你在学习 Java 的时候遇到性能问题时,你就会去研究,啊,原来 Java 是一门解释型的编程语言,而 C 语言是一门编译型的编程语言,所以 Unix/Linux 这种操作系统要用 C 语言来实现,因为要最大限度的压榨硬件的瓶颈。

当然了,Java 为了提升自身的性能也是费尽心思,比如说即时编译(JIT,Just-In-Time)通过在运行时将字节码编译为本机机器代码来提高性能;比如说垃圾回收机制的升级,从 GC 到 ZGC,GC 的痛点在于垃圾回收期间,所有的线程都会停止活动,等待 STW(Stop The World)的结束,而 ZGC 在标记、转移和重定位阶段几乎都是并发的,大大缩短了停顿的时间。

跑偏了,继续来说。

当你用 Java 实现某个业务需求时,发现人家的算法实现比你快得多,你自然会好奇,为什么会这样?然后你发现人家用的数据结构和你的不同,接着你就会去学习数据结构,再了解一些高效的算法,比如动态规划等。

你看,从学 Java 的语法开始,你一步步学到了操作系统、计算机组成原理、数据结构与算法。

跟着需求去学习,才能真正学好计算机科学

我也会给你推荐《CSAPP》这本黑皮书,毕竟永远的神,但如果你没有编程基础就去啃,你可能很快就会被劝退的;反而,一开始,你读一读我写的《教妹学Java》,或者去 B 站上看尚硅谷或者动力节点这些培训机构的 Java 视频课,没准你会越学越觉得有信心——这么简单的东西,我这么聪明,还能学不会?你会有这种自信的错觉的!

反而一开始去啃 CSAPP,你会感觉,老天!我特么是个废材啊,我学的什么鬼玩意,这竟然看不懂,学不会?

你可能要问,编程语言有很多种,Java、Python、C/C++、Go、JavaScript 等等,选哪一个呢?

选择 Java 吧,常听人说“人生苦短,我用 Python”;选择 Python 吧,常听人说“Go 是 Google 的亲儿子,发展势头正劲”;选择 Go 吧,常听人说“前端(JavaScript 必学)更容易学习一些”;选择 JavaScript 吧,常听人说“C/C++ 具备现代程序设计的基础要求,是很多编程语言的基础。”

然后就又麻了!

我是从大一就开始学习的 Java,当时没有选择,因为不知道还有其他编程语言(嘘),学校让学 Java 就学了 Java。只能说非常的幸运,选对了。

那么同学们也不需要纠结,前端、Java、Python、C++/C,到底怎么选?学校安排啥就学啥,如果学校没安排,那么选 Java 可能是最朴实无华的选择,因为综合(就业岗位和薪资)考虑的话,Java 是其他编程语言无法替代的。

当然了,你也可以选择 C 语言,这也是一个无法反驳的选择,C 语言是其他很多编程语言的基石,学了这个,再学其他任何一门编程语言都是很好的基础,只不过,指针这块确实令人头痛!

选择一门编程语言后,踏踏实实地去学习,就会连根拔起很多其他方面的内容,比如说数据库、数据结构与算法、计算机组成原理、操作系统、计算机网络等等。

  • 那 C 语言该怎么学呢?
  • 那 Java 该怎么学呢?
  • 那数据库该怎么学呢?
  • 那数据结构与算法该怎么学呢?
  • 那计算机组成原理该怎么学呢?
  • 那操作系统该怎么学呢?
  • 那计算机网络该怎么学呢?

一个一个来解决。

C 语言:

推荐翁恺教授的《C 语言程序设计》,B 站地址:

https://www.bilibili.com/video/BV19W411B7w1

Java:

你可以先看看我整理的这份 GitHub 上星标 115k+ 的 Java 教程,里面涵盖了 Java 所有的知识点,包括 Java 语法、Java 集合框架、Java IO、Java 并发编程和 Java 虚拟机,内容不多,只讲重点

GitHub 星标 115k+的 Java 教程,超级硬核!

数据库:

  • 《SQL 必知必会》
  • 《高性能 MySQL》
  • 《MySQL技术内幕-InnoDB存储引擎》
  • 《Redis 深度历险:核心原理与应用实践》

数据结构与算法:

计算机组成原理:

  • 《计算机是如何跑起来的》
  • 《CSAPP》,也就是《深入理解计算机系统》

操作系统:

  • 龙书《操作系统概念》
  • 《现代操作系统》

计算机网络:

  • 网络是怎样连接的
  • 图解 HTTP
  • 图解TCP/IP
  • TCP/IP详解 卷1:协议

你可能要问,一定要按照这个次序吗?

答案是可以不按照,但我这里有 3 个重要的“先决条件”:

  • 你最好先从一门编程语言开始,然后不断纵向和横向扩展;
  • 你最好先学计算机组成原理再学操作系统;
  • 你最好先学计算机网络和操作系统再学分布式系统;

限于 CSDN 外链的原因,学习资源我这里没法列全。

但考虑到同学们的诉求,我上周末花了两天的时间,整理了一份 CS 自学指南,里面囊括了所有我认为值得推荐给大家的学习资料(有书、有视频、有公开课、有在线文档),这些学习资料不用怀疑,我都看过,虽然有些没有看完,已经在 GitHub 上开源了。

https://github.com/itwanger/LearnCS-ByYourself

你可以大致按照我列出的顺序,借助我推荐的教材和视频课程,最好是两者兼顾,然后花 100-200 个小时去学完每一个科目,然后在之后的程序生涯里,不断重温这些精华,你会来感谢我的

要把这些内容全部学完,当然是需要花时间的,不可能一朝一夕就能完成,大学期间可能完全学不完,即便是工作几年后仍然可能学不完,但相信我,你会在这条路上得到快乐,得到满足的。

还有什么比学习更重要的事情呢?

如果有,那就是给二哥点个赞,来个三连了!

0

上一篇: 单线激光雷达在自动驾驶中的原理? 下一篇: 一家非典型机器人公司的27年成长史丨独家探访 iRobot

教程资料来源于网络,如有侵权,请及时联系平台进行删除

其他

课程目录
搜索
基础知识
乔布斯《遗失的访谈》全文:尘封16年的预见
stm32使用HAL库快速编写智能寻迹避障小车(附代码)
计算机科学技术发展史的缩影
嵌入式软件工程师杂谈之一 ----- BSP工程师
嵌入式底层软件开发学习系列之三开发与就业方向
智能车的转弯部分_10个极品智能车方案合辑,夏日避暑进阶两不误
到底什么是嵌入式?
乔布斯-遗失的访谈中英双文版-尘封十余年的伟大遇见!
转:乔布斯《遗失的访谈》全文:尘封16年的预见
正在崛起的高薪岗位—嵌入式开发工程师
无人驾驶硬件平台
【无人驾驶系列十】无人驾驶硬件平台设计
无人驾驶之硬件平台详解
VR的理想与现实
从iPad Pro的ToF摄像头说起,ToF前途未卜还是一片光明?
全球及中国机器视觉产业十四五投资动态及未来竞争态势研究报告2021-2027年
全球及中国增强现实产业战略布局及运营前景决策分析报告2021-2027年
搜索算法案例分析
前辈们的话--大疆技术总监的金玉良言
激光雷达与毫米波雷达对比, 
传感器小结
一线工程师告诉你嵌入式真实现状与发展前景
优劣几何?三角法和TOF激光雷达大解析!
10个激光、超声波测距方案带你玩转测距传感器
SLAM刚刚开始的未来之“工程细节”(张哲的ICRA 2017 的一些整理
101 从一个错误开始讲场效应管的应用
2017嵌入式软件行业现状及概述
人工智能概述
电子信息工程专业/单片机毕设题目推荐
SLAM刚刚开始的未来之“工程细节”
为什么别人可以这么牛
第879期机器学习日报(2017-02-13)
推箱子自动寻路的实现(未完)
人工智能技术与现代应用
二 树莓派3+ROS-kinetic+mbed-二轮差分模型
自动驾驶中激光雷达和高精度地图的关系
平台采用小米1代扫地机源码,stm32f103真实项目程序源码,代码注释清晰、代码规范好、每个函数必有输入输出范围参数解释。
无人驾驶硬件平台
激光雷达—无人驾驶汽车的眼睛
最适合男生的十大高薪工科类专业!
(三)LiDAR的测距原理(师弟师妹)简单科普
VIO_FUSION
3D视觉传感技术:时间飞行法 (ToF) 技术分析
设计一个AOA蓝牙精准室内定位系统
嵌入式软件岗位就业指导建议!!!
激光雷达类型分类,知名激光雷达公司介绍,三角测距激光雷达与TOF激光雷达原理
《人工智能狂潮》读后感——什么是人工智能?(一)
STM32(10):超声波模块的使用
计算机控制技术课程解释与问题答疑
相位式激光测距法中相位产生原理
【 學習心得 笔记 1】大疆技术总监:如何用六年成为一个全能的机器人工程师
机器人工程师学习计划(新工科自学方案)------杨硕
机器人工程师之路——从大一到研究生,YY硕经验谈
激光雷达类型分类,知名激光雷达公司介绍,三角测距激光雷达与TOF激光雷达原理
单线激光雷达在自动驾驶中的原理?
卷王指南,大学计算机专业,面临分专业,计科,软工,大数据,物联网,网络工程,该选什么?
一家非典型机器人公司的27年成长史丨独家探访 iRobot
STM32项目设计:基于stm32f4的智能门锁(附项目视频全套教程、源码资料)
大疆技术总监:如何用六年成为一个全能的机器人工程师(转载)
大疆工程师《机器人工程师学习计划》
如何成为一名很酷的机器人工程师?
ROS机器人开发概述,需要掌握的知识
SLAM中的EKF,UKF,PF原理简介 [转高博]
物联网定位技术超全解析!定位正在从室外走向室内
【概述】基于SLAM的机器人的自主定位导航
服务机器人是如何实现自主定位导航的?
收藏 | 基于深度学习SLAM的机器人的自主定位导航解析
物联网定位技术超全解析!定位正在从室外走向室内~
移动机器人技术(6)-- 机器人控制策略
ROS的优势与不足(除了ROS 机器人自主定位导航还能怎么做?)
SLAM技术大解析:它是如何帮助机器人实现智能行走的?
美国服务机器人技术路线图
服务型移动机器人如何实现室内路径全覆盖清扫给你一个清爽干净的家,tianbot_mini机器人上手ROS/SLAM/Navigation究竟有多简单???
实现机器人自主定位导航必解决的三大问题
室内定位技术方案---Wifi、RFID、bluetooth、Zigbee
常用室内定位技术总结
让机器人告别乱碰乱撞,激光导航让扫地机“睁开双眼”
机器人
SLAM技术是什么?它是如何帮助机器人实现智能行走?
服务机器人其最大的问题:定位导航
基于优化方法的机器人同步定位与地图创建(SLAM)后端(Back-end)设计技术收集
基于SLAM的机器人的自主定位导航
物联网定位技术超全解析
从理论到实践,机器人SLAM技术详解
360扫地机原理大揭秘,竟还有无人驾驶技术?——浅析家用机器人SLAM方案
SLAM导航技术赋能机器人智能行走
浅析服务机器人自主定位导航技术(三)
SLAM≠机器人自主定位导航
除了ROS, 机器人定位导航还有其他方案吗?
浅析服务机器人自主定位导航技术(一)
服务机器人常用的定位导航技术及优缺点分析
移动机器人定位导航方式的演进
服务机器人技术 —— 自主定位导航
机器人学习--移动机器人定位导航性能评估规范
自主移动机器人常用的导航定位技术及原理
扫地机器人如何聪明地干活? | iRobot解读智慧家庭的正确打开方式
寿命长性价比高的室内扫地机器人SLAM导航方案
扫地机器人能有多硬核?好家伙自动驾驶、激光扫描、NLP这些硬科技全上了,科沃斯:技术创新才能打破行业内卷...
扫地机器人有这些路径规划方法
智能扫地机器人软硬件开发笔记(1)-规格需求书
智能扫地机器人陀螺仪导航
【Robot】扫地机器人实现方案
自研扫地机器人激光雷达,Camsense有何胜算?
自动集尘系统会成为扫地机器人标配吗
干货|自动驾驶 vs 机器人定位技术
扫地机器人会否抛弃激光雷达这位原配?
智能扫地机器人陀螺仪导航模块
革了激光的命?双目视觉能否推动扫地机器人再次迭代
扫地机器人系统,主要划分为哪几个模块?
什么是激光导航扫地机器人?
扫地机器人是如何实现路径规划的 揭秘扫地机的定位导航原理
扫地机器人有这些路径规划方法
扫地机器人导航原理解读
机器视觉在扫地机器人领域的应用
深度解读扫地机器人的导航原理
扫地机器人智能化升级之路 智能决策成为关键
扫地机器人的回充方法实现
扫地机器人自动回冲工作原理
智能扫地机器人 陀螺仪导航系统
扫地机器人的路径规划方法
【室内定位】常用的机器人定位导航技术及优缺点
服务机器人常用的定位导航技术及优缺点分析