admin管理员组

文章数量:1794759

程序设计审美:眼中之竹、胸中之竹、手中之竹

清代扬州八怪中的郑板桥.在谈到他画竹的经验时说:“江馆清秋,晨起看竹,烟光日影露气,皆浮于疏枝密叶之间。胸中勃勃遂有画意,其实胸中之竹,并不是眼中之竹也。因而磨墨展纸,落纸倏作变相,手中之竹又不是胸中之竹也。总之,意在笔先者,定则也;趣在法外者,化机也。独画云乎哉!” 。郑板桥把画竹过程分为“眼中之竹”、“胸中之竹”、“手中之竹”三个阶段。第一阶段是视觉中竹子外在形态;“胸中之竹’,是竹子外形在画家头脑中的反映,溶入了画家的审美意识和分析判断;“手中之竹”是“胸中之竹”物化结果。创作需要遵循一个法则:立意(框架/架构)要在下笔之前确定,同时作品的意趣和情趣又在于作者善于突破即有法则,能够捕捉并利用创作过程中的突发灵感或自然流露的契机(化机)。最后更进一步思考发问“独画云乎哉!”,对吧,唯独作画是这样吗?我们程序的设计实现不是这样吗?

一、眼中之竹:直观感知之美

"眼中之竹"指的是创作者对客观事物观察的结果,还要注意一下"对客观事物观察的结果"和“客观事物本身”并不是完全等同的,不同背景的创作者观察结果会有差异,情人眼里出西施对吧,所以从"眼中之竹"开始就已经在创作过程中了。在程序设计的“眼中之竹”阶段需要深入洞察需求,像画家细致观察竹子那样,全面而深入地理解项目的背景、目标和需求。实践中程序员在这个阶段有时候没有产品做得深入,我觉得有两个方面妨碍了我们做的更好:1,潜意识的绕过这一阶段,直接跳到“胸中之竹”甚至“手中之竹”,过早的考虑怎么架构和实现,这样会“锚定”自己的思路,进而蒙蔽我们观察的“眼”。对比一下产品不会在这个阶段想怎么实现对吧;2,知识背景差异,程序员可能知识背景是比较单一的专业知识,容易使用单角度观察,产品的岗位要求决定了其多方面的知识都应该有所涉猎:心理学、财务、市场营销...,容易使用多角度观察,从而对需求有更全面的理解。我们也能容易的找解决之道,适当的收回自己的思维专注当下(这个是可以训练的),并涉猎一些其他领域知识,丰富自己的“思考模型工具箱”(印象比较深的是查理芒格提到的“合奏效应”( lollapalooza )),能够做到多种观察模式的切换。

二、胸中之竹:内化构思之美

“胸中之竹”指的是创作者将收集到的信息进行内化处理,形成清晰、系统的设计思路。从业务收集的信息可能会杂乱无章、太多细节,我们需要对信息进一步梳理和深入分析,比如对问题归类找出共同点和差异点。“眼中之竹”生成“胸中之竹”不是自然事物的再现,而是创作者的思想感情与现实生活的结晶。具体来说程序设计进行到这一阶段,所谓的“业务需求”并不是需求文档上的需求,而是结合了我们的经验和认知水平,思考得到的“我理解的业务需求”。这里一定要强调“我”,“胸中之竹”每个“我”都不完全一样,想一想这一阶段要考虑:用户动线设计、协议设计、数据库表设计、领域设计、扩展性设计、安全性设计等等,从产品(先假设不懂代码)到新手程序员再到架构师,每个人对这些设计的思考是不一样的,并且有各自关注的重点。举个我遇到的实例,我们是做活动营销平台的,平台提供了一类叫买赠的活动玩法,比如用户买100块的东西可以赠送一些礼品(如游戏皮肤)。有个游戏业务提了一个需求,希望平台记录用户参与某些活动的次数(买100块东西并赠送成功算参与一次),他们需要参与次数进行额外的赠送判断(比如累计参与次数到10次,则额外赠送一些礼品),程序形成“胸中之竹”时除了需求本身,还要考虑什么呢?性能和存储成本对吧,毕竟之前不用记录每个用户数据,那从程序设计的角度应该怎么做呢?我们不能一次性让所有活动都去记录用户数据对吧,那就需要有个开关来控制指定的活动是否开启记录。但程序的“胸中之竹”和产品的“胸中之竹”是一致的吗?当时产品就说这个开关配置,活动运营不能理解其含义所以不能加,这里产品更关注是用户体验。为了尽可能的减少差异,我们在这个阶段做了什么呢?可能是各种评审:产品方案评审、技术方案评审、线上资源评审..,也可能是多轮沟通,目的就是每个”我“把思考后的“胸中之竹”,通过多种方式表达出来(语言,文字,图例等)和其他“我”交流,然后再思考再交流,直到形成一个和现实“似而不同”的新事物(意像)。我愿意把这个过程看成是审美活动,一个我们发现美、创造美的过程。

接下来再思考一个问题,能不能绕过“胸中之竹”阶段直接到“手中之竹”呢,比如提供一个工具,业务方不需产品也不需要程序员,业务直接上来就实现自己的想法,这样多好业务的想法直接就是成品了。那以上面参与次数例子可能会有下面的沟通:

业务:“我直接用文件记录吧,这个我懂,不用什么数据库,我也不懂”

卑微的你:“我们采用容器化部署,容器重启时文件可能会有丢失,还涉及到文件实时采集的问题”

业务:“容器?我不懂,我只要有记录,还能查询”

卑微的你:“文件查询不好做索引,查询效率低”

业务:“索引?我不懂,我只要能实时查询到结果”

卑微的你:“...”

没有了创作者的审美,最终呈现出了一堆丑陋的事物,而我们却在关注效率有没有提升。同样是最基础的词汇,有人就能写出“去年今日此门中,人面桃花相映红”这样的千古名句,“美不自美,因人而彰”表明“美”的产生离不开人,最终成事的也是人,所以怎么强调人的价值都不为过。

三、手中之竹:创意表现之美

“手中之竹”是指创作者通过笔墨等工具表现出来的具体艺术作品,在程序设计中作品可以是用户交互页、可执行程序、自动化测试程序,自动化运维工具等。“手中之竹”是“胸中之竹”的再现,它保留了“胸中之竹”所确定的核心功能和主要架构。就如同画家从脑海中的意象创作出绘画作品一样,开发者从“胸中之竹”中诞生出“手中之竹“。然而,它又并非完全等同于“胸中之竹”。一方面,开发者的技术水平会对手中之竹产生重要影响。如果开发者经验不足就无法完美地呈现“胸中之竹”的设计意图(美的意象),比如在实现复杂的业务逻辑时,忽略事务性或者不考虑并发设计,功能实现效果大打折扣。另一方面,所使用的工具的特性也会制约手中之竹的形成。不同的工具在功能、性能、便捷性等方面会存在差异。

技术水平会通过知识的积累和经验的丰富得到提升,这里我要提到另外一个观察,我发现个人的审美水平和技术水平有一定关联性,能够写出清晰和一致的代码,往往审美水平也不错,如拍摄构图好、厨艺高超、音乐品味高等等,“美”是可以跨越领域的,如果对身边的美有追求,怎么能忍受一堆丑陋的代码呢?所以技术水平还能从审美水平出发,培养我们的审美意识,由内向外提升技术水平。易中天在讲演禅的故事时,说过一句话“知识靠传授、方法靠示范、智慧靠启迪”,知识和方法可以由外部告知,而智慧是自我的觉察。审美也是由内到外的自我觉察,可以反哺技术水平。

“手中之竹”对于工具的依赖,可以和“化机”的重要性一起来看一下,郑板桥提到了“意在笔先”这个概念,动笔之前应该对整体有一个“意象”,这个“意象”往往是忽略很多细节的,而在“手中之竹“阶段细节又回慢慢的呈现出来。比如接口协议设计,在”胸中之竹“阶段是静态的,而在”手中之竹“阶段随着各个模块的联动(如业务联调)就变得动态,更多的细节会暴露出来。创作者需要捕捉在过程中的突发灵感,对接口协议进行调整,在这个过程中一个好的工具应该是对创作者没有阻碍的,也就是工具应该是面向变化设计的。不熟悉程序开发的人有时可能不理解为什么不能思考完整再开始写代码,如果我们认可程序设计是创作,先假设能在公司工作“写文档”和”写代码“至少要占其一,类比”写文档“的过程,我们不是把所有内容都想好才开始动笔对吧,我们可能会调整一些结构来更好表达自己的思路对吧,我们希望文档工具能够有足够灵活性支持调整对吧。因此工具除了能支持“胸中之竹”的表达,同时需要支持“化机“,让创作者能够进入”心流“状态。

四、总结

“眼中之竹”、“胸中之竹”和“手中之竹”之间的关系紧密相连,如同一个完整的链条,生动地体现了从认识生活到表现生活的艺术创作过程。从“眼中之竹”开始,它是对现实业务领域的原始观察和认知,是程序设计的起点,就像艺术家最初对自然景象的凝视和感受。通过对“眼中之竹”的深入研究和理解,创作者在头脑中逐渐形成了“胸中之竹”,这是一个经过提炼和升华的模型,是对现实业务领域核心部分的把握,恰似艺术家在脑海中构思出的艺术意象,它为后续的程序开发指明了方向。而“手中之竹”则是最终的成果,是将“胸中之竹”通过编程技术和工具转化为实际的软件系统,就如同艺术家将脑海中的意象通过画笔和颜料呈现在画布上。同时也如同艺术家在创作中突破现有规则创造出独特的意趣和情趣,开发者也要善于“化机”,打破常规将新的技术和理念融入到软件开发中,开发出具有创新性和竞争力的软件产品。

本文标签: 程序设计审美眼中之竹胸中之竹手中之竹