1. 永远不要复制代码

不惜任何代价避免重复的代码。如果一个常用的代码片段出现在了程序中的几个不同地方,重构它,把它放到一个自己的函数里。重复的代码会导致你的同事在读你的代码时产生困惑。而重复的代码如果在一个地方修改,在另外一个地方忘记修改,就会产生到处是bug,它还会使你的代码体积变得臃肿。现代的编程语言提供了很好的方法来解决这些问题,例如,下面这个问题在以前很难解决,而如今使用lambdas却很好实现:

/// <summary>
/// 一些函数含有部分重复代码
/// </summary>
void OriginalA()
{  DoThingsA();  // unique code  DoThingsB();
}
/// <summary>
/// 另外一个含有部分重复代码的函数
/// </summary>
void OriginalB()
{  DoThingsA();  // 没有重复的代码  DoThingsB();
}

现在我们重构含有部分相同代码的函数,用delegate模式重写它们:

/// <summary>
/// Encapsulate shared functionality
/// </summary>
/// <param name="action">User defined action</param>
void UniqueWrapper(Action action)
{  DoThingsA();  action();  DoThingsB();
}
/// <summary>
/// New implmentation of A
/// </summary>
void NewA()
{  UniqueWrapper(() =>  {  // unique code  });
}
/// <summary>
/// New implementation of B
/// </summary>
void NewB()
{  UniqueWrapper(() =>  {  // unique code  });
}

2. 留意你开始分心的时候

当你发现自己在浏览facebook或微博、而不是在解决问题,这通常是一种你需要短暂休息的信号。离开办公桌,去喝一杯咖啡,或去跟同事聊5分钟。尽管这样做看起来有点反直觉,但长久去看,它会提高你的工作效率。

3. 不要匆忙赶任务而放弃原则

当带着压力去解决一个问题或修改一个bug,你很容易失去自制,发现自己匆匆忙忙,甚至完全忘了一直坚持的重要的测试过程。这通常会导致更多的问题,会让你在老板或同事眼里显得很不专业。

4. 测试你完成的代码

你知道你的代码能做什么,而且试了一下,它确实好用,但你实际上需要充分的验证它。分析所有可能的边界情况,测试在所有可能的条件下它都能如期的工作。如果有参数,传递一些预期范围外的值。传递一个null值。如果可能,让同事看看你的代码,问他们能否弄坏它。单元测试是到达这种目的的常规方法。

5. 代码审查

提交你的代码之前,找个同事一起坐下来,向他解释你做了哪些修改。通常,这样做的过程中你就能发现代码中的错误,而不需要同事说一句话。这比自己审查自己的代码要有效的多得多。

6. 让代码更少

如果你发现写了大量的代码来解决一个简单的问题,你很可能做错了。下面的boolean用法是一个很好的例子:

if (numMines > 0)
{  enabled=true;
}
else
{  enabled=false;
}

这时你应该写成这样:


enabled = numMines > 0;

代码越少越好。这会使bug更少,重构可能性更小,出错的几率更小。要适度。可读性同等重要,你可不能这样做而使代码丧失可读性。

7. 为优雅的代码而努力

优雅的代码非常的易读,只用手边很少的代码、让机器做很少的运算就能解决问题。在各种环境中都做到代码优雅是很难的,但经过一段时间的编程,你会对优雅的代码是个什么样子有个初步的感觉。优雅的代码不会通过重构来获得。当你看到优雅的代码是会很高兴。你会为它自豪。例如,下面就是一个我认为是优雅的方式来计算多边形面积的方法:

static public double GetConvexPolygonArea(Vector2[] vertices)
{  double area = 0;  for (int i = 0; i < vertices.Length; i++)  {  Vector2 P0 = vertices[i];  Vector2 P1 = vertices[(i + 1) % vertices.Length];  area += P0.Wedge(P1);  }  return area / 2;
}

8. 编写不言自明的代码

勿庸置疑,注释是编程中很重要的一部分,但能够不言自明的代码跟胜一筹,因为它能让你在看代码时就能理解它。函数名变量名要慎重选择,好的变量/方法名字放到语言语义环境中时,不懂编程的人都能看懂。例如:

void DamagePlayer(Player player, int damageAmount)
{  if (!player.m_IsInvincible && !player.m_IsDead)  {  player.InflictDamage( damageAmount );  }
}

9. 不要使用纯数字

直接把数字嵌入代码中是一种恶习,因为无法说明它们是代表什么的。当有重复时更糟糕——相同的数字在代码的多个地方出现。如果只修改了一个,而忘记了其它的。这就导致bug。一定要用一个命名常量来代表你要表达的数字,即使它在代码里只出现一次。

10. 不要做手工劳动

当做一系列动作时,人类总是喜欢犯错误。如果你在做部署工作,并且不是一步能完成的,那你就是在做错事。尽量的让工作能自动化的完成,减少人为错误。当做工作量很大的任务时,这尤其重要。

11. 避免过早优化

当你要去优化一个已经好用的功能代码时,你很有可能会改坏它。优化只能发生在有性能分析报告指示需要优化的时候,通常是在一个项目开发的最后阶段。性能分析之前的优化活动纯属浪费时间,并且会导致bug出现。

希望它们能帮助你改进编程开发过程

转载于:https://blog.51cto.com/13717297/2154405

十步让你成为更优秀的程序员相关推荐

  1. 10 步让你成为更优秀的程序员

    这篇文章要介绍的,是我作为专业程序员这些年来学到的能真正提高我的代码质量和整体工作效率的10件事情. 1. 永远不要复制代码 不惜任何代价避免重复的代码.如果一个常用的代码片段出现在了程序中的几个不同 ...

  2. 10步让你成为更优秀的程序员

    这篇文章要介绍的,是我作为专业程序员这些年来学到的能真正提高我的代码质量和整体工作效率的10件事情. 1. 永远不要复制代码 不惜任何代价避免重复的代码.如果一个常用的代码片段出现在了程序中的几个不同 ...

  3. 成为更优秀的程序员:退后一步看问题

    转载自   成为更优秀的程序员:退后一步看问题 一天,在工作中- Bug #3890 来自客户: 有个程序出现了错误,程序提示说"SpeedCalculator::compute()里出现了 ...

  4. 如何成为更优秀的程序员?程序员进阶的8种途径

    本文讲述了8种方式帮助你如何从一名普通的程序员进阶成为一名伟大的程序员,让我们就从此时此刻开始提高自己的开发技能吧. 是时候开始认真考虑一下如何升级你的java开发技术了.让我们来认真地学习一下吧. ...

  5. 怎样成为一名更优秀的程序员?我总结出 7 条建议,希望对你们有帮助!

    有几个人在 React 大会上向我请教一个问题--如何成为一名更优秀的程序员.人们将我视为一名非常资深的程序员,因此值得听听我的建议.我觉得可以分享一下,自己多年来在编程方面的"思维模式&q ...

  6. 怎样成为一名更优秀的程序员?我总结出 7 条建议

    有几个人在 React 大会上向我请教一个问题--如何成为一名更优秀的程序员.人们将我视为一名非常资深的程序员,因此值得听听我的建议.我觉得可以分享一下,自己多年来在编程方面的"思维模式&q ...

  7. 学习编程基础知识,进阶成为更优秀的程序员

    "脚本小子"常常从某些网站上复制脚本代码,然后到处粘贴,却并不明白其中的方法与原理 ​​当你看到编程语言编进教材的时候,看到一个文科生也在编写Python程序进行数据分析的时候,你 ...

  8. 优秀的程序员和一般的程序员差别在哪?

    在我平时所见到的程序员中,如果纯以编码能力来看,个人觉得可以分为五类,依次是: 1.拷贝型 拷贝型选手就是传说中的"代码拷贝员"了,他们对实现功能几乎没有思路,所作的事情就是从网上 ...

  9. 优秀的程序员是如何处理技术 Bug 的?

    最近我的圈子里人们都在讨论"如何成为更优秀的程序员". 看了他们的讨论,我决定分享一下我关于"如何成为更优秀的程序员"的经验.我希望向别人介绍我认为有用的经验, ...

最新文章

  1. 泰坦尼克号数据_看完泰坦尼克号生还数据之后,你还会认为是妇女和儿童先走吗?...
  2. 应用程序下载地址汇总
  3. aspx 判断字符串是否为decimal_python3之判断字符串是否只为数字!isdigit()、isnumeric()方法...
  4. C#返回mysql查询结果_c#查询MySQL是怎么接收返回结果的
  5. 这几天微软发布的一些好玩的东西(顺祝女性程序员朋友们节日快乐!)
  6. django的web开发笔记1(智能诊断系统数据概览记录)
  7. Oracle数据库空间突然增大,Oracle 表空间异常增长过快解决方法
  8. 苹果cms10自适应模板_哪里有苹果cms10自适应模板?
  9. python如何使用geotools_Python pygeotools包_程序模块 - PyPI - Python中文网
  10. UML---(1)一张图看懂UML 类图
  11. win7下ngnix mysql php的安装_windows7下nginx +mysql+多版本PHP共存安装方法
  12. 关于Android studio Translation插件提示“更新 TKK 失败,请检查网络连接”问题
  13. 分类任务如何用逻辑回归实现_【机器学习面试总结】—— LR(逻辑回归)
  14. 移动端表格 横向纵向自适应
  15. 如何用python画笑脸QQ表情——turtle库实践
  16. MySQL Online DDL学习笔记
  17. 管理学定律五:二八定律与木桶理论
  18. 缺陷管理 如何发现更多的缺陷
  19. CAN诊断浅谈 如何用CAN工具进行诊断
  20. FPGA第三节:IP调用实现HDMI输出

热门文章

  1. hibernate 映射表_Hibernate多对多映射-连接表
  2. Hibernate Session合并,更新,保存,saveOrUpdate,持久化示例
  3. Eclipse安装SVN
  4. mybatis 业务逻辑
  5. Django中间件简析
  6. 【POJ3415】 Common Substrings (SA+单调栈)
  7. 安卓开发之刮刮乐实例教程
  8. mongodb、mysql、redis的性能对比
  9. Cisco AP1240多SSID配置简解
  10. 通过输入方式在Android上进行微博OAuth登录