看到标题,不出意外的话,你肯定开始骂我了:**标题党,什么编程语言五分钟就能学会?

其实我本来也是不相信的,但是学过了才知道这是真的。

1、Brainfuck

看到这个小标题,不要误会,我没有骂人。

这就是今天文章的主人公,也就是让你们五分钟能够学会的一门编程语言——Brainfuck。

Brainfuck,简称BF,是一种极小化的编程语言,由Urban Müller在1993年创造。

目标是创建一种简单的、可以用最小的编译器来实现的、符合图灵完全思想的编程语言。

PS:不得不佩服大佬命名方式,或许这就是大佬吧!!!

2、语法

学习编程语言,首先就要学习其语法。

Brainfuck 编程语言 由 8 个命令组成:

语法 含义
> 指针向右移动一格
< 指针向左移动一格
+ 使指针当前格的字节数值加1
- 使指针当前格的字节数值减1
. 把当前格数值按 ASCII 表输出到终端
, 接受一个字节的输入,将其值存储在数据指针的字节中。
[ 当指针当前值为 0 时,程序跳转至与之对应的 ] 之后;否则程序正常执行
] 程序跳转回与之对应的 [ 处

自此,你学完了 Brainfuck 语言的所有语法,我想都用不了五分钟吧。

3、Hello World

老规矩,新语言上手的第一步就是要能输出 Hello World。

问题:这里我们先练习如何在屏幕打印一个字母 ‘A’ ?

3.1 菜鸟版

分析:

因为 ASCII 表中 'A' 对应的值为 65。所以你可能很快就会有第一种编程方案:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.

这里 + 有65个,然后通过 . 将其输出到终端,如下:

看上去解决了这个问题,但是这里的 + 实在太多了,我们编程的时候很容易少写或者多写,那么有没有什么方法能简化呢?

3.2 进阶版

ASCII 表中 'A' 对应的值为 65。为了少打几个 +,我们很自然的想到乘法运算,65 = 13*5.

所以我们可以通过循环来改进上面的方法:

+++++
[
>+++++++++++++
<-
]
>.

这里我解释一下上面的语法:

①、第一行,有5个 +,表示当前格子数加到 5;

②、第二行,一个 [,表示进入一个循环;

③、第三行,表示指针向右移动一格,并且该格子数值为 13;

④、第四行,表示指针向左移动一格,并且该格子数值减 1(初始化值为5);

⑤、第五行,循环的结束语句,判断指针所在格子是否为0,不为0,移动到第3行代码继续执行,为零则退出循环。

⑥、第六行,指针向右移动一格,并且向终端输出该格子的值。

下面通过动图给大家演示一下:

3.3 输出 Hello World!

++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.<<+++++++++++++++.
>.+++.------.--------.>+.>.

4、总结

不知道大家学完这门语言之后有什么感想。

首先我要说的是,这门语言并不是为了设计实际软件而设计的,而是为了挑战计算机编程的界限。

我们知道计算机界最高奖项叫图灵奖,图灵在1936年发表的 "On Computable Numbers, with an Application to the Entscheidungsproblem"(《论可计算数及其判定性问题的应用》)中提出的数学模型——图灵机(Turing Machine),描述了它是什么,并且证明了只要图灵机可以被实现,就可以用来解决任何可计算问题,感兴趣的大家可以去研究研究。

这门语言对于我们去理解图灵思想也是很有帮助的。

比如,一门新的语言,我们要证明其是否是图灵完备的,如果用数学证明的方式必然会比较复杂,但是如果你能用这门新语言实现一个 Brainfuck 的解释器,那么就必然证明其是图灵完备的。

彩蛋

Brainfuck 语言图形化演示:https://openprocessing.org/sketch/516467

标签智能推荐:

语言只是工具说起

“语言只是工具”,你会无数次听到这句话。在最开始学习一门语言时,赞同这句话;在慢慢深入时,特别是遇到困难时(这里的困难更多指的是一门语言语法上的学习的困难,例如最开始学习C的时候的指针就让很多人觉得很难理解。),此时有人说这句话,你或许会觉得很佩服这个人、也有可能心里觉得对方在装X;再后来你自认为学会了一门语言(这里仅指语法、以及语言环境中的常用技巧,你可以使用这门语言做一些简单的事了)。有一天你

不用PyScript,网页端运行Python编辑器

学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。为什么要学习Python?Python语法简单,易于学习Python让你能用少量的代码构

前端学习路线

一个面向对象的语言,它的很多设计理念都有函数编程语言的影子,甚至说如果你不用面向对象,完全可以把它理解成一门函数式编程语言。Javascript的很多语言特性,都是因为他具有函数式语言的特点才存在的。这部分推荐先学习面向对象的基本理论,对封装,继承,多态等概念要理解,维基百科,百度百科会是你的帮手,另外推荐《ObjectOriented&nbsp;Javascript》,应该有中文版。对与函数式编

程序员基本修养

程序员的基本修养&nbsp;#Google评分卡Google的SRE的自我评分卡:0–对于相关的技术领域还不熟悉1–可以读懂这个领域的基础知识2–可以实现一些小的改动,清楚基本的原理,并能够在简单的指导下自己找到更多的细节。3–基本精通这个技术领域,完全不需要别人的帮助4–对这个技术领域非常的熟悉和舒适,可以应对和完成所有的日常工作。对于软件领域–有能力开发中等规模的程序,能够熟练和掌握并使用所有

2021,编程语言如何选择?

话说的好,任何比C语言高级的语言都能用C语言来代替,任何比C语言低级的语言都不足以完整抽象一个计算机系统,这足以证明它的地位。为啥它那么牛逼呢?且不说他的语法灵活,最关键的是他足够底层,底层到所有的操作系统(Windows、Linux)都是用它实现的。所以学习C的过程中能让我们接触到更多底层的概念(比如自己分配和维护内存),有助于我们日后写出性能更高的程序。也是因为这点,C语言很适于操作系统、底层

初学者最常问几个问题

问到的,总结出来分享给读者。1)多久能学会编程?这是一个没有答案的问题。每个人投入的时间、学习效率和基础都不一样。如果你每天都拿出大把的时间来学习,那么两三个月就可以学会C/C++,不到半年时间就可以编写出一些软件。但是有一点可以肯定,几个月从小白成长为大神是绝对不可能的。要想出类拔萃,没有几年功夫是不行的。学习编程不是看几本书就能搞定的,需要你不断的练习,编写代码,积累零散的知识点,代码量跟你的

实验1

&nbsp;实验总结实验总结与体会C++是一门古老而复杂的语言,绝不是一门可以速成的语言,学习它需要有意识的刻意练习和长时间的持续不断的磨练。我始终认为要系统学习一门语言,最好是跟着一本书边学边练习,快速掌握这门语言的语法和基础特性,然后就可以找小项目练手,练一练再回头来看书,往复循环,不断加深理解,慢慢就能掌握。一旦完成了基础语言的学习和一系列练习项目,对语言有了一些感知,就可以参与到复杂度较大

为什么入门首选C语言

,C语言是学习编程的第一门语言,很少有不了解C的程序员。C语言除了能让你了解编程的相关概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是如何交互的,程序在内存中是一种怎样的状态,操作系统和用户程序之间有着怎样的“爱恨情仇”,这些底层知识决定了你的发展高度,也决定了你的职业生涯。如果你希望成为出类拔萃的人才,而不仅仅是码农,这么这些知识就是不可逾越的。也只有学习C语言,才

DDD(领域驱动设计)思想解读及优秀实践-推荐

导学试看1-2DDD的核心思想和解决的痛点问题1-3面向对象和敏捷与DDD的区别与联系1-4DDD的过去、现在与未来第2章战略设计通过案例实践学习DDD战略设计。了解案例项目背景,理解利用DDD思想对软件系统进行建模和设计的整体过程;基于案例项目,学习通用语言、子域和限界上下文的概念和原理,学习一种实用的、具体的分析方法(domainstorytelling),学会基于具体的分析方法建立通用语言、

序-WEB方向指南

一定时间才能出事,然后就可以去学学市面上常用的工具使用了(如果没有代码基础,我还是建议和代码学习并行,python是最好的选择)。基础内容:kali常用工具,从信息收集到内网。进阶:各种技术的网络原理,理解网络传输的本质。学无止境能读到这里的,恭喜你,出师了,再去看其他安全文章也如鱼得水!如果你基础都学完了,至少出去找份像样的工作已经没问题了。如果你连我说的进阶学的都很好,那你已经是业内中等水平了