zoukankan      html  css  js  c++  java
  • 程序猿与工匠精神

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

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

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

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

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

    原代码:

    /* 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 ",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 ",FindMax (7, 702,822,631,834,892,104,772));
        system("PAUSE");
    }


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


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







  • 相关阅读:
    [转]实现财务自由的6大步骤
    [转] js 实现table每列可左右拖动改变列宽度
    [转]在Excel中使用SQL语句实现精确查询
    [书目20150727]有效沟通-余世维
    [书目20150727]选择重于一切(扎克伯格给年轻人的37个人生忠告)
    [转]把汉字写“绝”了
    [转]《间架结构92法》
    深圳社保转入
    广州社保转出
    [转]利用telnet进行SMTP的验证
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4050815.html
Copyright © 2011-2022 走看看