写软件传统上会认为是偏技术和工程的,在很多编程的书籍中,会经常借用建筑学,工程学等领域的概念来进行类比说明。不过我认为,写软件和写作两者的近似度其实更高,我自己总结了几个相似之处。
第一个相似之处是,写作和写软件,两者都是都过语言和逻辑的组织来传达思想。创写作者用文字和叙述来创造故事和情感的世界。软件开发者,则通过代码和算法等来创造功能和交互的世界。两者都需要精心的组织和管理,才能够让最终作品表达其思想。特别个人软件的编写,近乎于一种纯粹的个人思想表达。
第二个重要的相似之处在于,文字和代码一样,都具备自我发展的能力。在写作中,作者为小说中的人物设定特征,构建复杂的人物关系,这些人物好像有了强大的生命力,他们在故事中成长,蜕变和消亡,作者只是将这些发展过程用文字如实记录下来。开发软件也是一样,优雅的模型抽象,彼此高度协作的功能特性网络,本身会让软件不断的演化,我作为开发者 ,只是用代码来将演化的结果转化为用户具体可用的功能。
第三个是出发点类似,都是处于创造力和表达欲望。写作的最初原因是因为有话想说,写软件也是一样的原因。我以前开发 life-time-tracker ,就是想要表达自己对于时间管理的一种看法。
第四个是相似点是为用户提供价值。写作的本质是要为读者提供某种价值,或得到问题的答案,或体验故事中的人生,或寻求慰藉。软件也是一样,帮助用户节省时间,或者是解决问题。
第五个相似点,无论是写作还是写软件,都需要注入个人的经历,情感,价值观和想象力等。这是作品具备独特性的必要。
书籍是一种长形式(long-form)的思考和写作,编写软件实际上也是长形式的,特别的好的软件所需要开发时间不亚于一本书籍。不过软件的好处是在与可以渐进式地发布,不需要像实体书籍一样真正写完再交付给出版商出版。
在阅读书籍《了不起的我》之后,我又发现了一个新的相似点,在书中提到 自我的形成不是一个发现的过程,而是一个创造的过程 。编写软件,从来都不是说,我知道它长什么样子,然后将其编写出来,而是只有一个抽象的概念,甚至一个模糊的信念。但是通过一行又一行的代码,一个又一个的功能,慢慢的将抽象理念具体化。就像画家画画之前也只有一个抽象的理念,只有通过一笔一画,通过和画布上的内容进行交流,才能将其呈现出来。
写作者用文字来连接人,开发者用产品来连接人。
所有伟大文学作品的必然命运,它能够随着时代的变迁,不断地展现出它的各种可能性。一个伟大的软件,我认为也是同理,虽然时代变迁,但是伟大的软件本身是对现实模型的一种灵活的刻画,随着现实的改变,模型也可以随着使用者的使用而一起进化。