这里主要用泛化关系(Generalization)来叙述,因为每种语言都多少继承了语言技巧的一些特性,而具体的某种语言也是其语言技巧的细化。同样具体技巧对于逻辑技巧也是一种细化。 当编程学到一定阶段以后,就会发觉其中有2种技巧是较为互相独立的,一种是编程语言技巧,另一种是逻辑思维技巧。著名算法书籍《算法导论》里面,也尝试用伪代码来描述算法,说明只要掌握基本逻辑,其逻辑的实现可以用任何功能完善的编程语言来完成。
(这里仅仅列举些样板,其中的概括不是最全面的。图片较小,欢迎用4k屏幕欣赏……大误)
而语言技巧(LanguageSkills)又细分为“1.面向对象”和“2.面向过程”的语言技巧。其实还可以细分出“3.基于对象”的语言技巧(例如JavaScript这类缺乏多态和其它面向对象特性等的语言)。再往下细分,其语言的特性会更为显著、平台化。例如Java只能运行在Java虚拟机中,而C语言虽然通用,但需要依附于特定编译器和编译平台,C#好用却只能在windows平台使用。PHP、JSP、RUBY等可以在Web后端使用(Web服务器端处理好后,生成HTML和JS代码发送到客户端) 语言技巧的实现,大多熟能生巧。而一个语言的好坏,很大程度依赖于这个语言的环境生态。生态环境不好,再简单易用也白搭。生态环境包含3个方面:IDE的完善性、运行平台的流行性和语义的易用性。
这三个特性都是极强依附于编程语言的,是一个编程语言不可替代和更换的部分。因故这里用组合关系(Composition)来说明问题。 例如,C#强烈依附于windows环境,虽然有各种语义简单的优势,上手速度也比苹果的Object-C好多了,但就是因为平台环境受欢迎程度越来越低,导致其语言生态环境近几年比较悲催。 想想6、7年前微软辉煌的时刻,各种C#书籍迎面飞来,蛮多程序员也以会C#为正统。但终究敌不过时代变迁。 不过基于平台的语言也是会发展的,正如C#是在windows强大以后发展而来,Swift也同理是由于苹果的OS强大发展而来,并被苹果寄予厚望取代Swift。其语法简洁,咋一看上手难度也比Object-C低很多。 这里浅谈下高校开的编程基础课,有开C语言的,有只开C的,也有开Java的。大一的课程,大致以基本语言技巧为依托,学习一些基本编程逻辑和算法思维。我们知道C和Java都是面向对象的编程语言,但是绝大多数高校将其作为面向过程或者基于对象的语言来学校,本质并没有涉及到面向对象的核心功能——“多态”。所以在这样的背景下,高校编程语言学校大多数获得的是“语言技巧”和“基本逻辑技巧”一些“算法技巧”和“数据结构技巧”。
我们可以看到,逻辑技巧中的基本逻辑技巧,细化可分为if、while循环、for循环、switch等。其实这个细分如果用泛化箭头来描述,那就意味着基本逻辑技巧是个更为抽象的概念。而如果用组合或者关联关系来描述的话,那就是基本技巧涵盖了这么多if技巧、while技巧、for循环技巧。可能这里用组合或者关联关系比较合适。这是后话。 其实在SysML中,什么情况用什么联系,也是一种仁者见仁智者见智的过程。目前SysML的具体大应用案例还很少,实现阶段也在探索。至于SysML软件更多地用于文档化过程,离制造创新还很远。这里也仅仅是尝试用SysML来描述,看看大家是否觉得这种描述方法清晰。
刚才提到高校编程学习的特性,其实这里也可以谈谈此文运用SysML的缺陷:还未大量涉及块状图(blockdiagram)。毕竟是从UML借鉴和分离出来的新模型语言,自然需要有其特点。我觉得最大的特点就是块状图(block
diagram)和接口(port),尤其是接口,这在UML基本是没有的。目前SysML的官方规格文档也比UML2.5简洁,少了300多页。 浅谈一门成功的编程语言:语法简洁是否是一个语言成功的方面呢?——其实答案是否定的。目前要求降低。而对语言的可读性要求,其实在现在来讲,是变高的。这其实可以拿汉字做个比喻,进入计算机时代,虽然手写效率可能慢些,不过打字效率就快多了。所以相对于拼音文字,汉字非但没有衰败,其适用于图形学的形状还能显著提高阅读效率。 当年拼音与五笔之争,现在已经几本确立了拼音的完胜。拼音加上自动总结高频词,推荐用词后,输入效率变得非常高。同样,在各大智能IDE出现以后,变量名、方法名都能在输入完个别首字母后自动补完,这些进步也显著提高了一些老语言的可读性。 UML当然也是一种语言,翻译过来叫统一模型语言。而这门语言是好是坏呢?恐怕蛮多人还是持怀疑态度。至于目前大多数人觉得画草图比用电脑画UML或者SysML好用多了,我觉得真正的原因是UML和SysML的绘图软件做得还不够好。如果你用个iPad和iPencil画个粗糙的框框,它瞬间就给你整得正正方方的,还可以拖动来拖动去呢?那样还是好用的。 总结:其实计算机语言有自我迭代升级的关系——好的编译器是一门好的语言的支柱,编译不出成功的程序,这语言不是废了么?而好的编辑器是让语言迅速流行的关键之一,我打几个字母就给我完成了一大段程序,我既然可以更专注在软件设计上,那我为何还要用其它语言呢?好的编译器和好的编辑器组成了一门好的语言,通过这门语言要能写出更好的编译器和编辑器,这样才能不断迭代循环,进行语言升级。 |