学技术有两个方向,求广和求深。求广就是学习更多新的技术,求深就是尽量在现在掌握的技术中寻求答案。从求广的角度,我认为我们很多时候并不需要更多的新技术才能达到上述的目标。从求深的角度,我认为我们确实需要更多的技术,我们需要对现有技术更加深入的掌握。
我向来不是一个惟技术论者,可能也是因为我的技术不够好。《软件创新之路》、《软件工艺》告诉我们软件开发最终的目的是什么:为用户建造真正令他们满意的软件产品。一个软件从业者的信用建立于持续为用户建造令他们满意的软件产品的履历。
学技术有两个方向,求广和求深。求广就是学习更多新的技术,求深就是尽量在现在掌握的技术中寻求答案。从求广的角度,我认为我们很多时候并不需要更多的新技术才能达到上述的目标。从求深的角度,我认为我们确实需要更多的技术,我们需要对现有技术更加深入的掌握。
要建造真正令用户满意的软件,就要了解清楚用户真正在关心什么。下面我按照一般情况下用户关注的优先级排了序:
1、真正实现了用户的业务需求,而不是错误地实现了业务需求。用户得到了他们真正想要的东西。当然用户真正想要的东西并不一定就是他最初告诉你他想要的东西。你要想办法去理解他的思路、理解他的思考方式(最好能和他交上朋友)以了解他真正想要但没有表达出来的东西,也许你可以很轻易地为他提供比他的期望更多的东西,为什么不去做呢?如果你做到了,你将获得人际关系方面的巨大成功,有一天他可能都离不开你了。
2、界面的美感,包括界面的布局、配色、漂亮的图片、按钮。这个很多时候超出了我们作为程序员的能力限制。当然,美工能够帮助我们。但是美工不是我们的救世主,我们有能力做好的还是应该尽力作好的。
3、系统的易用性,要从一个普通用户的角度去思考系统如何被使用,而不是作为一个程序员来思考。要想尽一切办法来改善产品的易用性,要让用户的生活更加轻松而不是体验到艰苦和挫折。
4、系统的性能,如果一个页面刷新需要十几秒种,毫无疑问用户是不会认为你建造了一个成功的软件的。为了改善性能,甚至你需要写大量“邪恶”的存储过程,只要能令用户满意,管他某大师如何说呢。
5、系统的稳定性,三天两头出故障的系统肯定是不能令用户满意的。而且你也要不断去救火不是?这些工作对你来说难道是有很多回报的吗?
6、系统的安全性,容易被攻破的系统用户是不会满意的。
7、系统的可扩展性(scalability),能够保护用户的投资,平滑过渡到将来更大规模的 IT 方案。
这几点做好了,就完全可以说就是一个成功的软件了。我对成功软件的界定就是令用户满意的可以良好运行的软件。这些标准很容易达到吗?不是那么容易吧?
软件的质量分为外部质量和内部质量,程序员往往只关注软件的内部质量,而忽略了很多软件的外部质量。这几点基本上就是我所理解的用户所关心的软件的外部质量。
至于你用什么技术,Java、Python、C# 都无关紧要,你是否用了很时髦的设计模式、AOP、MDA、IoC、TDD 同样也是无关紧要的,因为这些用户都看不到。那么你是否需要明天就为这些用户看不到的东西投入 sink lost 呢?还是可以慢慢来,先把手头的急活干完呢?我要是明天不把用户提出的这个问题解决掉就会有麻烦了,而我明天不懂 AOP 却没什么要紧。
我喜欢 KISS。傻并不是我的错,虽然我懂的很少,但是我却每天都在做事情。我喜欢当一个做事情的人,而不是当一个做学问的人。你懂的很多,写写文章还可以,但是你从来不为用户建造令他们满意的软件产品,因为那些都是脏活累活。“我可比他们光鲜的多啊”,你常常这样想。但是我敢说未来是我的而不是你的。呵呵,不出所料,你不信,你愤怒了。那我们走着瞧吧。Mono 1.0 出来了,不过才两三年时间,这些源代码难道都是靠理论堆出来的吗?