专业程序员必修课



所有的程序员 开始编程 都先从具体的编程语言开始学起的
高级语言还没有出现之前 程序员 接触汇编语言 机器语言 甚至是直接操作电子电路 编程 
近几十年 高级编程语言的出现 程序员首先接触到的都是高级语言 专业程序员 必修课如php C++ Java等


刚开始编程 用正在学习的高级语言做出软件 是学习的根本动力 也是最终目标
在这个阶段 都是如饥似渴
孜孜不倦地学习 用php C++ Java等编程语言写出诸如贪吃蛇 课题管理系统等软件 来展示学会某种编程语言


能用某种编程语言写出软件时 就自认为学会了编程 掌握了计算机科学 进入到了公司开始程序员的工作
工作很不错
按时完成既定的任务 学习最新的编程技术 过得开心


不断学习的过程中 常地感觉到困惑 这种感觉说不清道不明 在学习编程语言时
别人说Java是面向对象的 而C语言是面向过程的 可什么是面向对象
什么是面向过程
为什么在工作中体会不到面向对象的好处呢?


说Java是静态类型语言 而php是动态类型语言 那么什么是静态类型语言?
什么又是动态类型语言呢?


再比如学习多线程编程时 经常会碰到锁 互斥 信号量等概念 那这些概念又代表什么呢?


Kotlin语言 比Java语言拥有更好的语法糖 那语法糖是什么呢?


抓住科学的本质  是本篇要表述的程序员认真掌握的课题


1 数字电路

2 计算机组成原理

3 汇编语言

4 计算机操作系统

5 计算机编译原理

6 离散数学

7 数据结构与算法

8 计算机网络

9 c语言

10 英语

11 数据库等常用软件



这里列出的专业程序员必修课 程序员需要学习的还有更多


上图是计算机系统层次结构图
从计算机硬件到软件 最下层是计算机硬件部分
最上层代表用编程语言写出的应用程序
每一层代表上面八门课题的一门或者两门课题



硬联逻辑

计算机硬件 也就是电子元器件
数字电路 和 计算机组成原理  用来阐述过电子元器件
表示计算机中的1和0  电子元器件如何配合及如何计算 是电子计算机的根本 程序员最应该掌握

微程序

硬件级别的程序  综合计算机组成原理和汇编语言来理解此层

机器语言

是软件和硬件的分界线 通过汇编语言来理解此层

操作系统

两个作用 一是为上层的编程语言提供接口 另一是管理底层的硬件操作
在此层引入了非常多并且非常重要的概念  如线程与进程 并发 信号量 锁 内存管理等

汇编语言

早期的程序员 先用纸带上打孔来编程的  理解为直接用01来编程
而后为了方便开发 则发展出了汇编语言 可以通过add等简单的命令来实现一些基本的程序逻辑
后来才发展出现在的高级语言
所以 理解汇编语言  对理解高级语言有直观重要的作用  目前很多程序的底层 是用汇编实现的

高级语言

高级语言 是 php C++ Java等 程序员学习的技术基本上 在这一层 高级语言想要运行在机器上
经过编译器编译 或通过解释器解释执行 而编译器和解释器则是在计算机编译原理 课中讲述  语法糖等概念也是在这里介绍

离散数学 数据结构与算法 计算机网络

三门贯穿整个系统结构   各个层级中 都用到这三门课题中的知识点

数据结构与算法  是企业面试的重点  是技术提升的关键
课题不是一朝一夕能够搞定 尽自己全力能掌握多少就掌握多少 剩下的不是特别明白的
需要在以后的工作中慢慢体会理解
不能急于求成 需要持续不断地学习 这个过程可能持续三至五年 甚至更久



1 数字电路


数字电路是计算机基础课   视频网络上有 清华大学 东南大学 视频

中国大学MOOC网站 南京理工大学的数字逻辑电路的公开课
非常适合计算机专业的同学 //www.icourse163.org/course/NJUST-1001753091



2 计算机组成原理

计算机组成原理 阐述了计算机是如何工作的  是考研科目 如清华大学等 有公开课视频


两本比较通俗易懂的书《大话处理器》和《编码》 这两本书都偏科普一些 阅读起来相对轻松
有趣味性 是不错的入门书籍


比较通俗易懂的书 《穿越计算机的迷雾》


《深入理解计算机系统》这本书 从程序员的角度来看待整个计算机系统 非常适合程序员
包含了计算机硬件操作系统 计算机网络等 需要读者具备相关的知识才能学得更好

华盛顿大学的视频 //courses.cs.washington.edu/courses/cse351/
视频是英文版的 学好英语重要



3 汇编语言


汇编是一门相对比较难并且抽象的课题 但是却是可以方便地进行实操的一门课 就像学习编程一样
可以实际的去运行书中的一些代码 清华大学出版社出版的《汇编语言》



4 计算机操作系统

计算机操作系统  《现代操作系统》

《UNIX环境高级编程》 Unix系统 程序员在工作接触到最多的操作系统是Unix或Linux操作系统



5 计算机编译原理


编程语言编译时发生了什么事情  什么是编译期 什么是运行时
编译原理这门课 告诉高级语言是如何被转化为低级语言 最终在计算机上运行的

经久不衰的《编译原理》教学视频的话



6 离散数学

离散数学 对于计算机 非常重要

离散数学在国内 教材偏向 数学层面  没有和计算机知识有太多的关联  《离散数学及其应用》
阐述了离散数学的相关知识 并且和计算机中常用的知识进行了结合



7 数据结构与算法

数据结构与算法 开篇就讲了 程序= 数据结构 + 算法

对于数据结构与算法的学习  首先先大致了解什么是算法  

入门阶段 接着可以尝试实现一些比较容易的数据结构和算法  深对数据结构和算法的了解
实践阶段 最后去 数据结构与算法背后的相关数学原理等
原理阶段

入门阶段
《算法图解》和《啊哈!算法》 简单通俗易懂 阐述了几个常用的算法 基本的常用的数据结构与算法



实践阶段

《数据结构(Java版)》 各种数据结构的实现原理和算法的设计思路  对照着编程语言中这些数据结构的实现原理
如可以对照Java中对于链表是如何实现的 了解数据结构与算法是怎么回事  对自己学习的编程语言进一步做了深入的研究

理论阶段

理论部分有一套读起来特别费劲的书籍 有空闲时间 闲来无事翻翻也行《计算机程序设计艺术》
作者是唐纳徳·E.克努特(Donald E.Knuath 中文名高徳纳)数学比较好且爱好钻研的尝试读读



8 计算机网络

计算机网络的相关知识在工作时使用的频率挺多 对计算机网络的认知也可能成为日后自身发展的瓶颈 比如做分布式系统的同学

计算机网络 两个阶段的书籍来推荐 第一个阶段 也就是入门阶段
《图解HTTP》和《网络是怎样连接的》 建立起对网络的认知

第二个阶段  理论和实践 著名的《TCP/IP详解》 共分为三卷 分别从协议的原理 协议的实现等角度来阐述TCP/IP