前言
20160709
踏上扬州,20170826
奔向武汉。在过去的1
个半月实习前的培训中,有得有失。
在写这一篇文章的时候,我极力想摆脱实习报告的套路,想要言简意赅。少写一些空乏的琐事,多一些知识的干货。在经过扬州的1
个半的培训中。我知道了自己的路,我不愿自己的未来随风随浪,漂浪东西,亲像船无港。
我是一名实习的java
码农,但是我希望未来的我是XX
产品的开发者。在过去扬州的培训中,分别学习了java
和.Net
。所以我会后续的5
篇实习报告中(加上这一篇,一共是6
篇)去回顾我过去学习的知识。温故而知新,可以为师矣。
我觉得有一句话,说的挺不错的。”学而不思则罔,思而不学则殆”。这很符合程序员的学习方法。同样是相同经验的程序员,有的程序员技术烂,有的程序员技术很厉害。合理的总结过去学习的知识和举一反三无非可以增加学习的效率,我觉得这是优秀的程序员和普通的程序员之间的分水岭。
Daily Report
在扬州实习中,我们每天都要写一篇日报去简要的描述今天做了什么,完成的进度是什么,遇到了什么问题,可以提出自己对课程的意见,明天应该完成什么。
但是听到这个要求,我内心的想法:"我曹,这么傻逼,完全多此一举,没有任何意义啊。"现在的我发现当时的我真的很无知。而且daily report
不是用中文写,是全英文。
具体的格式精确到每一个空格和标点符号,标题要加粗,整个字体是用Arial
字体,字体的size
是10pt
,标题和内容之间要空一格。标题符号要用半角,不能用全角。写英文要注意时态,专业术语要大小写。
就是这么简单的daily report
,我们培训的60
个人第一天没有人能写出符合要求的daily report
,就算trainer给我们每天讲格式要求。就是这样的前提下,过去了一个星期,60
个人中寥寥无几能写出符合要求的report
。
到现在为止,我都不能保证我写的英文句子满足时态,大小写,语句结构没问题等这些要求,我也只会写一些to do
, learn
, study
, understand
, finish
这些简单的语句去描述我当天做了什么,因为英语太烂了,写复杂的句子免不了出错,所以就写很简单的句子。
记得trainer跟我们说过:"你们连这么简单的daily report
都完成不了,还指望你们写出质量高的code
"。现在想想,说的还真没错。细节决定成败。
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
个点,css
和js
也是具体到空几个点。if
和while
等语句前面要空一行,return x,
如果x
为空的话,那么前面不用空一行,如果不为空的话,那么要空一行。css
和js
的命名规则是a-b-c
,html
和jsp
的命名规则是a_b_c
,hard code
一律提取到Constant
类中,要进行分块。相同的代码出现2
次,要考虑到设计模式,进行抽取分离,达到公用。涉及到数据库的,尽量不要用
sql
语句,要使用存储过程。model
层的代码字段要和数据库表的列表一一对应起来,数据库命名规范a_b_c
。html
和jsp
标签要闭合,css
和js
抽取到js
文件夹下面的文件中。前台代码和后端代码进行动静分离。前台只显示静态的标签,相关逻辑r
ender to desgin
放到js
中去完成。画前台UI
尽量不要使用position:relative
或者absolute
,这一点我其实也不知道为什么,哈哈哈哈。
相关的Coding Style
就说到这里了,因为实在太多了,要知道Coding Style
文档有中涉及到的规范很多,这里的篇幅说不完!!!。
未完待续,下一篇待续。附上3张在扬州实习图