首页 > 代码库 > 程序员突围-程序调试分析(序)
程序员突围-程序调试分析(序)
程序员突围-程序调试分析(序)
-从实践到思考,痛苦的煎熬
其实算算,工作一年了,从大学毕业至今,接触编程已经五年了,但是真正的编程感觉还没有开始,从大一开始接触C语言,陆续接触c++,java,C#等等,现在感悟到了一点,编程语言学那么多有什么用呢?其实把一门编程语言学精了,学透了,其他的是触类旁通的(底层的C语言和C++可能有点例外),下面我会说一下我的经历,我感觉可能是大多数学习编程人的必经的阶段,让大家对编程的抵触少一些,然后想想一个我这样的白痴都能慢慢的开始程序调试,程序分析,你们绝对比我强的,下篇文章才会进入我的程序调试分析的正题(大家感觉唠叨的话,那么就直接看下一篇文章)
从大四正式工作应聘咨询顾问开始,本来说已经要远离编程了,但是想得有点太理想了,工作一年,一直在做javaweb方面的编程,不过是比较简单的编程,因为公司的框架编写的还不错,因而我们的工作很简单,写一写简单的js,java,jsp代码就可以了,重点是跟客户沟通需求确定好之后,然后就开始做,这一年做的太杂了,而且感觉自己的成长不大,于是在即将涨薪的前20天,我离职了.
估计大家有好奇了,怎么又开始扯一些不相关的了,这只是我在交代背景.马上就进入正题了,想想自己大学自己先接触的C#的知识,于是后来在接触java的时候,很抵触,java功底很差,再加上大学时自己虽然编写过一些东西,不过是不登大雅之堂的,自己的程序调试能力很差劲,遇到问题很多时候焦头烂额,找到问题时枉然大悟,不知道大家当时有没有这样的感觉,找不到bug时想把电脑砸了,找到bug时,想把自己砸了,当时毕业时不考虑做编程也是有这方便的因素,说白了,就是想逃避bug,其实是我没有找到真正合适的程序调试分析的方式方法,有一句话,现在牢记于心,学习和学会学习两个不同的方面.
公司在培训期间,我们就开始用公司的框架写一些简单的东西,但是我遇到的全部都是问题,你想想,对于一个Eclipse都不熟悉的人,遇到问题,找都不会找,焦头烂额,旁边的同学对eclipse是比较熟悉的,人家遇到问题比较少的,我的心态很不好的,安装一个db2,安装了5遍,才弄好,如果没有涉及到公司框架的东西,搜索搜索还能查到相关的信息,涉及到公司框架的配置什么的,公司提供的资料不详细,我可是忙坏了,不过还好,最终还是弄了出来,但是总是感觉自己遇到的问题比别人多,其实这里就已经开始思考一些了,为什么我做一个东西要比别人遇到的问题多,为什么解决问题没有那么迅速.
再到去年9月正式工作,工作后在客户地,自己每天的进度客户都是大概清楚地,经理交代的任务我是能够完成的,但是我花费的时间是比较多的,经理和客户方都已经意识到了这个问题,经理说过我两次,我也是不服输的人,于是,周末自己加班,虽然工作按时完成了,但是总感觉自己哪里不对劲,为什么别人半天完成的工作,我却需要一天完成(我的同事至少是有一年工作经验的,就我是新手),这时,我遇到的是第一个问题,那就是感觉自己知识严重缺乏,你想想,连ArrayList都用不好的人,js中常用的方法都不熟悉,jsp的基本知识都不怎么了解,外加公司的框架,混合到一块,我还不疯掉,想想,一个用户注册的页面,我都能写半天,我还怎么写代码,写出来的代码是严重有问题的,遇到一个java代码,用最原始的system.out的方式,js遇到错误,完全就白痴了,问当时工作了两年的人,看看问题,调试调试,问题就出来了,其实遇到的不是什么大问题,就是js中名字写的不一样,ie报错,undefined,现在想想,当时是不是笨死了.
当时,感觉发现自己的第一个弱点了,那就是jsp知识太差劲了,其实我的java知识也是很差劲的,从上面的描述你也可以知道,但是工作中差不多够用,jsp知识呢,属于一窍不通,于是开始学习html,然后学习css,再后来是js,当然我说的都是基本的知识,因为首先我要保证这些基本知识我知道,用的时候就算磕磕绊绊起码也能写出来,要不然就完全没有头绪了.
就这样,工作中的不再没有写不出的东西,但是却发现自己的第二个问题,那就是为什么我写东西写的比较慢?
总结了一下原因,基础知识不扎实,但是这个学的基础知识已经差不多够用了,为什么还是慢呢?其实发现是如下的几点:
1. 学的知识用的少,不熟练,磕磕绊绊能够敲出来
2. 还是在考虑面向过程的编程,并没有真正的实现面向对象的编程
于是在每天下班后,我还是在练习一些东西,看看网上讲解不错的视频,看看书籍,写一些代码,但是思维还是没有转换出来.
比如说,那次要求写的一个模块,我在一个类的一个方法中,实现了需求的功能,但是这个方法总是出现问题,我的这个方法写的时间是比较长的,为什么呢?中间的逻辑太复杂了,想想,一个方法,我写了将近一百五十行的样子,涉及到了三个逻辑的处理,现在想想,当时好傻的样子,既然这三个可以说是独立的功能,那么我直接分成三个方法来写,以后还可以复用.
这就是慢慢开始实现面向对象的编程了,感觉到最有效的一次就是那次在写另外一个模块时,发现接口有问题,与外围系统沟通解决后,我的那个功能模块书写后加上测试,就用了一天的时间,在平常,这是不可能的.
在这期间,我慢慢的学会了在eclispe中debug的方式,这其实是比较慢的方法,但是当时好像我喜欢上了debug模式,想想就有点扯.
到那时,我寻找问题的能力感觉还是不足的,但是后来呢,慢慢的开始维护,因为维护的好多东西都是自己写的,所以问题找起来比较方便了,慢慢有了一些成就感,由于是一个系统,而且系统很大,客户在遇到问题时,有时候客户只是一句话说这里出现了点问题,我就开始回去找问题,浪费了很多时间,其实,如果不是特别简单的问题,我应该首先问客户是如何操作,才遇到这个问题的,在问客户的操作时,我们的大脑已经把他的描述转换成了我们的代码的流转,到了他说问题的地方,我们大概能够猜测是哪里出了问题.
说的这些,都是在打基础,不断的犯错误,然后改正错误,慢慢的调整,真正的调试程序分析还是在今年的五月份的样子,记得当时我们公司的一位大神就在我们项目组,而且和我一个房间,当时已经接触了一个多月,有点熟悉了,我们沟通的也不少,我的编程方式和特点人家一眼就能看出来,我疑问了好久的问题问了他,为什么我找问题那么慢,是不是方式方法出了问题,他说肯定是方式方法出了问题,接下来的几天他就离开项目组了,我也知道方式方法出了问题,但是是什么问题呢?
自己解决不了的问题,于是我上网开始搜索思维逻辑方便的东西,还真有,有一本书比较薄的是<程序员的思维训练>,感觉遇到知音了,薄薄的一本pdf,两百多页,还行,看了几遍,虽然很多内容已经忘记了,但是还是记住了一些.其实很多不关键的因素影响着我们的编程效率和编程质量,关于那本书的内容,大家可以下载看看的.