软件是用编程软件编的,编程软件又怎么来的?

谢邀,我开始学JAVA的时候也想过这个问题,很遗憾,老师当时并没有解答我。

第一个编程软件怎么来的?

你能有这种想法就很不错,有些人活了一辈子,从来没想过1+1为什么=2

我不太懂,随手摘抄,稍微编辑下,希望对你有帮助,侵权联系我。

首先,软件和硬件在逻辑功能上是可以等价实现的,能够用软件实现的自然可以固化成为硬件。

那么最初的“夏娃”——原始软件,它是固化成硬件,我们一般称之为“固件”,这一固件必须通过“硬布线”,直接在电路板上操作刻录。

有了这最基本的“软件”,当我们将一组指令电平信号输入电路时,根据电平的电压,电路在这一“软件”的控制下进行不同的开通闭合电路,整体形成一个有序的操作,宏观上就表现出我们所见的软件形式。

值得注意的是这个原始软件它不一定就包含第一个编译程序,因为我们可以根据具体计算机的指令,预先将这些指令的电平表示先行刻制在光盘、软盘、硬盘等等,只要计算机的能够读取这些指令,那么在原始软件的控制下我们就能运行上述媒介上的程序。

现在的计算机大部分是在启动时从硬盘读取第一条操作系统指令,当然这之前还有很多工作要做:必要的自检等。

所以,第一个软件准确的来说应该叫“固件”更确切。因为之后的软件要运行在计算机上必须通过这个“固件”,而除去这个固件来说的第一个软件,它们都不是真正意义上的第一个。

很久以前,在电子计算机诞生之前,计算机这个角色是由(女)人来扮演的。大多数计算都是由人类女性手工完成的

在之后是真空管。这些真空管有一个有趣的特性:用三个针脚可以控制真空管两端节点的电流。这使得真空管在处理模拟信号方面是可行的,真空管可以控制机器和传输模拟信号。

人们使用这种理论构建了一些机械式计算机,但是由于机械计算机的速度太慢而且成本高昂,所以没有真正的应用。

在这之后,人们意识到,真空管可以当做门,来执行布尔运算。电子计算机变得可行,而这样就开始了电脑的时代。

现在,电子门的工作方式是由开关驱动。假设你在一个电路中连接一堆门,你当然也可以添加一些门,于是乎你得到一个加法器。每个加法器有一堆开关代表着将要添加的第一个数字,另一对开关代表着要添加第二个数字。打开某些开关,并关闭其他开关以输入两个数字,输出将显示两个数字的总和[1]。

原始CPU就是许多这样的电路的集合。

每个电路需要一些二进制的输入,通过二进制指令代码来选择要激活的电路。在早期,人们通过切换开关来操作。

因此,早期的计算机通过翻转开关进行编程。

请注意,此时计算机已开始编程,但没有出现编程语言。

顺便说一下,在操作那些开关的人都是被称为「computer」的女人。所以,这些女人都是最最最最早的程序员。

由于操作员(程序员)不得不坐在终端前,打开闭合开关,非常不方便,所以后来又发明出了穿孔打卡的方式,能够更简单方便地切换开关。

所以,打孔的卡上面有很多排线,每条线都有可以打的孔。这些线和开关相互匹配。

现在开始,不在天天操作那些乏味的开关了,改为程序员们去打孔了。

每一条线都代表着不同的指令。有个机器,可以连接到计算机读取这些指令。

就这样,我们可以在打孔卡上面写程序啦。这减少了相当多的工作,写一个卡片能使用相当久,也避免了重复造轮子。

这时候,天才格雷斯·霍珀(GraceHopper)姐姐,想出了一个很棒的点子。

她的想法是革命性的飞跃。

她最大的贡献是发明了世界上第一个编译器(Compiler),名字叫做A-0。当时是没有任何组合语言及程序语言存在的,所有的程序设计人员都要把程序翻译成机器码,01101010110这样的形式,在纸上打孔,再送到机器里去读。

Grace产生了一种想法,她想设计一种程序,让人可以用类似英文的语法,把想做的事写下来,然后用这个程序把英文翻译成机器的语法,交给机器去执行。这个想法就是今日的Compiler(编译器)。

A-0的原理是:编译程序把穿孔卡加载到计算机中。然后编写的程序将被送入计算机。计算机会吐出另一组包含机器代码的卡片。第二组卡片将被装入计算机,计算机就可以执行这段新的程序了。

再说个趣事,知道为什么叫做「编译」么?正常来说,应该叫做翻译吧?正常来说,compiling这个词意味着有序的放置收藏,例如编译音乐集。但是编译和二进制代码有什么关系呢?

因为啊,Grace姐姐把它描述为收集子程序的机器代码[2],逻辑上类似于你编译音乐收藏。

编程语言因为编译器而迎来了曙光。虽然只是科技史上的一小步,但是真的是革命性的,改变了人类对于编程的思考方式。它创造了抽象的思维方式。这意味着他们可以在更高的层次上思考。这改变了人们对如何编写程序的想法。

A-0编译器是大量编程语言的开始,大多数现代编程语言都可以追溯到A-0。

这是编程语言的始祖。

软件=(程序)=(算法+自动控制);编程软件是编写记录生成软件的工具。

如果把软件当做一个产品比如刀这个产品,那么编程软件就是生产这把刀锤子和炉具,最开始生产刀的工具很原始,所以第一把刀是石头的,人们用这把刀除了杀野兽,也可以挖土,从而让人们有了第一个炼铁的土炉。从这个土炉人们生产出了第一把青铜铁刀。。。。

软件和编程软件也是一样,最开始人们生产音乐盒,天文观测台都是靠木匠师傅的工具来制作具有简单程序的音乐盒及时钟。。。。随着科技的发展出现了半导体,人们开始用半导体搭建一些简单功能程序的产品,比如打孔机,手摇计算器等,当然那个时代编程软件还不是自动的还是要靠人们手工制作,程序过程记录在纸上,保存这些程序需要大量的纸张和房间。

后来出现了集成电路,集成电路出现了有记忆功能的存储器,这就代替了纸张把程序存在了半导体内,后来出现了硬盘,硬盘就更能存储更多程序数据了。给予硬件的发展,编程工具慢慢就从图纸手绘转入了电脑绘制了,电脑里也就开始出现了简单的编译器。

原始的软件编程是,人们在text里按规则写好程序,然后通过一个asm编译器将文本转译成机器码,这个机器码再通过下载工具下载到存储器里或者卡带里,然后CPU读取卡带开始自动运行程序,人们为了开发更高级的更自动的软件,又开发出功能更多的编程软件,在编程软件里可以写代码,编译等而不需要像最初那样在text里写,并且编程软件有纠错功能,text是没有的.....

所以软件可以促进编程软件的升级,编程软件又可以开发出更高级智能的软件。编程软件和软件互相促进从而达到了今天的水平。后面所谓的AI就是让拥有高度智能软件的机器人拥有自我编程能力,一旦机器人拥有自我编程能力那么机器人将能脱离人类自我发展。

用一句话回答就是:软件是用编程软件编的,那么编程软件同样是用编程软件编的。

编程软件有很多功能,包括编辑、编译、调试、解释、测试等等。为简单起见,我们这里只讨论编译功能。不严格地说,编译可以理解为是将人类能看懂的程序代码翻译成机器能看懂能执行的机器语言。如果是Windows上写C程序,那编译器的作用就是将C程序翻译成exe后缀的二进制文件(也可能是dll,这里不去深究)。

那么编译器本身也是exe,也是机器语言,它又是谁编译出来的呢?不失一般性,我们假设有一个编写C语言的编程软件,或者就直接叫编译器,它的名字是cl。有一个很好玩的事实,编译器可以自己编译自己。说的具体点,cl3.0版本可以用cl2.0版本编译生成出来,cl2.0用cl1.0编译出来。当然前提是假设这个cl2.0以上都是用C语言写的源程序。所以说有了第一个cl版本,1.0版本,后面的都不是事。

现在问题来了,第一个cl.exe怎么来的呢?有很多可能。说不定当时市面上已经有了另一款C语言编译器,而第一个cl如果是用C语言开发的,它当然就可以用那款C编译器编译出来。

而如果假设cl本身就是世界上第一个C语言编译器,怎么破?那么它肯定不可能也是用C语言写的,因为第一个嘛,还没有谁能编译C语言程序。第一个C语言编译器可以用汇编,或者B语言,或者其他的某种已经有编译器的语言编译出来。至少用汇编是绝对没有问题的。

接着思考,第一个汇编程序怎么来的?那就没有办法了,靠手写了,人工写机器语言。而在那个时候,程序是非常短小的,用人工写也不会是太复杂。汇编程序就是把汇编语言翻译成机器语言的程序。比方说一句汇编指令,叫做movax,bx,翻译成机器语言就是1000100111011000。简单吧。基本上接近一一对应,至于如何对应,就要查CPU厂商的硬件手册。比如因特尔386,比如酷睿i7。只要手工写出一段用二进制形式的机器语言,能实现将汇编语言翻译成等价的机器语言,就搞定了。当然这不是一两天能搞定的,但是一旦写好,后面的事就简单了。有了第一个汇编程序,就能汇编出第一个C语言编译器,有了第一个C语言编译器,就能编译出第二个第三个其他的C语言编译器。有了C语言编译器,还可以编译出其他语言,比如JAVA、C#的编译器。

假如你经历过纸带时代,z80等计算机原理必用的单板机,就应该搞得明白编程软件怎么来的。

简单地说是从拨开关开始一步一步发展来的。

首先,计算机硬件只认机器码,就是一个体系的计算机只认它硬编好的机器码——指令,例如定义:01011001=寄存器相加,后面跟两个表示寄存器的数就行……;一堆不同的指令组成指令集,例如x86,arm什么的。硬件厂商为了写程序的方便,把这样机器码用人好理解的简写词来表示它,叫助记符,例如上面这个可以用add表示,例如:addr5,r6对应的机器码可能是:010110010001010100010110,你都记住指令集了,原理上通过几个开关就可以把指令输入给计算机,但……人总是很懒的,不停开关总是很麻烦很枯燥很容易出错,而且计算机运行再慢也比你按开关快,开始时硬件还巨贵,所以人们想到输指令和录入分离,便宜简单的方法就是纸带机,“编程序”的可以通过打孔机在纸带上打洞洞表示一串串指令及数据,打好后通过纸带机读入到计算机执行,计算结果再通过打孔机打到纸带上,程序猿判读结果……。

初期的计算机基本就是这样工作的,会编这些机器码的自然就是“编码”了,就是现在说的程序员。

渐渐地,人们在实际工作中不断开发出各种外围设备,例如键盘,显示器,磁带机,磁盘机,打印机等。工具的进步又带动编码方式的进步,编的码越来越复杂,这样就不能让人一个机器码一个机器码地往里敲,计算机做重复的事情毕竟快嘛,固定的东西不犯错,所以就有人用纸带机什么的编出一些可以把助记符序列转成机器码的程序,可以理解成汇编语言编译程序,有了这个东西就可以用汇编写程序,再由编译程序翻译成机器码,编程语言就从简单到复杂不断迭代发展,例如盖茨在最早时就是用纸带机写出个人机的basic解释器的。

现在不少人总认为汇编语言是由机器语言写的,所谓“中级”语言是由汇编写的,“高级”语言又是由“中级”语言写的……其实这是乌有的事,用任何一种语言都可以写出其它语言的翻译器,没错,任何语言都行,只要你够牛,用解释型basic写一个c编译器没任何问题,同样,你脑子有够用的话用机器码也可以写一个。

现在的巨无霸级“开发系统”,没十G八G都不好意思出门,无他,这都是几十年积累来的。

晶体管,开关——>机器码(二进制指令,用打孔控制开关)——>汇编语言(已经有了汇编编译器,将其转换成二进制机器码)——>中级语言(C语言等,经编译器编译成可执行代码)——>高级语言(高级语言编译器或解释器出现,直接将需要翻译成可执行的二进制代码)大概就这样。各种编译器配合运行库都是由更原始的语言或代码来开发的程序,后期升级之后,可能把编译器,翻译器改由更高级的语言重新编写过,并实现更多功能。于是有了各种版本的编程软件。甚至很多编程软件可以同时使用多种语言来编写软件。比如操作系统需要同时使用汇编语言和C语言。

再看看现在的编译器是怎么做的。例如Java编译器,最早是JamesGosling用C写的一个Oak编译器,后来ArthurvanHoff用Oak自身重写了一个Oak的编译器”。用C写的版本编译用Oak写的版本就得到了一个可以运行的用Oak写的版本的编译器,这样就完成了自举(bootstrap)。这句话不好理解,请仔细体会。现在在buildOpenJDK的时候需要事先有一个可以运行的JDK,就是因为javac是用Java写的,至少要用已有的JDK去把新的javac编译了之后才可以用新的javac去编译JDK的其余部分。

所以回答题主的问题,编程软件也是一种软件,他是由另一种或另一个版本的编程软件编译出来的。

有朋友问我软件和硬件之间的底层是如何联系起来的。这个问题我想用简单的单片机来回答,因为可以省略很多东东,嘿嘿。首先,CPU运行的是机器码,加入单片机上电复位之后,指针会指向特定的地址,就是程序开始运行的地址,在这个地址内,CPU会获取这里放的机器码,假如这个机器码是10101010B,CPU解析这个是跳转,他会控制指针顺序下移,再继续获取下2个地址的数据,如果发现是00100000B,00010000B,那么它会控制指针继续跳转到2010H这个地址,读取这个地址的机器码,继续运行。代码中的运算、跳转、条件判断,对CPU来说只是获取到不同的机器码之后进行不同的处理而已。当然就算是单片机这个过程还是有很多特殊的,例如中断产生的处理,CPU睡眠的处理,控制IO读取IO等。在单片机内的机器码一般是需要程序员灌进去或者演模生产时批量灌进去,机器码是汇编代码或者C语言通过编译程序产生的。如果是以单片机来说,硬件的底层在设计之后就按固定的规则去执行,软件是在硬件执行过程中引导硬件执行过程。如果是电脑的软件和硬件之间,大道理是相同的,但是电脑启动之后,由boot程序引导下去运行操作系统,程序员的程序是在操作系统基础上运行的。

这时候,有个哥们发现了二极管,卧槽,好使,用高端的机械计算机原理用二极管造了个电子计算机,但是怎么控制运算,就是没纸带卡了咋办....这时候01出现了(主要是二极管只能是开或者关,就俩方向。说01也好,说57也好,找俩代表)用基础的01做纸带卡,给它个复杂的公式,算得更高端一些。

其实就是在控制二极管,信号输入后哪些二极管开,哪些二极管关,电流到最后给了个结果。但是公式越来越多....不好办呐,全是卡,这换卡我得累死。于是CPU出来了,写死的,也可理解为硬件电路就只能这样,然后配合硬件电路有一个指令集,每个CPU指令集肯定不一样,和硬件二极管开关有直接关系。也就是你见过的dir什么的,当电路碰到比如说look这个词其实碰到了代表look的一堆010100101010,但是电流通过硬件读出的010010100101001这些得到的结果就是look,当然多数你没见过,因为软件都在指令集上层,一般也看不到。

你说的编程软件,就是写一些字母以及背后的01010010100让二极管电子计算机去计算得到一个结果,基本都能直接调用到指令集,也就是公式,固定了。你就在这么一个框架内用它给你的不多的公式来编纂出你想要的结果的公式。

偶这么讲不知道你听懂没听懂...

作为一个程序员,我来回答一下。软件由编程软件来写的,那么编程软件呢?编程软件也是由软件写的。只是,第一个软件是怎么出来的的?这样给你解释,为什么有软件?其实是计算机构造出来的,计算机通过电信号高低,也就是010101这样的电信号,然后有了最初的软件,简单点说就是:程序是建立在硬件的基础上产生的,现在的编程软件,其实也是告诉计算机01010101001这样的信号,然后计算机硬件将它们拼装成文字,图片,程序等,所以总结一下,编程软件通过硬件的支持,创造了我们使用的程序和其他的编程软件。

THE END
1.编程的多种方式组成编程方式分为,编程方式的多样性,编程方式分类编程,作为现代科技的核心,已经渗透到我们生活的方方面面,无论是手机应用、网页游戏,还是大型的软件开发、人工智能算法,都离不开编程的支撑,编程方式多种多样,各有其特点和适用场景,本文将详细介绍编程的几种主要方式组成。 编程的基本方式 1、命令式编程 http://www.skypure.com.cn/post/32601.html
2.怎么学编程·古德微机器人教案v2d有调试程序,定位问题的能力是编程的核心能力框架么? 这肯定是编程的核心能力, 很多学了编程的朋友,在实际遇到问题时,最常见的是出问题了怎么办,这个设备有问题。 应该是需要从实际出发,先判断程序是否已经开始运行,程序运行到中间有没有问题,程序能不能顺利结束, 我们需要的功能有没有被执行了,执行后具体什么表现http://gdwrobot.cn/courses/outline/howtoleartprogram.html
3.怎么样学习编程(精选12篇)怎么样学习电脑编程 首先,我们可以先学习一下pascal,这个语言比较严谨,适合初学者。当然了,学习什么语言也要看你具体准备从事什么行业。例如你要进行嵌入式开发,C就是很好的选择,如果是Windows开发,那么VC就不错。还有数据库方面的开发、网络开发等等。不同的语言适合不同的方面。要看自己的选择的。 https://www.360wenmi.com/f/filefq2v1fwe.html
4.eclipse怎么编程java教程eclipse怎么编程 使用eclipse进行编程的步骤:安装eclipse ide创建一个新项目编写代码编译和运行代码调试代码使用eclipse的功能(如自动完成功能、代码语法高亮、代码重构) Eclipse中进行编程 Eclipse是一个流行的集成开发环境(IDE),它支持各种编程语言,如Java、C/C++和Python。要使用Eclipse进行编程,需要按照以下步骤操作:https://m.php.cn/faq/824617.html
5.新手怎么开始学编程?开启你的代码之旅编程是一项需要长期坚持的技能,不要害怕犯错,从错误中学习才是进步的关键。 5. 寻找志同道合的伙伴: 学习编程是一段孤独的旅程,但你并不孤单。寻找志同道合的伙伴,一起学习,互相鼓励,共同进步。 6. 保持好奇心和学习精神: 编程世界瞬息万变,新的技术和工具不断涌现。保持好奇心,不断学习新知识,才能在编程领域https://m.w3cschool.cn/article/49261537.html
6.新手怎么学代码编程首先,需要明确自己学习代码编程的目的和想要掌握的技能。然后选择一种适合自己的编程语言,例如Python、Java、C++等。可以参考相关书籍或网上资料,了解每种编程语言的特点和应用场景,然后根据自己的兴趣和实际需要选择合适的编程语言。 新手怎么学代码编程 学习代码编程需要掌握基础知识,例如变量、数据类型、条件语句、循环语https://www.hxsd.com/content/31626/
7.怎么给小孩解释编程近两年,少儿编程教育如雨后春笋般冒了出来,从Scratch、乐高机器人,到来历可疑的各种编程课程,林林总总。那想让孩子学习编程应该怎么给小孩解释编程呢?快来看看吧。 1.怎样吸引孩子 用问题和画画吸引孩子 一边说一边画——顺便说下,这是个让小孩子保持积极性的好法子。 https://www.qinxue365.com/fangfa/612393.html
8.电脑编程自学(零基础自学编程怎么入门)叶涛基础阶段的语法学习。学习任何一门编程语言,都需要掌握其编程的语法规则,可以通过阅读一些编程书籍,了解一些编程中的概念思想和基本语法,这对于后续的编程学习十分重要。零基础自学编程怎么入门。 学习编程最重要就是需要多上机练习,所以电脑上需要安装所学语言对应的编译软件,多看书,多敲代码,实践出真知。 https://download.csdn.net/blog/column/9280951/130356831
9.童程童美少儿编程怎么收费详情一览童程童美作为一家专业的少儿编程培训机构,其课程收费标准一直是家长们关注的焦点。那么,2024年这里的收费情况究竟如何呢?机构针对不同年龄段和兴趣点的孩子,设计了多元化的编程课程,收费标准大致在10000元至50000元之间,具体费用因课程类型、校区位置及优惠活动等因素而异。以下是各类课程的详细收费概览: http://it61.tantuw.com/m/news/1635.html
10.新手自学编程新手小白怎么自学编程?五、怎么自学编程,自学英语? 不一定。学编程的人最根本的还是要数学底子好,所有的算法都是靠严密的思维逻辑才能够行得通的。 编程语言要写大量源代码,其实只要是认得26个字母的人都可以编程。但是毕竟程序这个东西是西方那里过来的,我们现在编程的代码都是英文字母。 https://tool.a5.cn/article/show/77098.html
11.怎么让孩子对编程感兴趣很多家长为了让孩子有个美好的未来,给他们积极地报名了少儿编程机构课程!但学习编程除了要甄选好的教育机构外,提高孩子对编程的兴趣也尤其重要,一起来看看怎么让孩子对编程感兴趣吧。 孩子们的兴趣是非常容易转移的,特别是对年龄更小的孩子来说,要想一件事物始终能吊起他们的胃口很难,他们的注意力往往难以长时间https://www.youkee.com/wenda/5141.html
12.编程语言怎么学51CTO博客已为您找到关于编程语言怎么学的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及编程语言怎么学问答内容。更多编程语言怎么学相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。https://blog.51cto.com/topic/bianchengyuyanzenmexue.html
13.30k的大佬告诉你怎么入门编程行业?软件工程书籍:在这一部分我将推荐一些书籍,我认为这些书籍对提高我对编程的整体理解很有帮助,并能对工作产生积极的影响。 查看完整书目:https://amzn.to/2SdZtxI 求职建议:最后奉上一些作为一名开发人员如何找工作和如何不断发展的小技巧。 每位开发者都需要学习的内容 https://www.imooc.com/article/319203
14.代码怎么编写(代码编程教学入门)代码怎么编写(代码编程教学入门) 一、什么是好代码 抛开性能、并发、一致性等技术因素,好的业务代码应当如一篇显浅易懂的业务叙实文章,满足以下几个基本条件: 词要达意:最基础的变量、函数、类的命名,是否名达其意。 结构清晰:类的关系结构,函数的调用结构,是否如文章的章节、段落划分层次分明和逻辑清晰。https://www.lanniaoh.com/61168.html