十步让你成为更优秀的程序员

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

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

原文地址:http://blog.51cto.com/13717297/2154405

时间: 2024-10-05 16:40:01

十步让你成为更优秀的程序员的相关文章

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

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

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

在我平时所见到的程序员中,如果纯以编码能力来看,个人觉得可以分为五类,依次是: 1. 拷贝型 拷贝型选手就是传说中的“代码拷贝员”了,他们对实现功能几乎没有思路,所作的事情就是从网上或是之前其他团队成员写的代码中拷贝出片段,然后放到项目中,如果运行项目出现了期望结果,则表示任务完成. 这类人只会改代码,却不会写代码.他们大多对编程毫无兴趣,只是希望以此糊口而已. 2. 新手型 当产品有功能需求时,由于经验有限,程序员并不完全知道要如何实现这个功能,需要通过学习.寻找资料等方式来解决问题. 这种情

如何成为一名优秀的程序员?

学习 转自:http://icodeit.org/2017/07/tips-for-newbies/ 作为一个从业快10年的程序员,我想给新入行的程序员们一些建议.这些建议是我希望自己可以在毕业的时候就读到的,也希望它们可以帮助你成为一个更好的程序员. 简单归纳一下,总共有7条: 保持健康 编程之外的爱好 持续学习 正确应对犯错 不要囿于角色 展示你的创意 刻意练习手速 下面我来详细说说每一点. 保持健康 三寸气在千般用,一旦无常万事休 首先要说的当然是健康,脱离的这个本钱,一切都无从谈起.久坐

(转)如何成为一名优秀的程序员?

前几天有人分享的一篇文章,看着不错,转发一下,也算是对自己的一些建议吧,在这里感谢原作者的分享. 作为一个从业快10年的程序员,我想给新入行的程序员们一些建议.这些建议是我希望自己可以在毕业的时候就读到的,也希望它们可以帮助你成为一个更好的程序员. 简单归纳一下,总共有7条: 保持健康 编程之外的爱好 持续学习 正确应对犯错 不要囿于角色 展示你的创意 刻意练习手速 下面我来详细说说每一点. 保持健康 三寸气在千般用,一旦无常万事休 –<jin ping mei> 备注一下:在博客园发表文章,

【知乎】怎么成为一个优秀的程序员,而不是一个优秀的码农?

怎么成为一个优秀的程序员,而不是一个优秀的码农? 9 条评论 分享 默认排序按时间排序 98 个回答 3844赞同反对,不会显示你的姓名 萧井陌 微信公众号:炼瓜研究所 技术社区 - 3844 人赞同 优秀的程序员会告诉你打根基的重要性,会劝你在厚积薄发前要隐忍. 优秀的码农会告诉你学啥底层.啥啥啥一拖就好了,学了python还要啥自行车啊,数据结构排序函数二分搜索这不都内置了吗?工作中永远用不到,学算法有啥用啊?成为高手有很多种方法汇编是个屁啊? +++基础的分割线+++ 列举几个我认为比较重

如何成为一个优秀的程序员(大部分写的都非常不错)——要勤快,不停的学习;争论是无意义的,不如把两种都学了,会更有收获。

在看这份FAQ之前,你必须先读完ESR的<如何成为一名黑客>(本文末尾附有中译版),该文所讲过的道理我不再重复.该文用很大的篇幅讲什么是黑客文化,虽然态度和信仰的确是成功的最关键因素,但是你肯定会想,做不做黑客跟我没关系,我只是想学个一技之长,找个好工作而已,对吧?那么肯定更希望获得一些具体的可操作的指导.     1.各种软件技术之间是怎样的关系? 我把软件技术分为三个层次:    问题域:计算机图形学.音视频编码.信息安全.模式识别.信息检索.自然语言分析.人工智能.科学计算等:     

[转]如何成为优秀的程序员?

原文: https://kb.cnblogs.com/page/578689/ --------------------------------------------------------------------------------------------------------------- 作为一个从业快10年的程序员,我想给新入行的程序员们一些建议.这些建议是我希望自己可以在毕业时就读到的,也希望它们可以帮助你成为一个更好的程序员. 简单归纳一下,总共有7条: 保持健康 编程之外的

一个优秀的程序员所具备的14个品质【转载】

慎于说Yes 在没有搞清楚开发需求.任务工作量.团队期望值之前,有前途的程序员不会轻易答应.特别是对于新人来说,比较急于表现自己,对于同事或者老板的工作安排来者不拒,精神可嘉,方法不可取.承诺太多,会出现自己无法按时完成的情况,即使按时完成,也可能没有达到别人的期望值,长期以往别人对你的失望会越来越多. 敢于说No 看起来和第一条雷同,其实细究起来不一样.第二条执行起来比第一条难得多.当遇到明显不合理的要求时,可以考虑拒绝,前提是准备好了全面充分的理由.不要经常说No,但是一旦说了,就要切中要害

怎么成为一个优秀的程序员,而不是一个优秀的码农?

啥是优秀程序员? 记者和很多网民说熊猫烧香作者是高手 公司里你出什么bug他都能告诉你原因用什么软件有问题他都能回答你的你就觉得是高手 有人说徒手做产品的全栈才是高手 各语言的作者都是高手 有不写代码,扔出一个restful论文的 还有人说高德纳是神,他如果是神,那他那些代码一定是在考验我们,嗯 .... 上面这些的确都算是高手,我琢磨着前两年被开掉的moto公司员工里肯定也有做功能机的高手和写廉价板驱动的高手 你想自己选自己的方向还是被人忽悠方向? 我的想法是自己都尝试玩玩,然后做自己喜欢的方