作为开发者,你会写技术方案吗?
作者:胡长城
网名:银狐999
主页:http://www.javafox.org
信箱:james-fly@vip.sina.com
Blog:http://javafox.blogdriver.com
有次和TRS产品经理马先生聊天,他说我改行去做售前合适,原本我以为他开玩笑,因为我对售前的工作兴趣不大(我一直认为我是个developer)。后来,找了个机会,见面聊了聊,他一语道破了原因:他竟然觉得我适合写技术方案——很有意思的感觉。
没想到,最近真的在写技术方案了(还好,没有转行)。耗费了两多星期的时间,总算“攒”出一份技术方案后。自己都用攒这个词了,可见这份技术方案的水分多大——有必要说明的是,方案中有关产品架构设计到没有多大的水分。——还有必要说明的是,这里所说的技术方案,不同于以往的什么技术架构设计之类,是有些偏市场行为的
很多人说,这样的技术方案,应该是项目经理或售前所属的工作范围,怎么也挨不着软件开发者什么事情啊?——原本我也是这么认为,甚至有时候很讨厌写文档。原先我也认为:我可以跟随theserverside,跟随javaworld,跟随java.net这些最新的技术趋势;我也可以在Together,在coding中快意的遨游。现在看来,过去的思绪有些狭隘了。
在这两个星期中,越来越感觉到。作为一个软件开发者,能够书写方案(或者说技术方案),应该是必须的,也是必要的。偶尔写写,受益匪浅。
作为一个开发者,我想至少需要三个基本要素:精通、思考 与 创造 。精通表示至少需要在某一个领域内基本功非常扎实;思考就需要不断的审视过去的成就;创造就需要不断的有发展的眼光——其实有时候,这三个要素是很难统一的,过分的关心新技术和新思维,会让很多人失去了埋头苦干的耐心;而过分的扎进某一个领域而不能拓展思维,久而久之也会变得呆板。——我比较喜欢把精通放在第一位。其实,国内目前的整体软件水平,需要更多更多“精通”的人。
下面就从自己的这次写技术方案的感受,来跟大家说说,为什么需要“学会写技术方案”——最直原因,可能就是说:大家都不希望一辈子只是重复的编码吧——要做一个真正的“Software Developer”。
很多人会说“讨厌编程”,特别是很多女孩子(哈哈,软件行业的第一线总是表现的重男轻女)。——其实,编程真的很枯燥吗?恰恰相反。
有关这个“编程枯不枯燥的问题”实在不应该在这里提,改天转门写篇文档探讨一下,以正俺们“Software Engine”或“Software Developer”的腰。
对软件行业发展趋势的把握
对软件行业发展趋势的把握,似乎有些托大了。可能很多编程人员会说,他会非常关心最新的技术,什么AOP,什么IOC之类的——这些当然也很重要——半年的淡漠就意味着落后;一年的松弛,就意味遗忘——所以大家都在拼命的学。
但是,技术的发展是原因是什么呢?也许我们也应该思考思考:
是“客户的需求在纵深、扩张”;是“应用得领域在挖掘”;“是开发模式在变更”;“是软件概念在细化”。一句话,技术的革新是由于很多原因的碰撞,是软件上层领域的发展的必然产物。
可能这就是我们常说的:有些人在玩市场、有些人在玩需求、有些人在玩概念、有些人在玩技术。
可能提到“软件平台化”,大家都知道。但是有多少人能够较为清楚的描述当前“软件平台的层次划分”呢?能够描述出为什么会诞生“模型化业务基础软件平台”呢?为什么“中间件回会向软件基础架构平台演变”呢?
作为一个软件开发者,不光需要扎实的技术基本功(这是必要条件),还需要“抬起头,望前看”。
对产品所定位的市场把握
这个观点估计会让很多人疑惑——软件开发者为什么要关心市场呢?
大多人可能都会形成“领导决策----CTO把握-----产品经理控制----系统分析架构----软件技术”之类的思想或领导层次定位,随意然的就认为市场的需求仅仅是领导们的事情,软件开发者只需要根据领导的决策和定位,研究出产品即可。——这种思维,是多么的悲哀——这样的思维,才真正的扼杀了一个开发者的灵魂。
一个软件产品的价值,不在于其有多么高深的技术,而在于其可以为客户解决什么问题?
所以,一个开发者,在开发产品的时候,除了需要考虑技术问题,还需要考虑这个产品所投放的市场特性。
对产品的软件层次定位的把握
这个观点可能就很容易理解了,一个软件必须有自己适合的定位层次。世界上没有绝对完美的产品,但是在不同的层次,却有着不同得突出的待解决问题;于是不同层次的产品,就解决了不同的问题——于是,客户的需求就这么被不同的层次划分,一点点的解决。
所以,作为一个软件开发者,应该清楚地了解自己的所开发产品所属的层次、定位。
说到这儿,似乎和主题到底有什么关系呢?和技术方案有什么关系呢?——如果你去写技术方案就可以很容易理解:首先需要描述一下这个软件行业的发展趋势,因为这个趋势,所以某某产品是顺应时代发展需求的(先戴个高帽子),然后,某某产品定位在某个市场,为什么定位在这个市场啊,有多大发展空间啊(又是戴高帽子)·····
天啊,似乎在教唆老实巴交的软件开发者们去投靠奸诈、吹嘘的炒作中吗?去玩弄玄乎的概念吗?——写到这儿,自己都觉得有些害怕——大家应用看到软件发展的方向,看到可客户的需求,看到很多很多本应该看到的东西。
对产品的竞争的把握
如果一个产品没有了市场竞争,那么它就不能良性的发展;如果一个产品融入了太激烈的竞争,那么它就有可能被残杀;所以,一个开发者在开发产品的时候,一定要抱着这样一种思想:做一个超越竞争对手的产品!——那么,怎么样才能有这样的思想呢?《孙子兵法》曰:知彼知己、百战不殆!
不过,目前国内的市场状态不尽如人意——好的产品未必有好的市场——大家自己思索吧,点到即止。
--------------------------------------------------
到此差不多要结束了。本来列的几个方面还包括“对产品多需要解决问题把握”,“对产品的特点把握”,“对产品的体系把握”,不过这几个方面不说也罢,说个题目大家估计就明白一切了,没必要啰里啰唆的。
其实,文章最主要想表达的意思是——作为一个Software Developer,应该把眼光放远些,除了技术,还有很多也很重要的东西。
要做一个发展的Software Developer。