您的位置:首页 > 其它

程序猿与工匠精神

2014-10-25 20:28 239 查看
前几天和一个朋友聊天时说:我有强迫症,每次看到不符合自己审美的代码时,总想重构一下。朋友的观点与大多数人相仿,程序仅仅要满足要求,执行正确就能够。
在现实的工作中一样,每当看到一段优美且高效的代码,我总是喜欢多看几遍,满心的享受。可是我们产品中的太多代码让我这个代码洁癖“患者”看了很的烦躁:
1. 随便一个源文件都是上百行的函数,有些甚至超过500行(含空行和凝视)。
2. 大量没有必要的暂时变量定义。
3. 习惯性的把全部变量声明定义放到函数前面,一些大函数甚至超过20行都是函数局部变量的声明和定义。想想看,在第一个异常检查之后程序返回,而前面定义的十几个变量变得毫无价值。
4. 功能相仿的反复代码。

诸如此类的代码问题,给程序维护带来无尽的风险,而大多数技术管理者却觉得代码重构根本毫无必要,甚至非常多人觉得仅仅要设计文档写好,代码符合文档要求,顺利通过公司的各种质量评审,这段代码就最好不要动。要命的是,非常多大型软件,非常多团队共同开发,团队A要在团队B开发的代码中改动,为了省事,根本不考虑重构,甚至函数都不愿意添加一个,任由代码行数累加。

哎,假设我是一个技术管理者,我希望能够把敏捷中对于代码质量的要求贯彻和运行。程序开发人员应该把自己看做一个追求极致的工匠,而不是一个累代码的民工。

之前完整的看了老罗的手机公布会,他最后一句话:我不是为了输赢,我就是认真。我当时真的打心底里感动,无论老罗的这次创业是否能颠覆国内的手机市场,仅凭他的工匠精神,衷心的祝福他和他的公司取得成功,工匠精神配得上一次成功。

为了说明这个问题,我用一段代码重构结束这篇牢骚。

原代码:
http://www.cplusplus.com/reference/cstdarg/va_arg/?kw=va_arg

/* va_arg example */
#include <stdio.h> /* printf */
#include <stdarg.h> /* va_list, va_start, va_arg, va_end */

int FindMax (int n, ...)
{
int i,val,largest;
va_list vl;
va_start(vl,n);
largest=va_arg(vl,int);
for (i=1;i<n;i++)
{
val=va_arg(vl,int);
largest=(largest>val)?largest:val;
}
va_end(vl);
return largest;
}

int main ()
{
int m;
m= FindMax (7,702,422,631,834,892,104,772);
printf ("The largest value is: %d\n",m);
return 0;
}

这里并非说原来的代码不好,不过为了做说明之用。
有些重构并不一定能够降低整体的代码行数,可是能够改善代码的可读性和可重用性。如果上面的代码时作为API接口,详细的实现函数声明为static,只对外开放FindMax函数声明。代码的开放封闭原则,应该在最初编码的时候有一个清晰和严格的标准。

重构后的代码:

//findMax.h

#ifndef _FIND_MAX_H_

#define _FIND_MAX_H_

int FindMax (int n, ...);

#endif

//findMax.cpp

#include <stdarg.h> /* va_list, va_start, va_arg, va_end */
#include <iostream>
#include "findMax.h"

using namespace std;

static int getTheLargest(va_list vl, int n)
{
int val;
int largest =0;

for (int i=0;i<n;i++)
{
val=va_arg(vl,int);
largest=(largest>val)?largest:val;
}
va_end(vl);

return largest;
}

int FindMax (int n, ...)
{
va_list vl;
va_start(vl,n);

return getTheLargest(vl, n);
}

//va_list_example.cpp

#include <stdio.h> /* printf */

#include <stdlib.h>
#include "findMax.h"

int main()
{
printf ("The largest value is: %d\n",FindMax (7, 702,822,631,834,892,104,772));

system("PAUSE");
}

控制台输出:
The largest value is: 892
Press any key to continue . . .

PS:
近期两个月一直没有更新博客,一方面工作确实太忙,还有一方面花了非常多时间在做个人的微信工作号:瑜伽分享汇。希望喜欢瑜伽的朋友们,能够关注。











内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: