当我们的代码遇到问题的时候:

  1,不要怨天怨地。出了问题,当然有可能是系统的bug,API的问题,但是那些几率往往比你犯低级错误的几率要低多了,先从自己身上找原因,是不是自己写错了。   

  2,要掌握工具。最低限度你要会写Log,最好是Log和调试器结合。好 的工具可以大大的提高效率。以前有人跟我说,Dll不能调试,我发现可以;有人说多线程不能调试,我发现可以;有人说COM不能调试,我发现可以;有人说 IE插件不能调试,我发现可以;有人说OE插件不能调试,我发现也可以。

  3,分析问题要有逻辑。遇到问题可以先把所有的可能性都列出来,然后一个一个分析,肯定能找到原因的。  

  4,要学会隔离问题。问题涉及到的代码越多,越难以理解,问题越难以解决。遇到这样的情况,可以利用Log或者调试器,一行代码一行代码的给它们洗清嫌疑,这样很快你就可以找到出问题的地方。如果代码特别长,程序特别复杂,可以用二分法来做,效率很高。   

  5,千万不要懒惰,不要事事求别人。一次复杂的调试过程就像一部侦探剧,如果你有非常好的逻辑 性,那这部剧的主角就是福尔摩斯,剧情一定非常精彩。我说这个是有巨大风险的,说真的我帮人调东西挺上瘾的,很有意思。但是我还是要告诉大家,一次高难度 的调试之后,你的满足感绝对不亚于写了一个伟大的程序。

要想不遇到问题,写代码的时候:

  1,要对写出来的代码负责。我很佩服那些写代码写100行都不执行一次的高手,如果他们最后不被低级错误困扰的话我就更加的佩服了。我写程序几乎是写一行两行就要执行一次,每句话我都要确保执行效果跟我的预期一致。没错这样写 的时候 可能慢一些,但是调试的时候很轻松,我可以很简单的确定哪些代码绝对没有问题。所以我写代码整体速度比一般人高。很多人学习新东西的时候喜欢把例子抄一遍,运行一下,改改,再运行。我喜欢一句一句的抄例子,抄一句两句执行一次,这样可以把例子透彻的理解,而且很难会遇到出现了问题找不到原因的时候。   

2,函数体功能块不要过长。我认为我的智商并不高,我很难接受一个程序的一个函数体或者一 个功能块超越3屏(当然逻辑真的有那么复杂除外,你会发现越是简单的逻辑越是容易被人写的冗长)。很多人对面向对象耳熟能详,对封装继承看起来驾轻就熟。 但是动不动就写出来个函数体超长的程序。这是我对基础教育的微词所在,他们连教会学生写函数都没教会,虽然表面上他们连面向对象这么高深的东西都教。   

  3,缩进要对。这点很重要,虽然大部分语言不是像Python那样用缩进来决定逻辑块的位 置,但是人看到缩进的时候,总是会以为这些缩进位置跟逻辑相关。尤其是在有大量的ifelse或者for循环等等的嵌套逻辑的时候,如果缩进错了,可能会 直接让人把程序的逻辑读错。所以我拿到别人的代码,第一件事情就是整理缩进。我见过一些比较优秀的页面工程师,他们会在div结束的位置用注释写上这个 div的id,这样层级关系就一目了然了。   

  4,不断重构。随着程序的不断修改,有些部分会不断的增长,原来看着清晰的架构可能因为问 题的复杂而慢慢模糊,也可能被修正bug的权宜之计弄的面目全非。不信你找一个经过多次修改的程序看看,是不是满目疮痍,是不是都很难认出是你自己的作品 了。这在多人参与的项目中更加严重,每个人有不同的代码风格,经过多次杂交后,你肯定认不出你的代码是骡子是马,还是四不像了。随着程序的慢慢成长,原来 有些函数体会慢慢膨胀,需要拆分;有些原来简单的功能块四处都需要,应该被提炼成函数或者方法,等等。现在不重构,未来等到代码复杂到无法控制的时候,重 构的工作就会变得更加困难。

  讲得很有道理,很有深度,所以转过来,勤勉之!

转载于:https://www.cnblogs.com/repository/archive/2010/08/18/1802895.html

当我们的代码遇到问题的时候....;要想不遇到问题,写代码的时候要.....相关推荐

  1. laravel改代码没变化_菜鸡程序员是如何写代码的?

    每个程序员都要历经从菜鸡到大牛过程蜕变胡过程.当初大家起点都差不多,工作多年后,有些人依然停留在菜鸡,有些人却已成为大牛,所有的事情,都是一点一滴习惯养成.让我们看看菜鸡程序员是如何写代码的?有可能找 ...

  2. 写代码python用什么笔记本好_写代码对电脑有要求吗?什么电脑适合写代码?

    这个问题问得好,作为一个一线技术.产品从业者,首先我是一个符合文中定位的最佳用户:然后我从大学期间到现在就帮别人维护电脑超过了千台,这里慢包括了Mac电脑,WindowsPC以及LinuxPC,所以从 ...

  3. Springboot 一行代码实现文件上传 20个平台、少写代码到极致

    又是做好人好事的一天,有个小可爱私下问我有没有好用的springboot文件上传工具,这不巧了嘛,正好我私藏了一个好东西,顺便给小伙伴们也分享一下,demo地址放在文末了. 文件上传在平常不过的一个功 ...

  4. 【人工智能AI代码:AIXCodeCompletionHelper】一个集成了 Open AI 人工智能写代码的 Jetbrains IDE 插件(支持 Golang,IDEA等)

    目录 AIXCodeCompletionHelper 简介 支持平台 项目源代码 GitHub - to-be-architect/AIXCodeCompletionHelper 核心实现代码讲解

  5. 用Macbook-苹果系统写代码出现显示问题Text input context does not respond to _valueForTIProperty:

    Macbook / 苹果系统写代码出现显示问题 当使用Mac系统,在写代码的时候,如果是有一个GUI显示界面,然后你又去点击这个界面.此时,将报错. 我的源代码,是读取图片,显示图片. import ...

  6. 我为什么晚上写代码?

    摘要:作为一个有点追求的程序员,应该每天练习写代码,而夜深人静的时候,似乎比较合适,至少对我来说是这样. 我可真没时间写代码 写代码是我的工作,也是我的兴趣,本来以为,我应该可以一直写下去. 然而,现 ...

  7. 清华博士接亲被要求现场写代码,网友:真是面向对象编程!

    源 / 顶级程序员 因为结婚,程序员又上热搜了 但这次不是加班维护服务器 而是程序员接亲被要求现场写代码 01 清华计算机博士 接亲被要求现场写代码 陕西西安,一位清华计算机博士接亲,被新娘要求当场写 ...

  8. python在哪里写代码比较适合-程序员面试被要求手写代码,你与顶级程序员的差别在哪?...

    原标题:程序员面试被要求手写代码,你与顶级程序员的差别在哪? 前言: Python现在非常火,语法简单而且功能强大,很多同学都想学Python! 所以小的给各位看官们准备了收藏已久的视频教程分享给大家 ...

  9. 如何手写代码进行页面布局

    有的时候,布局文件(例如main.xml)并不是万能的,典型的例子就是你的QQ好友列表,在人数未知的情况下我们是不能通过布局文件写死在布局文件中的,因为它是动态的,所以必须查询数据库然后通过代码来动态 ...

  10. 技术总监谈好的程序员如何写代码

    要判断一个程序员是不是好的程序员,主要看他写的代码,因为程序员最重要的事是写代码. 即便不去理解代码的意图,只要看一眼,好的程序员写的代码与差的程序员写的代码基本上就可以看出来.好的程序员写的代码,整 ...

最新文章

  1. 为什么servlet-nameaction/servlet-name要这么写
  2. python字符串、列表和文件对象总结
  3. Android -- ImageLoader本地缓存
  4. [OSG]OSG的相关扩展
  5. 生成SLUTION MANAGER KEY 的ABAP程序
  6. VIM中常用的替换模式总结
  7. 初识powershell、nuget powershell 调试
  8. mysql clob转string_Java获取Oracle中CLOB字段转换成String
  9. matlab 按一定概率取数组中的值
  10. selenium3 + python - cookie定位
  11. 为什么相关性不等于因果性?终于有人讲明白了
  12. java bootstrapcache_使用ehcache持久化数据到磁盘 并且在应用服务器重启后不丢失数据...
  13. ​Java面向对象的概念整理
  14. eplan2.7在win10安装教程
  15. 基于Proteus的51单片机仿真
  16. android谷歌卫星地图,高德地图安卓端实现卫星地图路网功能
  17. mysql的用户名迁移SCHEMA_数据库实时转移之Confluent环境搭建(二)
  18. VC6使用GdiPlus绘制png图片
  19. 关于在控制面板上软件卸载失败的问题
  20. php图片素描化,ps怎么把图片变成素描图片

热门文章

  1. springboot 单测加入参数_Spring Boot集成Elasticsearch实战分享
  2. kotlin-unresolved reference daclaredFunctions
  3. 解决SSH登录无响应timed out问题
  4. pat 乙级 1011 A+B 和 C(C++)
  5. 工业交换机厂家有哪些,国产工业交换机品牌排行榜
  6. 4G物联网网关和工业路由器的区别
  7. 工业交换机有哪些功能?
  8. 地理科学师范计算机,地理科学师范考研方向指导参考
  9. mysql 返回多行数据_mysql – 如何连接多个表,包括查找表和返回行中的数据
  10. 缓冲区溢出漏洞攻击之用户登录