去了解底层的一些设计思路帮助思考类似于中国师父挑徒弟、带徒弟的方式。在中国技艺传承和创新同样也在与时俱进。古代能做师父的人都是有一些特殊技能和文化的,比如做学问的、老中医、瓷匠、画家、经商的、跑船的、泥匠、篾匠。技能来源于生活同样服务于生活。挑徒弟看性格看人品,考量的可能是是否能够与师父住到一块说到一块想到一块,完整的传承师父技艺。带徒弟通常做法,师父边教边做,甚至有些是吃住都跟师父,从生活方式带起,除了技艺传承,师父同样教会了徒弟为人处事,适应各种各样的社会场合,与各种各样的人打交道。表面上看只是技能的传递,本质是原理及思考方式(原理性质)的传承。这或许是中华文化悠久传承的真正奥秘吧。同样摆脱不了一条规律,师父领进门,修行在个人。
结合书籍第一章说下自己的想法
1. 自己创造编程语言的意义
从20世纪70年代后期到80年代前期开始兴起个人创造编程语言,原因是当时难以获取开发环境。现在大多数它们会作为业务和研究的一环被开发出来。
作者以及自身的经历以及参考其他语言作者的意见,我认为有以下几点理由。
1. 提高编程能力
2. 提高设计能力
3. 打造个人品牌
4. 获得自由
编程语言的实现可以说是计算机科学的综合艺术。
实现语言功能的库和实现其中的数据结构,这正是计算机科学要做的事情。预测编程语言的应用范围也变得有意思了。
编程语言还是人与计算机间的接口。设计这样的接口,就需要深入考察人是如何思考问题的、下意识中有什么样的期待。反复进行这样的考察,对编程语言之外的应用程序接口(API)设计、用户界面(UI)设计,甚至用户体验(UX)设计都是有益的。
我想了解编程语言为啥这样设计,作者的生活理念以及设计想达到怎样的效果。提升我对编程语言这门语言的认识,作者设计语言当时的生活状态,任何细节都可能影响到对设计编程的思考。了解语言处理器的构成,运行的流程,与硬件的接口。词法分析的实现方法,语法分析的实现方法。关键词以及语法定义的底层逻辑。从源代码到运行的流程,各个构成的目地以及细节。
我写得比较多程序是8位机的c程序,时常会遇到写程序到一半发现资源不够的情况,很尴尬。
1.换资源更大的IC。
2.优化代码,经常还是资源不够。
3.改用ASM重写,写汇编是门学问,有一定难度。
除了这个问题还涉及到代码效率,对逻辑的表达方式。比如同样的逻辑别人用10行代码,你用20行,解释成汇编后别人代码同样比你精简且运行的需要指令周期更少。这涉及到语法分析的内容,了解C语言代码编译成汇编的各种基本组件,了解这个你才知道怎样写C语言解析成汇编更精简,效率更高。
2. 语言处理器的结构
语言处理器:能够使用语法和词汇在计算机上实际运行的软件。
语言是由语法和词汇以及字符构成基本单元。
语法是一种规则,规定了词汇组合表达的基本结构。
词汇(关键字)是能从使用该语言编写的程序中调用的功能的集合。
编译器构成词法分析与语法分析。
解释型编程语言的语法解释器的基本结构(方舟编译器)
编译型语言的语法解释器的基本结构
编译处理结束之后执行的处理有两种:一种是直接运行编译结果(运行时)。一种是将编译结果写到外部文件,这样就能够直接链接编译结果的程序。
本身编程是一门简化的逻辑语言,组织结构类似于英语,从字符到词汇再到符合语法的语句,只是应用场景不一样,英语在人与人沟通时使用,而编程语言只在专业人与机器之间,专业人与专业人之间。都能传递信息和逻辑,通常嵌入式编程侧重于传递逻辑,嵌入式编程的本质是表达逻辑,有点类似于沟通语言中某一特定场景操作手册,前提是定性定量,我们得知道前提条件是什么,经过怎样操作,得到结果是什么,告诉mcu怎样运算。同样编程语言有语句块,函数,都只是组织关键字的组织结构不一样。不管哪种编程语言都是指导MCU工作,最终都会变成只有MCU看得懂的机器码。所以在编译型语言编译器中还包括一个库,指导编译程序将程序源码编译成汇编在组织成机器码。机器码就是下章节中的字码。
3. 虚拟机
了解程序在CPU在运行时的状态。
1.指令功能RISC/CISC(逻辑动作量区分)
2.栈与寄存器(两种方式实现虚拟机内存实现)
3.指令格式(字码)
4.直接跳转
有助于我了解程序运行时栈和寄存器的操作,指令格式是怎样的框架,RISC/CISC的区别。
字码结构:指令长度32位,其中7位用于确定指令种类,这就表示剩余的25位可用于操作数。将这25位分配给ABC,A为9位,B位9位,C为7位。
4. 编程语言设计入门(前篇)
创造一门人气语言目标用户首先是设计者本人。传达一个基本思想,只有想设计给自己用才会尽可能的打磨优化编程语言,这样在某一类有特点的编程人群广泛使用。个人特色被折中的语言往往总有些让人思维受阻的感觉。编程语言保留个人特色并不一定是啥坏事。
代码块表达,关键字定义细节考虑,怎样的一个合理表达可以减少编写程序时的出错率。
5. 编程语言设计入门(后篇)
不仅语言,所有的设计都是一个权衡折中的过程。完美无缺的设计师不存在的,存在的只是在某种条件下更好的选择。
讨论下理论联系实际的观点,大多人可能理解是理论和实践必须联系在一起,还是太笼统,可能思维还局限于某一个专业领域,理论怎么教的,就怎么做。可事实上,人类科学研究本质目标是服务于人,就解决现实生活中遇到的各种各样问题。而各个学科知识系统组织有其相似乎性,底层决定上层是永恒不变的,层次结构。我很自豪我高中物理学习的特别的好,可是学习的并不知道学习它对我有什么好处,用来做啥,高中课本上物理案例其实离现实生活还是有一定的距离,我通常学习方式是背公式,然后在各种预定的条件运用公式解题,可是实际生活中没有这么理想的预定条件,同样现实生活各种各样的预定条件是通过其他载体的形式表现出来的,需要你将将各种现实拆分成理论条件,在根据特定情境运用不同的公式分析,这本身是一个开放的命题,解题思路有很多种,而考题往往是很理想的环境。
小时候崇拜武侠喜欢打架,可事实上谁又回去分析怎样才能伤害高呢,都是看电视打套路,是否有问过自己打哪里疼,怎样打疼(拳还是掌),着力点在哪里,怎样的角度打,什么速度合适,出拳的姿势该怎样才能最大化输出,自己打架需要从哪方增长自己的身体素质,力量,爆发,速度训练,姿势技巧,甚至到特定的针对某快肌肉进行训练,除了这些还得考虑自己怎样饮食,怎样调整心态把训练坚持下去,以及平衡生活与训练,什么样的套路可以连续打击,什么套路杀伤力大,什么阶段该去找人PK了解自己的水平。那时候只是玩得开心就好。高水平在科学面前是各门学科交叉系统的训练的结果,天赋只是一小部分,其他的都可以通过科学管理复现,不过同样这是逆人性的需要很强的韧性,定量定性分析现实生活是多维度多变量的复杂系统,说原理没有显示场景根本没人能够理解。所以最直接的达到效果的低成本的沟通方式就是套路。
前人认知生活的经验服务于生活,大多数人只关心是什么,做技术要探究为何是这样,这样设计的,这个问题追溯同样来源于生活,这就像一个刑侦案件,需要从作者生活经历,那个时代的世界是什么样,作者的生活习惯,作者的性格,跟什么样的人交流,是什么影响了作者对此的设计,这个方式是否可借鉴,了解设计的思路与依据是啥,为了突出作品的什么特性。只有这样才能知道这个设计的本质,同样得保留什么增加什么,优化什么重新定义设计。
有了理论和设计思想还不够,还需要平衡各种各样的当下现实,用户的审美观是什么样,做设计你能动用的资源有哪些?你的设计中这个系统各部分现有解决方案?你的设计的目地是什么?等等很多现实的要素,归根到底你能投入多少现实资源以及用户需要什么。有了这些你就可以形成一整套完整实施计划。(偷个懒,这部分还需要继续完善)
光会做的时候路还很长,该持续打磨自己,让自己不断精进,思维能力,思维框架,系统思考的能力。