心之所向,百炼成钢 第一章

###前言 20160709踏上扬州,20170826奔向武汉。在过去的1个半月实习前的培训中,有得有失。css

在写这一篇文章的时候,我极力想摆脱实习报告的套路,想要言简意赅。少写一些空乏的杂事,多一些知识的干货。在通过扬州的1个半的培训中。我知道了本身的路,我不肯本身的将来随风随浪,漂浪东西,亲像船无港。html

我是一名实习的java码农,可是我但愿将来的我是XX产品的开发者。在过去扬州的培训中,分别学习了java.Net。因此我会后续的5篇实习报告中(加上这一篇,一共是6篇)去回顾我过去学习的知识。温故而知新,能够为师矣。java

我以为有一句话,说的挺不错的。”学而不思则罔,思而不学则殆”。这很符合程序员的学习方法。一样是相同经验的程序员,有的程序员技术烂,有的程序员技术很厉害。合理的总结过去学习的知识和触类旁通无非能够增长学习的效率,我以为这是优秀的程序员和普通的程序员之间的分水岭。node


###Daily Report 在扬州实习中,咱们天天都要写一篇日报去简要的描述今天作了什么,完成的进度是什么,遇到了什么问题,能够提出本身对课程的意见,明天应该完成什么。程序员

可是听到这个要求,我心里的想法:"我曹,这么傻逼,彻底画蛇添足,没有任何意义啊。"如今的我发现当时的我真的很无知。并且daily report不是用中文写,是全英文。sql

具体的格式精确到每个空格和标点符号,标题要加粗,整个字体是用Arial字体,字体的size10pt,标题和内容之间要空一格。标题符号要用半角,不能用全角。写英文要注意时态,专业术语要大小写。数据库

就是这么简单的daily report,咱们培训的60我的第一天没有人能写出符合要求的daily report,就算trainer给咱们天天讲格式要求。就是这样的前提下,过去了一个星期,60我的中寥寥无几能写出符合要求的report后端

到如今为止,我都不能保证我写的英文句子知足时态,大小写,语句结构没问题等这些要求,我也只会写一些to do, learn, study, understand, finish这些简单的语句去描述我当天作了什么,由于英语太烂了,写复杂的句子免不了出错,因此就写很简单的句子。设计模式

记得trainer跟咱们说过:"大家连这么简单的daily report都完成不了,还期望大家写出质量高的code"。如今想一想,说的还真没错。细节决定成败。bash


###Coding style 如今的不少公司开发项目都是以敏捷开发的模式对产品去进行开发。敏捷开发是以用户的需求进化为核心,采用迭代,按部就班的方法进行软件开发。团队合做在这一环节确定是少不了,尽然团队合做了,就少不了merge代码。

为了加快团队合做开发的效率,不少公司都会制定出一套Coding Style。让团队的代码风格保持一致。当我一开始去学习本公司的Coding Style,简直生不如死啊。之前在学校写代码保持一向的野路子风格,毫无风格而言。致使代码阅读性不好。之前代码是这样写的,我本身都看不下去的。

public class QuickSort {
	public static void sort(int[] number){
		sort(number,0,number.length-1);
	}
	
	
	private static void sort(int[] number, int left, int right) {
		// TODO Auto-generated method stub
		if(left<right){
			int i=left,j=right;
			int x=number[left];
			while(i<j){
				//死循环, 只有比x小的元素才能跳出循环 从右到左
				while(i<j&&number[j]>=x){
					j--;
				}
				if(i<j){
					number[i++]=number[j];
				}
				//大于x的元素才能跳出循环
				while(i<j&&number[i]<=x){
					i++;
				}
				if(i<j){
					number[j--]=number[i];
				}
			}
			//若是i==j的话就会跳出循环, 而后以i为分界线,左边比i小,右边比i大
			//而后咱们把左边的元素和右边的元素递归调用,重复以上操做
			number[i]=x;
			sort(number,left,i-1);
			sort(number,i+1,right);
		}
	}


	public static void main(String[]args){
		int[] num={34,1,23,345,12,546,131,54,78,6543,321,85,1234,7,76,234};
		sort(num);
		for(int i=0;i<num.length;i++){
			System.out.println(num[i]);
		}
	}
}
复制代码

如今的我,代码是这样写的

public class LinkedListCreator {
    private int count;
    /**
     * Creates a linked list
     * @param data the data to create the list
     * @return head of the linked list.The returned linked list
     * ends with last node with getNext() == null
     */
    public Node createdLinkedList(List<Integer> data) {
        count ++;
        if (data.isEmpty()) {
            return null;
        }
        
        System.out.println("list = " + data.toString());
        Node firstNode = new Node(data.get(0));
        System.out.println("before count=" + count + ",value=" + firstNode.getValue());
        Node headOfSublist = createdLinkedList(data.subList(1, data.size()));
        System.out.println("after count=" + count + ",value=" + firstNode.getValue());
        firstNode.setNext(headOfSublist);
        return firstNode;
    }
    
    public static void main(String[] args) {
        LinkedListCreator creator = new LinkedListCreator();
        Node.prinfLinkedList(creator.createdLinkedList(new ArrayList<Integer>()));
        Node.prinfLinkedList(creator.createdLinkedList(Arrays.asList(1)));
        Node.prinfLinkedList(creator.createdLinkedList(Arrays.asList(1, 2, 3, 4, 5)));
    }
}
复制代码

聪明的人立马看出了之间的区别。首先是注释,注释真的很重要,注释去描述你这个方法具体干了什么的事情,尽可能的去描述的清楚。否则之后进了项目,免不了团队合做。若是你不写注释,当心别人问候你全家。

我之前写代码一般是不加注释的,以为注释无关紧要。可是在项目中,效率为前提。优雅的注释,会方便团员去了解你代码的logic。像我以前去看一个项目的源码时候,云里雾里,由于做者加的注释不多不多!!!!!!!看的我生不如死啊,因此我之后写code的时候会加上注释,我体会过那种生不如死的感觉。

其次,注释不要出现中文,全英文注释。若是你想成为一名大牛,从书写优雅的英文注释开始。还有一点就是,写中文和英文的时候,输入法频繁的切换,有点影响效率。可是主要的缘由仍是国际化,编码方面的第一手资料永远是英文,中文文档基本上是二手资料。因此你懂,学好英文真的很重要。

如今的我英文词汇比之前增长很多了,逛一下StackOverflow,仍是Ok的。平时和团员用的skype,基本上也是英文交流,在扬州作training的时候,天天会给咱们half an hour让咱们去交流英文,谈一下话题。

继续回到CodingStyle的话题上

  • 首选若是一个类只有方法,而没有成员变量的话,方法和类之间要空一行。若是有成员变量和方法,那么成员变量和方法之间要空一行,而成员变量不用空。好比一个类是这样的public class A{},那么最后的}这个括号后面要控一行。由于String这个类就是这样写的,别问为何。

  • 静态变量全大写,成员变量小驼峰,方法小驼峰,类大驼峰,tab缩进换4个点,显示代码的行数和white space,方法空4个点,cssjs也是具体到空几个点。ifwhile等语句前面要空一行, return x, 若是x为空的话,那么前面不用空一行,若是不为空的话,那么要空一行。

  • cssjs的命名规则是a-b-c, htmljsp的命名规则是a_b_c, hard code一概提取到Constant类中,要进行分块。相同的代码出现2次,要考虑到设计模式,进行抽取分离,达到公用。

  • 涉及到数据库的,尽可能不要用sql语句,要使用存储过程。model层的代码字段要和数据库表的列表一一对应起来,数据库命名规范a_b_chtmljsp标签要闭合,cssjs抽取到js文件夹下面的文件中。

  • 前台代码和后端代码进行动静分离。前台只显示静态的标签,相关逻辑render to desgin放到js中去完成。画前台UI尽可能不要使用position:relative或者absolute,这一点我其实也不知道为何,哈哈哈哈。

相关的Coding Style就说到这里了,由于实在太多了,要知道Coding Style文档有中涉及到的规范不少,这里的篇幅说不完!!!。

未完待续,下一篇待续。附上3张在扬州实习图

扬州5点30的时候

第一天培训的时候

某一天培训的早晨
相关文章
相关标签/搜索