心之所向,百鍊成鋼 第一章

###前言 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的時候

第一天培訓的時候

某一天培訓的早晨
相關文章
相關標籤/搜索