将编程的心态迁移到画画中

编程和画画,在这之前,我反复向自己论证,说这是两个完全不同的领域,一个科学一个艺术,一个理性一个感性,我没有幻想自己能够把编程的学习经验应用到画画中,我反复哀叹,这世上怎么没有第二个像编程这样容易学习的领域。

但我最近又转而意识到,只要不从表面,不从最表面的要素去看待编程,我仍旧能够把编程和绘画统一起来——我意识到,绘画的过程和绘画这个领域的学习的过程,和编写软件项目的过程,是高度相似的,而且,一切反复迭代的,螺旋上升的过程,都和它们相似,甚至如历史,社会的发展也是如此。要深入思考下去,就不得不回到辩证法,回到马克思主义了,但我现在不想讨论这个。

我这里的目的,是想将我编程,做项目时的心态迁移到画画中(虽然强调心态时也离不开流程,因为我要用软件工程上的流程模型去给我自己底气)。这里强调主要是心态,是因为我认为处理心态是最重要的部分,至少对目前的我来说。因为我对敲代码已经得心应手且有许多经验,我如果能在绘画时保持编程的心态,这将对我的学习大有助益。

以及,现在是画画,将来也可能是写故事,编曲等……恐怕对艺术乃至一切创造性的领域,这种迁移可能都将是有意义的。我是辩证唯物主义者,我是程序员,我(将)是画师,这将是独属于我的,独属于那尔的一个心智模型,我以前总是试图建立一个对所有人,对所有领域适用的,一般的,对学习、创作的 meta 心智模型,但或许我意识到,或许这个出发点根本就是错的,去他妈的一般,我要抓紧我的特殊性(至少在目前先抓紧,直到我在多个领域都有建树)

实际上,从软件工程出发,或是从马克思主义的认识论出发,我原本的想法都是错误的——我还没有特殊的经验,我就去搞一般了,这怎么可能搞出来有价值的实践性的东西?思维游戏罢了!

下面的话其实只是写了部分的方面(因为对我自己的特殊性的探索同样是探索嘛!迭代不完的),但总之我要把每一张画都当作一个项目去对待,去将它和我的编程的经验联系,统一起来。这就是我。

绘画是探索的过程

我要建立的心智模型的根本在于,绘画的过程,和现实中而非理想中的软件项目开发迭代的过程是高度相似的——它充满了假设,探索,试错,修改,颠覆

何谓理想中的软件项目的过程?就是典型的瀑布流流程——设计,编码,测试,发布。然而能开发地这么顺利的项目,我一个也没见过。现实中的软件项目,充满着回炉重造,充满着技术债,在每一步,我都可能颠覆之前的步骤——比如编码时,我突然意识到我的设计没有覆盖到需求的全部方面,在测试时我发现我编码有纰漏,甚至设计本身都得有大动干戈……而且我清晰地认识到,这错我是非犯不可——没有后续的实践的经验,我不可能上来就完全地把握住需求,只有通过后续的实践,我才得以发现先前的自己和期望的不一致

在编程上,因为大量的经验,我实际上已经认识到了这一点。我知道我每一步都可能会出岔子,无论是因为需求不明确,我自己的理解偏差或疏漏,还是因为技术债……因此,在开始开发之前,我就预想到我的每一步都可能(实际上必定)出岔子,我不吝啬去Q需求去重新对需求文档,对从需求一路改到Controller这事儿也习以为常,来了bug我也淡然处之因为它不可能不来。

然而,上面指的是公司项目的开发,而我自己的项目的开发其实更加接近绘画——我实际上是依赖了我知晓每一步可能出岔子这一点,因为我知道,就连需求也是在我后续的实践中逐步明确的……我在最开始自己也不知道我自己要什么,我的架构也不清楚是否是最合适的,我可能会整出几个原型,选择最合适的那个去推进下去,然后主键发现它的不足,尝试迭代它,或者推翻它……

我实际真正写到能用的项目其实没几个,而这几个项目,我敢说,它们都是盲人摸象摸索出来的,而我试图提前设计出来再详细编码的东西(哪怕是遵循先原型再实际项目的原则),基本都半途而废了。

回到绘画中,我要说,每一张画,都是一个项目,小到单文件的脚本,或是练习某种特定的语法,概念,亦或是刷算法题,大到多文件的需要架构的完整项目……绘画是一个,而且必定是一个,同时必须是一个充满探索的过程——就像深度优先遍历地去走一颗树(当然,这棵树也是动态生长的),每个节点都是一次抉择,感觉OK就继续走下去,感觉不OK就倒回来(可能倒许多层呢)。我做的抉择正确吗?几乎必定是错误的,而我只有走了才知道它是错误的。

但这里讨论的是心态,从我编程时的心态出发,既然这个犯错都是必要的,那我们为何把它称为错误?它不是错误,它是探索!经由它,我明确了当前和之前同期望的不一致,因此我就能更加清晰何谓正道

更进一步,我其实在依赖探索去推动我前进——我不会等到我做完清晰的剪影再去做二分,而是在做二分的过程中去修剪影,我不会等到上完线稿再去上色,而是做了草图后直接上色找感觉,以此修正我的草图(虽然我这么说,但我其实还没有这么操作过!),我不会上来就去画成图,我可能会先去做一些小色稿(也没操作过)……要作比喻的话,我就是尽量以最低成本快速地遍历这棵决策树,以及尽量降低回退的成本

关于绘画的学习过程也是项目这部分,我虽然倾向于这一点但目前感觉还不足以讨论这部分……先别过。

总之,在这里,我要向自己强调,绘画不是线性的过程,绘画是螺旋的,迭代的,探索的,不断试错的,永远不会满意的一个过程,就像我自己的软件项目一样。而我要做的,就是尝试在这过程中找到乐子,对每一次“找到感觉”去感到欣喜

关于项目驱动学习

我以前有提到一个所谓的项目驱动学习,就是把特定主题或者画作当成一个项目去专门研究它(其实更像主题学习),但我一直没能推进下去……先不论我为何没有推进下去(或许是我当前确实不喜欢被这样约束?其实仍旧是心态问题),我这篇文章的项目指的明确地就是软件项目而非一个抽象的项目,同时我专注在心态问题上,而非是去定义某种新的工作的流程,形式。

进步发生在幕后

其实这一段可能对我才是最重要的。

在做软件项目的时候,我有在考虑要获得进步吗?没有,我只是想解决自己的需求,或者是出于趣味。

而对绘画?哈哈哈哈哈哈哈,我没有哪一天哪一秒没在想我想要画技进步,为此我思考每种练习方式的意义,我以提升自己为目的去设计创作,结果呢?从来都是光说不练。

然而,编程的学习经验告诉我,进步总是发生在幕后,发生在一点一滴的积累中,发生在一个个小问题的解决中。我确实是有在做基础练习,为了面试我刷过一些算法题,我也做过很多SQL题目的是为了在工程实践中使用到(那可太贴近工程实践了!),所以即使这些基础练习,我也是从需求去出发去做的。我还用一些冷门语言尝试做过一些题,但这就是出于趣味了。

而我既然要把绘画当作是项目,我就同样应当从需求(视觉需求,想要表达的东西,想做出来某种感觉)出发,从趣味出发

这里,我要抛出一句老师看了会骂娘的话(考虑到这心态的根深蒂固,我或许必须得对自己这么强调)——去他妈的进步,去他妈的意义,去他妈的被设计的创作,我的绘画的目的只是为了服务我想表达的东西或者玩乐。在绘画时,我心里只需要想着我要表达的东西就足够了,决不要有一个所谓的意义加在我头上

保持短视,保持趣味

为何我胆敢这么说?因为:

  1. All is Worthy,我的每一笔绝不会有白用功,它总会有回馈的,即使我可能认识不到它;而且,走远路也会有走远路的收获,更别提会得到快乐了
  2. 关于我所画出的东西,究竟是否真正服务了我想表达的东西,我的眼睛,观众的眼睛都是判官,都是反馈,只要我还仍旧坚持去做项目,仍旧坚持得到反馈,我就不可能歪到沟里去
  3. 关于对囫于舒适区的担忧,我不是小孩子沉浸在自己的OC幻想中,我有明确的坚定的想表达的东西,而它们总会有一部分是会超过我的舒适区的

但我也得强调,我是永远不会让自己满意的……就如同我天天想着重构我的软件项目一样,我也不可能认为这幅画画到完美。这是没完没了的,点到为止!

而基础练习?我应当采取我当时对算法题、对SQL题的想法——有需要再主动去练,那时候去练也是从需求出发的了。

听牌即立

有点子就马上行动,别管现在是什么时间什么情况,毕竟我在将来可能很少有这种机会了。(当然,眼睛最优先,虽然我下面可能说我要不遵循医嘱偶尔大晚上的还去看屏幕,但倘若眼睛向我报警,我必须停下)

22年的三四月的某一天,我学hadoop学high了,一天tmd学了16个小时,记了几万字的笔记。睡觉的时候还亢奋地睡不着……虽然我对hadoop已经忘光了,但我的笔记还在,我曾经建立过心智模型,现在让我再捡起来我也能捡的飞快。当然这里扯远了。

我是强调,倘若我有某种冲动,某种好点子,我就马上去做。编程上的点子我还可以给它记下来说将来在整(好吧,这时候的很多点子我也无限期推迟了),但画画的点子?创意可是转瞬即逝,即使后面再用文字记录下来,那也无法再得到那时候的感觉了……

保持激进,听牌即立,有点子就马上去尝试!无论是躺在床上还是在玩游戏,以及,不要太严肃。

关于参考

没有人能离开谷歌去敲代码(当然,现在是AI了)。同样地,没有人是不看参考画画的。除非是他把参考记到脑子里的。

这在编程和在艺术中的差异非常有趣,程序员认为去谷歌搜问题的解决方案,去搜和拷贝代码,是一个很平常的事情,没人会对此提出任何异议(还有meme来着呢——程序员A:我抄了你的代码;程序员B:哦,我的代码也是抄的lol)。

而绘画?似乎人人都对用参考避之不及,总想(以及总想让别人认为)自己全靠想象去完成画面。

这应该是艺术里的一种普遍的偏见……?认为只有从无到有才是艺术,用了参考就是作弊,就是没水平。而它应该确实是错误的。

而我要做的,就是以编程中的态度去找参考——

  1. 对我不会的部分,我去网上搜集解决方案。这还要分两类,如果我觉得它很有意义或很好玩儿,我就多花精力去仔细分析它,否则我就不让它占用我的脑子,直接抄,这通常出现在对那些我只有在特定时候需要用到的东西
  2. 去研究特定画师的风格,就像研究一个开源项目的源代码,但一般来说,我只研究他的特定部分,而非他的全部
  3. 建立我自己的snippet仓库,即把常用的参考内化,这是非常重要的——想想我连for循环,连合并两个字典都得抄?那确实有点过分了。

就记这些吧,最关键的部分在于,忘掉所谓的意义,忘掉所谓的进步,享受当下吧。这话我其实也不是第一次对自己提了……但至少这次我可以把它锚定到一些更坚固的东西上。