`
shannon977
  • 浏览: 20182 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

编程的美学标准诌议

阅读更多

编程的美学标准诌议

做了几年的程序员,虽然自己写的代码还远远没有达到要求,但在日复一日的实践过程中,我逐渐开始信奉一条标准:在实现功能的前提下,简单即是美。

其实,编程的过程就好比是一个建模的过程。设计就是将一个现实问题抽象成逻辑模型。而编码则是将逻辑模型进一步表达成程序模型(如果我可以这么叫的话)。建模是数学和物理中的很重要的方法,而数学和物理是强调“简单”的。不知通过这样的论证来给编程引入简单美是否令人信服。

我喜欢从“成本”的角度看程序的简单与否。有三个方面:

实现的便捷(实现成本)

              学习的便捷(学习成本)

              运用的便捷(运用成本)

 

注重实现的便捷就是追求自己写代码时的省力。要实现起来简单,关键应该是平衡好程序的灵活度和复杂度,不能为杀鸡造牛刀。我刚开始写代码的时候犯过这样的毛病,把需求考虑得过于复杂,甚至把以后的复用,扩展都考虑进去了,同时由于经验积累的不足,不知道利用已有的成果――搞得造房子从挖土烧砖开始,结果十天半个月都没完成,而要求实现的功能其实很简单。

 

关心学习和运用的便捷,则是为了让用户省力。这里所说的用户(user)是广义的,不单单指人。一个大型的软件也好,小的程序也好,甚至是由几个类构成的模块,都会提供供用户操控的抓手,就是接口了,想要让用户学着简单,用得方便,关键是要定义好它。

以模块的接口为例,首先注意的是接口函数的规模。有多少个可被用户调用的函数;是使用一次调用一次,还是一旦初始化了就一直起作用等等。接口的规模是和具体问题相关的,不是每个模块都能设计成只有一个接口函数的,但是往简单了去规划,却是不错的。

接口的设计还要注意“语境”。首先是具体业务逻辑的语境,电子商务有电子商务的一套概念体系,电信有电信的,银行金融有银行金融的,这个自不待说,对软件、程序和模块都适用。但对任何一个模块而言,最终都是要用具体的编程语言实现的,所以我们的模块也要注意编程语音的“语境”。比如如果是用C/C++,我们就要考虑指针。如果是用Java,同样也有讲究。比如包、类、函数、变量的命名按习惯来,甚至模仿jkd里的来。如果要把用户定义的对象放在散列(hashcode)容器里,就要求用户定义对象类重载实现Object#equals()hashCode()。如果要排序,就要求实现Comparable或提供Comparator。要复制对象就定义拷贝构造函数或重载Object#clone()方法。总之,跟着大家约定俗成的概念、思路来表述问题,不自创一套,就是为了学习和运用的方便。

接口的灵活性和简洁性是一对矛盾,要学用方便,就要平衡这对矛盾,坚持一个“够用”的原则,不能给用户太多的选择。否则,当你告诉他可以这样用,也可以那样用,反而容易让人糊涂。小时候,我爷爷给我讲三国的故事,说周瑜其实比诸葛亮聪明,周瑜是一步三计,诸葛亮则是三步一计。但结果周瑜还是让诸葛亮气死了,就是因为前者计策太多,不知道用哪个好了。这虽然是虚构的故事,但其中的寓意却让我受益至今。

 

三个“便捷”也有相互矛盾的时候。尤其是实现成本会和学用成本矛盾,个人认为前者应该服务于后者。如果能让用户在调用时少写一行代码,实现因此多一百行代码也是值得的。虽然我在设计用户界面方面经验很有限,但我觉得界面上窗口的布局,菜单和按钮的排布,以及色彩与色调以及它们的搭配,都是很有讲究很有学问的,并不能因为我不懂而轻视它。

实现和学用的矛盾在模块开发中更为突出。因为对一个模块而言,调用者是另一个模块,学习运用者是该模块的开发人员,地位上和你以及你所开发的模块是完全平等的。这时的接口定义就好像是两个帮派在划分势力范围,于是两个模块开发组可能就会在多做些还是少做些的考量中互相踢皮球。这种类似的经历让我至今想起来都仍然感到不愉快。当然在这种局面出现之前,系统工程师或架构师已然缺位或失职,是根本原因。

至于学习和运用,大部分情况下是一致的,但偶尔也会出现矛盾。比方说对同一个功能有两种实现方法(决定了对外接口的差别),第一种实现是符合人们常识的,所以易上手。而第二种则另辟蹊径,在性能或其他方面有很大提高,但要向人解释清楚则颇费一番周章。这种情况下,我还是支持采用第二种方法,如果有好的使用效果,学习上的成本提升一些也是值得的。

 

总之,我觉得一个好的程序模块(我是一个程序员,不敢说的太大,还是以模块来说事儿吧),应该像一台同时支持专业摄影功能的傻瓜照相机。如果你想要它工作,只需摁一两个按钮,一张还过得去的照片就出来了。否则,捣鼓半天成不出个像来,用户多半会因为挫败感而放弃使用。另一方面,“简单”放低了使用的门槛,只有在使用的过程中,才能加深体验,才会不满足于简单功能,从而有动力去追求更复杂更灵活的配置,到了那个时候,原来一直支持的那些专业摄影功能就派上用场了。同时寓学于用,更有感性的认识。

我想用GNU C中提供的socket编程APIJava中提供的socket编程java.net包作比较来说明。首先要承认这和实现语言的不同有关系,并且GNU C的支持更灵活。但从易用这个角度,我无疑会支持Java的方案。在GNU C中,socket地址结构体因为不同地址类型的所有变数,以及其中的参数(AFPF,地址、端口字节顺序),还有在建立套接字时协议参数、套接字数据类型等的取值,统统都暴露给我们用户了,大大提高了学用成本。而这些在Java提供的socket编程接口中就得到了很好的封装,同时不失可扩展性。让我们一般的使用者免于关注这些细节,而专注于你到底是要一个UDP还是TCP的连接。

0
0
分享到:
评论

相关推荐

    新媒体时代版式设计美学教学刍议

    新媒体时代版式设计美学教学刍议

    诌议信息时代背景下的创意图形设计.pdf

    创意图形设计不仅仅是美学的体现,更是创新思维的载体,是信息时代中独特的视觉语言。 创意图形设计的核心在于创新和表达。它将设计师的思维意念转化为视觉形式,通过线条、形状、色彩等元素创造出具有深刻意义的...

    设计美学.pdf

    "设计美学" 设计美学是一门学科,研究的是人类设计活动中美学问题的探索。该领域涵盖了设计的发展史、设计美学的基本原理、本质特征、基本范畴等内容。设计美学研究的对象包括设计美学的本体、设计者、设计的道德等...

    传统美学与当代美学的贯通

    在探讨“传统美学与当代美学的贯通”时,我们首先要理解,尽管当代美学展现出前所未有的多元化和包容性,但这并不意味着它与传统美学截然对立。相反,传统美学的形式、研究对象和思想进程在当代美学中依然得以延续和...

    人工智能艺术的美学审视:基于人文主义美学的视角.pdf

    在探讨人工智能艺术的美学审视时,我们首先要明白,人工智能艺术作为一种新的艺术创作和评价形式,虽然挑战了传统艺术的诸多方法和标准,但其审美主体仍然是人类。人工智能艺术在算法和素材确定性的基础上分析“可...

    2019秋【贵州电大】《美学原理》任务02.pdf

    很抱歉,由于您提供的信息中并未包含实际的文件内容,我无法直接生成关于《美学原理》的具体知识点。但是,我可以根据普遍的美学原理课程内容,为您概述一些美学的基本概念和重要理论,帮助您理解美学研究的范畴。 ...

    议暴力美学本质.doc

    【暴力美学的本质】\n\n暴力美学是一种独特的艺术表达方式,它在电影和其他艺术形式中通过对暴力元素的风格化处理,创造出一种超越现实、引人深思的艺术效果。这一概念的探讨源于对电影中暴力描绘的关注,特别是当...

    MacTalk·人生元编程.pdf

    5. **生活哲学与编程美学**:书中融入了作者对生活的独到见解,如时间管理、情绪调控,以及如何保持持续学习的热情。池建强认为,编程不仅是技术的实践,也是一种生活态度,通过元编程,我们可以更好地理解世界,...

    图像美学分析matlab代码

    MATLAB作为一种强大的数值计算和编程环境,是进行此类复杂算法开发的理想工具。本压缩包中的"图像美学分析matlab代码"提供了一种实现图像美学质量评价的方法。 美学分析涉及到多个方面,包括色彩、构图、对比度、...

    美学试题二标准答案.doc

    【美学试题二标准答案.doc】是一份教学相关的文档,包含了美学领域的多项选择题及答案,主要涉及了美学理论、审美心理、艺术风格、美学家的观点等多个知识点。以下是这些知识点的详细解析: 1. 从事物的客观属性中...

    医学美学ppt课件.ppt

    医学美学是将美学原理与医学实践相结合的学科,旨在探讨和实现人类健康的美丽,提高生命质量和活力美感。这个领域融合了医学的人文属性和技术特性,致力于研究医学领域内的美学现象和审美规律,以及如何通过医学手段...

    2010-2020年暨南大学701美学原理考研真题

    4. 文化与社会美学:美学与文化、社会的关系,不同文化背景下的审美观念差异,以及社会变迁对审美标准的影响。 5. 美学史与美学流派:回顾美学的历史发展,介绍重要的美学思想家及其理论,如柏拉图、亚里士多德、...

    2010-2020年暨南大学801美学评论与写作考研真题

    在准备这个科目的过程中,考生需要深入学习美学的历史发展,包括古希腊的柏拉图和亚里士多德的美学思想,到近代康德、黑格尔等人的美学理论,再到现代各种流派如存在主义美学、结构主义美学等。此外,中国古典美学也...

    论文研究-网络爬虫的图像美学质量数据库及其美学评价系统设计.pdf

    论文研究-网络爬虫的图像美学质量数据库及其美学评价系统设计.pdf, 本文提出了一种基于网络爬虫建立图像美学数据库并评价图像美学的方法. 首先使用网络爬虫获取数据库...

    美学特征的提取

    在图像处理和计算机视觉领域,美学特征的提取是一项关键技术,它涉及到如何让计算机理解并量化图像的美感。本文将深入探讨标题"美学特征的提取"所涵盖的主要知识点,并结合描述中的子功能,如暗通道特征、白平衡、...

    世界编程大赛获奖作品

    【编程大赛获奖作品解析...它让我们看到了在极限条件下,编程如何转化为艺术,如何将计算的力量与美学结合,创造出令人震撼的数字体验。这些作品不仅是对参赛者技能的肯定,也为其他开发者提供了学习和借鉴的宝贵资源。

    初中文艺美学论文关于生命美学与实践美学的论争

    【标题】:初中文艺美学论文关于生命美学与实践美学的论争 【描述】:这篇初中文艺美学论文探讨的是90年代在中国美学界展开的关于生命美学与实践美学的论战,这场论战成为了当时美学界的核心议题。 【标签】:资料 ...

    论文研究 - 环境与哲学:美学与自然环境

    在本研究中,在初步确定了美学领域和美学卓越(美)概念之后,我们将分析构成美学基本要素的美学范畴,并考虑到这些美学范畴对于所谓的美学卓越评价。 随后,在对“环境”一词进行解释之后,我们将详细说明当代美学...

    浅议大学美学教育方法改革.docx

    浅议大学美学教育方法改革.docx

    口腔医学美学课件PPT课件.pptx

    总的来说,口腔医学美学课件旨在帮助专业人士理解并应用美学原则,提高口腔治疗的美学标准,为患者提供更美观、更符合个体需求的治疗方案。通过深入学习这些内容,口腔医生能够更好地满足患者对于功能与美观的双重...

Global site tag (gtag.js) - Google Analytics