学编程的起点——走进编程的殿堂

前言:

知其然,知其所以然,努力固然重要,但是思维的提升会让你事半功倍,我会用我花费时间换来的“思维”带更多的朋友入门,让你们明明白白学编程,学编程,不迷茫。

转变思维,走进编程

话接上文,在上一篇文章《编程常识知多少https://www.cnblogs.com/zyx110/p/11451084.html中主要对“软件”二字进行了一些解释,其中也穿插解释了一些硬件方面的知识,我想看过的朋友应该有了一定的了解。上文中我提到软件是由人类编写而成,那现在出现个问题是人类是如何编写软件的呢?我就开门见山了,软件是由“编程语言”编写而成,之前说大学会学什么,现在跟你说,编程语言是必学的。编程语言是最重要的,但对新手来说也是最不容易理解的。下面我会对“编程语言”做详细的解释。

编程语言

编程语言,看到这几个字后不要急着看官方定义,首先顾名思义,自己先理解,我来说说我对编程语言的理解吧:一眼扫过去,你看到的是“语言”二字,对语言大家都不陌生,语言是人类最重要的交际工具,是人们进行沟通的主要表达方式,像汉语、英语、法语、俄语等都是世界上的主要语言。既然语言是用来沟通交流的,那“编程语言”也不例外,区别在于像汉语、英语等这些语言是人与人进行交流的语言,而“编程语言”是人与计算机进行交流的语言,只是沟通对象不同。那再说计算机,它其实本质上就是电流加一堆硬件(我觉得可以这样理解),如果没有电流,计算机就像桌子椅子一样,它不是“活”的东西,有了电流,它才能“活”起来。那这电流是怎么让这一堆硬件“活”起来的呢?比如展现出我们现在所看到的丰富多彩的文字、图片,那它是如何做到的呢?其实当时这个涉及计算机的这些先贤们也遇到过这个问题,他们考虑我怎么能让这些硬件动起来,怎么让我的电流给它驱动起来?也是他们进行思考,最后终于思考出来了,电流其实可以表示两种状态,高电压和低电压两种状态,而现在电流有很多条,也就是说有很多的高电压和低电压,那我把这个高电压低电压的这种实际的物理现象用人类所能理解的数字关联起来,叫数字关联,高电压是1,低电压是0,这样有个强制规定的话,就可以跟我们人类的语言有了一定的关联关系,而这两种1,0的状态也能被计算机所识别,计算机本质上其实就是像1010这样的一堆组合干各种事情,那到此为止,我们可以说能用1010这样不同的状态跟计算机进行沟通了,具体怎么沟通听我在这瞎掰也没有任何意义,所以一定要制定规则,比如所1011010这一堆数据表示打开音乐,1111000101这一堆数据表示打开文件,等等吧,这是我瞎说的,主要体会精神,这就代表你把无序的0101状态给规则化了,研发一种语言你必须定义规则,就像研发英语要定义主谓宾语法一样的道理,那现在我们把0101组合成不同的序列定义相应的规则,这样有了这些规则后我告诉你,最古老的计算机语言就出现了,有了规则它就能称之为语言了,这个最古老的语言就叫机器语言

机器语言

其实看了上面我瞎掰扯的这些,你大概明白其实机器语言说白了就是一堆0101的组合,然后把0101的组合规则直接给你通过在芯片烧制的时候,也就是把这些规则直接刻在芯片上了,那电流这么走,十个灯一块亮,就代表要播放声音了,另外几个灯要是一起亮,就代表要打开文件了,这就是机器语言。机器语言作用是直接跟硬件打交道,所以计算机能够很好的理解,因为这就是它的天生语言。但是计算机能很好的理解,但人却不能很好的理解,像0101这样的组合有很多,人理解起来很费劲,要是来个复杂点的动作,五十一百个0101组合在一块,你就头疼了,而且你还有可能写错,一写错就导致整个就完蛋了,你要是想排错,就得数哪个1是不是排错位置了啥的,这就让人头大了。说到这你明白,机器语言的出现虽然能让计算机干事情了,但是人与计算机的这种沟通效率是极低的,你可能在草稿上写一个月终于写出来计算机能理解的五句话,打开一个文件,播放一个音乐,然后关了,你写这些耗时不说还怕写错,所以效率是特别低下的。科技要发展,所以人们就要进步,要想办法让人与计算机之间的沟通效率更高,就把语言提升了,像之间那种0101的组合程序员不需要死记硬背了,把那难记的一堆0101组合变成一个对应的人能理解的英文,比如说,我们运算时需要加减乘除,如果用机器语言描述加号,要表示成1010001111就如说就这些吧,是不是很难记,那现在把这一串机器语言变成人能理解的英文单词ADD,就是把这个0101组合变成了英文,你只要在键盘上敲出了相对应的英文,它就自动给你翻译成0101这样的机器语言,然后让计算机去执行,这个东西就叫做汇编语言。

汇编语言

对人来讲,像用字母表示或者用数字、符号表示这样的一些符号语言简单直接、便于记忆,比0101组合表示的机器语言简单方便了很多,但其实开发效率还是很低,你看下面的图片,就是用汇编语言写的,仅仅是在屏幕上打印输出一句hello world居然要写这么多代码,可见这个效率实在是不怎么高,你比如所现在开发一个APP三天就能上线了,你要是用汇编语言的话,估计你得写半年还不一定写的完(这是我猜的,不要在意真实性,就当是虚构吧),所以人们还要进步,继续为提高效率而努力。不过人类不愧是高级动物,聪明才智,最后研发出一种语言叫高级语言,这种语言更容易让人去理解,能使不熟悉具体计算机的人也能很方便的使用计算机,跟计算机更好的沟通交流,比如说之前说的用机器语言表示加号需要1010001111这样一堆代码,然后有了汇编语言后只需要记住ADD就可以,但现在有了高级语言后,加号就直接用数学中我们常用的“+”去表示就可以了,这个大家肯定都能明白。

高级语言

汇编语言的一个问题在于需要你自己去调用硬件的各种指令,比如你想播放声音,播放声音也是由芯片来控制的,芯片里面已经烧制了各种指令,你要想播放声音,就要调各种相应的指令,汇编语言的问题在于它要亲自去调,自己去写代码去调这种指令,这其实非常复杂,你要想调音卡,就是播放声音,你还要学习音箱的这个硬件的各种操作指令,你要想显示屏幕,你还要看显卡上也就是显示屏幕上的操作芯片的各种指令,还是蛮复杂的,做这样的程序员我觉得很痛苦,可能那个时候的程序员都是秃头(猜的),现在的程序员秃头的应该没以前多了,不过掉头发另说啊,因为他们学了高级语言,这个高级语言的好处就是让程序员对底层硬件的各种指令做了封装,封装的意思就相当于把那些复杂的东西都给你处理掉了,暴露给你的东西都是非常简单的,真正实现了你想播放音乐,你就直接写playMusic("夜空中最亮的星");我偶像张杰的一首好听的音乐就能播放了,这就牛逼了,就算你没学过编程的人,看了这个指令也知道这是在播放音乐,其实你的这行指令在底层可能给你解析出来了好几十条汇编的指令,然后又把汇编的指令转化成0101这种机器指令,但是这些复杂的东西都不需要你来管因为计算机已经帮你封装好了,你只需要调用一下就OK。有了这样的高级语言,人类的开发效率才提高起来,然后才能说我想写一个软件,然后一周就上线了,就能卖钱了(。。。),这些就是编程语言的一个演化过程,从最早的机器语言到汇编语言再到现在的高级语言,那我们现在听到的C、C++、JAVA、Python等主流的这些语言都是高级语言,鉴于字数已经达到了三千字,我决定还是放到下一篇再说吧。

*****************************************************************************************************

我的博客园地址:https://www.cnblogs.com/zyx110/

Java匹马行天下之学编程的起点——走进编程的殿堂的更多相关文章

  1. Java匹马行天下之学编程的起点——高级语言大锅烩

    学编程的起点——高级语言大锅烩 前言: 学知识前总想说点鸡汤,想喝的朋友就看看,不想喝的就直接看干货吧,就当鸡汤是给我自己喝的. 前段时间在网上看了一句话感觉挺触动我的,我做个分享: 如果你觉得你的祖 ...

  2. Java匹马行天下之学编程的起点——编程常识知多少

    学编程的起点——编程常识知多少 前言: 刚去大学那会,我就知道我被录取的学院是软件学院,还知道一点就是软件学院主要是学电脑的,但具体要学什么其实一无所知.待的时间久了,慢慢的,像“编程”.“软件”.“ ...

  3. Java匹马行天下之新手学习目录

    Java匹马行天下之新手学习目录 学习路线 [Java匹马行天下——Java学习路线] [Java匹马行天下——开篇学习计划] 基础篇 [Java匹马行天下之学编程的起点——编程常识知多少] [Jav ...

  4. Java匹马行天下之教你用学汉语式方法学编程语言

    Java匹马行天下之教你用学汉语式方法学编程语言 前言: 前段时间接连更新了带小白从入门到了解的几篇博客: <Java匹马行天下之编程常识知多少> <Java匹马行天下之走进编程的殿 ...

  5. Java匹马行天下之J2EE框架开发——Spring—>Spring框架知多少

    ————也许我注定成不了一个伟大的人,但是至少我可以做一个很棒的自己.我想我现在应该做的不是瞻前顾后,而是活在当下,正确认知自己,做好自己现在的工作,努力提升自己的能力,踏踏实实地做一个程序员 一.思 ...

  6. Java匹马行天下之C国程序员的秃头原因

    Java帝国的崛起 前言: 分享技术之前先请允许我分享一下黄永玉老先生说过的话:“明确的爱,直接的厌恶,真诚的喜欢.站在太阳下的坦荡,大声无愧地称赞自己.” <编程常识知多少> <走 ...

  7. Java匹马行天下之 Java国出了个Java——举国欢庆

    Java帝国的崛起 前言: 看庭前花开花落,宠辱不惊, 望天上云卷云舒,去留无意. 闹心的事儿,选择释怀: 纠缠的人儿,试着放下, 生活其实很美. 心若向阳,就无惧悲伤. 愿你明朗坦荡纵情豁达,有得有 ...

  8. Java匹马行天下——开篇

    个人感言: 匹马行天下是我高中时候看过一部叫<九鼎记>的小说中的其中一个大章节标题,在整个这一章中,讲的是是主人公滕青山历经艰险,又心如磐石,一心修行,最后巅峰归来的故事.现在回想,依旧心 ...

  9. Java匹马行天下之JavaWeb核心技术——JSP

    JSP动态网页技术 一.JavaWeb简介 一.什么是JavaWeb? JavaWeb是用Java技术来解决相关web互联网领域的技术总称. 需要在特定的web服务器上运行,分为web服务器和web客 ...

随机推荐

  1. Core源码(三) Lazy<T>

    Lazy<T>解决什么问题? 1.大对象加载 考虑下面的需求,有个对象很大,创建耗时,并且要在托管堆上分配一大块空间.我们当然希望,用到它的时候再去创建.也就是延迟加载,等到真正需要它的时 ...

  2. Z从壹开始前后端分离【 .NETCore2.1 +Vue 2 +AOP+DI】框架之一 || 前言

    老张 .NetCore与Vue 框架学习目录

  3. java基础第十九篇之Xml

    1:xml的概述 1.1 xml是什么 标记语言:语言中出现了<a></a>的标签 a:HTML 超文本标记语言 (语法非常严格,不能随意的定义标签) b:XML 可扩展的标记 ...

  4. git clone和git pull的区别

    1.需不需要本地文件夹是仓库 git clone是将整个工程复制下来所以,不需要本地是仓库(没有.git文件夹)   git clone git pull需要先初始化本地文件夹文一个仓库   git ...

  5. 协议分析中的TCP/IP网络协议

    - 链路层 第一层包含源mac及目的mac,随着传输路径的变化会发生变化,在mac之后,是下层网络协议的类型,图中,下层为IP协议. 在协议解析中,需要关注的是图中type这个字段的内容. - 网络层 ...

  6. 微信小程序json与xml互相转换

    1.首先在目录结构中引入必要的js文件 https://files.cnblogs.com/files/qianyou304/x2j.rar 2.js中代码如下:(部分)json 2 xml var ...

  7. emmet的用法

    emmet 是一个提高前端开发效率的一个工具.emmet允许在html.xml.和css等文档中输入缩写,然后按tab键自动展开为完整的代码片段. 一.Sublime Text 3 安装插件Emmet ...

  8. Linux—yum使用详解

    yum配置 yum的配置文件在  /etc/yum.conf  参考:https://www.cnblogs.com/yhongji/p/9384780.html yum源配置 yum源文件在 /et ...

  9. 关于如何清除某个特定网站的缓存---基于Chrome浏览器

    1.清除浏览器缓存 直接在浏览器设置里面清除浏览器的缓存会清除所有网站的缓存信息,这在某些时候是非常不方便的,毕竟不只有测试网站,还会有一些我们不想清除的信息也会被清除掉: 2.通过F12功能去清除浏 ...

  10. Linux的启动过程的分析

    Linux的启动过程 Linux系统从启动大哦提供服务的基本过程为:首先机器家电,然后通过MBR或者UEFI装载GRUB,再启动内核,再由内核启动服务,最后开始对外服务 CentOS7要经历四个主要阶 ...