反思: 为什么我连普通的程序都写不好?
在不完美的世界里聪明地匍匐前行, 是每一个程序员应该懂得的第一件事。 ------ 引
从开始正式学习和使用Java语言起(不计之前学C的时间)到如今,约也有3年时间; 其间写过简单的增删查改的功能,也曾深入源码去钻研一件事情的工作原理, 读过不少软件开发的好书, 《编程珠玑》,《程序设计实践》, 《深入理解计算机系统》, 《从小工到专家》 等, 了解过多种编程语言,自认为还是有一点悟性的, 但是, 总感觉自己连普通的程序都写不好。这里, 普通的程序指的是使用现有的组件、框架等构造软件,编写业务逻辑代码。 为什么会这样呢?
未能知其所以然 ?
太依靠“悟性”,没有更深入到事物的核心和工作原理,总是停留在肤浅的认识层次上; 不求甚解,浅尝辄止。读了不少书,但尝试太少, 消化比重太低。
依靠直觉、文档说明和抽象机制使用组件和框架,而没有深入理解其内部实现, 在一知半解的基础上写程序, 虽然在初期能够快速构建 “It works”的程序,但实际上知之甚少。 类似于“建造空中楼阁”, 缺乏坚实的基础支撑。
解决方案: 在概览全景之后, 将开发过程中积累的所有含糊不清的地方各个击破, 使所学及所用的关节打通,形成牢固的知识技能体系。
缺乏足够的挑战性?
所编写的程序大多接近于业务应用层, 没有太多深入到计算机核心的东西。
解决方案: 其实,把一件普通的事情做到非常出色,就是一件很了不起的事情。“伟大” 的程序并不是自身有什么伟大之处,而正是组合了许多平凡普通的程序而出色完成了它应该做到的事情。业务层开发也会遇到一些很有挑战性的问题, 不要回避,尽力去解决。 做好该做的事情, 你将赢得荣誉。
没有拿得出手的程序 ?
看到别人写出了有影响力的程序或软件,而自己至今尚没有拿得出手的东西; 所写程序的影响力局限在较小的范围内,未能获得广泛的使用,缺乏驱动力和激励。
解决方案: 你只是没有写出有实际用途的程序。 敏于去发现不足, 努力去改进, 总会写出令自己自豪的程序。 不一定要拿出很重量级的项目或应用。 即使一个小程序, 或许都可以做出很有益的事情。同时, 要尽可能开放给别人使用, 接纳别人的建议和改进。
想要一蹴而就 ?
很显然, 好的程序总是经过时间的打磨而成,而不是一次性就写得很好。 先写出基本可用的程序,然后逐步求精。 同时也要阅读优秀源代码, 扩展自己的见识。
苛求程序质量却又测试怠惰?
尽管尽力遵循良好的编程规范和风格, 总觉得代码性能不太好,潜藏BUG, 但又看不出。希望能够写出性能良好、可靠性、稳定性、健壮性好、可维护性佳,易用性良好的程序, 但又非一朝一夕之功。
解决方案: 这是因为缺乏良好测试导致的对自己所写代码不自信的现象。 学习一些测试技能, 系统、严格地测试自己的程序, 最终获得代码的自信。 觉得代码性能不太好? 拿出实际数据和手段来, 不要凭感觉做事。
思维不严谨 ?
不得不说,程序开发是对严谨逻辑思维的有力考验。如果思维不严谨, 很容易写出表面上能够工作实际上很容易失败的潜藏很多BUG的程序。 该如何提高思维的严谨性呢 ?
解决方案: 多多研习算法,应该是一条不错的途径。此外, 训练自己缜密、周密思考问题的能力。
期望过于理想的状态?
希望能够尽可能借鉴现有的成熟方案, 做出一致、优雅的整体解决方案。
解决方案: 持续改进和进步。
程序开发的兴趣不浓?
处于那种不惊不淡的程度吧, 毕竟, “It works” 已经不足以让人兴奋了; 期望能够写出优质易用的程序,也许追求更高的开发目标削减了开发的兴趣和乐趣。
解决方案: 可能缺乏有力的外界激励, 比如说参与到一项非常有创新性的产品开发中, 或者有重大物质奖励。 适时寻求转向。
开发方法和流程不规范 ?
有时候, 过于随意的开发方法和流程, 以及过于松散的工作计划, 会削减自己的效率、积极性和创造力; 此外, 单掌难鸣, 有影响力的产品通常是由多人协作合力完成, 浓厚开放的团队讨论氛围有利于开发活动的顺畅进行。
解决方案: 先制订相对合理的开发任务与工作计划, 再投入工作; 逐渐建立起适合自己的有效的开发流程与工作方法。
代码质量实际上是一个现象和结果。背后的原因可能有很多: 思维不严谨, 考虑问题不周到, 坏的编程习惯, 项目进度压力, 粗心, 缺乏足够的测试, 缺乏足够的驱动力和激励,对事物的深入理解不够, 心态问题等。要从问题的源头处改进,而不是从现象上出现一个解决一个。
重温下 《Unix/Linux 的设计思想》 ,上面有段话吸引了我:
一个伟大的程序,如果满足条件: (1) 它必须满足实际需要; (2) 周围不存在任何了解该如何编写此程序的“专家”; (3) 没有足够时间“完美”完成任务。
第一点是最必要的却常常做的不充分或过犹不及; 第二三点则说明, 其实不存在很理想的状态,没有充足的时间用来思考一个非常优雅的解决方案, 也不一定有现成的成熟方案。
毕竟,一个程序就只是一个程序而已。做好该做的事情,逐步变得更好。 至于是否伟大, 究竟做了什么, 可能只是外在的表现和光环而已。踏踏实实钻研, 踏踏实实写好能做好事的程序,做有趣事情的程序, 精益求精但不过分苛求。 懂得享受一下生活日子, 这不挺好吗 ?