`

[转]10步让你成为更优秀的程序员

 
阅读更多

 

作者: Paul Firth 

 

  英文原文:10 steps to becoming a better programmer

  这篇文章要介绍的,是我作为专业程序员这些年来学到的能真正提高我的代码质量和整体工作效率的 10 件事情。

  1. 永远不要复制代码

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

/// <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 出现。

  好吧,我说是 10 个,但你却得到了额外赠送的一个!

  这些就是我要说的,我希望它们能帮助你改进编程开发过程。

  下次再见!祝快乐!

  Cheers, Paul.

分享到:
评论

相关推荐

    程序员第二步:从程序员到项目经理

    针对文件信息,接下来的内容将基于“程序员到项目经理”的职业发展路径进行详细的知识点阐述。 首先,程序员与项目经理虽然都属于IT行业中的职位,但...只有通过不断的尝试和反思,才能真正成为一个优秀的项目经理。

    如何成为优秀的JSP 程序员

    【标题】"如何成为优秀的JSP程序员"涵盖了成为一名在JavaServer Pages (JSP) 技术领域出类拔萃的专业人士所需掌握的关键知识点。JSP是Java平台上的一个标准组件,用于开发动态web应用程序。要成为一名优秀的JSP...

    如何成为优秀的JSP程序员

    想要成为一名优秀的JSP程序员,你需要掌握一系列关键技能和知识领域。以下是一份详细的指南,帮助你踏上成为JSP专家的旅程。 1. **基础理论**:首先,你需要对Java编程有深入理解,因为JSP最终会转换为Java Servlet...

    如何成为一个优秀的JSP程序员

    由于只有一个文件名“如何成为一个优秀的JSP程序员”,可以推测该文件可能是一个综合性的指南或教程,包含多个章节,分别讲解成为优秀JSP程序员所需的不同方面。 **详细知识点:** 1. **JSP基础** - 学习JSP的基础...

    如何成为一个优秀的JSP 程序员

    要成为一个优秀的JSP程序员,你需要深入理解以下几个核心知识点: 1. **基础概念**: - JSP生命周期:JSP页面经历翻译、编译、加载、初始化、服务和销毁六个阶段。 - JSP指令:包括page、include和taglib,用于...

    如何成为一个优秀的JSP 程序员下载

    描述中的重复内容并没有提供额外信息,但可以理解为强调成为优秀JSP程序员的重要性。 **标签解析** 1. **jsp**:Java Server Pages,一种动态网页技术,它允许在服务器端执行Java代码并将其结果嵌入到HTML中,以...

    优秀程序员之路—Csharp开发经验及技巧汇总.pdf

    ### 优秀程序员之路——C#开发经验及技巧详解 #### 接口与类:灵活性与...总之,掌握这些C#开发经验和技巧,不仅能提升代码的质量和性能,还能帮助开发者在实际项目中更高效地解决问题,迈向成为优秀程序员的道路。

    程序员职业规划-如何成为优秀的企业人才.ppt

    对于男性程序员来说,成家立业的压力更是不亚于其他职业,购房首付、贷款以及家庭开支常常让他们感到力不从心。这种压力对他们的职业生涯产生了深远影响,迫使他们不断寻求提升和发展。\n\n其次,【IT白领的职业发展...

    如何成为优秀的软件人才

    【如何成为优秀的软件人才】 在当今信息化社会,软件人才的需求日益增长,成为一个优秀的软件人才不仅是个人职业发展的追求,也是推动科技进步的关键。以下是一些关键点,帮助你理解如何在这个领域中脱颖而出。 ...

    程序员 面试智力 题

    这些题目是程序员面试中常见的智力题,旨在考察应聘者的逻辑思维、问题解决...这些智力题不仅测试了程序员的基础技能,还考察了他们的创造力、逻辑思维和应对复杂问题的能力,这些都是成为一名优秀程序员所必需的素质。

    一个Java程序员应该掌握的10项技能

    ### 一个Java程序员应该掌握的10项技能详解 #### 1. 语法 作为Java程序员,必须熟悉Java...总之,成为一名优秀的Java程序员需要不断地学习和实践,掌握上述技能不仅有助于个人职业发展,也能为项目带来更大的价值。

    给新手程序员的10点忠告(精辟)

    ### 给新手程序员的10点忠告 #### 1. 规划职业生涯 - **核心要点**:作为新手程序员,重要的是明确自己的职业规划和发展方向。选择合适的行业入手,并逐步深入理解这个行业,避免频繁跳槽,特别是在薪资差异不大时...

    程序员必须走向专业化

    然而,要成为一名优秀的程序员,仅具备编程能力是远远不够的。《程序员必须走向专业化》这篇文章深入探讨了程序员如何通过专业化来提高自身价值和工作效率,以及专业化对于整个软件行业的意义。 #### 二、专业化的...

    《卓有成效的程序员》 迷你书

    《卓有成效的程序员》是一本专为程序员和软件开发者设计的迷你书籍,旨在帮助他们提升工作效率、优化工作流程,并最终成为一个卓有成效的技术专家。这本书涵盖了多个关键的知识点,对于那些希望在IT行业中脱颖而出的...

    未来五年程序员应当具备的十项技能.txt

    根据给定文件的信息,我们可以总结出未来五年程序员应当掌握的十项关键技能:...这些技能不仅涵盖了技术层面的要求,还强调了对业务领域的深刻理解以及良好的团队协作能力,这些都是成为一名优秀程序员不可或缺的要素。

    优秀程序员之路——C# 开发经验及技巧大汇总

    ### 优秀程序员之路——C# 开发经验及技巧大汇总 #### 1. 使用接口代替类作为参数 在面向对象编程中,接口提供了一种更加灵活的方式来定义对象的行为。使用接口作为方法参数可以提高代码的复用性和扩展性。这是...

    优秀程序员之路——C开发经验及技巧大汇总.pdf

    ### 优秀程序员之路——C开发经验及技巧大汇总 #### 关于预编译处理命令 在C语言中,预编译指令(Preprocessor Directives)是C编译过程中的一个重要组成部分,它们通常以`#`符号开头,并且不以分号结尾。预编译...

    如何成为优秀软件人才

    【如何成为优秀软件人才】 软件人才的培养和发展是一个复杂的过程,涉及到多个方面的能力提升和职业规划。本讲座由林锐博士分享,旨在帮助软件开发人员认清自身实力,规划职业道路,从而成为优秀的软件人才。 首先...

    程序员成长指南.pdf

    书中涵盖了成为一个优秀程序员所需的思想、技能和实践方法。以下将详细解析书中的部分核心知识点: 1. **编程思想**:书中强调了编程不仅仅是编写代码,更是解决问题的过程。它提倡程序员应具备抽象思维、逻辑思维...

    如何成为一个合格的java程序员

    要成为一个合格的Java程序员,需要全面且深入地掌握一系列技术和工具。下面将详细阐述成为一位合格Java程序员所需具备的关键技能。 ### 一、语法基础 Java作为一种静态类型的面向对象编程语言,其语法基础至关重要...

Global site tag (gtag.js) - Google Analytics