编程语言温故
一直想找一门健全的语言,显得独立完整不被破坏。看了会儿rush,有方便也还有不健全。
Java算是开启一个新世界,把思考方向像适应人的方式聚集。C系的话更多偏向机器,代理和枚举这些内容,还是为了方便机器去理解一些新的概念,需要初学者。Java除了反射之后破坏了完整性,现在用起来像是一个脚本。说脚本不是看语言是不是有硬逻辑那些,是看语言是否维护自身的完整设定。C++看起来更“反射”一些,可是它并不会因此显得脚本,因为这是它生来的语言特性。
反射的处理,像是对这门语言从外界动手术,而不是从内部使用这门语言。
理解编程语言会牵扯的芯片。看了一两本芯片的书,虽然被当前的热潮朝里挤,可是不确定自己是否真的适从那个方面,有所顾虑。翻翻,深入理解计算机,上边讲到的芯片算是能接触到的最深的内容。它好像给程序员的边界做了一些定义,告诉着程序员要去了解的是怎么使用芯片,而不是造。
芯片和编程语言一样,有一套需要被实现的功能,按照这些功能去使用芯片就可以了。这些功能虽然也会随着技术发生轻微偏斜,大方向不会改变。
刚学编程对底层大概不是懂很多,代码深入的追到里边让人望而生畏,全是英文和不明白的封装方式。都是人写的 的语言,也有它作者独特的视角和一些缺陷,被集成到好的语言中显得很分量重其实也很普通。在编程视角里显得普通。
微机原理上,代码会被存储在CPU里,按照固定的形式操作周围硬件。这里有存储,运算,信号的打断一系列基础的内容。编程语言,操作电脑的内存和计算通道,在低阶的基础上划分出栈和堆。也不需要明确知道两者的定义,在不同语言中有一些不同的含义。一个是简单的紧凑排列,方便不动脑地存进取出;一个是动态分配,可以人决定怎么用。所有的信息都要送到CPU进行计算,针对信息的远近进行了缓存而表现出不同的分层。以前写代码会想那个会更快一点,即使书本上的讨论给的答案也只能是模糊的参考,世界不可能被模具化。会把变量的定义取出循环,这样统称意义上是更快一些。或者做一些相应的小变化。
写代码的时候会有对运行时的触觉,这是每个代码人都在努力去做到的。也是为了这些才去想那个更快一些,好去更好分配资源。
C里边的指针在刚接触的时候会不理解,不理解它是怎么被机器运行。渐渐了解到,指针是面向编译器的,不在最终代码里。也就是些C语言要有两种思维面,编译过程和机器执行过程。除非不使用指针。枚举就是这种环境下产生的,一个包裹小范围变量类型的指针,为了灵活定义指针类型产生的一个分支。由于在面向机器,于是就压力给到编译器。这种两面思考对编程来说很不舒服,需要两方面进行切换。相比来说java简单一点,所有的代码逻辑都直接对应机器逻辑,而不是编译器。反射除外。
直接对应机器会容易形成触觉,更容易接近一些。编程不知道自己的代码运算速度和占用缓存,就像永远飘在表面上,没有触觉。这种生命力不强。
编程是通过语言对机器进行操作,永远都是操作机器,不是操作语言。语言只是一种工具,它们为实现这分操作有一套通用的功能模版,它们本身的发展就是贴近和完善这些功能。
语言学的多就知道了,它们之间都有类似,这些类似就是通用功能的“化身”。为实现机器的功能会期待语言有什么相应功能,便是 它们的通用功能集合。一些书上会说,站在通用功能的基础上去使用语言,而不是站在语言的基础上去编程,很多人都不理解在说什么。
编程是个舶来品,所看到的翻译都是在使用,没有太多深入的了解。学习编程,在二进制上会卡一遭。可能是西方从打孔开始对二进制沉浸多年;也可能是当时热度在那里,在当时的环境中会涉及很多二进制里边的思考,以至于很多二进制的算法不好明白它们是怎么被想出来的,怎么会想到那个地步。比如最基础的反补码。相比来说,国内可能更适应珠算,五进一二,二进一十。
目前编程的底层是二进制,写代码总体上可以脱离这层抽象,可还是会受影响。需要适应二进制规则来思考。二进制这个赛道赢不了,也不想赢,只能换赛道。
如果有珠算思维的芯片,编程语言的功能抽象不会改变,工作量在修整一些前后边角,带动着可能也会触动核心功能。
编程大部分人只是在用,朝下走到微机原理走到二进制算法的已经很少,提芯片影射的思维大概连个认同的都难找。
真是框架毁一生。(很好笑,也有些笑不出来)
有很多对模版的讨论,封装模式,好像这就是规则和最好的技术。这些模式本身却只能算是一些对封装思考的新手引入,不是什么硬性技术,还有很大前进空间。
堆栈结束了是线程。或许起始于最古老的一核多用,线程是一个繁复的操作点。最基本的抽象是,带有自己的数据及存储空间,占用CPU分片时间来完成计算。缓存、资源关闭、资源共享,都是铁的机器问题。
线程朝上走大概可以是编程语言。接着是程序员打交道最多的封装。
这里说的封装,意思是各种打包和分类,目的为了能让功能划分得更适合人的思考,便于扩展和重复使用以及维护。这是编程最有趣的部分。

浙公网安备 33010602011771号