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、不要做手工劳动

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

这10个好习惯助你成为优秀的程序员相关推荐

  1. 成为优秀高级程序员的10个要点

     成为优秀高级程序员的10个要点 What 软件工程师的职业生涯要历经以下几个阶段:初级.中级,最后才是高级.这篇文章主要是讲如何通过10个步骤助你成为一名高级软件工程师. Why 得到更多的报酬 ...

  2. 1024程序员节书单,15本顶级精选好书,助你做项级程序员

    1024程序员节 1024程序员节是广大程序员的共同节日.1024是2的十次方,二进制计数的基本计量单位之一.针对程序员经常周末加班与工作日熬夜的情况,部分互联网机构倡议每年的10月24日为1024程 ...

  3. 怎样做一个优秀的程序员?这10个问题ChatGPT这样说 ……

    本文目录 1 怎样做一个优秀的程序员? 2 怎样成为优秀的架构师? 3 怎样写容易阅读的代码? 4 怎样做项目管理? 5 怎样学习计算机程序设计? 6 怎样提升个人影响力? 7 怎样提升认知? 8 程 ...

  4. 仅用10天设计的JavaScript,凭什么成为程序员最受欢迎的编程语言?

    导语:在这个世纪之交诞生的 JavaScript,没人想到会发展为当今世界上最流行的语言之一.它不够成熟,不够严肃,甚至连名字都是模仿的 Java.那么,JavaScript 的成功是依靠运气和完美时 ...

  5. 成为优秀Java程序员的10大技巧

    来自:http://geek.csdn.net/news/detail/114500 Java程序员有许多应遵循的守则或最佳实践方式.本文概述了每个开发者最应该遵循的10条守则或戒律,如果不遵循它们, ...

  6. 优秀的程序员都有哪些习惯?

    ]:「我不是卓越的程序员,我只不过是一个有着卓越习惯的程序员.」技术大牛 Kent Beck 曾这样说过自己. 7月初,nostrademons 在 Hacker News 发起一个讨论,是哪些习惯成 ...

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

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

  8. 仅用 10 天设计的 JavaScript,凭什么成为程序员最受欢迎的编程语言?

    在这个世纪之交诞生的 JavaScript,没人想到会发展为当今世界上最流行的语言之一.它不够成熟,不够严肃,甚至连名字都是模仿的 Java.那么,JavaScript 的成功是依靠运气和完美时机的侥 ...

  9. 10分钟学计算机,电脑运行越来越慢?程序员大牛10分钟教你学会电脑瘦身

    原标题:电脑运行越来越慢?程序员大牛10分钟教你学会电脑瘦身 你的电脑是不是越来越慢?这里让程序员大佬用10分钟时间教你学会给电脑软件瘦身,1分钟了解计算机硬件升级.分分钟让你成为别人眼中的计算机大牛 ...

最新文章

  1. python什么时候用框架_Python 中三大框架各自的应用场景
  2. 「每周CV论文推荐」 初学深度学习人脸属性分析必读的文章
  3. MapReduce开发总结
  4. OMG: daily scrum six
  5. maven国内镜像配置
  6. ai背景合成_智能合成AI主播很危险,应立即取消!
  7. 7. OD-破解收费版限制天数的软件
  8. ss模型复模态的物理意义及adams复模态振型求解
  9. Git学习收获(一)
  10. 《Java程序员职场全功略:从小工到专家》连载三:IT语言平台
  11. [转] TextField的restrict属性妙用
  12. iOS数据库的使用(二):sqlite教程
  13. AIX系统内存占用率的计算
  14. 安装linux取消硬盘密码设置,Linux Deepin安装到硬盘图文过程
  15. 白领巧学燕子飞可治颈椎疼
  16. Kuberneters企业级容器云平台落地实践之二
  17. 好不容易找到工作,还给期权,要去吗?
  18. 计算机西方经济学试题,西方经济学的习题与答案
  19. leveldb:Arena浅析
  20. 智能与人机融合智能的思考

热门文章

  1. PaddleDetection支持的数据格式
  2. paddlepaddle-VisualDL2.0对项目进行可视化调参
  3. GNU gcc的编译工具用法(转)
  4. Linux系统目录说明
  5. 云服务器 VNC 远程连接
  6. halcon控制算子Control,持续更新
  7. 【深度学习】——物体检测细节处理(NMS、样本不均衡、遮挡物体)
  8. C# 事件详解附实例分析
  9. Fisher线性判别算法原理及实现 MATLAB
  10. 2019编译ffepeg vs_如何在windows10下使用vs2017编译最新版本的FFmpeg和ffplay