• 关于编程的那点事


    ·写在最前

        在上周,李巍老师带着我们在课堂上进行了结对编程,我会先谈谈我的感受,后面我会对我这一周编写的代码进行一个总结,最后对这周做一个小小的规划。

    ·关于结对编程

        何谓结对编程?

                          ---"结对编程技术是指两位程序员坐在同一工作台前开发软件。"   摘自百度百科

          这样有什么好处呢?

                                                                    ---“与两位程序员各自独立工作相比,结对编程能编写出质量更高的代码。结对编程技术是一个非常简单和直观的概念,能达到事半功倍的工作效果。”  摘自百度百科

         

          在我的思维习惯里,一直都觉得编程是需要时时刻刻保持清醒的头脑,长时间里花费大量脑力去完成的。所以我一直都习惯于一个人,在很安静的状态下编写代码(PS.尝试过一边听歌,一边编写代码,效果很不好)。在身边有个人看着你编写,有种什么样的感觉呢?首先,他是一直看着你一步一步的编写代码,他能很清楚的知道你编写的逻辑,对我而言,我觉得有以下几个好处:

      1.在开始编写代码之前,你可以和他进行交流,比如自己的想法,自己的构思,你能把他讲懂,并能得到他的支持,相信你的解决方案是非常prefect的,但是如果中间会有些许的纰漏或者遗漏,他也能一下就看出来,并提出他的想法,感觉就像出门打仗,带着一个军师为你出谋划策。

       2.在以往编写代码时,自己会犯一些很低级的错误,因为很低级,自己的心里又在想着其他的事情,所以不经意间自己就会掉进陷阱里面去。比如在if语句里,少了一个取反操作,这下好了,运行发现跟自己想的不一样,倒回来一步一步的去找,最后找到了,不禁发出一声“我X,我怎么这么蠢”。但是有一个人在看着你敲,你完全不会有这样的担忧,就像带着一个能进行复杂逻辑判断并报错的编译器。

          3.想想,当一个程序猿旁边坐着一个程序媛,是不是更有动力呢?哈哈,开玩笑。

                                                  

    ·关于编程

           上个星期自己尝试着写了写一个微小的服务器,大概也有700-800行的样子,发现了很多问题,下面进行一些总结,希望自己在以后的编程中能注意这些问题:

           1.过度依赖IDE。IDE帮我们做了太多的事情,管理代码,生成代码,各种快捷键,我自己也乐在其中,导致忽视了很多重要的东西。比如生成Servlet,而在生成的时候,我们知不知道IDE到底帮我们做了什么呢?所以希望自己以后先减少对IDE的依赖,尽量都自己去配置一些基础的东西,等自己熟练了之后,再使用IDE里的各种酷炫的东西也不迟。

            2.代码可维护性,可扩展性和可阅读性还是太低,尽管自己时时刻刻提醒自己注意注意,但是无奈编写的太过匆忙,结果还是不尽如人意,准备在这周对代码进行重构。下面贴出一段自己编写的代码进行分析:

        /**
         * 
         * @Description 解析HandBook.xml 
         * @author Han
         * @param moudleIndex
         * @return
         */
        public static List<Module> getModuleList(String moudleIndex) {
    
            Element _rootElement = init();
            
            moduleList = new ArrayList<Module>();
            
            Element _moduleList = _rootElement.element("moduleList");
            Iterator<Element> it = _moduleList.elementIterator();
            // 遍历ModuleList节点
            while (it.hasNext()) {
    
                Module _module = new Module();
                List<Function> _functionList = new ArrayList<Function>();
    
                Element _moduleEle = (Element) it.next();
                _module.setId(_moduleEle.attribute("id").getText());
                _module.setName(_moduleEle.attribute("name").getText());
    
                if (_moduleEle.attribute("id").getText().equals(moudleIndex)) {
    
                    // 遍历Module节点
                    for (@SuppressWarnings("rawtypes")
                    Iterator it1 = _moduleEle.elementIterator(); it1.hasNext();) {
    
                        Function _function = new Function();
    
                        Element _functionEle = (Element) it1.next();
                        _function.setId(_functionEle.attribute("id").getText());
                        _function.setFunctionName(_functionEle.attribute("name")
                                .getText());
                        _function.setUrl(_functionEle.element("url").getText());
    
                        List<Para> _requestParaList = new ArrayList<Para>();
                        List<Para> _responceParaList = new ArrayList<Para>();
    
                        Element _requestParaEle = _functionEle
                                .element("requestPara");
                        Element _responseParaEle = _functionEle
                                .element("responsePara");
                        Iterator<Element> it2 = _requestParaEle.elementIterator();
                        // 遍历requestPara
                        while (it2.hasNext()) {
    
                            Element _ParaEle = (Element) it2.next();
    
                            Para _requestPara = new Para();
    
                            _requestPara.setParaName(_ParaEle.attribute("name")
                                    .getText());
                            _requestPara.setParaInfo(_ParaEle.getText());
    
                            _requestParaList.add(_requestPara);
    
                        }
                        Iterator<Element> it3 = _responseParaEle.elementIterator();
                        while (it3.hasNext()) {
    
                            Element _ParaEle = (Element) it3.next();
    
                            Para _responcePara = new Para();
    
                            _responcePara.setParaName(_ParaEle.attribute("name")
                                    .getText());
                            _responcePara.setParaInfo(_ParaEle.getText());
    
                            _responceParaList.add(_responcePara);
    
                        }
                        _function.setRequestPara(_requestParaList);
                        _function.setResponcePara(_responceParaList);
    
                        _functionList.add(_function);
                    }
                    _module.setFunctionList(_functionList);
                }
    
                moduleList.add(_module);
    
            }
    
            return moduleList;
        }

             这是一段解析XML文件的方法,现在再看,我很快就发现了很多问题。大概问题如下:

              1.代码注释太少,还好我是才写完这个方法,我可能还看得懂,那一年之后呢?或者别人来看呢?

              2.冗余代码太多,明显很多都可以提取出来成为一个方法。

              3.既然我写的是一个工具类(Util),也就是说这个方法很有可能之后会再用到,那么我是不是写得太死了?仅仅是针对这个XML写的方法,还能叫Util吗?可不可以修改一下,那它能通用于大多数的XML,利用反射?下来可以修改。我相信一定有写好的Jar包,但是我还是希望能多写些自己写的工具,这样也许自己能用着更顺手点?

          

              在这周我会把这个方法重构,然后再贴出来。

    ·总结

             “路漫漫其修远兮,吾将上下而求索”。虽然艰辛,却不退缩。

  • 相关阅读:
    PAT Advanced 1073 Scientific Notation (20 分)
    PAT Advanced 1071 Speech Patterns (25 分)
    C++ 正则查找
    PAT Advanced 1022 Digital Library (30 分)
    Linux文件系统及常用命令
    Elasticsearch常用查询
    Sublime Text3 快捷键
    Lua函数
    线程池
    Jdk8新特性之Base64
  • 原文地址:https://www.cnblogs.com/a294098789/p/5305958.html
Copyright © 2020-2023  润新知