游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10642|回复: 5

成为更加优秀的程序员的10个要点

[复制链接]

1万

主题

1万

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36572
发表于 2015-5-6 15:03:46 | 显示全部楼层 |阅读模式
  下面,我将作为一名有着多年编程经验的专业程序员,分享一些精华——它们已经帮助我提高了我的代码质量和整体的工作效率,希望也能对你有所裨益 。

1429779736832913.jpg

  1.永远不要重复代码

  不惜一切代价也要避免重复代码。如果你有几个不同的地方经常性地要使用某个代码片段,那么可以将它重构成函数。代码重复不但会导致阅读混乱,导致bug——修复了这里的重复片段,却遗漏了其他地方的,还会导致代码库的臃肿和可执行文件大小的膨胀。现在的编程语言,能大大改善这方面的麻烦,例如,下面这段示例代码在委托和lambda表达式出现之前很难解决:

  1. /// <summary>
  2. /// Some function with partially duplicated code
  3. /// </summary>
  4. void OriginalA()
  5. {
  6.         DoThingsA();

  7.         // unique code

  8.         DoThingsB();
  9. }

  10. /// <summary>
  11. /// Another function with partially duplicated code
  12. /// </summary>
  13. void OriginalB()
  14. {
  15.         DoThingsA();

  16.         // unique code

  17.         DoThingsB();
  18. }
复制代码

  但是现在,我们既可以将上述代码重构成函数,也可以使用委托重写:

  1. /// <summary>
  2. /// Encapsulate shared functionality
  3. /// </summary>
  4. /// <param name="action">User defined action</param>
  5. void UniqueWrapper(Action action)
  6. {
  7.         DoThingsA();

  8.         action();

  9.         DoThingsB();
  10. }

  11. /// <summary>
  12. /// New implmentation of A
  13. /// </summary>
  14. void NewA()
  15. {
  16.         UniqueWrapper(() =>
  17.         {
  18.                 // unique code
  19.         });
  20. }

  21. /// <summary>
  22. /// New implementation of B
  23. /// </summary>
  24. void NewB()
  25. {
  26.         UniqueWrapper(() =>
  27.         {
  28.                 // unique code
  29.         });
  30. }
复制代码

  2.注意不要分心

  当你发现自己在刷Facebook和Twitter——不能专注于解决问题了,那么这往往意味着你需要稍作休息了。不妨离开办公桌去喝杯咖啡,和同事聊上个5分钟。不要以为这是在浪费时间,从长远来看这能让你更富有成效。

  3.解决方案要三思

  在高压下想出的解决方案,修复的bug,很容易因为过于兴冲冲,而将平时铭记于心的关键测试周期完全抛之于脑后。但是这往往会导致更多的问题,并且会让你在老板和同事眼中看起来显得不那么专业。

  4.测试完成的代码

  你知道你的代码应该做什么,并且可能已经测试过了,但是,你需要证明这一点。分析所有可能的边缘情况,并给出测试,以便确定你的代码在所有可能的条件下都可以正常执行。如果有参数,那么发送一些预期的范围之外的值。还可以发送null值。如果可以的话,不妨让你的同事来搞搞破坏——单元测试是一条正规的康庄大道。

  5.代码审查

  在你将代码提交到源代码控制之前,最好先将你所做的改动给你的同事解释一下。有时候往往只需要这样做,就能让你意识到自己代码的错误,即使你的同事不发一言。这可比仅仅只是自己回顾自己的工作要来得高效得多了。

  6.精简代码

  如果你用了大量代码来执行一些简单操作,那么很有可能是你走错路了。以下对布尔值的处理就是一个很好的例子:

  1. if (numMines > 0)
  2. {
  3.    enabled=true;
  4. }
  5. else
  6. {
  7.    enabled=false;
  8. }
复制代码

  但其实你可以这么写:

  1. enabled = numMines > 0;
复制代码

  代码越是精简越好——调试少了,重构少了,问题自然也少了。但是要注意的是:可读性同样重要。谁也不希望在精简代码的同时影响了代码的可读性。

  7.努力写出优雅的代码

  所谓优雅的代码,不但具备极强的可读性,还能以最少量的代码和机器操作来解决手头的问题。要想在所有情况下都能够做到代码的优雅,其实是相当难的,但是经过一段时间的编程之后,你会逐渐体悟到“优雅代码”应该是怎么样的。优雅的代码无法通过重构来做任何改进——为此自豪吧。下面这个计算凸多边形面积的代码示例就是我认为的“优雅的代码”:

  1. static public double GetConvexPolygonArea(Vector2[] vertices)
  2. {
  3.         double area = 0;
  4.         for (int i = 0; i < vertices.Length; i++)
  5.         {
  6.                 Vector2 P0 = vertices[i];
  7.                 Vector2 P1 = vertices[(i + 1) % vertices.Length];

  8.                 area += P0.Wedge(P1);
  9.         }

  10.         return area / 2;
  11. }
复制代码

  8.编写自文档化的代码

  注释是编程的一个非常重要的组成部分,但是自文档化的代码之所以能更胜一筹,是因为只通过阅读代码就能让人理解。通过巧妙选择函数名和变量名,再联系语言语义,就能够使得代码变得可读,哪怕阅读者是非编程人员。例如:

  1. void DamagePlayer(Player player, int damageAmount)
  2. {
  3.         if (!player.m_IsInvincible && !player.m_IsDead)
  4.         {
  5.                 player.InflictDamage( damageAmount );
  6.         }
  7. }
复制代码

  不过,自文档化的代码并不能替代注释。使用注释来解释“为什么”,用自文档化的代码来描述是“什么”。

  9.不要使用奇奇怪怪的数字

  光是将数字插入到代码中是不对的,因为没人能理解它们代表了什么。这会混淆我们——当相同的数字用于代码中多个不同地方的时候。有的地方可能会因此而导致变化,也有的会因此而产生bug。尽量使用命名的常量来描述要表达的值,即便它仅用于一个地方。

  10.自动化

  当我们在做一连串的动作时,是很容易犯错的。如果你的部署进程不只一个步骤,那么你出错了。我们应该尽可能地自动化,以减少人为犯错的机会。如果你需要执行很多任务的话,自动化就显得尤为重要了。

  11.避免过早优化

  一旦你开始优化已经可以成功运行的代码,那么就会有破坏功能的风险。优化应该只响应于性能分析,在项目结束的时候进行。提前于分析阶段的优化不但浪费时间,还会导致bug。

  是的,没错,我的题目中说的的的确确是“10点”,最后的“第11点”是我免费奉送的亲!

  我希望这些要点,将有助于提高你的编程和开发过程。

  期待大家的指正!

  相关阅读:“菜鸟”程序员和“大神”程序员差距在哪里

码农网编译

5

主题

26

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2015-5-6 16:19:00 | 显示全部楼层
1.LZ的代码怎么都最左端对齐?
2.不同意第11点,“解决方案要三思”时就要把性能与瓶颈都考虑进去。"在项目结束的时候进行"的话你就别想客户给你回款了

13

主题

36

帖子

301

积分

中级会员

Rank: 3Rank: 3

积分
301
发表于 2015-5-15 10:33:24 | 显示全部楼层
ayuest 发表于 2015-5-6 16:19
1.LZ的代码怎么都最左端对齐?
2.不同意第11点,“解决方案要三思”时就要把性能与瓶颈都考虑进去。"在项目 ...

不左端对齐的才是异类

1

主题

15

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2015-5-19 18:43:14 | 显示全部楼层
书径尘 发表于 2015-5-15 10:33
不左端对齐的才是异类

顶,只能接受左端对齐。

5

主题

26

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2015-5-21 09:20:31 | 显示全部楼层
【最左端】,看来是样式显示的问题,现在正常了

0

主题

3

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2016-3-7 17:38:24 | 显示全部楼层
楼主说的很对。
但对于第11条:避免过早优化
不太理解,优化指的是性能优化,还是重构,或是代码的整洁性,去除重复代码等等。
如果是性能和重构的话,等到功能稳定后,再去做是合适的。
如果是整洁性的维护,那么时时刻刻看到不好的地方都需要去做的。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-25 11:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表