###前言 20160709
踏上揚州,20170826
奔向武漢。在過去的1
個半月實習前的培訓中,有得有失。css
在寫這一篇文章的時候,我極力想擺脫實習報告的套路,想要言簡意賅。少寫一些空乏的雜事,多一些知識的乾貨。在通過揚州的1
個半的培訓中。我知道了本身的路,我不肯本身的將來隨風隨浪,漂浪東西,親像船無港。html
我是一名實習的java
碼農,可是我但願將來的我是XX
產品的開發者。在過去揚州的培訓中,分別學習了java
和.Net
。因此我會後續的5
篇實習報告中(加上這一篇,一共是6
篇)去回顧我過去學習的知識。溫故而知新,能夠爲師矣。java
我以爲有一句話,說的挺不錯的。」學而不思則罔,思而不學則殆」。這很符合程序員的學習方法。一樣是相同經驗的程序員,有的程序員技術爛,有的程序員技術很厲害。合理的總結過去學習的知識和觸類旁通無非能夠增長學習的效率,我以爲這是優秀的程序員和普通的程序員之間的分水嶺。node
###Daily Report 在揚州實習中,咱們天天都要寫一篇日報去簡要的描述今天作了什麼,完成的進度是什麼,遇到了什麼問題,能夠提出本身對課程的意見,明天應該完成什麼。程序員
可是聽到這個要求,我心裏的想法:"我曹,這麼傻逼,徹底畫蛇添足,沒有任何意義啊。"如今的我發現當時的我真的很無知。並且daily report
不是用中文寫,是全英文。sql
具體的格式精確到每個空格和標點符號,標題要加粗,整個字體是用Arial
字體,字體的size
是10pt
,標題和內容之間要空一格。標題符號要用半角,不能用全角。寫英文要注意時態,專業術語要大小寫。數據庫
就是這麼簡單的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
個點,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
文件夾下面的文件中。
前臺代碼和後端代碼進行動靜分離。前臺只顯示靜態的標籤,相關邏輯render to desgin
放到js
中去完成。畫前臺UI
儘可能不要使用position:relative
或者absolute
,這一點我其實也不知道爲何,哈哈哈哈。
相關的Coding Style
就說到這裏了,由於實在太多了,要知道Coding Style
文檔有中涉及到的規範不少,這裏的篇幅說不完!!!。
未完待續,下一篇待續。附上3張在揚州實習圖