zoukankan      html  css  js  c++  java
  • 反思: 为什么我连普通的程序都写不好?


            在不完美的世界里聪明地匍匐前行, 是每一个程序员应该懂得的第一件事。           ------  引           


            从开始正式学习和使用Java语言起(不计之前学C的时间)到如今,约也有3年时间; 其间写过简单的增删查改的功能,也曾深入源码去钻研一件事情的工作原理, 读过不少软件开发的好书, 《编程珠玑》,《程序设计实践》, 《深入理解计算机系统》, 《从小工到专家》 等, 了解过多种编程语言,自认为还是有一点悟性的, 但是, 总感觉自己连普通的程序都写不好。这里, 普通的程序指的是使用现有的组件、框架等构造软件,编写业务逻辑代码。 为什么会这样呢? 


           未能知其所以然 ?

           太依靠“悟性”,没有更深入到事物的核心和工作原理,总是停留在肤浅的认识层次上; 不求甚解,浅尝辄止。读了不少书,但尝试太少, 消化比重太低。

           依靠直觉、文档说明和抽象机制使用组件和框架,而没有深入理解其内部实现, 在一知半解的基础上写程序, 虽然在初期能够快速构建 “It works”的程序,但实际上知之甚少。 类似于“建造空中楼阁”, 缺乏坚实的基础支撑。

           解决方案:  在概览全景之后, 将开发过程中积累的所有含糊不清的地方各个击破, 使所学及所用的关节打通,形成牢固的知识技能体系。 


           缺乏足够的挑战性?

           所编写的程序大多接近于业务应用层, 没有太多深入到计算机核心的东西。

           解决方案: 其实,把一件普通的事情做到非常出色,就是一件很了不起的事情。“伟大” 的程序并不是自身有什么伟大之处,而正是组合了许多平凡普通的程序而出色完成了它应该做到的事情。业务层开发也会遇到一些很有挑战性的问题, 不要回避,尽力去解决。 做好该做的事情, 你将赢得荣誉。


           没有拿得出手的程序 ? 

           看到别人写出了有影响力的程序或软件,而自己至今尚没有拿得出手的东西; 所写程序的影响力局限在较小的范围内,未能获得广泛的使用,缺乏驱动力和激励。

           解决方案:  你只是没有写出有实际用途的程序。 敏于去发现不足, 努力去改进, 总会写出令自己自豪的程序。 不一定要拿出很重量级的项目或应用。 即使一个小程序, 或许都可以做出很有益的事情。同时, 要尽可能开放给别人使用, 接纳别人的建议和改进。


           想要一蹴而就 ?

           很显然, 好的程序总是经过时间的打磨而成,而不是一次性就写得很好。 先写出基本可用的程序,然后逐步求精。 同时也要阅读优秀源代码, 扩展自己的见识。


           苛求程序质量却又测试怠惰?

           尽管尽力遵循良好的编程规范和风格, 总觉得代码性能不太好,潜藏BUG, 但又看不出。希望能够写出性能良好、可靠性、稳定性、健壮性好、可维护性佳,易用性良好的程序, 但又非一朝一夕之功。

           解决方案: 这是因为缺乏良好测试导致的对自己所写代码不自信的现象。 学习一些测试技能, 系统、严格地测试自己的程序, 最终获得代码的自信。 觉得代码性能不太好? 拿出实际数据和手段来, 不要凭感觉做事。 


           思维不严谨 ?

           不得不说,程序开发是对严谨逻辑思维的有力考验。如果思维不严谨, 很容易写出表面上能够工作实际上很容易失败的潜藏很多BUG的程序。 该如何提高思维的严谨性呢 ?  

           解决方案: 多多研习算法,应该是一条不错的途径。此外, 训练自己缜密、周密思考问题的能力。         


          期望过于理想的状态?

          希望能够尽可能借鉴现有的成熟方案, 做出一致、优雅的整体解决方案。

          解决方案: 持续改进和进步。


           程序开发的兴趣不浓?

           处于那种不惊不淡的程度吧, 毕竟, “It works” 已经不足以让人兴奋了;  期望能够写出优质易用的程序,也许追求更高的开发目标削减了开发的兴趣和乐趣。

           解决方案: 可能缺乏有力的外界激励, 比如说参与到一项非常有创新性的产品开发中, 或者有重大物质奖励。 适时寻求转向。


          开发方法和流程不规范 ?

          有时候, 过于随意的开发方法和流程, 以及过于松散的工作计划, 会削减自己的效率、积极性和创造力; 此外, 单掌难鸣, 有影响力的产品通常是由多人协作合力完成, 浓厚开放的团队讨论氛围有利于开发活动的顺畅进行。

          解决方案: 先制订相对合理的开发任务与工作计划, 再投入工作;  逐渐建立起适合自己的有效的开发流程与工作方法。 



           代码质量实际上是一个现象和结果。背后的原因可能有很多: 思维不严谨, 考虑问题不周到, 坏的编程习惯, 项目进度压力, 粗心, 缺乏足够的测试, 缺乏足够的驱动力和激励,对事物的深入理解不够, 心态问题等。要从问题的源头处改进,而不是从现象上出现一个解决一个。  


           重温下 《Unix/Linux 的设计思想》 ,上面有段话吸引了我:

           一个伟大的程序,如果满足条件: (1) 它必须满足实际需要; (2) 周围不存在任何了解该如何编写此程序的“专家”; (3) 没有足够时间“完美”完成任务。

           第一点是最必要的却常常做的不充分或过犹不及; 第二三点则说明, 其实不存在很理想的状态,没有充足的时间用来思考一个非常优雅的解决方案, 也不一定有现成的成熟方案。


          毕竟,一个程序就只是一个程序而已。做好该做的事情,逐步变得更好。 至于是否伟大, 究竟做了什么, 可能只是外在的表现和光环而已。踏踏实实钻研, 踏踏实实写好能做好事的程序,做有趣事情的程序, 精益求精但不过分苛求。 懂得享受一下生活日子, 这不挺好吗 ? 

              


  • 相关阅读:
    cf1100 F. Ivan and Burgers
    cf 1033 D. Divisors
    LeetCode 17. 电话号码的字母组合
    LeetCode 491. 递增的子序列
    LeetCode 459.重复的子字符串
    LeetCode 504. 七进制数
    LeetCode 3.无重复字符的最长子串
    LeetCode 16.06. 最小差
    LeetCode 77. 组合
    LeetCode 611. 有效三角形个数
  • 原文地址:https://www.cnblogs.com/lovesqcc/p/4037781.html
Copyright © 2011-2022 走看看