1. 绪篇

2. Chapter0 计算机基础

感谢你翻开了我的文档,你一定已经做好了学习web编程的打算与决心,相信你经过学习之后,会成为一个好的developer。

成为一个developer之前,作为编写文档的笔者,更希望你先成为一个power user。在那之前,我们先进行了解一些计算机领域的基础知识。

在这个章节我会去介绍一些计算机上的基础内容,大概包括以下内容:

  • 一些基础的术语;
  • 计算机内的文件系统与扩展名;
  • 什么是数据;

在基础之后,为了能让你熟悉web编程,还会有下面的补充内容:

  • 什么是客户端编程和网页编程;
  • 浏览器与网页之间的关系;
  • 什么是前端和后端,在决定学习之前应该怎样选择方向;

那么,让我们开始吧。

2.1. 认识电脑

在开始技术学习之前,我们需要对手中的计算机有所了解。经常听说一些亲戚朋友“谈电脑色变”,也经常有朋友用一种阴阳怪气的语气称呼技术人员为“电脑大神”。其实我们手上的电脑完全没有想象中的那样神秘,它只是一些精密零件的组合体。我们可以将电脑理解为一个大型的计算器。聪明的先行者们将所有数学问题都转换成了最基础的二进制运算,但这并不代表学习计算机技术之前都必须要精通二进制或是八进制或是十六进制运算——当然你如果会这几种运算一定是更好的。计算机将任何全部需要处理的问题都转换成了最底层的二进制运算,然后交给负责计算的单元来处理这些海量的计算。我们所陌生的计算机,本质上就是通过无尽的运算来完成全部的任务的。

如果想要了解更多关于计算机组成以及硬件之间如何协作的原理,可以参考计算机相关专业《计算机组成原理》课程教材。

2.2. 计算机 Or 电脑?

这两个词是一个意思,但计算器和计算机不一样。

在这篇文档中,这两个词会反复使用,读者认为计算机和电脑一样就好了。

2.3. 硬盘与内存

硬盘是存在于我们电脑中的一个硬件设备,负责大容量的数据保存工作。广义上来讲,U盘、磁盘、(移动)硬盘等负责存储数据的硬件设备都属于硬盘类,它们的任务都是存储。相比于内存,硬盘的读写速率低。相对地,如果没有经历一些破坏性的灾难,硬盘的数据可以永久保存。

而内存是相对于硬盘存在的另外一个硬件设备,它的任务是临时存储。内存的读写速度特别快,但具有易失性。程序结束或者是计算机重启,对应的内存空间都会被释放。

举个例子,当你打开记事本,输入了一些文字,再你点击保存之前,输入文字是存在于内存中的。如果此时不保存数据关掉它,数据就从内存中消失了。但如果你点击保存,你输入的文字便会存储到硬盘中。

2.4. 计算机的文件结构

通常计算机的文件都是树形结构,也就是文件夹 - 文件的结构。以Windows系统为例,全部文件都可以在“我的电脑”(Windows7之后的版本中改名为“计算机”或“这台电脑”)中访问到。“我的电脑”被称为“根目录”。打开“我的电脑”后,在顶部显示的是地址栏。地址栏显示了当前所在的位置,位置信息的格式体现了文件夹和文件组成了树形结构。

2.5. 扩展名(后缀名)

计算机中的数据和程序都是以文件的形式存储的,计算机会通过扩展名来区分不同的文件类型。

在Windows下如果想要显示扩展名,打开“我的电脑”后选择“查看”,选择“文件夹选项”,取消勾选“隐藏已知文件类型的扩展名”。点击确定后文件夹窗口会闪烁刷新,然后你就会发现所有的文件名后边都加上了像.xxx这样的字符,小数点后面的字符就是扩展名。

扩展名标志了文件的类型,解决了“计算机该使用哪个程序来执行它”的问题。例如双击1.txt这个文件系统会使用记事本读取它的数据并打开,如果修改了打开方式,下次双击该文件的时候系统就会使用新的打开方式来读取它的数据。特别地,应用程序文件的扩展名是.exe,它们不会被其他程序打开,而是作为可执行程序启动。 下面列举了一些常用文件类型的扩展名。

类型 扩展名
文本文档 .txt
图片 .jpg .jpeg .bmp .png .gif
声音 .mp3 .wav .m4a
视频 .mp4 .wmv .avi .rvmb .mkv
压缩文件 .rar .zip .7z .tar
链接 .lnk .url
网页 .html .xhtml .mhtml

2.6. 数据与程序

程序就是可以执行的应用程序。像电脑上的.exe文件,以及手机上的App,它们被打开后可以执行相应的一些功能,这些都被称为程序。与程序对应的就是数据。

举个例子,我们打开记事本程序,接下来使用记事本新建一个文档,叫1.txt。我们再向记事本中输入一些内容,最后点击保存。整个过程中,记事本是程序,它的任务是记录用户输入的内容,并且保存到文件中。1.txt这个文件就是数据,它存储了我们输入的内容。

在使用计算机的过程中,通常是将程序和数据分开存放,这样可以让文件存放更有规律,使用过程中寻找文件的时候也有迹可循。如果计算机上装有固态硬盘(SSD,Solid State Drives),建议将程序安装在SSD上,数据存放在机械硬盘上,这样可以保证程序能更流畅地运行。

固态硬盘是硬盘的一种。常见的磁盘内部使用磁碟利用磁性记录数据,而固态硬盘是通过存储芯片达到存储的目的。磁盘读取数据时,需要通过移动磁头到相应位置才可以获取数据,而固态硬盘通过集成的电路代替了物理旋转磁盘,所以固态硬盘在速度上有巨大的优势,目前已经非常普及。

2.7. 编程?与电脑交流?

编程,字面意义上来讲就是按照自己的意图去编写程序,让电脑能读懂,从而按照自己的意愿去操控电脑,让电脑为我们完成我们想完成的任务。就像没法与不懂中国话的外国人交流一样,你没法向不懂人话的计算机解释你要做什么,这时候就需要一个“人与计算机交流的工具”,来帮助人与计算机交流。这种“人与计算机交流的工具”就是编程语言

与平常意义上的语言一样,编程语言也有词法和语法。在编程的过程中,熟悉了语法之后,我们就可以按照计算机能理解的方式来描述问题,将复杂的问题交给计算机解决了。

2.8. 浏览器与网页

浏览器是可以打开网页的应用程序。网页是文件,从原理上讲,网页都是文本文件。之所以网页有各种各样格式的内容,是因为编写网页的编程语言规定了一系列格式的表示方式,从而编程人员可以使用文本来表示对应的格式和样式。

编写网页的语言,常规上普遍使用HTML+CSS+JavaScript。HTML负责页面中“有什么”,CSS负责页面中各个部分“如何显示”和“显示成什么样”,JavaScript则负责页面中各个元素“能做什么”。

2.9. 客户端应用与web应用

客户端是传统意义上的“软件”,我们打开电脑后所使用的应用程序,大都属于客户端的范畴,例如QQ。客户端程序编写过程繁琐,开发成本高,同时开发人员还需要考虑程序在多个平台运行的兼容性。例如网易云音乐的客户端开发了多达8个版本(Windows、Linux、Mac OS、Android、iPad、iPhone、Windows Phone、UWP)。

web应用即运行在浏览器上的程序,就是人们常说的“网页”。最初的web应用只是在客户端功能的基础上进行阉割,在网页上实现一些基础的功能(如早期的web QQ)。渐渐地HTML技术越来越成熟,功能越来越强大,有越来越多的开发者投入web开发中。web应用编写起来简单且快速,很多创业团队依靠一个好的创新点,迅速开发出对应的web应用,快速切入市场。

近几年使用web应用创业成功的案例比比皆是,这些成功的案例无一不是极大地利用了web应用的优点。web应用开发起来迅速,开发成本低。web编程语言学习起来容易,出成品的速度是客户端编程所不能比拟的。相比于优点,取而代之的缺点就是,web应用受制于它的简单,无法发挥客户端程序所能发挥的作用。所以即使是在这个web应用横行的年代,一些大型的应用程序还是以客户端的形式呈现在用户眼前(例如Photoshop、Office等)。

2.10. web编程中的前端与后端

通常来讲,任何平台的编程都会分为前后端,前端负责显示和交互,后端负责数据和运算。在web编程中,前端就是用户看得见摸得到的网页,而后端是接收前端的请求、获取数据、进行运算等。

举个例子,我们现在打开了QQ空间,浏览器会首先加载前端页面的内容和样式,页面加载完成后处理JavaScript的逻辑。其中会有JavaScript代码的功能是获取朋友们发的说说列表,前端会将这个请求发送到后端提供的接口。后端接收到消息后前往数据库获取数据,将取到的数据处理成前端所需要的格式(通常是XML或者JSON),通过一些方式返回给前端。前端拿到数据之后,通过JavaScript提供的功能将数据显示给用户。

上面一段大致描述了前后端交流工作的过程,通常开发人员称呼这种方式为“接口式编程”。接口式将前后端进行拆分,使得彼此不需要了解对方的工作内容,双方可以使注意力更多地放在自己相关的工作上。相对于接口式编程,另外一种是后端直接将数据渲染在页面上的方式,这种方式在后面的内容中会详细解释。

那么在学习web编程之前,首先需要选择一个自己的方向,前端和后端,是完全不一样的两种思维。每个人的思维方式不同,就像有的人喜欢理科而有的人喜欢文科,在学习web编程的时候,当然也需要选择一个切入点进行学习。

前端更多的是设计与排版。作为前端工程师,需要考虑但不限于以下几点:

  1. 页面怎样显示才美观,可以把重要的信息准确地暴露给用户;
  2. 功能路径怎样设计才能让用户以一个舒服的体验完成操作;
  3. 页面中的功能逻辑要怎样设计才能让用户耗费最低的性能且获得最好的体验;
  4. 与后端进行交互的时候,哪些信息是必要的,哪些信息是非必要的。

后端更多偏向的是逻辑与计算能力。作为后端工程师,需要考虑但不限于以下几点:

  1. 需要向前端索要哪些数据;
  2. 面临一个问题,要怎样才能让计算机更高效率地完成计算而避免不必要的计算;
  3. 取到的数据需要进行怎样的处理或计算;
  4. 怎样能最大化地节约服务器资源,让用户更快地获取到数据;

在初期的学习中,前端可以更快地看到结果。编写好网页,只需要按下保存再双击打开,就可以在浏览器中看到自己编写的结果,相对于这一点来看,后端相对枯燥一些。但是当一个接口因为数据量过大而无法满足用户需求时,后端工程师挺身而出让这个接口的速度提升到感知不到的水平,那种喜悦更是解决一个前端无法比拟的。

所以,前端与后端各自有各自的特性,选择适合自己的开始学习,作为自己web编程的切入点,才是正确的对策

2.11. 后端/后台?前端/前台?

在学习的过程中难免要与其他人交流,交流的方式不限于问同学或者是上网查询资料。在与他人交流的过程中,这样四个词语足以让新手摸不着头脑。在讲解过前端和后端的区别后,我们有必要区分一下这四个词语。

后端和前端是我们普遍意义上的编程术语,后端指后端数据逻辑层,前端指表现交互层。后台通常意义上是指某个软件平台的后台管理系统,或者是说某个人有后台如何如何。前台通常是指公司负责接待客户的前台小姐姐。

这本书是xt写的/上次修改: 2019-04-17 14:57:44

results matching ""

    No results matching ""