计算机科班出身的优势?

经常会有小伙伴问:”现在生化环材、机械这些专业自学 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 四大名校的课程体系都很不错, 非常注重计算机系统能力的培养。

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

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

最后免费分享给大家一份Python全套学习资料,包含视频、源码,课件,希望能帮到那些不满现状,想提升自己却又没有方向的朋友。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。在这里插入图片描述

二、Python必备开发工具

在这里插入图片描述

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。 在这里插入图片描述在这里插入图片描述

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。 在这里插入图片描述

五、Python练习题

检查学习结果。 在这里插入图片描述

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 在这里插入图片描述在这里插入图片描述

这份完整版的Python全套学习资料已经打包好,需要的小伙伴可以戳下方链接免费领取

读者福利《Python全套学习资料》,戳这里免费领取!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值