程序设计的详细介绍

128 阅读17分钟

这个帖子是一个关于编程的大的入门课程。

一般的编程。

在你掌握一种特定的、具体的编程语言之前,你需要熟悉一些概念。这些概念并不取决于特定的编程语言,但对每个开发者来说都是必不可少的。

如果你是编程新手,这篇文章的目的是让你做好准备,给你提供基本的构建模块,即概念

特别是你会学到

  • 什么是计算机
  • 什么是程序
  • 什么是编程语言
  • 作为一个程序员,你的工作是什么
  • 什么不是你作为一个程序员的工作?
  • 存在的不同的编程范式
  • 你可以使用的不同的编程语言,以及应该选择哪一种
  • 什么是错误

你为什么要成为一名程序员?

我教编程,我每天都会收到很多邮件。我和很多很多的程序员,以及想成为程序员的人交谈。

我很好地掌握了让人们学习编程的原因。

人们想建立他们一直梦想的应用程序。他们想把这个项目变成现实,他们想让自己的梦想成真。让一个应用程序在你的电脑或手机上运行,创造你和你的朋友们梦寐以求的游戏!

人们想把这门手艺作为一种爱好来学习。我曾与70多岁和80多岁的人交谈,他们正在学习编程。为了好玩。享受一种新的挑战。为了给他们的朋友创建一个应用程序。

人们想在技术领域开始一个新的职业生涯。这并不奇怪--编程作为一项工作是非常有吸引力的:它的需求量很大,你在室内工作,而且平均工资很高。当然,这取决于地点和级别。你还可以远程工作,这在我看来是一个巨大的优势。

当然,这些只是3个例子。你可能有不同的需求,但不管是哪种需求,学习编程绝对是你将来要掌握的一项技能。

成为一名程序员需要什么

你不需要成为计算机科学家或学习工程,或成为数学天才来学习编程。

这是一项你可以在任何时间点、任何年龄段学习的技能,而且--让我说--这是一项了不起的技能。

要成为一名程序员,从零开始,你需要4样东西。

  • 耐心
  • 奉献精神
  • 时间
  • 连贯性

这就是你需要的全部。

耐心,因为每次你学习新东西时,你都需要耐心地做一个又一个步骤,直到你能把这些点联系起来。

奉献,因为这当然不是一项容易掌握的技能。

时间,因为正确学习事物需要时间。而对于编程,很多时候你会在一些事情上卡住,需要花一些时间来研究。而一个优秀的程序员花在思考问题上的时间和他们花在编程上的时间一样多。

坚持不懈,因为如果你能每天拿出一点时间,比如1或2个小时,学习编程,你将在短时间内成为一个伟大的程序员。

哦,你可能还需要一台电脑。任何适度的新电脑都足够了,你不需要一个花哨的顶级MacBook Pro。不要用这个作为借口 :)

计算机是如何工作的?概述

我所说的电脑是指每一个可编程的电子设备:笔记本电脑和台式电脑、智能手机、智能手表、你的汽车、你的洗碗机、你的相机,甚至是像狗的GPS设备这样的小东西。很多东西,对吗?我们被计算机所包围。

计算机是由程序驱动的电子设备。自20世纪中期以来,程序员们一直在努力使这些计算机总是更快,并且总是更容易和更容易编程。

机器是愚蠢。他们做你告诉他们的事。它们不能真正思考或决定事情。它们只能听从你的指令,而这使你,一个程序员,成为一个非常强大的人。

我们把计算机的电子部分称为硬件,而程序部分称为软件

当你为计算机编程时,你向它提供指令,这些指令被转化为比特,这是电子器件唯一能够理解的东西。一个比特只能有两个值。0和1。

当你看你的电脑或智能手机时,你看到一个漂亮的界面。那是多年进化的结果。在这下面,每秒钟都有数百万条指令被执行,为你提供附近最好的餐馆名单。所有这些都是通过与互联网交谈,这是一个令人难以置信的巨大的计算机网络--我们人类有史以来建立的最大的人工生态系统。

涵盖计算机如何工作(以及计算机网络)将花费我们大量的时间。相反,在这个简短的概述之后,我将把重点放在软件部分。

我们将把硬件方面的内容保留在另一门课程中,在未来!

什么是程序

现在让我们来看看什么是程序。你的浏览器(Chrome、Firefox或你使用的那个)就是一个程序。

这个网站是由我用来帮助我生成的一个程序实现的。我提供内容,程序生成HTML页面。

你的手机是由一个大程序运行的,叫做iOS或Android。当然,那是一个巨大的程序,甚至把它称为一个程序也不公平--它是一个程序的集合,一个生态系统。我们给它起个名字。

你电脑上的应用程序是程序。你手机上的应用程序也是。

你的汽车是由程序控制的。

程序是一组指令,程序员将其组装起来,使机器执行一个特定的动作。

通常情况下,程序在执行前会由程序员进行编译。然而,有时程序是由另一个程序解释的。

比如说JavaScript,它是由浏览器运行的。在这个确切的时刻,有一些我写的JavaScript代码,正在被你使用的浏览器执行。

所以,这里是程序的第一个大分离:编译的和解释的。而不同的编程语言会允许一种或另一种方法。

归根结底,程序是你建立的用来执行某些特定的东西。它可能是帮助简化企业的管理,或解决一个问题,如无聊的问题,通过创建终极视频游戏。

现在我们已经定义了什么是程序,让我们深入了解什么是编程。

什么是编程

我们所说的编程一般是指用一种编程语言编写的结构化代码指令的工艺,以便创建一个工作程序。

然而,我想为这个概念引入一些更大的东西。

对我来说,编程就是解决问题。因此,编程开始的时间要远远早于你伸手拿起键盘开始在电脑上输入指令的时间。

编程开始于你思考问题的时候。或应用程序。

编程是当你收集需求,与所有参与应用程序的人交谈,与客户交谈,分析应用程序应该做的所有不同事情。

编程是定义应用程序应该做什么。

编程是确定你的应用程序是否不可能运行或成本太高,甚至在你开始工作之前。

编程是绘制所有的流程图以帮助你解决问题。

编程也是当你被卡住,需要解决一个问题的时候。如何在谷歌上搜索答案,如何提出一个好问题,这本身就是一种技能。

最后,70%的编程是在你的代码编辑器之外完成的。

什么是编程语言?

计算机是愚蠢的。尽管有很多关于人工智能的讨论,但我们还没有到那一步。

今天,我们使用的计算机只是执行我们告诉它们的东西的机器。

我们用一种编程语言与它们交谈。

编程语言是一组指令和规则,我们用它来与机器对接。

有很多很多不同的编程语言。你甚至可以创建你自己的,如果你喜欢的话。但更多的时候,你会想使用一种别人很久以前创造的编程语言,随着时间的推移,它变得更加完美,而且它只是工作,不会让你感到头痛。

一些例子?JavaScript。Python。Swift。鲁比。

这些语言中的每一种都解决了不同领域的问题,或者在某些情况下特别适合。

JavaScript是网络的主要语言。它是浏览器可以在网页内执行的唯一语言。

Python和Ruby主要用于网络服务器,或作为更通用的语言。例如,Python在数据科学界很出名。

由苹果公司推出的Swift,是用于创建iPhone应用程序的语言,一般来说,所有在苹果硬件上运行的程序都是用这种语言。

我只是提到了这些,但还有数以百万计的语言。没有单一的 "最佳 "编程语言。这一切都取决于情况,取决于你和你的团队的知识,取决于它需要运行的硬件,以及其他事情。

计算机科学与编程

许多程序员在大学里学习CS(计算机科学)。对于程序员来说,计算机科学是一个常见的学位,因为名字中的 "计算机 "非常吸引人。

但是CS与日常的编程有非常非常大的不同。

计算机科学课程会教你很多理论、算法分析,而很少有行业中需要的实际编程。它也可以被看作是数学的一个分支。如果你问我,它也是相当复杂的(我在数学方面从来就不擅长)。

另一方面,编程是使用计算机来使它做一些非常实用的事情。

我个人在米兰的大学里修了一门计算机工程课程,这门课程也是工程多于编程。理论比CS少,但也没有什么实践技能。我所知道的所有关于编程的知识,都是我作为一个自学者自己学的。或者在工作中。

这里有一个好消息要告诉你。

当你读到这里时,你可能没有上过CS或CE课程,你可能认为上过这些课程的人比你有巨大的优势。

你猜怎么着?他们并没有。

大学--作为一个缓慢发展的巨人--很可能会教你过时的编程语言,过时的 "最佳实践",以及各种你需要长期学习的东西--这不是一件容易的事。

当然,去那些学校的人也会像你一样自己学东西,但你可以在合理的时间内轻松达到CS学生的水平。另外,你可以避免学习各种在现实生活中不适用的理论。

当然,所有的东西都很好学,但在日常的编程中却没有什么应用。

存在的不同的编程范式

你不只是有不同的编程语言。

你也有不同的编程范式。

今天最流行和最知名的是

  • 程序化编程
  • 面向对象的编程
  • 函数式编程

在程序性编程中,代码是以线性方式从头到尾执行的。你告诉计算机要做什么,从开始到结束,然后它就做。

这个名字来自于 "程序"。它的字面意思是做一些事情,使用特定的指令,按顺序执行。

我认为这是更熟悉的一种编程方式,从初学者的角度来考虑它。我们都把代码想象成一个你告诉计算机要做的事情的清单。C语言是程序性编程语言的一个好例子。

面向对象的编程是一个不同的野兽。我们试图用对象来对手头的问题领域进行建模。对象有一个类型,被称为。面向对象的编程,或称OOP,是由Smalltalk和后来的Java使之流行。使用OOP方法编写的程序比计算机必须做的事情的清单更抽象。我们用对象和它们之间的相互作用来思考。例如,你有一个汽车对象,和一个人的对象。这个人驾驶一辆汽车,以此类推。对象可以保持自己的状态,并将其封装起来。这确实是在模仿现实世界。一个人不需要知道一辆汽车在引擎盖下是如何工作的。他们只是简单地驾驶它。汽车抽象化了它所有的复杂性,并提供了一种具体的驾驶方式(刹车、车轮等)。

函数式编程采取的是一种源自数学函数的编程方法。但不要害怕--这并不复杂。实际上,我认为这是处理复杂问题并获得解决方案的最简单的方法。而JavaScript完全有能力进行函数式编程(FP)。在FP中,你把代码组织在小函数中,每个函数返回的结果总是相同的,给定相同的输入。相同的输入=相同的输出。这是一个关键点。函数可以组成,作为参数传递,像递归这样的函数操作使我们能够解决所有的问题,而无需为我们的抽象创造复杂的结构。

这些只是3种最流行的方法论。哪个是最好的呢?这总是取决于手头的问题。而最喜欢的方法也会受到现状的影响,或者说市场更喜欢的东西。例如,面向对象编程或多或少是事实上的标准。今天我看到它被广泛使用,但我也看到有更多的人在谈论函数式编程。

现在,我提到了几种可以与这些方法论相关的编程语言,但许多编程语言可以允许不同的风格。例如,JavaScript允许所有3种风格。

现在还有一个我们必须要做的区别,那就是命令式编程和声明式编程之间的区别。命令式意味着我们告诉计算机要做什么。具体的行动。C语言是一种非常强制性的编程语言。我们将X字节移入内存,我们检索变量Y,等等。 声明式编程意味着我们描述我们想要什么,我们不关心计算机如何做。

如果你熟悉HTML,HTML就是一种声明式语言。JSX,如果你了解它,是一种定义用户界面的声明式方法。

哪一个是最好的?这取决于。一般来说,命令式编程最适合于低级语言,如C或Go,我们用它来创建性能非常好的应用程序。我们离机器的实际细节越远,我们的代码的性能就越差。但同时,写起来也越容易。这是一种妥协。一如既往。

编译与解释

我们把代码写进一个文本文件,这个文件由计算机来处理。

它可以用2种方式处理,这取决于所使用的编程语言。我已经说过,我们可以把编程语言分成2大类:编译解释

如果编程语言是编译的,程序会被一个叫做编译器的程序分析,在执行之前必须进行编译

在这种情况下,我们写入文本文件的程序被转化为可执行文件,不再是基于文本。例如,在Windows上,它将是一个.exe 文件。这就是C、Go、Swift的情况。

对于解释型编程语言,如JavaScript、Python、Ruby或PHP,你不需要这个步骤。有时你会看到这些语言被称为脚本语言,但我觉得这个词对这些语言的力量有点...冒犯。

在这种情况下,有一个程序,叫做解释器,它有能力执行我们自己的程序。我们跳过编译阶段,直接进入执行阶段。

这个区别是相当大的。编译式编程语言能够在执行前拦截并指出错误、漏洞或可能的问题。对于解释型语言,一个错误可能只有在特定情况发生时才会被发现(注意,这也会发生在编译型语言中,但几率较低)。

但解释型语言在编写时感觉更轻巧。这个过程的不同足以让每种方法都有粉丝。

GUI vs CLI

你可以创建(和找到)许多类型的程序。我们一般可以把它们分为2个宏观组。

  1. 具有图形用户界面(GUI)的程序
  2. 具有命令行界面(CLI)的程序。

这两者之间的区别是很大的,在DOS和Windows之间是一样的,如果你熟悉这2种环境。

或者说,你在服务器上运行的Linux和你在桌面电脑上运行的基于Gnome或KDE的Linux之间也是一样。

GUI应用程序有一个界面,你用鼠标与之互动,你可以在屏幕上清楚地看到它,通常在一个窗口内,与其他GUI应用程序一起。许多GUI应用程序在同一时间运行。

CLI应用程序是通过终端访问的,这是一个基于文本的界面,一次只允许你与一个应用程序互动。

一般来说,CLI应用程序对专业用户来说是很好的应用程序,他们知道如何在他们的系统中访问终端(任何类型的计算机上都有),以及如何使用任何CLI应用程序。他们知道如何找到应用程序的帮助,而且一般都是技术高手。

CLI应用程序是最灵活的一种应用程序,因为用户界面不需要充满选项--如果需要,选项由用户输入。它们最适合于一次性的任务。甚至是长期运行的任务,只要你能运行多个终端窗口。

想想看,create-react-app ,Vim,C语言编译器,等等。

一种特殊的CLI应用是后端应用,它们不与系统上的用户对接,而是接受网络上的互动。在这种情况下,CLI被用来启动(和停止)应用程序。或者提供一种方法来指示系统将应用程序作为一个守护进程(一个长期运行的进程)来运行。

另一方面,GUI应用程序需要一种方法,在屏幕上直观地提供所有可用的选项。它们最适合于为基于鼠标的输入提供丰富的交互方式。想想Microsoft Word或Google Earth或Chrome浏览器。

在JavaScript中,你通常会创建两种类型的应用程序。GUI应用程序使用React、Vue或任何其他框架,将在浏览器内运行(实际是GUI应用程序)。

而CLI应用程序使用Node.js,通过网络连接提供服务。