完成一幅画——坚持写完整的程序

写程序从来都不是一件容易的事情,往往你自己觉得很满意的作品,用户却说你的程序根本就是个半成品。你抓耳挠腮,却始终不得其解。

早在我念大学之前,我是一名艺术生,在北京学画。那时候,每天都要画很多的画,有人像有水粉色彩有速写,每次我坚挺三个小时就画不下去了,就坐着休息玩手机。老师就会走过来说:才三个小时,你这还没有画完呢,继续画。

我那时是不懂的,就很纳闷,明明该有的都有了,为什么就偏偏说我没有画完呢?然后老师就拿起画笔,在我的画上继续画,修修改改,两个小时过去了,直到下课,她放下画板,还是说,先这样吧,还没有画完。

后来我明白了,可能在大师的眼里,根本没有能画完的画。

大师之所以为大师,就是因为他们不停地去提升自身对完整的认知,桌子上有一个用来画画的石膏立方体,你去画,画的一模一样,这叫完成。可是你画的只是一个立方体,这不叫完整。注意我的说法,是“一个”而不是“这个”,你要画的,是“这个立方体”,这个桌子上的那一个立方体,你怎么才能让你的画面体现出这一点呢?在素描的技巧里,我们使用明暗,使用光线,使用纹路。要去观察,你画了一个立方体,那它上边的光线呢?它出厂压模的纹路呢?使用了这么久,磕磕碰碰的豁口呢?可能刚刚把它放到桌上,那个人的浅浅的指纹还印在上边?这就是细节,这些具体的细节决定了你画的那个立方体,不是我桌子上的那个立方体,不是画材店橱窗里摆的那个立方体,而是你面前画板后边的桌子上的那个你正在画的立方体。

这就是完整。

开始接触编程以后,我还没有意识到这个问题,只是下意识地去让自己写的代码变得更加完整,直到有一天,有人说:哎呀,怎么你写的代码一写出来就那么好看,那么优美一看就像是高手,而我就不行。

我想了想,可能是因为我的确是从一开始就注重了代码的规范和风格问题。

但是程序的完成不止于此。在你一开始学习编程的时候,难免会有一些小小的在你看起来很无脑的练习,比如有星号(*)在终端输出一个金字塔,或者输出一个菱形。再比如后来可能难度上升了,你需要写一个华氏度和摄氏度转换的程序——这应该是我写的第一个比较完整的程序。

那么,你是怎么做的呢?算法可能大同小异,我们点击运行,程序编译,运行,终端上显示了孤零零的两个字:32.你觉得你的任务完成了,于是结束了。

这就是一个很好的例子,这个程序是个半成品

如同画画一样,你这一次不画到尽可能的完整,下一次你就还是不知道该在哪里完善。

  • 既然是程序,既然我们有了华氏度和摄氏度的转换算法,那我们是不是可以做一个简单的交互,让它转换任意的数值呢?
  • 既然能任意数值了,那是不是可以在程序里切换转换方向,让华氏度和摄氏度可以互相转换呢?
  • 既然都能转换了,那我们的程序是不是也可以像那些系统程序一样既能运行打开,也能直接接受参数然后执行呢?
  • 程序执行完成就退出了,我们可不可以加一个循环让它继续等待用户下一次的输入呢?
  • 既然程序都这么多功能了,我们是不是可以考虑给它写个图形的界面?

就这样一步一步地思考,我一步一步地完成了这个程序,对于做这个题目的你来说,可能最难的地方就是那个温度单位转换算法了,其他的都不难,但如果你坚持完成了它,那么下一次你就会明白一个完整程序的定义是什么。

我们说盗墓,其实就是盗墓贼和墓主人的一次超越时空的博弈,墓主人生前请一些牛逼的人设计各种机关保护自己的墓穴,而盗墓贼则需要机关算尽来破除重重阻碍最终夺得之前的陪葬品——其实写程序和最终的用户也是这么一回事,用户在使用你的软件,就是在和你博弈——你要想方设法让你的程序经受住他们有意无意的摧残。

你不知道你的用户会如何使用你的程序,是好的方面?还是坏的方面?难道设计枪支的人就能把他的枪绑定在好人手里吗?同样的,你也不能确定你的文本框就一定会被用户填入数字或者字母。你不做检测,不做判断,那么你的程序分分钟就崩溃了——而这种错误本在开发的时候就应该予以考虑并且避免的——而这个锅,只能你自己来背。因为你从来没有这么做过,你对程序的完整的定义里就根本没有这一条,你又何来一开始就能避免它呢?

这就是为什么,你辛辛苦苦写出来的代码,你的完美作品,会被你的产品经理,你的用户唾弃为半成品。它不稳定,不好看,也不好用。它仅仅是功能上的堆砌只是一个不稳定的程序而不是一个完整的软件。

在大师的眼中,永远没有完整的作品,因为他们坚信这幅作品还有提升的空间,他们坚信只要能再增加一点细节,他们的下一幅画就能更趋近于完美一点。

你的潜力,如同一个没有说明书和规格的千斤顶,你每 push 一下,它就能把看似不可能的重物给抬升一些,谁也不知道它的极限在哪里,但我们知道,在你第一次把它抬升之后我们就肯定能再次到达这个高度了。

而且,如果你不能再做到 push 自己了,那可能你的潜力也就真的消失殆尽了。

所以如果你去问问身边那些所谓的“学霸”,那些“天才”,他们总是有各种办法来不停地提高自己对于“完成”的阈值,每个人可能各有方法,他们也不知道这到底算是什么,有的人称之为完美主义,有的人称之为强迫症——其实,更确切的来说,这是一种自我提高的方法,通过不停地提升自己对于“完美”的定义阈值,让自己越来越“完美”。

发表评论

电子邮件地址不会被公开。 必填项已用*标注