大家好,我是小北。

经常会有小伙伴问:”现在生化环材、机械这些专业自学 Java等语言后都可以找软件开发相关工作,那么计算机科班的学生学了这些课程又有什么优势呢?”

个人觉得就是系统学习过计算机课程的,应该建立起计算机系统能力,也就是在写代码、设计程序的时候会站在系统的角度考虑,怎么样才更加高效,或者说符合计算机的思维方式。

那么我们常说的计算机系统又是什么东西呢?

我看过很多同学将 计算机系统操作系统 划等号,尤其是网上很多同学推荐操作系统书籍,竟然把《深入理解计算机系统》这本书放在首位,尽管 CSAPP 这本书内有部分 OS 内容,但是我任然觉得它更是偏向“计算机系统”而非“操作系统”。

我理解中的计算机系统应该是包括计算机组成、存储层次、IO、高级语言程序及其实现机制、指令集、操作系统、编译器、链接器、加载等。

汇总起来就是:

一个程序在计算机中到底是如何运行的。

学习这些东西个人觉得并不是说就能让你怎么牛逼,这肯定不行,只是这些系统的知识能够在学习其它应用知识的时候帮助我们快速迁移学习,比如时空开销、缓存与局部性、分治、并发和并行、远程过程调用、同步异步、吞吐率和时延等概念,在实际项目中也经常会涉及到。

但是呢,国内大部分高校比较缺乏“计算机系统”方面的课程,只有少数高校有开设相关课程,比如南大计算机系统、交大等。

我们学校从 CMU 引进过 ICS(Introduction to Computer System),我们这叫做系统级编程:System Programming,教材就是使用的 CSAPP,不过有一些章节也没有上,也是靠自学。

到底什么叫系统编程呢?

系统编程真的和好的软件工程是不同的吗?这不一定。但是问题在于,软件工程和底层编程通常是孤立地教授的。虽然大部分的软件工程课程是以 Java 为中心的 “书写良好的接口和测试”,但我们也应该教给学生如何设计有重大资源限制的系统。或许我们将底层编程叫做“系统编程”,是因为很多有趣的软件系统是底层的(如数据库、网络、操作系统等等)。由于底层系统有很多的限制,因此需要设计者进行创造性的思考。

把系统编程叫做底层编程可能更好理解,就是直接面对各种底层机器细节。

如果你大学没有相关课程的话,建议可以去看看 CSAPP,国外也有几门不错的这方面课程,大家感兴趣的话可以去了解下:

一、麻省理工

麻省理工电子工程与计算机课程系下面的 EE (electrical engineering) 和 CS (com- puter science) 都开设的基 础课程:

  • MIT 6.004 计算结构 (com- putation structures)

这是一门贯穿整个计算机系统的课程。这门课包括硬件方面的门电路、功能 部件、单周期和流水线 CPU 之间的核心内容。

其次是软件方面的 C 语言、汇编语言、机器指令之间的基本内容,还涉及到过程调用、系统调用、进程、并行、性能评估等一些重要概念。

整体约等于 = 计组 + C  + 汇编 + 一些操作系统概念

教材是《计算机系统设计原理导论》

可以直接在浏览器搜索相关课程资源学习,B 站也有视频。

二、卡耐基梅隆 & 斯坦福

CMU 计算机学院与斯坦福计算机科学系比较类似,多个专业培养方案都有计算机系统或计算机工程。

这两所学校都有一门为计算机科学=专业学生开设的贯穿整个计算机系统的基础课。

其中 CMU 是 CS 213,斯坦佛是 CS 107,

CS 107 我完整的看完了,不过是很早以前的视频,当时还叫做 Programming Paradigms 编程范式,这门课我在星球也多次推荐过了,真的对你理解整个计算机、底层非常有帮助。

但是现在似乎叫计算机系统,这门课的重点在于计算机的基础设计和构建,尤其是学习软件编译的时候,运行一个程序会发生什么,以及程序是如何在内存中运行的。

课程官网:

http://web.stanford.edu/class/cs107/

两所学校用的教材都是大名鼎鼎的 《深入理解计算机系统》,课程内容和实验内容差不多,都是通过一组精心设计的 C 语言编程实验, 让我们能够更好地了解高级语言程序转换为机器代码的过程,深刻理解底层机器的系统结构。

也算是为后续的体系结构、编译原理、操作系统等课程打下良好的基础。

这个课程,配套的实验是精华,CMU 的总共 7 个实验,涉及数据的表 示、Cache、缓冲区溢出、 过程调用及栈的构成与使用、堆内存分配器、webproxy 等,我记得我们当时还做过一个给 C 写一个垃圾回收器,就是自己把 malloc 和 free 包起来做内存管理,好像是用的可达性分析,反正是最简单的做法,当时还写了个报告:

但是说实话,在国外都是在大一阶段上的课程,但是我们学校安排在了大三哈哈哈,现在回过去看,大一让我去上这个课,似乎也看不懂。。。

除了这三个学校,还有加州伯克利的 Computer Architecture 也挺不错的,总体来说这些课程内容都是比较接近的,主要涵盖以下主题:

C语言→汇编→指令 →微体系结构;编译 →链接→装入→执 行

程序性能优化、 存储器结构与管理、 并发和多线程、网络 编程

应 用级并行→数据级并行→ 线程级并行→指令级并行

大家在学校有时间的话,可以去找相关资料来学习,美国 CS 四大名校的课程体系都很不错, 非常注重计算机系统能力的培养。

并且,在课程内容横跨整个计算机系统,形成一条纵向的主线,把计算机里的每一层都串起来,而国内的课程体系更倾向于分层讲解。

比如自底向上的计组、数字逻辑、汇编语言、高级语言程序设计、操作系统、计算机网络、编译原理等,课程之间的联系比较少,这也导致了学生对 整个计算机系统的认识过程就像 “瞎子摸象”一样,很难形成一个完整的认识。

这也正是知乎上这个问题的解决方法:

RECOMMEND

推荐阅读

01

《深入理解计算机系统(原书第3版)》  

作者:[美] 兰德尔 E.布莱恩特(Randal E. Bryant)

大卫 R. 奥哈拉伦(David R. O'Hallaron)

译者:龚奕利、贺莲

推荐理由

本书是一本将计算机软件和硬件理论结合讲述的经典教程,内容覆盖计算机导论、体系结构和处理器设计等多门课程。卡内基-梅隆大学、北京大学、上海交大等国内外众多知名高校选用指定教材。本书的最大优点是为程序员描述计算机系统的实现细节,通过描述程序是如何映射到系统上,以及程序是如何执行的,使读者更好地理解程序的行为,以及造成效率低下的原因

02

《计算机系统解密:从理解计算机到编写高效代码》

作者:[美]乔纳森·E.斯坦哈特(Jonathan E. Steinhart )

译者:张开元、张淼

推荐阅读

计算机程序硬件软件从底层实现到高层展现原理讲解,对底层知识的多个主题进行了公平的覆盖。

计算机编程不是抽象的,程序是在机器上运行的。了解计算机如何工作以及程序如何在计算机上运行是成为一名更好的程序员的必要条件。在本书中,资深工程师Jonathan E. Steinhart深入探讨了计算机背后的基础概念,比如计算机硬件,软件在硬件上的行为,如何编写高效的程序,计算机安全基础知识,以及在编写代码时需要考虑的现实问题。本书对底层知识的多个主题进行了公平的覆盖——介绍有助于提高整个系统质量的许多领域的知识(包括计算机硬件、组合逻辑、时序逻辑、计算机体系结构、计算机组成原理、操作系统、系统程序设计等)。

点击以下链接,了解更多好书~

《现代操作系统(原书第4版)》

《计算机网络:自顶向下方法(原书第7版)》

《计算机组成与设计:硬件/软件接口(原书第5版)》

《算法导论(原书第3版)》

《数据结构与算法分析——C语言描述(原书第2版)典藏版》

《计算机科学导论(原书第4版)》

《编译原理(原书第2版)》

  《数据库系统概念(原书第7版)》

扫码关注【深入理解计算机】视频号

更多精彩回顾

书讯 | 10月书讯(下) |  小长假我读这些新书

书讯 | 10月书讯(上) |  小长假我读这些新书

资讯 | 什么是图数据库?图数据库实践与创新浅析

书单 | 你们要的Java学习路线图来了

干货 | 数字化转型的1个目标,3大领域,6大因素和9个环节

收藏 | 两本书助你构建智能计算系统知识树

上新 | 【新书速递】从技术小白到开发大牛,这本实验教程带你手把手全栈开发!

赠书 | 【第75期】《失控玩家》引发的思考:我们究竟离真正的人工智能有多远?

计算机科班比其他专业有多少优势呢?相关推荐

  1. 计算机专业优势及就业前景,女生学习计算机专业的优势及就业前景

    女生学计算机的优势 计算机也分好多专业,比如软件类.网络技术类.设计美工类.动漫类等等,就业前景都很不错,关键还是看你自己适合学那个专业.可以根据自己的年龄和兴趣爱好去选专业,然后通过系统的学习,考过 ...

  2. 无问西东 | 计算机科班小硕的秋招之路

    这里是归辰的面经与人生心得杂货铺,你想要的都有- 前言回顾篇 作者是一名今年参加秋招的朋友,本文写在秋招结束后. 背景为211本硕&计算机科班,无论文无实习,去年趁着暑假时间做了两个竞赛,名次 ...

  3. 学计算机有哪些大学专业,计算机专业:最好的7所大学!也是全中国“最难考”的大学!...

    高考即将来临,很多高考生在努力备考的同时,也在进行自己的大学和专业的选择,有很多考生都想读计算机专业,觉得计算机专业对于以后的就业也是非常简单的,但是他们不知道应该选择哪个大学进行计算机的学习. 下面 ...

  4. 计算机操作员有关大学专业,如何根据自身特长选大学专业,这样操作最简单直接!...

    原标题:如何根据自身特长选大学专业,这样操作最简单直接! 点击图片,即可快速预约 很多考生对专业的选择往往手足无措,不知道报什么专业,更不知道从哪些方面考虑专业方向.这里有一句话:"本科看学 ...

  5. 清华大学计算机专业课参考书,清华大学计算机考研辅导班:专业考研参考书目...

    原标题:清华大学计算机考研辅导班:专业考研参考书目 跨考教育 清华大学信息科学技术学院是规模最大的学院之一,师资力量雄厚,人才济济,具有悠久的历史.跨考教育老师在此整理了清华大学计算机考研备考信息,考 ...

  6. 阿德莱德大学计算机专业教学,澳洲阿德莱德大学计算机硕士课程的专业设置如何?...

    学校优势: 自1874年创校以来,阿德莱德大学一直位居澳大利亚顶尖大学之列.它在各个领域中对南澳大利亚,甚至整个澳大利亚的繁荣与昌盛都做出了巨大贡献.澳大利亚一共得9名诺贝尔奖获得者中,有5位来自阿德 ...

  7. 想从动物科学转专业去计算机,动物科学转专业或者加第二专业动物医学,望老师同学们提些建议。...

    满意答案 如果你仍然是想考你本专业动物科学类的研究生,那听我一句,你最好别考了,动物科学类的研究生如果只是学到硕士的那确实没有什么可研究的,可能算起来只有一个克隆转基因繁殖方向可达到博士高层次的研究, ...

  8. 上海自考计算机本科考哪些专业吗,上海自考本科有哪些专业

    上海自考本科有哪些专业 我国自学考试制度已经实行了二十多面,近年来选择参加自考的考生也越来越多,有人是为了找工作,有人是为了升职加薪,有人是为了考资格证,也有人是为了弥补遗憾,以下是小编为大家整理上海 ...

  9. 大学学计算机应该选哪个专业呢?

    01.大学学计算机应该选哪个专业呢? 系列文章目录:入门之前:大学本科计算机专业入门之前所需了解的一系列文章 专业篇   纵观各大高校,许多大学开设了大量不同的计算机专业:计算机科学与技术.软件工程. ...

  10. 四川计算机专业最好的学校,四川2021年计算机学校有哪些专业比较好

    四川计算机学校有哪些专业比较好?如果说是了解计算机学校的开设话,是可以在四川地区了解到很多学校的开设,而且最重要的是不同计算机学校间所对其专业地开设介绍是不同的,也就是说学生了解专业地问题,是可以从计 ...

最新文章

  1. ubuntu创建新用户名和密码以及查看删除用户
  2. MAVEN构建的各个环节及常用maven命令
  3. 第四范式陈雨强获评首届世界人工智能大会云帆奖 | 2020WAIC
  4. 如何利用结构化思维写好分析报告?
  5. mysql timestamp _mysql之TIMESTAMP(时间戳)用法详解
  6. Extra }, or forgotten endgroup. [ maketitlepage]问题的解决(uline命令)
  7. 大数据可视化分析方法与流程
  8. Web基础知识之Web组件
  9. SCCM制作启动镜像和U盘引导装机记录
  10. 【lphtw】第三弹笔记ex24-ex35
  11. 输入经纬度在地图中标注位置(百度地图)
  12. 咖说 | 关于当前环境下的经济分析
  13. 女生们是怎样观察男生的呢
  14. 最近程序员频繁被抓,如何避免面向监狱编程!?
  15. secureCRT上传CentOS镜像
  16. 如何快速办理软件著作权?
  17. 基于MIT协议的详细介绍
  18. IE8-下背景色半透明滤镜在jquery动画中失效问题记录
  19. python爬虫笔记(学习T)
  20. vue 答题(单选,多选,判断)

热门文章

  1. LSF集群作业管理系统
  2. 睁开双眼玩立体游戏 3D显示技术解析
  3. java绝对值排序_HDU 2020 绝对值排序
  4. 玄幻:我!收徒就变强!(三)
  5. 将IFC模型转换为Revit模型后减肥
  6. ELK (三)安装kibana
  7. 我变了?“我”没变!
  8. LATEX插入参考文献(两种方法)
  9. 使用git restore命令撤销你在工作区的修改
  10. 云杰恒指:8.27恒指期货实盘指导交易复盘