创新式开发探索(一) —— 开篇
创新并不是什么神秘的事物, 它就产生于我们工程师一族日常的开发活动中。
为什么还要加班熬夜写程序? 为什么上班的8小时不能把该学的东西都学到手, 该做的事情都做好? 为什么还停留于低层次低效率的开发 ? 是什么阻碍了我们更快更好地完成任务? 我们的日常开发活动除了完成指定任务, 是否有创新性产出? 高效、创新式开发有哪些规则方法可循?
创新是另一种高效。一旦依靠创新性技术或产品领先于竞争对手,就有时间来调整彼此的节奏,思考整体战略发展,而不是忙着去跟随; 从另一个角度来说,开发出一种创新性方案,往往也使效率成倍提升。再快的马车也跑不过火车就是例证。那么, 如何使开发活动更具创新性产出 ?
事不过三
什么是低层次低效率开发? 相信很多人见过很多重复的代码,也做过很多重复的开发任务。 做第一遍增删查改的时候, 那是必须经过的途; 做第二遍, 或许可以加深印象, 做第三遍及以上,就不可容忍了。 这就是“事不过三”的原则。
为什么不能做个增删查改的通用组件, 略加配置就可以完成 ? 或者尽可能地减少做类似功能的工作量? 我见过一个简易快速WEB开发框架,采用 Jquery + struts2 将“带搜索和增删查改的的分页数据控件”做成通用了,要增加一个类似功能, 只需要按约定写好 create.jsp, detail.jsp, update.jsp , 及继承一个基类,填充好若干方法即可。整个设计还是很优雅的,代码质量也很高,维护起来只需要理解一次,就可以使用多次。
为了摆脱低层次低效率开发, 必须从 “功能开发” 的角度转到 “模式解决” 和 “解决方案开发” 的角度。 不是去完成一项具体功能, 而是去寻求一类问题的模式实现和解决方案,提高宏观思考与设计思维。
及早确立方向
及早确立一个对自己有吸引力有前景的方向,然后全心投入探索。方向是努力的前提。
如果方向不明确,就容易被各种公司的低层次需要牵着走,将大部分时间和精力游走在各种开发框架和技术中,而无所精进。可能的结果是,即便写了若干WEB应用后,连 HTTP , Servlet 都不一定清楚; 浮于表面, 所花费的精力和时间都会随着时间很快地贬值。与此同时,某人可能早已在某个领域确立了主导地位。 大多数人一生的精力都只够做好一件事。必须将自己的力量、兴趣聚焦到一件事上面,才能有所成就。
加强科学功底
科学功底指的是这些东西, 比如索引如何提升数据库查询性能,文法如何指导语言的设计, 范式如何规范数据库的设计, 如何建立可靠的基准测试等。工程与科学的联系非常密切。
掌握计算机科学的力量,将可以使设计出的程序具备更强大的威力,触及计算世界的核心,这样更容易遇到非常具有挑战性的难题, 激发突破性创新。 云计算, 搜索, 数据库等这些突破性创新,无一不是在科学的基础上建立的。创意想法很容易模仿, 但科学的实力可不是那么容易偷走的,这也是 IBM 这个科技巨人一直屹立不倒的原因, —— 实力放在那里, 谁也不敢小觑。
大牛的人通常都具备很好的科学功底,—— 他们对计算机程序世界往往比我们单纯做开发的人看得更深更透彻。 读一读 《计算机程序的构造与解释》 这样偏科学性的书, 虽然不会教人具体的开发技能, 但可以引导人去领悟程序设计的精髓和道。
加固基础功底
基础功底是指计算机世界运行的基本的机制、原理和细节。 比如, 做网络开发,应用进程的数据是如何发送到指定远程机器上的应用进程的, 其中的整个连接、传输、关闭过程和细节清楚么? 做系统编程,一个进程是如何完成程序的一次运行, 系统如何调度多进程的执行, 数据结构、调度策略,其中的问题及解决方案、细节清楚么? 能够用实验来清晰地展示出来么? 不能总是满足于造空中楼阁。不要满足于做那些十岁小孩都能做出来的APP。
基础功底决定着一个人的发展潜力。 基础功底越强, 后爆发力就越强; 类似于内功心法,心法强的人,学习和參悟术式会很快;具备扎实基础功底的人,能够更容易地领悟新技术的本质,掌握新技术的应用,甚至引领技术发展。
踏实开发, 广泛涉猎
既然本分是工程师,那么,就要踏实做好技术钻研和开发工作; 此外,也要根据自己的爱好,方向等去广泛涉猎一些非技术性的书籍,比如 设计类, 产品类, 运营类,文学类,哲学类等。 交叉性的学科更容易产生创新的源泉。
多方面均衡
计算机程序设计实质上是一种心智活动,它运行于内心之中,表达于计算设备之上。因此, 不一定非得开电脑才能编程。 运动锻炼,理解倾听, 心智活动训练,人际交流等多种方式都可以从侧面加强开发能力的提升,—— 而且还可以丰富我们的生活, —— 不仅仅是学习技术这一条途经。 创新能力可能更受益于综合能力的提升和均衡。
释放天赋和直觉
人类是从自然孕育而生的,因此,必然与自然存在某种紧密的联系和互通性。 人生而拥有强大的天赋、直觉和本能, 只需要去发现和释放它。
长期的学习和主流的教育理念使我们更注重系统的技能教育和分析性思维,而忽略了自然赐予我们的软力量: 本能, 直觉, 想象力, 而这种软力量实质上是更强大的,要相信大自然的智慧。
开发三技巧
探究原理, 掌握方法, 查阅文档。
大多数时候, 都是边学边用。像 Extjs 这种框架, 配置项N多,看都看不过来,到处都是坑,怎么学? 那就要理解它的基本工作机制和原理, 掌握核心常用的部分,其后通过查阅文档来解决实际问题。 不探究基本的工作机制和原理, 遇到问题就容易一筹莫展,不能知其所以然; 不掌握核心常用的部分,难以实际应用; 想贪多求全, 精力又应付不来。
创新式开发在哪里
总是忙着开发,开发, 究竟开发些什么东西? 产生了多少价值和影响? 我们常常关注开发的高效性, 却忽视了开发中的创新能力。 是时候重视这个问题了!