自学编程 自下而上,系统学习计算机和编程

crazyjin · 2019年03月28日 · 769 次阅读

请先阅读《什么是计算机?》、《什么是编程?》

在冯诺伊曼结构被提出的随后七十多年中,计算机不断发展,变得越来越复杂。为了提高计算机系统利用率和易用性,程序变得不可缺少,并且越来越重要。这些程序越来多、越来越复杂,逐渐形成了层次结构,被称为软件(相对硬件而言)。现在的计算机系统可以自下而上地分为:硬件层、操作系统层、服务层、应用层。

  • 应用层:直接为用户提供操作界面和功能的软件。比如移动设备中的应用,pc上的浏览器、游戏,这些都属于应用层。
  • 服务层:为应用或者其它服务程序提供服务。比如数据库、缓存数据库、网站后台程序、移动应用的后台程序,这些程序属于服务层。
  • 操作系统层:管理所有的软件硬件资源并为应用和服务程序提供接口。比如,Windows、Linux(Android基于Linux)、Unix(OSX和iOS基于Unix),Vxworks等等。
  • 硬件层:提供计算、存储、输入输出等功能,计算机系统的所有功能都最终由这一层实现。

在计算机和编程技术的发展过程中,新的概念不断在原有的概念基础上被提出,变得越来越抽象,越来越难以理解。因此,系统学习计算机和编程的最佳方法就是从最底层、最基础的概念开始,一步一步往上。这篇文章尝试为自学者提供一个系统学习计算机和编程的方法:自下而上,系统学习计算机和编程。这种学习方法有一个缺点,那就是学习周期比较长。 如果你有足够多的时间(比如18各月以上)、耐心和兴趣,那么这就是学习计算机和编程的最佳方法。特别适合在校大学生跨专业自学。

硬件层

今天的计算机通常有非常易用的操作系统为用户管理所有的硬件资源,所以普通用户不必去了解计算机的组成、结构和原理。但是对于程序员来讲,掌握计算机硬件的基本知识对编程有着非常大的帮助。此外,掌握计算机硬件的工作原理,就可以直接对硬件进行编程。这在某些领域是必须的,比如嵌入式编程。

计算的本质

人可以通过记住简单的四则运算法则学会计算。那计算机是如何计算的呢?这里给大家推荐一本书:《编码》。阅读这本书基本上不需要任何基础知识。阅读它,就可以理解计算机如何记忆和运算。

alt 《编码》

这本书中讲到的二进制是计算机硬件唯一能够识别的语言。所有程序都必须要转换成二进制的形式计算机才能执行。所有用户输入的数据在计算中都以二进制的形式存在。

现代计算机的结构和组成

现代计算机都属于冯诺伊曼结构,但组成却要比冯诺伊曼结构刚刚提出来时要丰富得多。《计算机组成:结构化方法》这本书将为你讲述计算的结构、各个组成的详细细节和各组成部分之间如何协调工作。

alt 《计算机组成:结构化方法》

这本书讲述了很多基础概念,这些概念对任何层次的编程都非常有用。同时还有汇编语言的知识,用于直接对硬件编程。

操作系统

操作系统管理着计算机的一切软硬件资源,包括我们编写的程序。那操作系统是如何做到的呢?请阅读:现代操作系统。这本书将为你讲述操作系统的方方面面,它是很多大学的标准教材。

alt 《现代操作系统》

在操作系统管理的众多输入输出设备中,有一个非常特殊,那就是网卡。有了这个设备,pc和移动智能设备才能和互联网连接起来,用户才能享受互联网带来的便捷服务。在互联网时代,大部分应用程序都会接入互联网。因此学习计算机网络变得非常有必要。这里给大家推荐书籍:《计算机网络》

alt 《计算机网络》

在操作系统这一层面,最常用的语言是C语言。C语言的设计初衷之一就是为了编写UNIX操作系统。现在常用的操作系统中核心部分基本上都由C语言来实现,由此可见C语言的重要性。此外,有很多编程语言都由C发展而来的,比如C++/Java/C#/Go。掌握了C语言后再学这些编程语言就会轻松很多。推荐书籍《C程序设计语言》,由C语言的设计者Dennis M.Ritchie参与编写的权威书籍。

alt 《C程序设计语言》

C语言不仅仅可以用来编写操作系统,还有很多高性能的系统和程序也用C语言来编写。此外,C语言还可以直接操作硬件。在对硬件直接编程的编程工作中,除了必须使用汇编的那部分,其它地方一般都使用表达能力更强的C语言来完成。

服务层

服务层由许许多多的服务程序组成,它们默默运行在操作系统之上,为应用程序或其它服务程序提供服务。每个服务程序都有不同的设计目的,并没有一套知识来完整描述它们。因此,在这一层面,只推荐大学学习编程中最常用到的服务:数据库。这里向大家推荐书籍:《数据库系统概念》

alt 《数据库系统概念》

应用层

这一层和服务层一样,由于应用的功能不一样,没有一套系统的知识可供学习。常见的应用:使用HTML/CSS/Javascript来开发的网页应用;使用Java/Object-c来开发的Android/iOS移动应用;使用C#/Object-c来开发的windows/OSX桌面应用;等等。在学习应用开发之前,建议大家先学习一些编程常用的知识:数据结构和算法。

数据结构和算法

所谓数据结构就是在程序中(也就是在计算机内存中)多个数据之间的组织结构。好的数据结构能让编写程序更加顺畅、能让程序的运行更加高效。常见的数据结构有:数组,结构体,链表,树,哈希等等。这些数据结构在编程中都会经常用到。

算法在计算机中的意思就是完成一个复杂计算的方法,和数学中的算法的意思基本上一致。同样一个问题,不同算法的效率之间有很大的差异。有的算法1个小时才能解决一个问题,而同样的问题有的算法1分钟甚至更少的时间就能解决。在面对大量数据或者对时间要求很苛刻的时候,选择高效的算法尤其重要。

这里为大家推荐书籍:《算法导论》。这本书同时涵盖了数据结构和算法两方面。

alt 《算法导论》

在学习数据结构和算法的同时可以学习C++,它由C语言扩展而来,增加了面向对象程序设计。在最常用的编程语言中,大部分语言都支持面向对象程序设计。因此,在学习C++时,要注重学习面向对象程序设计这一方面的知识。在C++之后的面向对象编程语言中,很多都参考了C++。推荐书籍:C++ Primer 中文版

alt C++ Primer 中文版

在学习数据结构和算法时应该尝试使用C++去实现书中描述的数据结构和算法。

结束语

基础理论知识的学习是比较枯燥的,所以带着好奇心和兴趣去学习尤其重要。有了这些理论知识,自学者对计算机系统就有了一个大致的了解。接下来就可以选择一个感兴趣的领域深入学习了。并且,由于有了扎实的理论基础,在后续的深入学习和工作中会轻松很多。

共收到 0 条回复
crazyjin 内容不符合版规屏蔽此话题 03月31日 20:55
crazyjin 初中生可以自学编程吗? 中提及了此贴 04月14日 20:44
crazyjin 如何自学编程? 中提及了此贴 04月24日 01:33
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册