主帖作为目录帖,可以点击链接快速导航到对应的内容,下面的目录有折叠自行展开就好。
也可以在公众号或者哔喱哔喱搜索稻米鼠
关注我。
目录
后续教程请戳这里 ----> 废话连篇的前端教程(已更新至 0021)
主帖作为目录帖,可以点击链接快速导航到对应的内容,下面的目录有折叠自行展开就好。
也可以在公众号或者哔喱哔喱搜索稻米鼠
关注我。
后续教程请戳这里 ----> 废话连篇的前端教程(已更新至 0021)
编程并不是一个复杂的事情,设置一下电饭煲的预约煮饭也可以算是非常基础的编程,这么想的话,它应该是一件会融入到我们生活方方面面的事情。
但还是会有很多人觉得这件事儿很难很遥远,所以我就想用大家都能够听得懂的方法,去聊一聊编程这件事儿。
首先你肯定看得懂。
但是读完之后并不能够实际的去用它做些什么,因为这次我主要讲理论方面的东西。
那有什么用呢?大概就是你读完这些之后,再去看其他的编程教程,都会觉得它们不再那么难懂。
所以抱着轻松的心态和小老鼠一起聊天吧。
我的要求不高,无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
就是为了能够更好的指挥电脑去工作。
可能马上就有同学要说,电脑上那么多好用直观的软件,会操作他们不就是可以指挥电脑工作了吗?
然后就会有人举出许多的例子,学完编程以后能够做哪些事情,但可能我们看完例子之后还是觉得有些迷糊。
那我就来打个比方吧:有一个快餐店,会制作薯条和牛肉汉堡,非常普通的搭配。你来到店里,拿起菜单点菜,然后服务员们按照你的要求开始制作相应的食物。也算是你指挥他们工作了。毕竟你和他们说:给我来份薯条来个汉堡,他们立刻就遵照你的指示去做这些事情了。
但是你看他们有土豆吧,也有牛肉吧,你想要一份土豆炖牛肉对他们来说应该也没有什么难度吧。但是可以么?
那如果转换一下身份,现在你是快餐店的老板,你觉得这个快餐店应该迎合中国人的习惯,何况后厨既有土豆又有牛肉,菜单里增加一个土豆炖牛肉问题并不大,然后你做出了这样的要求,并将它真正实施起来。这也没什么问题吧?
那么前面一种指挥工作和后面一种指挥工作显然是存在区别的。而我们会不会编程,在使用电脑时也存在着这样的区别。
无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
编程这件事情本质上就是告诉电脑如何去完成你想要让它做的事情。
就像前面的例子那样,你作为一个老板,想让员工去做什么事情,当然,首先你要有这个权利,你的要求要合情合理,并且员工能够做得到。除去这些前提,你还要能够清楚明白的告诉员工该去做什么,怎样去做。
说白了就是沟通嘛。
所以写代码其实就是写一份给电脑看的工作说明书。你应该如何去完成我所期望的工作,那么先做什么,后做什么,什么时候去做什么,什么情况下去做什么……如此这般如此这般。
只不过电脑比较笨,所以需要你非常耐心的把每一步都写清楚。
不过电脑又不是人,不需要跟它寒暄,也不需要顾虑它的心情,直来直去的有事儿说事儿,我觉得要比跟人沟通简单多了。
更何况跟它们讲事情有许多套路的,熟悉之后拼拼凑凑,跟玩乐高差不多。
无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
电脑使用的是机器语言,机器语言就是一串 0 和 1 的组合,听起来和他交流有点像发电报,那显然这种语言比发电报要复杂。
但我们想指挥它,必然要先解决和它沟通的问题。于是有同学立刻就明白过来了,我们得学习它的语言。但这看起来真的很复杂,想想我们学习一下英文都很费劲,那么更加复杂的机器语言……
在打退堂鼓之前,我们想想还有没有其他的可能性。和外国人交流并不一定都要学会外语,如果有一个靠谱的翻译,当然也可以解决问题。
毕竟随着时代的发展,爱偷懒的程序员们总是在想着更加简单的方法。所以你也不要自己吓唬自己,先想当然的把事情认为的很复杂。
无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
我们和机器之间的沟通并不要求有多高的即时性,大概就相当于我把整个任务写完了,然后交给翻译人员翻译成相应的语言,再把翻译好的文档交给与我对接的外国人。
这个过程在计算机里叫做编译,就是把我写的文档(代码)重新编写,翻译成机器能够识别的机器语言。一般的结果就是把文本的代码变成一个可以执行的文件,比如 exe 文件等。
这里需要注意,代码本身是无法被执行的。因为实际的工作人员(机器)看不懂这份操作说明(代码)。所以必须要编译之后才能执行。
无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
如果我们对编译好的程序进行反向操作,专业点叫做逆向工程。就是从一个可执行文件再生成回代码。这个操作叫做反编译。当然大概我们日常是用不上这个的,只是顺便介绍一下名词。
我们写了一份文档(代码),然后把它翻译(编译)成了外文(机器语言),交给实际进行工作的人员(计算机)。
那反编译就是拿到了这份外文的文档,再把它翻译回来。这样得到的结果和我们最初的那份文档类似,但并不一样。这很容易理解,我们日常在使用翻译软件的时候也都这样尝试过。
所以反编译并不能 100% 的获得原始代码。
无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
前面所讲的操作,翻译(编译)和实际执行(运行程序)是分开的。
那如果让这件事情同时进行呢?让工作人员拿着我写的文档,一边查字典去理解,一边进行对应的操作。这样当然也可以实现我们的目的,而且中间省去了翻译的过程,看起来更加简洁。同时很显然的,执行的效率会下降,因为工作人员不只是去执行命令,同时还要不断的去对文档进行翻译。
不过许多事情并不是一成不变的,上面的道理完全没有错,可是计算机的性能是在不断的发展的。
过去计算机的工作效率,大概就相当于一个笨蛋工人。让他一边翻字典,一边进行工作,他手忙脚乱的,效率十分低下。那我们当然会认为这种方法并不是一个好的方法。
但现在计算机的工作效率大概相当于 2000 个非常聪明的工人。那么抽调出一两个人来专门去翻译文档,当然会降低整体的工作效率,但产生的实际影响几乎可以忽略不计。那这种工作方式就并不是不可接受的了。
这种不需要进行编译就可以直接运行的代码就叫做脚本语言。现在已经有好些流行的语言,都是这种脚本语言了。
无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
我们理解了,代码要被翻译成为机器语言,然后再被执行。那么如何保证翻译的精准呢?显然这里对于精准的要求,要比我们日常语言翻译高得多。然后再考虑上过去计算机性能很低的现实。很容易想到的解决方案就是设定一些固定的指令,然后对应确定的翻译。这样需要的计算性能会降低,而准确性就可以大大的提高。
于是我们就明白了编译这件事情,其实他不太聪明的亚子。他只会翻译那么几种表达方式,而且只能翻译特定格式的表达方法。
那么这就是我们写代码时所讲的语法,按照规范去写,无论是格式还是标点都不能出问题,否则编译器就会看不懂。
所以一般来说,学习一种语言,只需要学会规定好的那些指令就可以了,所以工作量必然不会太大,词汇量需求也非常的低。
另一个好消息是现在计算机的性能提升了,所以编译器也开始变得聪明了,对语法的要求不像过去那么严格,就更不容易出错了。换言之,他会翻译的东西还是那么多(我们的学习任务并没有增加),但是对我们的要求就降低了(语法不再那么严格)。
无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
JS 篇已经完结了吗?
存在着许多种计算机语言,这就是我们要学习书写的代码。而这些东西之间本质上的区别并不是代码,因为前面我们已经知道了这些代码只不过是我们自己去书写的说明文档。更重要的是后面对这些说明文档的翻译和计算机对它的执行。
计算机表示在我这里都没啥区别,看着机器语言去干活,只此而已。
所以区别就产生在编译器这里,编译器就是负责进行翻译(编译)的工具。那么类比一下,就是这里有许多个翻译可供我们选择。那么每个翻译必然有他擅长的种类,比如某个翻译更精通工程类的专业,那么相关的文档交给他翻译效果会更好。你说用其他的翻译行不行,未必不可以,但是那些专业的名词你就不能直接使用,而需要详细的解释清楚,否则翻译自己都没明白,他怎么可能给机器讲明白呢。
然后前面我们说了,为了保证翻译的快速和准确,所以在书写的时候要按照特定的语法(套路)去进行书写。而每一个翻译(编译器)所对应的语法有一些差别,这就是不同的计算机语言。
好消息是这些差别总是大同小异的,所以学会其中一种语言之后,其他的语言看一看大概就能够上手。
无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
如果一个教程,我感受不到有人在跟着学习,那我就可能不再继续浪费精力在上面。所以我反复的在说,如果有在跟着学习,就一定要让我感受到你。
人类语言组成的基本单位是一句话,一句话就是一个完整的意思,并不意味着包含多少内容,但它是完整的。
我们写代码的基本单位也是语句,一句一句的去表达我们想要表达的意思,它的重点也是表达完整的意思。
一般我们会用特定的标记来表示一个语句的完结,比如在有些语言里使用分号,也有的语言通过换行来表达语句的分割。
用特定符号的好处是,我们可以把两个语句写在一行里,而并不会混乱。
用换行,就需要注意理解到一个点:并不是所有语句都只占用一行,所以换行并全都意味着一个语句的完结。这句话不是很理解没有关系,你知道有这件事情,在实际使用中会非常容易理解的。
无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
有些事情并不是用一个语句就可以完成的。或者说这是几个动作,然后这些动作连成一个完整的整体。就比如说我们要出门,这是一个事情,但它是由:换衣服、拿手机、拿钥匙、开门、出门、锁门这一系列动作组成的。
我们可能会把这样一系列的动作当做一个整体去看待。那么这样的几个语句就组成了一个代码块,或者叫代码段。在实际书写中可能用一些符号把它们标记起来,比如把他们放在一个大括号之内,表示这是一个整体。当然在不同的语言下会有不同的语法表现,不过理解这个基本的概念,对于理解后面一些稍微复杂一点的语法是非常有帮助的。
无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
我们说代码,其实是指导计算机去工作的说明书,那么作为说明书一定要结构清晰明了,这时候格式就变得非常重要了。
我们想一下,如果列一个提纲应该如何书写呢:
这样就可以变得非常清晰,易读。写代码也是这个样子,用不同的缩进长度来说明当前语句所属的层级。这个缩进用 Tab 按键来输入,它具体代表的长度可以在编辑器中进行设置。需要注意的是同一层级内代码的开头是对齐的。
这样就可以变得非常干净,好读。
无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
通过简单的学习,大家会感受到代码其实写出来是给翻译们(编译器)去看的。虽然大家都知道现在代码基本上是用英文书写,而且前面也了解到它有固定的套路,所以并不复杂。
但终究它的目标不(完全)是适合于我们的阅读,所以我们可以看懂,但可能效率并不够高,或者有些深层的逻辑不能够很好的在代码中直接读出来。还有即便是有了缩进换行等格式的加持,但是整体结构仍然不够清晰。
所以为了便于我们的阅读和理解,会给代码加上一定的注释来说明这里是什么,我们怎么想的。
反正编译器翻译代码的时候,是会忽略掉这些注释的,所以我们可以在里面随便去写什么。当然为了其他人阅读的方便,注释也有一定的格式规范。不过规范这种东西并不是要求严格去遵守的,所以如果你觉得开心,完全可以按照自己的方式去进行。只是到了特定场景下,你会发现这些规范的设定都是有它存在的意义的,然后自然而然的你的习惯会向这些规范靠拢。
无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
如果去掉代码中所有可以去掉的空白,去掉所有的注释,这样并不影响代码的执行效果,但却可以有效的减少文件的体积。这就是代码的压缩。
显然那些需要编译之后生成可执行文件的代码并没有多少压缩的必要。因为反正最终成果是那个可执行文件,而上述那些多余的内容并不会影响到最终生成的可执行文件。
但如果是无需编译的脚本,我们传递给他人的就是这个脚本文件本身了,那么文件体积的大小可能就会产生明显的影响。比如像我这种注释写的比代码还多的家伙,如果不对代码进行压缩,那么文件体积至少要翻倍了。
当然压缩之后代码变得不适合阅读,所以压缩的代码是应用在生产环境中的脚本上的。生产环境就是指脚本实际运行工作的时候,而开发环境是说我们对这个代码进行编写和测试的时候。
无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
a = 1+2
b = 3
c = a+b
现在请问 c 是多少。我觉得无论你怎样认为自己的数学成绩差,这道题应该也都能够得出正确的答案。好的,有这样的知识储备就够用了。
我们常常要储存一些内容,或者说用符号去代表一些内容。这就像我们初中所学习的代数,也就很类似于上面题目中所用到的方法。用字母来代表数嘛。
当然只是一个字母,如果情况变得复杂一点,我们就很难快速的理解这个字母所代表的内容是什么,所以我们扩展一下,粗略的认为是用一个单词去代表一些内容。注意我说的是一些内容,并不单指数字。不过原理还是一样的。
然后如果它的值可以发生变化,它就是变量;值不能够发生变化,就是常量。这还是初中代数里的概念,我们就是复习一下。
放心,虽然我们聊到数学,但不会让你去做题。既然有电脑了,我们肯定不会自己去做计算的。毕竟一般来说你算的没他算的快。
无论你在什么平台看到这些内容,如果你读了并且读懂了,那么就拍拍小老鼠或者点个赞或者留个言,总之让小老鼠感受到你的存在,这样会给他坚持更新的动力。如果你没有读慬,那么就在评论中留言,大家一起探讨。
就这样,就这么简单。
补充说明一下:
缩进分为2种情况,1)编程语言强制要求的,即缩进是语法的一部分,不正确缩进就会导致运行错误的(例如python);2)语法未强制要求,但是为了方便阅读,建议良好的缩进(js)
关于缩进用Tab键,但这不是一定,用偶数个空格表示也是常见的(虽然不少代码编辑器都可以自动把输入的Tab键转换成指定的缩进格式)
补充的很正确。
我知道这些内容之中有许多的疏漏,而且放在不同语言下也会产生许多不同的情况。有一些问题是故意没有讲,有一些是确实忘记了。
不过回到这篇内容的定位,就是在学习编程之前串一下理论知识,避免小白在阅读编程教程时,初期遇到大量未知的概念导致懵逼。所以肯定要选择简洁快速的走主线,丢失细节的问题无法避免,毕竟如果真的写得很详尽,必然会导致大量的读者读不下去。
不过十分欢迎大家进行补充,共同完善,以供朋友们在阅读主线之余,根据自己的情况进行扩展。