一、中文编程真的存在吗?
要回答这个问题,首先就要阐述中国有自己的编程语言吗?其实这个问题极难回答,如果我说真话,就要揭露很多真相。
会引来无数人的谩骂和嘲讽。如果我说假话吧,那我谈中文编程还有什么意义?既然要谈这个问题,就不要怕被骂。
可能我在讲述客观事实的时候,会让你的虚荣心受损。但我不是有意打击国人信心,而是让更多人看清中文编程的现状和意义。
实际上我国最早的中文编程语言,可以追溯到上个世纪60年代初期,它是由中科院计算机所设计的BCY语言,
同时这也是我国最早的实用高级程序语言。BCY语言长什么样呢?
初看会感觉跟现代的编程语言差别很大。上来就像是单片机才会使用的二进制开关位。
因为它就是是应用于电子管计算机上的。(现代计算机最小的数据单位就是字节,一字节8位。
也只有单片机或者更早的数字芯片,才会需要对某一个二进制位进行开关量操作。)
但是仔细看,这种代码依然有VB和VC的语法特征。
若 M>0 或者 M<10 则
放到VB里就是:
If M>0 Or M<10 Then
放到易语言里就是:
如果 M>0 或者 M<10 则
(好像大于小于得用中文,我这输入法实在打不出来)
放到其它语言里就是:
if(M>0 || M<10)
再看后面的代码:
对于 I=1 到 80 步长 1
执行…
终否则;
…
终;
放到VB里就是:
For I=1 To 80 Step 1
…
Else
…
End IF
显然这个代码几乎就是BASIC语言的直接翻译。
For翻译成“对于”
To翻译成“到”
Step翻译成“步长”
Else翻译成“否则”
End翻译成“终”
虽然BCY语言在进入微机时代后被迅速淘汰,但不得不说,中国的第一代计算机科学家,
就已经意识到了中文在编程语言中的价值,“中文培基”就是朱邦复于80年代初期发明的入门编程语言,
它的语法和BASIC语言基本相同,进行了简单汉化。
现在已经找不到“中文培基”编程的具体资料了,单从图片上的信息,感觉比BCY语言更难懂(^o^)。
中文编程如果上网去查,一定能查到很多。
如:“周蟒”和“中蟒”,就是汉化了Python语言;“易乐谷”是汉化了的LOGO语言;“丙正正”是汉化了的C++
O语言基于汇编语言开发;中文培基基于BASIC语言开发;习语言基于C语言开发;中文小海龟基于Logo语言开发;
以上的中文编程大家可能有些陌生,国人使用最多的中文编程,肯定非“易语言”莫属了。
易语言一直被称为“国产自主研发语言”,拥有自主研发了汉语内核,汉语可被直接编译为机器码;
这句话出自百度百科的原文,事实真的如此吗?
众所周知,易语言使用了C++的链接器,用户还可以下载替换不同版本的“链接器”。
那么什么是链接器呢?要讲明白它的含义,相对于我的表达能力来说,确实有些困难。
那我就直说吧,(可能使用易语言的人都不爱听。)使用链接器,最终目的就是把你的代码,生成CPU能读懂的机器语言程序。
(当然现在很多编程使用解释器了,非机器语言。易语言也要把中文“转换”成英文,才能交给“链接器”)
正常编程时,链接器也只有少数“编程高手”会使用到,所谓的“高级编程”都不会让你接触到这个层面。
经常有人说记事本就是万能的编程软件,它可以写任何语言的代码,如果你对该语言的编程构造足够了解。
就可以把记事本写的代码,交给链接器去“编译”。{实际上最终交给链接器的代码,跟你写的代码是有差别的)
那么大家认可记事本是“万能的编程软件”这个说法吗?既然记事本都不算,那么其他所谓的“中文编程”,
调用别的编程语言的链接器,“生成程序”的软件,能算真正的国产编程吗?好,我这是强词夺理,歪曲事实。
那你觉得什么是“编程”?如果编程可以理解为编译程序,是不是该理解为把用户代码,“生成”CPU能执行的机器语言。
可是现在大多数所谓的编程语言,都不是自己生成的程序,而是交给“第三方”完成。(这个第三方不在国内)
当然大多数编程者都会说,不管用什么生成的,反正我能达到目的,能写出有用的东西不就行了。管它是自己生成的还是别人替你生成的。行业内有一句著名的话“何必要重复造轮子”,别人的造的轮子又圆又便宜,为什么要自己造?
我先声明,我并不反对你用国外的东西,人家确实好用且免费。而且真正意义上的国产编程有吗?我们有的选吗?
确实没有。抑或是有,但是不够完善。我要讨论的并不是对待是否国产的问题,我是要说中文编程的意义在哪里。
二、中文编程的意义
我这里所说的中文编程,不是指汉化或者使用其它语言的链接器之类的编程语言。也不是说只要能把中文生成机器语言就算中文编程。我也研究过所谓的中文汇编,那其实还是对英文汇编的汉化。我也不是想说,搞编程就一定不能使用或借鉴国外现有的编程体系。而是说中文编程相对于中国的国情,其意义是什么。
据说目前全球有几千种编程语言,而一个程序员能熟练掌握的编程语言通常不过一两种,因此目前真正流行的编程语言也就十来种而已。剩下的有一小部分在圈子里使用,用于解决特定场景下的问题,绝大多数的语言都没机会长大就会中途夭折。也就是说,在现代中国软件行业整体衰弱的大环境下,这几个中文编程语言,死掉是常态,活下来才是偶然。
而在今日,唯一活下来的中文编程语言,正在程序员社区语言鄙视链的底端艰难生存,垃圾、骗子、病毒、从入门到入狱是它的代名词,显然我说的就是“易语言”。我并没有鄙视易语言的意思,易语言的开发者吴涛,既不是科班出身,也没有名校或留学经历,在中文编程极度冷落的情况下,他也没有停下脚步,继续在做火山编程,号称是“语言之上的语言”,我在这里除了钦佩之外,也不作任何评价。
而我想说的是,中国经过几代人的努力奋斗,在计算机领域,无论是硬件还是软件,都没一样真正自主研发自己创造的东西。(我此时是站在讲台上说这话,估计早就被鸡蛋和石头砸死了。)那我为什么要说这么欠打的话呢?吃饱了撑的吗?
虽然我说的话极其难听,但是这是事实。这一现状也深深刺痛了很多中国人的内心。
华为的鸿蒙系统和仓颉编程是真正的自主研发吗?凭良心说“不是”!
我可真不是要黑华为,华为随便一个技术员都比我强百倍,我有什么资格黑人家。
当年鸿蒙系统在作宣传的时候,我就一直在等他的编程软件,第一时间下载研究。
无论是安装过程,还是最后打开“编程器”,没看到一个汉字。现在一年多过去了,
仍然没有对外开放,“汉化”一个软件真就那么难吗?
其实编程软件根本不是汉化那么简单,假如你拿到国外一个编程软件,你自己都对它的编程语法没有通透的了解,你好意思说这个编程是你写的吗?简单汉化一下发布出来就是你的了?里面要做的事情远比你想像的要复杂很多。真正要“拿得出手”,华为人一定会慎之又慎的。
那我凭什么敢说鸿蒙系统也不是自主研发的。请注意我这里不是要给华为“判刑”,也不是要争论什么是自主权,我只是想阐明编程和操作系统的意义。想跟我吵架的,为华为鸣不平的“专家”请靠边站。还有我的立场是支持华为的,我买手机一定是华为等国产品牌,绝不买国外的。
首先说编程软件,本身就是为系统服务的。不恰当的说,一个编程语言的语法,十几种就够了。为什么会是几百种都不止呢?如果编程软件不在系统下运行,它的语法也根本没多少,无非就是判断语句、跳转语句、赋值数据等,(循环语句是判断加跳转)
但是一个操作系统有多复杂,就不用我多说了吧。并没有一个操作系统,有底层核心使用说明书的。操作系统的无数功能接口,没有“说明书”又如何充分利用呢?这就要靠编程软件来实现了,编程软件就是把操作系统那些极其复杂的功能接口,“做”成很多类似于函数库、API扩展、对象库等等形式的东西。(不同系统开放的这些东西定义不同,我只是笼统的表达个大概意思)
总之编程软件就是提供了很多很多五花八门的“功能模块”,编程人员只用学习如何应用就行了。
完成编译为机器语言最为核心的是“链接器”或称“编译器”吧,(不是所有编程软件都叫这个,也不是全部都有这个东西)。
系统最底层的“功能模块”肯定是用最底层的“编程软件”完成的,“链接器”也是由软件“编译”成的。自主开发编程软件,要对系统底层知识有足够的了解。因为你从网上查到的资料,都是用什么语言如何写,问题是不用别的语言,你怎么写程序?
说这么多,意思还是说要实现不用现有的编程语言,去“自创”一种编程语言,实在是太难了。我们能见到的程序,不都是由别的“程序”编译出来的吗?那最初、最原始那个“编程”软件是怎么出来的?这跟问地球上第一个生物是怎么来的差不多,说来话太长。
总之一句话,操作系统一定是先有一个不依赖于其它任何语言的“编程器”,写出最底层的那些文件。然后逐步发展出更高级的编程软件,才会让让编程变得更简单,也可以说是更容易的对操作系统进行合理运用。
所以说编程软件都是基于操作系统的,我们用现有的编程软件,只能开发操作系统已经具备的功能,或者说编程软件本身已经定义好的功能。
开发的软件也只能在对应的操作系统下使用。如果没有不依赖于其它任何语言的“原始编程器”,怎么可能开发出属于自己的操作系统?
我们目前设计芯片的软件全是国外的,指令标准也是由国外授权的。有人说为什么我们不自己设定标准,不自己制定编程方案,然后做自己的芯片?
还是一言难尽啊!就算你弄个全新的指令集,现有的所有编程都无法应用到它,没有一种软件能使用它,有用吗?同样道理,为什么我们不自己做操作系统?
如果不能跟现在的系统体系兼容,或者说进行“交集”,你的底层通讯、IO控制,甚至是图像视频文字等数据都无法交换。那还有用吗?
那么我最终要表达意思,就是说我们无论是要开发自己的操作系统也好,做自己的编程也罢,并不是说一定要抛开国外的所有东西。我们可以借鉴和接纳现有的编程体系。但是想做属于自己的东西,单纯学习别人是远远不够的。就像编程软件使用别人的“链接器”,并不算真正意义上的编程。虽然形式上全是中文,但是最终还是把中文代码,替换成英文的,然后让别的编程器去“生成”程序,别人的编程器是不可能拿来开发操作系统的。
总结来说,如果我们只是为了写软件,那永远用国外的或者汉化的编程软件,是完全可以的。国外的已经足够好了,为什么还要“自创”呢?因为就算全体中国人都不需要国产,但是也会有人坚持去做属于自己的东西,尽管他做出来的东西远没有国外的好。你这辈子不去用就行了,也没必要进行讽刺、挖苦、嘲笑、讥讽、谩骂、羞辱、以及人身攻击了。你喜不喜欢国产是你的自由,但别人想做真正国产的东西,也是他的权利和自由,你管不着吧!
三、中文编程该如何崛起
至今唯一幸存的中文编程“易语言”,他的兴衰史相信很多人已有了解。在2004年之后,易语言就再没有重大更新,各种问题也没有去解决。
易语言虽然提供了全面的中文支持,但毕竟它不是真正自主完成编程的,而且它的界面又和Visual Basic高度类似。在那个时代,以模仿起家在中国本属常事,但此后易语言却没有走上逐步创新发展的道路,没有找到最贴近中文习惯的编程表达方式,一直背着抄袭、骗子、绑架的骂名。
还有大量易语言用户使用它开发游戏外挂、电脑病毒、黑客软件,使得易语言负面新闻不断,语言本身的特点又导致它极易被杀毒软件误杀,使得许多爱好者不得不改换门庭。
在易语言之后,中国又出现了其它一些个人主导的中文编程语言,但都寂寂无名。现如今,各种通用软件、游戏、电影纷纷推出官方中文版,但在各种专业领域,英语却有大一统的趋势。
比如2017年,国内航空管制开始强制使用英语交流,而在学术上,发表英语论文似乎已经是许多专业的科研人员成为学术大牛的唯一选择。
如此说来,中文编程真的就没有发展前景了吗?当然不是,中文编程之所以发展不起来,是因为并没有国人真正去做过“核心编程”,很少有人认识到从底层开发的重要性。
我可不是在否定前辈们的成就,他们的技术远在我之上,我没有资格去否定他们。在DOS时代的FREEDOS、天汇汉字、WPS等,我都一直崇敬的放在电脑硬盘中,保存至今。
还有windows时代,相当崇拜开发Foxmail的张小龙(后来为腾讯开发了微信)、windows优化大师的开发者鲁锦(现在被360收购,改名为鲁大师)等等,我就不再列举了。
那么怎样才能从底层开发编程软件呢?正如我前面说过的,编程软件也是由其它编程软件开发的,其它编程软件是由更底层的编程软件开发的。更底层的编程软件是为开发操作系统做“铺垫”的,操作系统本身的那些程序是由更更底层的编程软件开发的,系统本身就是用最最底层的编程软件开发的。那最最底层、最最原始的软件又是怎么来的?(这个问题先留给你自己思考)
首先操作系统本身就是为英文而生的。上世纪末,我们急需要发展计算机产业,面对最大的难题就是中文信息化。比如,如何用键盘输入中文;如何让计算机处理中文;如何在操作系统界面显示中文;如何通过软件编辑中文文档等。当时外国专家曾断言:“只有拼音文字才能救中国,因为汉字无法进入电脑。”国内某知名刊物也称,“方块汉字在电子计算机上遇到的困难,好像一个行将就木的衰老病人。历史将证明,电子计算机是方块汉字的掘墓人,也是汉语拼音文字的助产士。”
但是事实上这些预言并没有应验。1983年,王永民发明了五笔输入法,真正解决了汉字的键盘输入问题;同年,严援朝研发了第一款汉字磁盘操作系统CCDOS,有了中文操作系统;1985年,倪光南发明的联想汉卡开始销售,奠定了这家国际品牌之名;1988年,求伯君研发了中国大陆第一套文字处理软件WPS,至今仍被广泛使用。
然而所有编程软件都是基于操作系统而开发的,如果没有系统这个框架,编程软件也就不会应用的这么广泛。而操作系统的底层知识,是从来不对外开放的,Linux说是完全开源,但是开源的那一部分只能说是冰山一角,在“水下”的那部分你永远也看不到全貌。所以说限制中文编程和自主研发中文操作系统,最大的阻碍还是“技术封锁”。我们最多只能查到现有编程软件的代码怎么写,很难查到不用现有的编程该怎么做。
也就是说只有抛开现有的编程体系,才能做自己的编程。可是属于我们的第一个“编程软件”用什么来写?难道用键盘距阵或者用开关在单片机上手动开发吗?虽然这些是外国人走过的老路,我也曾经用数字电路开发过可编程的“烟花爆竹燃放控制器”。(我强调一下,没有使用单片机,纯逻辑电路实现的。)
有些懂行的朋友肯定会有疑问(不懂的请略过此段)。不用单片机纯逻辑电路也能做编程?怎么编?最初我也确实用了大量数码管,编码开关和按钮。第二代电路只用两个按钮,一个用来选择哪一路。另一个用来控制计数,数码管循环显示脉冲计数。到需要设定的数值时停下。脉冲计数就会锁存。另一个开关选择到“启动”灯亮起,就会开始计数。扫描每一路锁存数据,符合计数条件就自动触发继电器,燃放相应组烟花。
其实我说这些并不是要你能听懂,也不是卖弄我的知识“渊博”。而是说学编程时,不要把编程看得太简单了,也不要把编程看得过于复杂了。即便不用CPU的标准逻辑门,也能实现“编程”。再比方说编程里的定时器和延时函数。用两、三个元件组成的振荡电路和阻容延时电路也能够实现。我也在做单片机上使用的微型系统,像基本的短信和通话功能、音视频播放功能,无线网,文本编辑器这些都是有的。但是离真正的能广泛应用,差的实在是太远。这只能算是我个人“兴趣”罢了。
真正能实用的,还是要在现有操作系统的框架下,不借助别人的编程组件,完全自主的实现软件编程。当然这非常难,因为你根本找不到相关资料,网上确实有使用VC等如何做出自己的编程语言,那不还是使用VC吗?既然原创编程这么难,那能不能先借鸡生蛋?
我开始也这么做了,先做一个网站服务器,然后解析脚本语言。能像ASP、PHP那样的服务器也会有用啊。于是我的初代产品,就是WWS网站服务器,支持三种语言脚本:VBScript,Jscript,Javascript。具体过程不展开说了,最终功能就是可以开发网站之外,还能开发网络游戏,架设H5服务器等。把游戏开发需要的核心功能都写成相应的对象,网站代码不但可以处理各种二进制数据,还能和游戏的内存数据(对象)交互。算是网站服务器、游戏服务器、聊天服务器、H5应用服务器的集成产品。
但是这能算是真正的编程吗?虽然说它可以媲美ASP、PHP、JSP等网站服务器,甚至有很多它们不具备的游戏开发“引擎”,但是这仍然是用现有的编程体系,并不是真正意义上直接生成CPU指令。
那么该如何实现自己的编程?我是这么做的,用VB和VC去写一句代码,用二进制工具看它们生成的程序文件是什么样的。然后不断改代码,不停的分析二进制数据。说实话,当时我连汇编都不懂,硬去看这些数据,真跟看天书一样。但是我先不管这些,我也生成一样的二进制数据,测试能不能运行。只有不断的尝试,才能慢慢的理解这是为什么。持续研究了三年多,才基本掌握了汇编和操作系统核心的相关知识,并对内存管理有了更深的了解。
如今我开发的SEC中文编程,已经可以编写中小型网络游戏等初级的应用了。虽然是中文编程,但是也能兼容VC等语法,因为你在网上能找到的编程代码,最多的还是C系列语言(形式上大同小异),而中文的代码几乎是找不到的。那么你从网上复制的代码,不用怎么改,就能在SEC编程里直接使用。
我这并不是在模仿C语言,而是先学会兼容别人。只是兼容而已,并不代表我需要别的编程语言才能编程。因为在现有操作系统下使用,你肯定要使用系统的太多东西。如果你是开发单片机应用,那肯定不需要使用系统的功能了。我现在主要使用的是32位X86系列指令,但是也可以兼容8位和64位CPU的。
有人肯定会说我在胡说八道,8位那是单片机,64位CPU指令也不一样,怎么可能兼容?我觉得也没必要争论这个,我也不敢保证是100%兼容。只是我用SEC开发过的大量程序,是可以完美兼容的。ARM系列还在研究当中,指令上虽然有很多是一样的,但是目前并没有同一个操作系统可以同时在X86和ARM的不同CPU上运行的。所以它们能不能兼容也不敢妄下结论。
四、中国软件产业和程序员的现状
能看到此处的朋友,已经是给我莫大的荣耀了。刚才我的一通乱侃,涉及到太多领域的知识。本来还想说说模拟集成电路到数字集成电路以及逻辑门电路的,但是考虑到能理解的朋友不多,我的表达能力也实在堪忧。还是说说国内软件业的一些情况吧。这个话题实在是太大,这是“国家统计局”该干的事情,我怎么能信口开河呢。所以我不谈大的,只是从个人亲身经历,映射一下国内编程行业的一些情况。
我是临床医学专业,从医很多年。02年学习组装电脑,04年开始对医疗软件感兴趣,并开始学习编程。也和很多人一样,买书自学VB和VC++。那张包含Visual Studio C++、Visual Basic、Visual Foxpro等众多编程软件的光盘,也被我安装无数次,直到彻底读不出来。最终结果也和很多人一样,学了多少,忘了多少。没有做出一个程序来,多年之后居然都忘记我曾经学过编程了。
从我这么多年跟外界的交往的经历来说,接触到的程序员大多数是学VB和易语言的。C++的也都懂一些,但都没敢说精通。C++被评为世界上最难学的语言,也是有某方面的原因吧。最难懂的语言不应该是汇编吗?一方面是因为学汇编的人极少。另一方面是因为学汇编的人往往不是用来编程,而是用来破解别人的软件。他们只要具备零星的汇编知识,能够实现破解就足够了。
关于破解、黑客、反汇编这些词都算是敏感话题,越是不懂的人,越是感兴趣。这并不是一个“难”字就能概括的。我在没有任何资料的前提下,去反向研究如何“编程”,其实就是标准的“反汇编”,问题是我当时几乎什么都不懂。有些人不懂就去问,就去查,就去看书,但是我要“研究”的并没有现成的资料啊。
我相信很多人对我“开发”中文编程软件的经历是持怀疑态度的。我这么多年潜心研究,有时候走着路,甚至开家长会的时候,都在考虑如何定义中文编程的语法词汇。肯定会跟别人说过,我在开发自己的编程语言。此话一说出口,无一例外的,都会引来别人的嘲笑和谩骂。反正没人相信,我也是习惯了。当然被羞辱最为严重的,还是在精易火山交流群。
我完全能预料到他们会如何攻击谩骂和羞辱我。这跟网上那些键盘侠骂人是一样的。当你的谈及的事物超出了他们的知识储备范畴,他们就会认为你在胡说八道,颠倒黑白,搬弄是非,造谣生事。但是如果情况反过来,你表达的内容,是他们能够理解的,他们仍然会认可你,附和你。那么当你认清了使用易语言用户群体的编程水平之后,不免会陷入深深的思考:“易语言”对于中国的软件发展,究竟是利还是弊呢?
易语言在很大程序上降低了编程的难度,让很多人轻松的学会了编程。显然对于中国人学习编程来说,肯定是利益更多一些。但是弊端也是要提一下的。首先易语言不同于其它任何编程,代码编辑器都采用“表格加箭头指向”的特殊形式。那么就造成它跟任何语言都不“相通”,甚至连“复制”代码都很困难,更别提复制的代码能不能在其它编程语言里使用了。
还有就是易语言让很多人轻易的学会编程,他们就更容易自满。而且想当然的认为这就是编程的本质,这就是经典。只要你谈及的编程知识跟他们了解的不一样。他们就会骂你,说你狗屁不通,还不懂装懂。
说真的,爱因斯坦也有错的时候。比如说他跟玻尔为代表的哥本哈根学派的多次“较量”中,也都是爱因斯坦“错”了。当然科学的道路上没有绝对的对与错,也没有绝对的真理。我还曾经用四条充足的“理由”,来证明相对论是错的。现在看来只是个笑话,当时我也是在不够了解相对论的情况下,提出的一些质疑罢了。
那么我想说的是,易语言虽然很大程度上推动了中文编程的发展。但由于它本身过于封闭,又基于VC链接器编程的,自然摆脱不了C语言的所有框架束缚。毕竟是建立在别人框架之上的,编程的代码就更加抽象化,离编程的本质也就越来越远,编程用户极难了解到更深层次的东西。
我也并不是说,学编程就一定要了解编程的本质,这毕竟太难了。但是能学会更深层次的知识,显然对于编程的帮助是很大的。当你知其然又懂所以然的时候,自然可以有更多层面的应用。了解本质也并不是要你懂每一个电子元件是如何工作的,你只用在有能力的情况下,稍微思考一下为什么代码要这么写,这么写的好处和意义在哪里。能弄明白更好,弄不明白也多试几次,是不是不这样就一定会出错。当然这是在你有充足时间和精力的情况下。
关于易语言对于国人的影响到底有多大,我也无需再多说什么。仁者见仁,智者见智吧。没有人拿易语言跟其他编程语言相提并论,也没有人把易语言编程者和其他程序员进行类比。我并不是说易语言编程者的能力比别人差,而是看到他们的思维过于“僵化”,可能这就是“中文编程”带来的负面影响吧。同等情况下,初学其它语言的程序员思维也很局限,但是他们仍然保留着虚心学习的态度。也许就是因为英文编程学的时候一直都难,总感觉自己很多都没学会。而易语言由于停滞不前,加上本身的局限性,极容易让人产生“学到尽头”的感觉,也就难免的骄傲自大。
易语言发展到现在的状况,的确不是偶然。“语言之上的语言”,的确没有瞎说。为什么是凌驾于别的语言之上的?老外的编程体系是很庞大,我们用中文的代码,最后替换“关键字”变成英文,你还不是“乖乖的”给我生成程序了?……那么我也想反问一下,你把别人踩在脚下,还美其名曰“站在巨人的肩膀之上”,你就没有想过巨人会一直愿意被你踩吗?
无论我们在芯片产业上受到多么严重的制裁,国内的程序员永远不会相信软件会有被制裁的那一天。他们可以信誓旦旦的保证,别的软件可能收费。编程软件绝不可能收费。这就是使用破解版易语言的用户,普遍这么说的。没错啊,任何收费的软件,都会有人破解的。没有人思考“软件保护法”的意义何在,也没有人会去想为什么老外会如此对我们,反正都是别人的错。
总体来说,中文编程想要普及,几乎是“难比登天”。至少我看到的这部分初学编程的人,他们几乎都学过易语言。就算你跟他们关系很好,想让他们学习新的语言,那是绝对不可能的事。有位接触过易语言的朋友,道出了真相:因为他们的水平已经被限制到了初学阶段,离开了易语言,他们什么也不会。
我的一位铁哥们也曾经劝我,不要尝试让那些学过编程的人,去接受你的编程语言,你去跟他们交流,也就降低了你的层次,变得跟他们一样了吗?你应该尝试让那些没学过编程的人,能学会你的编程。
我当然也明白这个道理,但是没学过编程的人,又想学编程的人,我一个也不认识啊。我哪来机会跟他们交流。再者说,受易语言熏陶变得思维僵化的这一部分人,也需要有人改变他们的思维啊。由此我就想到,在鲁迅时代那种“俯首甘为孺子牛”的精神。编程也是一种“文化”,文化的发展离不开教育的进步。
近代以来教育最大的改革,当然是汉字的简化了,当然也包含有汉字的拼音化斗争。结果总体来说还是好的,中国也并没有放弃汉字和汉语。有很多人认为,印度之所以软件业远超中国,是因为他们使用的是英语,使用英语为母语,才更容易学会编程。那么事实真的如此吗?
五、英文真的适合编程吗
编程语言之所以称为语言,就是因为它跟我们说话的语言一样,能够形成庞大的“文化体系”。计算机软件已经在各种行业起到重要的作用,而操作系统更是把繁如星海的应用程序,组成了我们不可或缺的生态体系。
我们中华的文化博大精深,轻易不会被西方的文化淹没。虽然我们也学习他国语言,甚至用外语进行沟通交流、写日记、写小说和学术论文,但是我们绝不可能用外语来创造或者改变我们的文化。
然而电脑和手机却在不断的刷新我们的认知,改变我们的习惯,影响我们的生活。我们在这一领域备受制裁的同时,却对目前的现状无可奈何,计算机编程仍然是限制我们发展的重要因素之一,所以说开发中文编程并形成中国的编程文化,意义依然十分重要。我自己也是时刻关注着国内CPU产业,看到有国产芯片能兼容x86和ARM指令架构,支持指令多达两千多条。可是真正在编程时,常用的CPU指令,连二十条都不会超过。那我们国家为什么要生产这么多指令的CPU呢?是因为国人不懂编程?
当然不是国人不懂编程,我国也不乏编程界的大神。但是很多会编程的朋友,会认为中文不适合编程,存在输入困难等问题。但是实际情况并不是这样,因为程序员在学习编程的时候,并没有适合的中文语言可供选择。一旦学会了英文编程,就会受到英文编程的逻辑思维限制,而不会去质疑英文编程是否合理。因为一旦写错一个字,就可能导致严重错误,所以不会去思考我这样写代码到底好不好。
我前前后后研究和开发编程语言也将近十年,深知开发编程语言,并不是简单的模仿和汉化,能实现程序的基本功能就行,而是要做到更易懂的同时,也要更效率稳定、更加人性化。
编程代码也不是越通俗越好,程序代码最终都是要编译成CPU能读懂的语言,也就是机器语言。
对于计算机来说,显然是代码越精炼,执行效率就越高,程序也就更不容易出错。
与机器语言最接近的,也就是汇编语言了,它是由英文字母组成的“助词符”,而并非英文单词。
因此并不能认为你熟悉英文,就能看懂汇编,那怕是英美的程序员,也是只有少数人懂汇编的。
那么“高级语言”,就是由更易懂的英文单词来编写吗?也不是。由于英文想要精确表达一个意思,需要很长的词汇。书写起来也是非常的不方便,所以高级语言为了书写方便,仍然使用更简短的英文字符组合。比如编程语言里
最常用的循环语句:for、do、while等,直面意思分别是:为、做、虽然。感觉都跟循环没有关系,你也许会说是我翻译的太片面,没有表达出它们的原意。那么我想请教英文好的国人,如果你没学过编程,能一眼看出来这些个单词就是循环的意思吗?那么编程这样书写,是为了计算机更好编译吗?然而并不是!
编程里使用最多的就是判断语句、循环语句,它们的原理都是由条件跳转构成。那么我就举例说明一下,英文编程有多么的反人类和反电脑。在机器语言里的跳转分为条件跳转和无条件跳转。虽然也有几个循环指令,但是这些指令都是自循环,并不适合对用户编写的代码进行循环。所以高级语言的循环,大多是用跳转实现。
for循环通常是这样写的,for(i=0;i<10;i++){…用户代码}意思也就是对大括号里的用户代码循环10次,
首先让i这个变量等于0,(汇编就是mov 0到i的内存地址)这是循环前要做的,第二句i<10是根据第三句i++
这是让i每次增加1,然后第二句的条件是i增加只能小于10。编译成机器语言就是,如果i大于等于10,就跳转到
用户代码之后。我们姑且的认为,意思就是先询问一个“执行官”,我要跳到这一段代码之后吗?他说不用跳,
我就开始执行这一段用户代码,执行完怎么办,把i增加1啊,然后再跳回之前的地方,再把i增加之后,问我要跳过这段代码吗?当你执行这段代码10次,i每次增加1。这时i等于10了,他就判断i大于等于10,就直接跳走,不再循环。
不管是会不会编程的朋友,上面的话不要去深究其中的意思,不用试图去理解看明白。总之是for循环小括号里有三句代码,在编译为机器语言时候,要把这三句“拆开”,分别放在循环之前,“循环代码”开始和“循环代码”结束。
那么你再试试看SEC中文编程语言的代码,也看不懂没关系,是不是感觉简单了?
示例1:
循环(10){信息框(0,"朋友们大家好","中文编程真简便",信息图标);}
示例2:
行号=1;
循环{信息框(0,成员表(行号).名字,成员表(行号).职位,信息图标);行号++;}(行号=成员表.行数 或者 成员表(行号).名字=0)
小括号里就是要循环的条件,大括号里是要循环的代码。条件可以放在循环之前,就是提前声明要循环10次,循环内并不需要使用这个次数。条件也可以放到循环之后,也可以是单个或多个条件,示例2条件的意思是一直循环到行号等于表的行数为止,或者读取的名字为空截止。编译成机器语言,就是设置循环“{”处为A点,执行完用户代码,判断不符合设置的条件就跳回去继续循环,直到符合条件就结束循环。所以这样编译出来的机器语言,只用一个标记点,一个执行跳转,这样的编程语句不仅写法简单,编译起来也更容易。
如果懂编程的朋友,可能会发现示例2的代码有个明显的错误。成员表里的名字应该是文字吧,在编程里文本怎么可能和数字进行比较(名字=0)?
我可以这么回答,不仅文本可以跟数字比较,文本也能直接进行数学运算,SEC编程能“预测”到你是要把多个文本拼接,还是对文本进行加减乘除运算。
估计学习易语言的朋友一下就懵了。没听错吧,文本还能进行数学运算?如果用户写的代码,不是让文本运算,让二进制十六进制数据进行运算,那不就崩溃了吗?那我这么说吧,程序运行时候,在内存里全都是二进制(或称十六进制)数据,并没有整数、字节、文本、小数等等类型的区分。
之所以学过编程的会有如此疑问,是因为易语言就是“转换”之后的C语言。在C语言里,不止是数据类型有严格的规定,语法代码限制极其死板。当你调用函数库之类的操作时,所用的“对象”类型也是有严格的规定,我这里说的“对象”是对所有东东的统称,包括句柄、实例等等成千上万种东西。就我说的两个翻译过来的名词:“句柄”和“实例”就有点难理解了吧。何况还有数千种更难表达的英文术语,而且写代码时候你还不能弄错。这也许就是C++被称为最难懂的编程语言的原因之一吧。而汉语编程大多都是在“套用”或“汉化”国外现有的编程语言。这么多生搬硬套的专业术语,都要翻译成相应的汉语词汇,翻译过来也是超级难懂的汉字。
而我开发的编程语言,不依赖任何其它的语言,自然不受任何框架限制。所以才会有前面所说的数据类型之间,无需特殊的“转换”,就可以自由使用。
这里说的转换也是其它编程必要的操作。在一堆二进制数据里,截取特定位置和长度的二进制数据,用转换函数或者“复制数据”到变量地址进行转换。
后面这种转换是VB里常用的操作,那么既然是把那里的数据,复制到这里,就完全了“转换”,其意义何在?估计学编程的也不会去思考这个问题。
所以编程语言不再规定这么多意义不大的死板定义时,写代码就变得特别简单容易,管它什么对象不对象,一切皆可整数。二进制数据也不用去特定位置截取特定长度,然后再去转换,直接去这里“拿”数据,就可以进行运算。你如果是跟整数运算,我就按整数,你跟小数运算,就按小数。说到“对象”,这也是计算机专业术语,就因为这个我还被易语言用户骂的体无完肤。“你懂不懂什么是对象”、“对象岂能跟什么什么混为一谈”、“不懂不要装懂,滚回去搞你的垃圾编程去吧,这里不需要你来胡说八道”
由此我们不难看出,所谓的中文编程采用生硬的翻译之后,让很多汉语词汇失去了原本的意思。就算你绞尽脑汁更换“适合”的汉语,依然摆脱不了毁中文的结局。所以这也是中文编程始终没有发展起来的原因。一直都是在拿国外现有的编程语言,“改成”自己的语言,只会让中文更难懂,把很多汉语赋予极不和谐的意义。
这也是易语言给中文带来的负面影响,让这些“用户”无法正常和中国人使用汉语进行交流了。还好我没学习易语言,而我也会英文编程,怎么思维没被固化呢?
首先我之前学过编程不假,但是我是学了多少,忘了多少。现在我又想起一件事。在我没有电脑的时候,买过学习机啊,也正是用它学会了五笔打字。
当时那张“学习卡”上居然有个QBASIC编程,这我怎么可能懂。凑巧的是我有一本93年的电子报合订本,上面就有一个QBASIC的编程代码,是叫什么EEG脑电生物反馈仪器的一部分。电子报上的所有电子仪器我全都自制过,唯独这个还带编程的,一直没研究。于是我就拿这段代码在学习机上练习,还真给编写成了。运行之后,出来一个“滑动条”和一个“滑块”……
扯得太远了,我们回到正题。我后来真正懂编程,并不是“学”会的。当年在论坛发帖子时候,还不能上传图片,但是可以把网络上的图片地址,加到帖子里发出来。为了找图片地址,就需要查看网页源代码,后来网页代码看的多了。我就尝试修改本地网页,慢慢的我就摸索懂了ASP代码。这个过程就是想学没学会,没想学反倒会了。
但是因为没学过基础,都是改了之后刷新测试看结果。当时看到比较多的就是a=a+1,这是VB里最常用的递增了,等同于C语言的a++。
会编程的一定觉得这多常见啊,可是我当时就不明白,为什么a能等于a加1?按照数学公式,这一定是错的。但是编程的逻辑就是如此,从没有一个程序员觉得这不合理。
刚才只是说了,我虽然懂编程,但不是专业程序员,完全不会受英文编程框架的影响。下面我再举个例子,说说英文怎么就不适合编程了。
比如编程代码里最常用的数据类型int,实际上是Integer的缩写,也就是整数的意思。而int的直译却是智力。
我们在C语言的代码里,看到大量的int,程序员一眼就知道这是整数类型,而普通人却会看到很多“智力”
那么我们再来说说Integer这个整数类型,在VB里的范围是-32768到32767,而在C语言里却是-21亿到21亿。
编程语言不应该是精准表达吗?为什么会这样混乱?其实吧整数这个词,在汉语体系里,也没规定数值范围。
汉语的计数单位有:个十百千万十万百万千万亿,以及兆、京、垓、杼、穰、沟、涧、无量。确实也找不到
42亿这样的计量单位用词,但是汉语很喜欢造量词,比如一打等于十二个,一提是6罐啤酒,一扎是三升。
哈哈,怎么跟啤酒杠上了。我是想说,英文在编程的时候,也仍然需要造词,可是英文想表达的词组都太长了,需要简化。而且英文单词之间要有空格。可在编程时候的任何名称都不允许用空格,空格是把名称分割开来的重要标志。而中文就可以用很简短的几个字,精准的表达意思,且不需要空格。
六、为什么说中文更适合编程。
我再来举个实例。在写网络编程的时候,最为常见的参数 FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE
这是几个参数组合使用的情况,竖线其实是“或”运算,在这里等同于相加。它们相加之后就是一个数,直接用数字肯定更好啊。
那英文之所以这样写,也许是为了便于老外理解吧。那么把这些换用中文表达,就会更加简洁。
常量 读写断开=[FD_READ | FD_WRITE | FD_CLOSE];
常量 读写连断=[FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE];
常量 监听断开=[FD_ACCEPT | FD_CLOSE];
这段代码是什么意思呢?这一堆英文都是常数,也叫常量。编程时候经常会使用大量的数字,可是太多不好记呀,老外们就给这些数字起了相应名字起名太多又不能重名,前面就加什么什么下划杠。那么我用中文起名,读写断开就可以表示“FD_READ | FD_WRITE | FD_CLOSE”
读写连断就可以代表“FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE”。有人问我这是翻译吗,有你这么翻译的吗?
当然不是,我是借此来说明,当我们需要用一个名称来代表某一个或某一组合数字时,用中文不仅简炼,而且意思清楚,又不容易重复。
那你有没有想到,计算机编程的时候,其实很多时候是数字,为了好记,外国人才用英文符号代替。你这么想就对了,不是很多时候是数字,而是全是数字。
变量是数字,常量是数字,字符串(文本)也是多个数字的组合。对象、子类、小程序、函数等等所有老外定义的东西,全是数字。
数字是你“看不见”的,比如我现在打的字“0123456789”是文字,它们对应的数字是48到57。那0怎么不是对应数字0,却是48?
因为数字0是空字符,1是正文开始,2是标题开始,3是正文结束,4是传输结束,5是请求,6是收到通知,7是响铃,8是退格,9是水平制表符(Tab)
这什么乱七八糟的?先别着急,我继续再说几个你也许就懂了:10是换行,11是垂直制表符,12是换页符,13是回车键
回车键总算明白了吧,这些定义是早期机械打字机时代就已经定好了,到32开始才是空格和其它英文标点符号,空格键也知道吧。
一直排列到127是DEL删除键,至此所有英文字母和标点符号全部包含了。至于汉字和其他国家的字,就是后来的事情了。总之每个字都对应一个数字。
数字不就是数学上的吗?阿拉伯数字又不是英文,全球通用啊。计算机既然是“处理数字”的,凭什么就不适合用中文?那么这就涉及到计算机的历史了。
学过计算机的朋友一定知道二进制和逻辑门的关系。在数学界有一位大神叫莱布尼茨,他是读了易经之后,才发明了二进制。后来被计算机直接采用。
这个二进制比较容易理解,计算机就是由0和1组成的。而CPU的运算是由最原始的门电路发展而来。基础的门电路有三种,与门、或门、非门。它们可以相互组合就能得到更多更复杂的逻辑门。像刚才说的竖线是或运算,用或门就可以实现。
而加减乘除等运算就需要多个门组合使用才能实现,具体怎么实现就不讨论了。就连这些个术语,我理解起来也觉得困难,可能是翻译的不够好吧。
还有门电路有一个重要的环节,就是要组合成三态门,才能实现复杂的运算。也就是高电位、低电位和高阻态,分别对应1、0和无效。
1和0是参与运算的,高阻态不参与运算。准确来说,计算机不是0和1组成,还包括无效。(我不敢称之为空,空是编程里的术语)
见过河图洛书的朋友,一定更容易明白。为什么计算机会采用二进制,河图洛书就是用黑点和白点组成的。然而你又会发现,只有0和1又不能进行“运算”,需要三态才可以,还有CPU是由三个基本的逻辑门组成,是因为“三生万物”啊。八卦符号不就是有三爻吗,三组阴和阳,组合出来是八卦。八位二进制就是一字节。
一说到易经八卦,很多中国人的印象都是“晦涩难懂”,可是老外怎么“懂”了,还利用它发明了计算机。可能我说的有些牵强了,而我真正想表达的意思是:
有时候看上去很复杂的东西,其实原理都很简单,“大道至简”呀。当你现在看到操作系统如此庞大,编程如此复杂的时候,会感觉这些也太难学了吧。
可是再复杂的操作系统也是由最初很基础很简单的编程软件开发出来的啊,又回到了之前的那个问题,世界上第一个“软件”是怎么诞生的?
如果你知道了计算机的原理,这个问题自然不难回答。第一个“软件”肯定是用硬件开发出来的,更复杂的软件也都是由简单的软件给编译出来的。如果你能把问题简单化,那么你就具备了编程的思维,而软件并不一定要用“代码”才能创造出来,而是由你的智慧创造出来的。但是程序员则认为程序就是用代码写出来的呀,如果你这么想的话,那你学编程就学不到精髓,学到的只是技术,而不是一种技能。
技术和技能的区别,一般程序员是不会明白的。那么我开发编程的意义是让你学会这门技能,而不是让你学会编程的技术。技术就相当于你学会易语言之后,离开它你就什么也不会了。
而你又学会了一门别的语言,但是这门语言被新的语言淘汰之后,你又没法编程了。而技能就是你学会了之后,即使没有编程软件,你也照样能编程。当然这个例子说的太极端了些,不用编程软件难道用硬件编程吗,那学编程还有什么意义?其实你可以换一种理解方式,技能和技术的区别就好比生存技能和生活技巧的区别。技能在任何条件下都能适用,技术就不一定。
好,不扯别的了,这一章节是讨论中文的优势的。我又想起来贴吧里一位网友的帖子,他说中文打字不方便,可以首拼取代,像循环可以用XH,整数可以用ZS等。其实这种办法并不实用,因为首拼太容易重复了,我用中文写代码,也经常遇到这个汉语名称已经用过了,或者就是嫌汉字输入慢,那就用首拼代替。结果造成多次起名冲突的情况。
还有一点我要明确一下,拼音也是英文字母。它最早的起源就是古代来中国学习的外国人(利玛窦),为了快速掌握汉语,就用西文发音来注解汉字。而中国的汉语拼音其实长这样:
声母:ㄅ玻 ㄆ坡 ㄇ摸 ㄈ佛 ㄉ得 ㄊ特 ㄋ讷 ㄌ勒 ㄍ歌 ㄎ科 ㄏ喝 ㄐ基 ㄑ欺 ㄒ希 ㄓ知 ㄔ蚩 ㄕ诗 ㄖ日 ㄗ资 ㄘ雌 ㄙ思
韵母:ㄚ啊 ㄛ喔 ㄜ鹅 ㄝ耶 ㄞ哀 ㄟ(ei)诶 ㄠ熬 ㄡ欧 ㄢ安 ㄣ恩 ㄤ昴 ㄥ(eng)嗯 ㄦ耳 ㄧ衣 ㄨ乌 ㄩ迂
有人说这汉语拼音的符号太难记了吧,所以现在都不再学汉语拼音,而改学英文字母。那么你可以问家里上年经的老人,他们反而是认识汉语拼音,英文字母很多不会读不会写。你之所以觉得英文更好记,是因为你从幼儿园,到小学、初中、高中、大学都一直在学习英语。还有为什么这些汉语拼音的符号,可以在电脑上打出来,是因为台湾和日本一直在用。以后看到这些字,就算不认识,也别说这是日语了。
还有习惯用拼音打字的朋友,不要想当然的认为,英文拼音是中国的。有拼音的书籍,除了幼儿园的教材,还有哪些报刊文章新闻媒体使用过?英文字母的拼音,其实是给国外人看的。他们看到汉字不会读,但是一看到拼音就能读出来,而且人家还不用学“拼音”。其实中国古代也有拼音,只是没有注音符号。上面那些注音符号是1918年才开始使用,如果仔细对比拉丁拼音和西文字母:
啊 α A 是不是这三个字前音很像啊。再看 玻 β B 发音也很像。得 δ D 又很像。如果拼音是中国原生的,怎么会跟希腊、罗马、拉丁语这么接近?
然后你不妨再看看赵元任先生写的两篇文章,如果全用拉丁拼音,你还能看懂意思吗?
《施氏食狮史》石室诗士施氏,嗜狮,誓食十狮。施氏时时适市视狮。十时,适十狮适市。是时,适施氏适市。施氏视是十狮,恃矢势,使是十狮逝世。氏拾是十狮尸,适石室。石室湿,氏使侍拭石室。石室拭,施氏始试食是十狮尸。食时,始识是十狮尸,实十石狮尸。试释是事。
《季姬击鸡记》季姬寂,集鸡,鸡即棘鸡。棘鸡饥叽,季姬及箕稷济鸡。鸡既济,跻姬笈,季姬忌,急咭鸡,鸡急,继圾几,季姬急,即籍箕击鸡,箕疾击几伎,伎即齑,鸡叽集几基,季姬急极屐击鸡,鸡既殛,季姬激,即记《季姬击鸡记》。
唧唧鸡,鸡唧唧。几鸡挤挤集矶脊。机极疾,鸡饥极,鸡冀己技击及鲫。机既济蓟畿,鸡计疾机激几鲫。机疾极,鲫极悸,急急挤集矶级际。继即鲫迹极寂寂,继即几鸡既饥,即唧唧。
上面的文章都是用文言文写的,也确实有人用文言文写过代码,也在网上火了一段时间,那也只是看着爽爽而已。现代社会还用文言文的话,交流起来就十分困难,更何况是编程了。但是汉字的优点是什么?
汉字是形、音、意俱全的文字,它既是文字,又是图画,又包含很多故事。中国人只要看到汉字,就能明白其中意思。虽然很多汉字简化之后,失去字义了,好在台湾和某岛国还有保留啊。
而如今很多人连五笔都不会打,还能记得汉字怎么写吗?最近还特别流行用首拼来代替汉字,比如“YYDS”之类的,还是词组的首拼。而有很多短视频的字幕都喜欢用英文字母代替单个汉字,还说那不是英文字母是拼音。有区别吗?看着不觉得费劲吗?那既然汉字里偶尔夹杂几个拉丁拼音都这么难读。那编程代码里全用英文,其难以理解的程度就可想而知了。
而我开发中文编程时,当然也想全部使用汉字,不用一个英文字母。但是这样太过封闭了,英文编程体系这么庞大,系统本身就都是英文的(我们看到的只是汉化了界面上的一些文字)。是不可能不用英文的。毕竟编程软件不是用来写小说诗词的,就算全用汉字也不一定能看懂。就比如我看到易语言的那些表格和箭头关系,也是一脸问号。跟我是相同情况的人也不在少数。如果你是真心支持中文编程发展的话,那么首先你得明白你为什么要学习编程,学习编程的意义是什么?
七、学习编程的意义
如果我问你为什么要学编程,你说学编程可以赚钱呀,等你学会了编程,就有人花钱找你写软件。那我还是奉劝你一句,干什么都能赚钱,为什么非要学编程?你还是干点别的吧。
那你说“我喜欢编程呀,学会编程我就比别人多一项本领。别人就会用崇拜的眼光看着我。”那你还是反问一下自己,为什么喜欢编程,为的就是让别人崇拜你吗?
当然更多的人都是有个明确目标的,就是为了编程而学编程。比方说有一个很好的想法,需要用编程去实现。或者说手动去完成某项工件特别累,想用编程自动化实现等等。
这种“为了编程而学编程”的人占绝大多数,但是这并不是学习编程的意义。我之前特别强调说,我开发编程软件目的,并不是单纯的让中国人更容易学会编程这门技术,而是让你掌握一门技能。当然对于还没有掌握编程技术的你来说,你是不会明白这里面有什么区别的。但是我现在还是有义务让你明白,什么是学习编程的意义。
这里说的编程,是指在计算机领域使用编程软件编写代码并生成可执行文件。这句话很拗口也不专业,我又不是专业人士,凑和着看吧。因为在有些领域,编程也就是调一些参数,改一些数字。你也许会说,改一些数字就能叫编程,这也太简单了吧。那好,发射火箭时“点火时间”也是个数字,你会调吗?虽然说这只是个玩笑,但是“电脑编程”从本质上来说,也是在“调”数字啊,你代码不管怎么写,最终也是生成了一堆你自己都看不懂的“数字”。
如果说电脑编程也就是在“调数字”,你是不是瞬间觉得没那么高大上了。虽然说你在荧幕上看到别人用数字0和1,创造出无比神奇的东西,你也会万分羡慕。但是编程真要你这么写,你还会学吗?我之所以说这一段话,是让你思考一下,编程最终目的,也只是生成了一堆“数字”,那它的意义究竟是什么?
也许你会问我,“你是设计编程语言的,你设计编程语言的意义是什么?”。全球上千种编程软件,有免费的也有收费的,总体来说是免费的居多。如果说微软等公司推出的编程软件,是为他们的系统做服务。那别的公司也没有自己的操作系统,做那些免费编程软件是为了什么?当然这不是我所关心的领域,他们的目的是什么我不清楚。我做编程软件的目的也是为未来开发操作系统用的。
显然这个牛皮吹的实在是大了些。肯定一堆质疑的声音:你什么背景,什么学历,什么资格。就敢大言不惭的说要研发操作系统,你知道啥是系统吗?
啥是“操作系统”,我知道啊,这是四个汉字啊,我不但会念,还会写这四个字。你就是说破了天,这也是四个汉字。
行了,不贫了。我在这兜扯半天,其实就是让你明白一个道理:学习编程并不是我把所有知识都传授给你,授之以鱼,不如授之以渔。前面我也说过,编程可以说是一种文化。学习编程可以陶冶情操、启迪心智、净化思想、升华境界,实乃泡妞装逼必备之技能也。(我去,又在这胡说八道了,能不能好好说话)
因为这是一个“不一般”的话题,自然要慢慢道来。我这里所谓的“意义”,大概是指除了满足和实现你的真实目的之外,能给你带来什么。你在编写程序的时候,无论遇到多么严重的BUG,都不是直接去摔电脑、砸桌子。无论面对多么变态的老板、刁钻的客户,你也没有挥刀拔枪,拳脚相向对吧。无论面对多大的难题,你都会从容面对。那“陶冶情操”有木有?“启迪心智”有木有?“净化思想”有木有?
编程既然说是一种文化,那么学习编程也是一种促进文化发展的“交流形式”。这种交流不仅是人与人,人与自然,也包括人与机器、人与虚拟世界的交流。很多“大人物”都说过,宇宙世界是真实存在的概率极低极低。编程作为一种独特的思维交流方式,也是打开新世界大门的一把钥匙。学习编程,不只是为了实现开发程序。而是你的思维方式变了,看待事物的态度也会改变。用更加宏大的格局去看待现实世界和虚拟世界,探索更多更大的未知世界,乃至与另一种文明进行交流和学习……
没错,我经常就是这么说话,早已习惯了别人说我太能“装”。别人更多是说我不把“钱”看在眼里,从不考虑“利益”二字。这可能跟我的价值观有关。从小开始读书的时候,书上没有讲过赚钱有什么用,更没有讲过该如何赚钱。反倒是能看到“钱乃身外之物,生不带来,死不带走”,“金钱如粪土”,“满身的铜臭味”诸如此类的话。也没有哪个学者、专家、权威或者法律条文说过,人活着就一定要赚钱。
那我现在问你赚钱的意义是什么?为了生存!生存的意义是什么?为了养家糊口,为了家庭幸福,其意义又是什么?如果你连自己所作所为、所想所愿的意义都没搞清楚,那你是为什么而赚钱?为什么而工作?
有的人贫穷,有的人富有。有的人活的短暂,有的人活的长久。有些人活的洒脱自在,有些人活的累成了狗。终又有几人明白生活的意义?家财万贯、纸醉金迷又如何,百年之后最多留下一把灰……
人生的意义在于,你能为当前的文明留下什么。一个发明创造也好,诗词歌赋也罢,论文小说公理公式也行,都是人类文明的财富。然而这世上的一切都是财富,唯独金钱不是。有钱只会让你一无所有。
有些名人曾经说过:经验是自我发展最大的障碍。只有不断的学习,不断的打破常规,挑战自我,才是走向成功的正确路径。学习不是让你死记硬背,生搬硬套。学习编程也是一样,机器是死的,代码是活的。程序是死的,运用才是活的。编程只是一种方法,而不是一种技巧。“电脑”也只是一台机器而已,它没有智慧,也没有灵魂。如果没有人类去使用电脑,它连存在的意义都没有。虽然它“看”起来比人类还要聪明,还有近年来被炒的火热的“人工智能”,让你误以为电脑是有思维的,有灵魂的,有智慧的机器。那电脑到底是什么样的机器呢?
八、什么是计算机
为什么叫“计算机”,因为它是计算数字的机器啊。估计很多人看到这句话,都要笑掉大牙了。但是从本质上来说,这有错吗?
我前面也零星的讲过,CPU就是由三个基本逻辑门电路组成的一个处理运算的集成电路,也叫芯片。“运算”的原理也不复杂,就是一大堆电子开关,可以控制哪些电路接入总线,哪些电路断开总线,再去哪些电路取数据,或者把哪些电路的数据电位,“传送”表现到到哪些电路上。可能我说的话很不严谨,但是大体上就是这么个道理。计算机和计算器以及算盘,本质上是相同的。
那么不同点在哪里呢?计算能力和速度?存储容量和传输效率?的确不好定义是哪个指标是最为重要的。但是有一点是可以确定的:如果计算机里不安装操作系统和软件的话,你根本不会去比较,因为你就没法用啊。
计算机从本质上也是进行数学运算的,软件编程从本质上也是修改编辑数字的。难道我们国家数学不行吗?硬件软件都不会自己做?
说到硬件吧,我们早就会做,只能说高端芯片,我们还有很大的差距。其中最为关键的是设计芯片的“软件”——EDA,我们做不了。
你可能会有疑问,不就是一个软件吗?国内这么多高级人才,怎么会做不出一个软件?电脑高手就不能破解它吗?
在很多人看来,自主研发芯片最难的是国产光刻机,设计芯片反而相对简单,这其实是一个错误的认知。由于EDA工具在芯片生产的过程中至关重要,是芯片领域皇冠上的明珠,所以它又被誉为“芯片之母”。顾名思义,没有EDA工具,芯片就无法设计出来,自然也谈不上生产了。
目前EDA工具全球占绝对主流地位的,都是来自美国公司的软件,其中业界一哥是美国公司新思科技,它的EDA软件也被很多芯片设计公司所采用。新思、益华、明导国际三家公司的EDA软件占据了全球95%的市场,很遗憾的是这三家都是美国公司,也就是说全球大多数设计出来的商用民用芯片,实际上都逃不开美国的科技。
那为什么不用其他国家科技公司的EDA软件呢?很简单,美国EDA软件好用呗!既然是用来设计芯片的,那么EDA软件越先进,就代表着芯片设计越容易,好的EDA工具不但可以让芯片设计的周期缩短,同时也能大大节约芯片设计的成本。现在一颗先进工艺的芯片,比如CPU或者GPU,设计通常要花24个月的周期,成本超过2亿美元。这还是用目前最先进的EDA工具设计的,如果用一些落后的EDA工具,设计的周期和成本都要大幅提升,同时芯片性能也无法达到预期,这对于现在的芯片公司而言无疑是得不偿失的。
说这么多,意思就是如果EDA软件水平上不去,即使我们拥有了自己的光刻机,但要生产出高端复杂的芯片,还是得靠海外的EDA工具设计,这样卡脖子的问题依然无法彻底解决,特别是采用先进工艺的芯片,国内EDA软件几乎无法胜任!当然我国现在还在努力实现28nm光刻机自主研发,谈EDA软件似乎早了点。
现在你能知道软件的重要性了吧,EDA可不是一般的软件。通常我们见到的软件都是基于操作系统下的常规应用,像高精尖领域的那些软件我们一个也做不出来。就是因为编程软件能提供的也只有这些“功能”
程序员也只能写那些能够找到的或者你能学到的那些“代码”。那些牵涉到核心机密的“功能”,是不会有资料对外公开的。而现在我们编程都还是用国外提供的编程软件,这些软件会愿意让你设计出比他们自己还要厉害的“软件”吗?师傅都不愿意真心教你,徒弟怎么可能超越师傅?
那你此时肯定想问我,前面我吹嘘那么多,“说什么别人编程软件都不是自己的核心,只有你才是完全自主实现的核心编程。那你咋不做EDA呢?合着你吹了半天,还是连一个软件都不会写”。
这话很多人都会说,又不是说我一个人。说就说呗,无论你刺痛的是谁,他“发愤图强”开发出来比国外还牛的EDA软件,都是值得全国人民高兴庆祝的事情。
最后总结几句吧,很多人以为在计算机方面我们被卡脖子,是硬件被卡,其实是软件。硬件攻关对于中国来说并不算难事,最难的还是软件。目前国内设计软件全部依赖国外的提供的编程工具,功能就这么多。或者说人家就公开这么多资料,你也只能照着人家的教程或者参考别人开发的示例去写。那我开发的编程软件算什么呢?我只能说还在模仿的道路上艰难前行。之前我们也照抄都不会,只能依赖于别人。其实模仿没什么可丢人的,总比一直用别人的好,因为人家并不乐意你用。那些自以为国外编程会永久免费的程序员,只是看不见人家的脸色而已。还有那些一直用盗版破解软件的人,还理直气壮的说“谁让你技术这么烂,被别人破解了,又不是我破解的。”,而破解别人的人还“自豪”地说看我多牛,为多少人做“贡献”了。还有那些黑别人网站,盗人家数据的人,还厚颜无耻的说“我能入侵某国安全局,给他们网站插国旗,我是祖国的英雄。”我只想弱弱的问一下,你还能干点别的不?还有那些整天说“不要重复造轮子”,“站在巨人的肩膀上”,反过来说可以不。“你不会造轮子对不对”,“你也只能踩着别人,被摔下来你还能站起来不”。
创业项目群,学习操作 18个小项目,添加 微信:80709525 备注:小项目!
如若转载,请注明出处:https://www.11in.com/3843.html