目录
rust 是否可以用于8051单片机开发工作? (*)
https://blog.csdn.net/ken2232/article/details/130665002
思考:在纷纷嚷嚷的喧哗中,选择适合自己的计算机语言 (*****)
https://blog.csdn.net/ken2232/article/details/130753427
==================================
----------------------
创造家:人类发展因为不断创造而不断进步;基础研究是人类能够进步的基石。没有我们这类人的不断创造,哪里人类生产方式的不断改变?拿来的山寨?
没饭学生:什么计算机语言的需求量最大,就学习什么计算机语言,工作好找。
要财老师:当然是教授容易找到工作的计算机语言了,否则,学生失业,我也失业。所谓的“最先进”计算机语言,它们往往还呆在实验室、或者某些山沟沟里。
老板:我要的是钱,什么产品能够换来更多的钱,就贩卖什么产品。
产品经理:什么样的功能和性能的产品符合市场的需求,就定义什么样的产品。不需要理会具体产品的内部实现,那是产品设计师才需要考虑的工作。
产品设计师:C好?C++好?D好?还是Rust好?能够快速完成产品设计和实现的计算机语言,才是最好的。
先进的计算机语言?靠:“先进”又怎样?完成进度慢了,照样会被炒鱿鱼。
产品战略经理:选C?选C++?选D?还是选Rust?选什么狗屁语言都无所谓,关键是:市场竞争激烈,产品迭代的时长,不能慢了。
能力无限:身兼数职?精力有限?寿命有限?健康透支?
在物质世界,生命的意义在于人生的过程,个体终究会Game Over,Oh, My G !
于精神世界,当个体生命划过星空,会留下一些什么东西呢?
----------------------
人与工具之间的辩证关系
在本质上,计算机语言只是工具,就好像是衣服。本来工具无好坏,只要适合使用就行;衣服无美丑,只要合身就好。
然而,
工具会影响到使用者的思维习惯,衣服会影响到人们的自卑心;只有内心强大者,才有可能做到超然物外。
原本手拿刀具切菜,却一不小心就切到了手指头。
关注目标,把握关键,将主要矛盾和次要矛盾,科学地、智慧地区分开来,分别对待,合理地分配资源,这才是主要的。
如何处理矛盾之:沉迷,创造,狭隘
对于大多数的(想当然)场景?
创造来自于沉迷:不专注于技术,不沉迷于技术,就难以精通技术,难以创造出新的技术。
沉迷将很可能会造成在思想、或思维上的狭隘,或偏执?
如何克服与纠正呢?
----------------------
矛盾的思维习惯,如何解决?
1. 工具思维习惯
将注意力集中在计算机语言上,从而使得语言的学习效果和效率都能获得进步和提高。
问题:一旦这种注意力形成了习惯性的思维,就会陷入在各种各样纷纷嚷嚷喧哗计算机语言的泥潭中。这个大牛说:C语言好,C++太烂了。那个大牛说:C++是 C的升级版本,会替代 C。于是,对于computer语言的学习者来说,脑袋乱掉了。
2. 产品思维习惯
将注意力集中到产品上,优先顺序为:产品,时间进度,实现思想和方法,工具(计算机语言)。这种思维习惯,将计算机语言的重要程度,被摆放在第 4位,甚至更后面的次要位置。这是一种创造性思维,或者说,这种思维有助于人类的创造;对于创造或产品而言,这应该属于正确的思维方式吧?
3. 矛盾
将注意力集中在产品上,这是战略层面的思想,虽然正确?但对于学习计算机语言来说,是不利的。因为不专心,可能会导致学习计算机语言的效率低下。
将注意力集中在计算机语言上,这是战术层面的思想,可能会陷入在各种各样纷纷嚷嚷喧哗计算机语言的泥潭中,难以自拔。
如何让自己同时具备 2中,或多种的思维习惯,并根据具体的应用场景来随时进行切换,站着多角度,采用多视角来思考、处理、创造一切,对于一部分人来说,这种切换是困难的,需要更加努力地进行思维适应性的修炼。
4. 产品优先思维与工具优先思维 的比较
要扭开一个螺丝的案例:
产品优先思维,根据螺丝的型号来选择螺丝刀:选择了购买最适合使用的螺丝刀;但它的各项性能指标可能并不是最好的,甚至有可能是最差的。
工具优先思维,这把螺丝到最美观、坚固耐用、各项性能指标最好,就购买它了?可惜无法直接用来扭开指定的螺丝。各项性能指标最好的螺丝刀,却无法直接扭开这个指定的螺丝。
根据产品,来选择工具(计算机语言)?这种思维才是正常的吧?
还是首先选择先进的工具(计算机语言),再来考虑待确定的产品?这种思维就怪异了吧?
世事无绝对
当指定了产品之后,那么,可用的工具(计算机语言)的数量和种类,是容易确定的。
反之,
在选择了一种先进的工具(计算机语言)之后,再去考虑使用这种语言来做一些什么样的产品?迷途、陷阱、漩涡?
当现有的螺丝刀已经有了一大堆,那么,在新产品设计中,即使有更好的螺丝;假如由于更换螺丝所带来的利益,远没有由此造成更换螺丝刀所损失的利益更多,那么,还是不会更换螺丝。
已经学会使用了一种工具(计算机语言),在现实中的大多数时候,只能依据自己所能够使用的工具来找工作。
5. 在现实生活的有些场景中,瞎子摸象,并不见得是一件坏事
从产品经理的角度而言,它们需要关心产品的功能,以及外部表现形式。
从老板的角度而言,可能它们并不需要关心产品本身,而只是关心这种产品是否能够赚钱,以及什么人才能够帮助它们赚钱。
从程序员的角度而言,它们才会有可能陷入在各种各样纷纷嚷嚷喧哗计算机语言的泥潭中,难以自拔。
人类个体一生的寿命是有限的,假如面面俱到,什么都懂,什么都会,很可能什么都做不精,什么都做不好,这样就只能在激烈的市场竞争中被淘汰。
任何事物总是具有至少的两面性,瞎子摸象,好?还是不好?以及好或坏的程度如何?需要具体问题具体分析。
在现实的生产环境里,
最先进的工具往往并不适合、或并不能使用在当前需要量产的产品中。
最先进产品所使用的工具,常常并不是先进的。
在具体的应用场景中,最先进的,并不一定表示最适合的,或者最好的;反之一样。
对于某个具体的男人而言,世界上最美的美女,就不表示最适合做自己的老婆,或会成为最好的老婆;反之一样。
这是由于需要考虑到综合效益的选择结果。
随机应变:培养快速场景切换与快速角色切换的思维习惯
概念与场景
同一个概念,在不同场景中的理解是不一样的。不要试图习惯于只采用单一的场景来理解计算机语言,工具优先?还是产优先?有时需要采用多种场景来考量。
采用单一场景来理解概念,会导致形成僵化的思维习惯。这不符合人类社会中的现实生活。
学生角色:在学习计算机语言时,关注焦点在语言原理本身;
产品设计师角色:产品实现。在产品实现设计时,需要关注实现的方法和步骤,比如计算机语言。
产品经理角色:定义产品。在产品方案设计时,关注焦点在产品的外观和表现上;
老板经理角色:明确市场以及其他。钱和人,关注焦点在于什么样的产品才会赚钱,什么样的人才能帮助自己赚钱,或者获得更多、更大的利益;
xxx角色:关注焦点在xxx上.
对于某些教育者来说:关注点放在计算机语言的本身上,可以获得收益;
对于某些应用者而言,关注点放在产品的本身上,可以获得收益;
通过产品来选择计算机语言,是在收益最大化的综合考量之后的结果,可能所选择的工作计算机语言并不是最先进的,但却有可能筛选出可以获得最高性价比(最大收益的计算机语言)之一。
充当什么样的角色,就需要采用什么样的心态和角度来观察和思考问题:这样才有可能做到专注、高效、以及其他。然而,在现实生活中,并不存在专一的独立角色;或者说,假如偏执地采用专一的独立角色来观察和思考问题,必然大概率会与现实社会脱节,从而沦为生活现实中的淘汰品。
在现实中,同一个人,对于不同的参照对象,往往会同时充当着各种各样的不同角色:子女?父母?员工?老板???
不要迷失在各种各样计算机语言纷纷嚷嚷的喧哗中。
先进、或不先进的评价,总是离不开具体的应用场景的。
在离开了具体的应用场景之后,来讨论先进、或不先进的这个问题,很可能最后所获得的结论,是荒谬的。
有些简单的产品,只需要使用一种计算机语言,就可以实现了。
比如底层驱动开发,使用汇编,或者C语言。
有些复杂的产品,往往需要使用多种计算机语言,才可以实现。
比如:复杂的嵌入式开发
驱动:采用汇编,或C语言。
图形界面:采用C++。
第三方函数库:依据所需要的函数库而变,不同的函数库,很可能是采用不同的计算机语言来实现的。
每一种计算机语言,都有其优点,也有着不足;因此,不同用途的第三方库,往往采用不同的的计算机语言来实现。同时,与第三方库作者的习惯、偏好、或擅长的所使用的计算机语言也有关系。
理论上,所有的高级语言,最后都会转换为汇编语言,最后转换为二进制的机器语言。
实际上,各种函数库的实现,往往采用了各种各样的机器语言。
现实中,对于一个具体的项目,程序员不可能每一个轮子都要自己来造,这是困难的,非常困难,甚至是无法完成的。
同时,假如不是自己所关注的部分,却额外需要花费大量的资源来深入掌握它,这是没有必要的;不应该本末倒置。比如,需要一个在整个软件中所占有的权重很小的软件界面,直接使用现成的 widget库就好了,即使这个软件界面显得不是那么美观好看,但这有什么关系呢?
一个具体的第三方函数库:往往只有一种计算机语言的实现,不会或不可能每一种计算机语言都有它的实现。
精通一门主要的计算机语言,粗略掌握所需要使用到的其他计算机语言,在具体的工作中,不断深化,即可。
有时,由于工作的需要,不得不学习多种语言:在战斗中学习战斗
一个有一定年头的公司,其产品在不同的时期,往往采用不同的计算机语言。
理想和现实,总是相互在忽悠:原本只想靠 C语言吃饭,没想到进了大公司,好多语言都在使用。学?还是不学?原来 C只是一块敲门砖,而已。
综合性代价问题:时间,效益,等等
比如:早期采用汇编,后来又采用了C语言。
于是,对早期产品的维护、或功能变更,就需要使用到汇编语言了。不可能为了维护或者增减一个小功能,就全部使用C语言来重新编写。重新编写的这种做法,代价太多了,往往并不值得。
老板,老同事与新同事,老产品与新产品
老同事:习惯于使用汇编;不少使用汇编的老产品,仍在销售中。
新同事:习惯于使用C语言;不少新产品使用了C语言,仍在销售中。
老板:在没有足够的利益差别之下,并不关心到底是使用汇编?还是使用C语言?
老产品与新产品:能够带来足够利润的产品,就是好产品。管它采用的是什么样的计算机语言呢?
最先进的技术:并不见得是“当前”最能盈利的技术;但它却很有可能是“未来”最能盈利的技术,它们是人类未来不断进步的希望。
在现实中,无所不在的快速角色切换
孩子来了,切换到父母角色;
父母来了,切换到孩子角色;
老婆来了,切换到老公角色;
曾祖父来了,切换到龟孙子角色;
益友来了,拿出美酒;
损友来了,拿出扫把;
通通都来了,则需要快速聚焦于某个或某些对象上,或者散焦以便关注于所有的对象。
心态、注意力、角色的快速调整
在设计产品的时候,应当将心态、注意力、角色快速调整到到目标对象“产品”上;而不应该在计算机语言的本身上。否则,项目完成的效率,有可能就会变低、很低,甚至是遥遥无期。
是因为产品的需要,才会去考虑具体的计算机语言;而不是反之。
然而,在学习计算机语言的时候,则需要将心态、注意力、角色等等,进行反向的快速调整。
多场景,多方向,多种心态的快速调整,这是人类现实生活中的客观。
对于个人而言,什么样的计算机语言,才是好的语言呢?
能够帮助自己快速实现和完成产品设计,以及迭代要求的语言,就是好的语言。
而不应该是那些在纷纷嚷嚷的喧哗中,宣称是最先进的计算机语言。
所谓“最先进计算机语言”的误区
所谓的“最先进”,是相对的,不是绝对的。
“最先进”只存在于某个,或某些的具体应用场景中。
“最先进”具有时效性,过去的“最先进”,并不表示未来还能继续保持“最先进”。
“最先进”计算机语言本身的局部性:
一种具体计算机语言本身的最先进,只是表示它的小部分,或大部分的特征最先进。全部特征都是“最先进”的计算机语言,是不存在的;所有计算机语言的设计,都是对各种特征进行了筛选和折中的结果;这种筛选与折中,就导致了一种具体的计算机语言,不可能保证全部特征都能做到最优。
一种具体计算机语言的使用,它离不开配套的语言支持环境。哪怕一种具体计算机语言本身确实是“最先进”的,但是,如果缺乏足够的配套语言支持环境的支持,那么,这种语言的使用,也将是“最没有效率”的。
对于一种具体嵌入式产品的设计,所要选择的计算机语言,也是一种筛选与折中的过程。
在这种折中的过程里,可能只会选择一种语言,也可能需要选择几种语言,并有主次、轻重等等的分别。
人类个体的寿命是有限的,因此,“时间”将是在一切人类活动中,不可或缺的一种重要的前提条件。
----------------------------
没有可以包治百病的药,也没有无所不能的计算机语言。
一个项目,可能需要同时采用几种计算机语言来完成,甚至是需要由团队来完成。
因此,一个人可能需要同时掌握1~2种主要的计算机语言,以及几种辅助的计算机语言。
使用 C语言的人,往往也需要熟悉汇编。因为在时序要求苛刻的场合,或者编译器生成的汇编程序块不能满足时序要求,或者存在某种问题时,则需要直接采用汇编来编写。
有目的,则有效率:目的越明确,效率越高。是具体的项目,需要使用到几种不同的计算机语言,因此,才需要去学习它们;
无目的,则何以谈效率?:而不是漫无目的地去学习多种不同的计算机语言。
问题 1:假如目前 Rust语言最先进,那么,它可以运用于自己的工作中吗?
答案:可以,或者不可以。
思考:
最先进的东西,未必适合自己。
假如是做纯软件开发的工作,那么,大概率 Rust语言可以运用于自己的工作中。
假如是做嵌入式开发的工作,那么,大概率 Rust语言不能运用于自己的工作中。
嵌入式开发所针对的目标式具体厂家的 CPU/MCU芯片,它需要有支持该芯片的相关软件开发工具的支持。
标准 Rust语言未必能够支持到自己所选用的 MCU芯片,嵌入式软件开发工具,往往需要对标准的计算机语言进行修改之后,才能运用、或更好地运用于嵌入式开发。比如:keil C就是对标准 C进行修改,以便适合于具体 MCU的开发。
作为“嵌入式软件开发工具”的厂家,目前最先进的计算机语言(受到商业利益、技术瓶颈、或时间瓶颈等的限制。这点与人类通用语言有着本质的区别)未必适用于用来开发“嵌入式软件开发工具”。
只有当标准 Rust语言大量流行之后,它才有可能被“嵌入式软件开发工具”厂家所考虑,然而,就算 Rust语言先进,也未必会适合运用在“嵌入式软件开发工具”中。移植、适应性修改等等,这些都并不是一件简单的事情。
从通用语言标准的诞生,到通用编译开发工具链的配套,这需要5~10年的时间,参考C++的时间表。
从用编译开发工具的配套,到“嵌入式软件开发工具”的诞生,这也需要以“年”为计算单位的时间长度。
对于嵌入式开发工具而言,一种新的计算机语言是否合适运用于“嵌入式开发”,这是“嵌入式软件开发工具”的厂家所要考虑的问题。
对于嵌入式开发工作者而言,自己所要选择的是具体的 MCU,以及与之配套的“嵌入式软件开发工具”。
一般不应该跳过“嵌入式软件开发工具”的工作,直接去考虑所使用的先进的、标准的计算机语言来进行嵌入式开发;因为这样需要花费大量额外的时间和精力去做本该属于“嵌入式软件开发工具”厂家所要做的事情。
世事没有绝对::对于有些嵌入式应用场景,是可以考虑直接使用最先进的计算机语言来完成一部分工作的。
比如,在先进的标准语言编译器所已经默认支持的MCU中,可以。
又如:可以将先进的标准语言程序打包成函数库来使用的场景。
人们应该将目光聚焦到创造上,产品上,而不应该聚焦在计算机语言的工具上;
除非这种工具不能满足产品的短期、中期,甚至长期的目标要求,这才需要我们重新选择语言工具,或是需要创造出新的语言工具。(这点与人类通用语言有着本质的区别,人类通用语言的选择和创造,会受到人性等等的影响)。
计算机语言只是工具,创造出优秀的产品才是目的。假如在合理的时间长度之内,由于语言学习难度、工具缺失等等的因素,导致无法满足创造出产品的时间进度要求,那么,再优秀的计算机语言也是白搭。
工具,哪怕是再优秀的工具,也是被利用、被使用的对象而已。当然,优秀的工具,可以加速或更好地实现出产品。需要合理地分配时间的比例。
是因为人类需要不断的创造,才会不断地涌现出各种各样新的计算机语言。各种各样计算机语言的涌现,是人类不断创造的结果。创造产品与计算机语言工具之间,不应本末倒置。
对于 MCU,以及控制类简单应用的嵌入式开发,可能根本就不需要考虑多线程,以及堆内存的分配,因此,C语言就已经足够啦;
再就是 C++,与C兼容,在简单的嵌入式开发中,就算有多线程和堆内存的应用,也属于简单的应用,使用 C++已经足够满足要求了。
要以人的需求为产品设计的目标:
空掉遥控器其实只需要有限的几个简单的按键,如果使用万能遥控器来遥控普通空调的话,反而会让人难以使用;太多按键,反而使用体验不好了。
在 51系列的 MCU上,根本就不需要考虑线程安全,内存泄漏之类的问题,因此,Rust的优点,在 51MCU看来就是富余的、臃肿的、而外的东西,C才是最佳的语言。
尺有所短,寸有所长。在离开了具体的应用场景之后,将无法选择出所谓的最恰当的计算机语言。这点与人性通用语文不同。
对于 MCU芯片厂家而言,汇编语言才是重要的工具,因为 MCU厂家常常需要堆芯片引脚的时钟周期进行以一个脉冲单位级别的调整。越是高级的语言,可能越是无视 nop()。
在家里洗一个热水澡,搞一个家用热水器就可以了;没有必要弄一个能够满足一千人同时使用的锅炉来烧。由此将会带来硬件成本,或者其他成本的增加。
没有可以包治百病的药,也没有无所不能的计算机语言。所谓的最佳,只不过是一种折中占优的选择结果。
思想斗争与心理建设:“根据用途”来选择“开发工具”。
不应该根据工具来选择工具,而无视用途。
选择鸡刀?还是牛刀?
根据工具来选择工具:鸡刀所用精钢半斤,牛刀所用精钢五斤,精钢型号完全相同;每把的单价竟然是一样的。
顾客A:哇:相同的价钱,买牛刀,多赚到了4斤半的精钢,赚大发了;可惜会造成杀鸡的效率降低了,赚钱的效率也就变低了。。
顾客B:俺是杀鸡的,要买鸡刀。虽然买鸡刀亏了4斤半精钢的钱,但杀鸡的效率提高了,赚钱的效率也就提高了。
道具老板:单纯从金钱的角度而言,买牛刀赚了刀具的钱,却亏了杀鸡赚钱的效率;买鸡刀亏了刀具的钱,却赚了杀鸡赚钱的效率。对于具体的顾客而言,在考虑时间成本的前提下,总体而言:这两种做法,其实它们的盈亏总收益,似乎相差无几的。
旁观者:奸商,绝对是奸商!!
赚了?还是亏了?
时间,是人类个体最为宝贵的不可再生资源!!
在离开了具体的应用场景之后,其实,都是在扯淡!
有人说:C语言比汇编好。
有人说:C++很烂。
有人说:Rust比 C++更先进。
尺有所短,寸有所长。没有包治百病的药,也不存在无所不能的计算机语言。
在离开了具体的应用场景之后,将无法选择出所谓的最恰当的计算机语言。这点与人性通用语文不同。
再次强调:时间,是人类个体最为宝贵的不可再生资源!!
变是永远的不变。在未来,一定会诞生比 当前C语言更先进的未来C语言,当前C++更先进的未来C++,这是肯定的。
但是,其他配套的支持环境和开发工具链呢?
在某个具体的应用场景里:
如果离开了“时间成本”来考虑问题,那么,当前最先进的计算机语言,就是最好的开发工具。
但是,
时间,是人类个体最为宝贵的不可再生资源!!
因此,
如果考虑到“时间成本”来处理问题,那么,当前最先进的计算机语言,很可能是最糟糕的开发工具。
缺乏足够的生态支持,缺乏a、b、c、d、.......
在时间轴上,计算机语言与人类通用语言有着本质的不同。人类通用语言的寿命远远长于人类个体寿命,因此,所要考虑和关心的焦点,是不一样的。
最终用户,可能并不关心到底是采用什么样的计算机语言来实现的,而是仅仅关心最终产品的外在功能和表现形式。
时间成本,具体应用场景,产品迭代成本:应该作为考量和选择使用哪一种计算机语言的关键要素。
掐头去尾,没头没脑地鼓吹:C语言比汇编好;C++很烂;Rust比 C++更先进。全是扯淡。
参考: