在开发launchy时,我学到了很多开发相关的技巧,对于如何做好一款软件也有了更加全面的认识。

1 将目标拆分成小的任务

在开发python插件模块时,对于这样的陌生任务,我找不到任何切入点。停滞的状态持续了一周,我不断地查找相关技术资料,学习C++和python跨语言开发的各种知识,但仍然感觉无从下手。因为做一个内嵌在C++软件的python插件系统是一个非常大的概念,我也没有相关的经验,对于这类任务想要一步到位是非常难的。

之后我改变了思路,将所需要实现的功能都列出来,拆分为多个较小的功能点,从一个最基础的demo开始入手,在demo的基础上增加新的功能点,逐渐完善出整体构架。这样我就可以有一个相对容易的小目标摆在面前,对于每一次功能改进,我都只需要关注具体的某一个要点,在完成一个个小任务后对于下一个阶段的开发能够起到一定的激励作用。

2 从用户的角度去思考

作为一个开发人员,我常常思考的问题是软件的构架、代码的健壮性等一些与开发密切相关的问题。这可能是软件工程师的天性,我一直向往更加优雅的代码实现,更加漂亮的代码风格,更加灵活的代码结构。但是不得不说的是,对源码级别的欣赏仅限于同行之间,而且得是愿意深入研究源码的人才有可能体会到程序编码之美。软件是有灵魂的,我认为每一款成功软件都是一件艺术品,但能够欣赏到软件内在美的人很少。

当我将launchy介绍给别人时,我得到的反馈通常是软件功能相关的问题。一般用户并不关心软件设计的精巧,通常他们只关心软件的功能是否能够满足使用需求。作为用户来说,软件是否稳定可靠、软件的界面是否美观、软件会不会占用过多的系统资源等等一些比较直观的问题才是他们最关心的。

认识到这一点后,在思考launchy的开发方向时,我就会尝试以用户的身份去分析软件的功能,因为用户才是软件的最终受众。

3 在思考产品时做减法

在一开始接手Launchy时,我总是想把所有部分都做好,这样实际上增加了很多不必要的功能,有些功能随着开发进度的推进变得冗余,有些功能从一开始就是不必要的。下面就这两点展开详细说:

Launchy有两个计算器插件,最开始用 exprtk 计算库实现的Calcy,这个是用C++写的。之后将python插件功能做好之后,又出现了基于python的CalcyPy。我发现python版计算器才是真正合适的,或者说,用python开发插件是更加方便的。使用python做插件开发不需要考虑二进制兼容性,在新增插件接口后不需要像C++一样重新编译。在综合考虑后,我决定只保留一个CalcyPy这一个计算器插件就足够了。

在Launchy最开始维护的时候,我搜集了一些旧版插件的源码,并尝试将它们移植到新版中。这其中就包括Tasky,Tasky是帮助windows用户进行窗口切换的插件。在我移植完成后就发现这款插件实际上很鸡肋,因为windows自带的窗口切换已经很方便了,所以在使用过程中我也慢慢发现,这款插件的利用率真的非常低。

作为业余的开发项目,我能够投入的时间本身就很有限,所以也就要思考真正对这款软件有用的功能是什么,要把时间用在真正有价值的地方。

(全文完)