"敏捷式軟體學習" 一條快捷的程式員的成長之路

來源:互聯網
上載者:User

看了不少同學的問題,很多是關於編程的學習教材,學習路線,學習方法等,也有不少老師給做瞭解答,但真正能起到協助的不是很多,我開發程式有十多年了,也從事過一段培訓工作,雖然創新能力有限,但也不停的總結和回顧,發現現在軟體教育效率很低,有很多可以改進的地方,因此不斷嘗試,自己摸索了一套軟體學習的方法和內容,其中我借鑒了一些敏捷開發的東西,而且採取的是快速掌握主幹知識的思路,我就起了敏捷式軟體學習這個名字,通過一些學生的學習,效果不錯,在此介紹給同學們.其實真正的學習沒有什麼捷徑,但是少走彎路,就是找到了一條捷徑.
這套學習方法主要是對軟體開發的學習內容和方式做了重大調整,並用了自己方式進行了闡述,以前是通過上課講給學生們聽,現在整理出了一些文字材料.今天在文章結束後貼出一章..
整個學習分三個部分:
  1.編程能力培養.
   在這部分,要學習電腦原理,c語言,mvc思想,資料結構,類庫,代碼重構,單元測試,測試驅動,物件導向等內容,以C語言為主線,通過一個遊戲的開發過程,把相關課程的關鍵內容講述出來,最後引入物件導向,用JAVA,C#重新實現.
   這個遊戲中文叫五子連珠,英文名叫winlinez,見插圖,
  
遊戲的規則是點擊一個球可以移動到不同的格子裡,移動的時候必須延著沒有球的格子滾過去,每移動一次隨機出現3個球,把5個以上顏色相同的球聯成一條線,就可以銷掉得分.
   學習的過程也是做遊戲的過程,首先用mvc的思想來分析,m是model,資料部分,如何來儲存遊戲的資料,有了儲存之後,就必然有一些演算法,來修改分析這些資料,這裡涉及到3個演算法,隨機放球,檢測消球,最短路徑(小球要沿著最短路徑滾過去,要用到廣度優先演算法),v是view,顯示部分,主要功能是根據資料畫出介面,接受滑鼠資訊,發給c,control,控制部分,c調用m,決定下一步做什麼,完成m的過程,就是學習C語言和資料結構的過程,在編寫的過程中嚴格按照軟體工程的要求來做,代碼格式,命名規範,常量定義,單元測試一個都不能少,引入測試驅動的開發模式,最後以標頭檔和lib庫的形式提供給後續開發,v,c的開發放到最後,學會使用別人的和自己的類庫.
   整個開發完之後,學習物件導向,換一種語言,java,或c#,你會發現除了物件導向的思想,其他變化真不是很大.
   還可以進一步擴充到弱類型語言,用javascript,python,ruby也來實現一下MODEL,你會覺也不是太難.
 2.資料庫原理與建模
   如果要想獨立做一個系統,建模是核心部分,如果你在一個大企業裡,按照設計要求完成代碼,建模是由進階人員完成的,你只要掌握好SQL就行了,但是懂得建模可以協助你理解設計,而且建模和需求分析,概要設計密切相關,學習建模也是學習需求分析和概要設計,這裡面理論的成分有一些,不很多,書上的很多內容用不上,真正有用就是ER方法,多分析幾個執行個體,基本上就可以了,然後就是sql語句,把多表串連,彙總,結果嵌套弄明白就行了,最後常用資料庫的使用和串連方法,odbc原理和使用也是必須要掌握的.
 3.web系統和應用開發.
   學習web 系統,基礎一樣很重要,HTML語言,HTTP協議,JAVASCRIPT,一個都不能少,然後才是不同的服務架構,asp.net,j2ee,php,一種也行,多種也能學的了,接下來就要開發一個實際的系統了,選一個中等規模的線上系統像論壇,部落格,完全模仿一下,從分析到資料庫設計,到編碼實現,做一遍,當然會遇上很多問題,這時候你也可以到CSDN去提一個看似很"高深"的問題了.
      總結一下,整套課程緊密聯絡實際,但又不缺乏基礎理論,只學習最主乾的知識,但涉及到了開發過程的全部環節.   

下面是我的教材第二章,大家看一下,是不是有些不一樣,這一章涵蓋了類型,變數(空間),指標,數組,結構體,凡是和空間,類型相關的內容一起講出.第一章是cpu,記憶體,指令,資料,資料的儲存等電腦原理方面的知識.從WORD裡面粘過來的,格式有點亂,還少了幾個圖.大家覺的有沒講明白的地方可以說出來,我再改進改進.
    

第二章  程式中的儲存       

   剛才說的是如何將我們常見的資料進行數字化,下面我們就要開始真正進入編程的領域,如何使用記憶體中的空間,如何在記憶體中有條理的進行大批量資料的儲存與讀取。
1. 資料空間
我們用來存資料的空間稱為資料空間,和資料空間相對應的是地址空間(指標),我們在運算過程中需要儲存大量的資料,(在小球遊戲中棋盤上哪些有球,什麼顏色,哪些沒球,我們都要儲存起來,根據這些資料我們才能進行削球,移動球,)最常用的是數位儲存和字元的儲存。為了儲存資料我們通常需要開闢空間或者說申請空間,首先我們學習開空間的方法即變數聲明語句:        
1).開空間
int    a;   開闢一個int類型的空間,a就是這個空間的名字.
char   c;   開闢一個char類型的空間 c
這個語句非常簡單,分兩部分,前一部分指出要開空間的類型,在32位電腦裡 int類型4個位元組,char類型1個位元組,後一部分是為這個空間起的名字,這個名字是要你來起的哦,又稱為標識符,起名字好理解一些,在寫程式的時候要起很多名字,起名字也有點學問,盡量用英文單詞,一看能知道含義,盡量不使用拼音,和字母加序號,不能以數字開頭,只能以字母和底線(_)開頭,中間部位可以出現數字,字母和底線(_)。在現在的教材裡這個語句叫變數聲明.
除了int,char還有一些其他類型,常用的有如下:
類型    長度       儲存內容
char     1          0-255
int      4          有符號整數
long     4          有符號整數
unsigned  4         不帶正負號的整數
short     2         有符號整數
float     4   有符號小數 
double   8     有符號整數
注意:c語言要求每一句話結束要加上“;”。
2).空間賦值
請看代碼
int a;
char b;
a=258;
b=’b’;
等號表示把等號右邊的數值儲存到等號左邊的空間裡,如果等號左邊不是已經開好的空間那肯定是錯的。
注意:
1.258需要佔用兩個位元組儲存102,上一章的內容,低位在前,所以02在前,1在後。前邊不用的位要補0.
2.單引號表示該字母或數字對應的ASC碼數值,每對單引號裡只能有一個字元;

我們通常還會把一個空間裡的內容儲存到另一個空間裡。
如: b=a ;    把a的內容存到b的裡面。
但是當兩個空間類型不一樣時,就出現了一些問題:
如:char   m=30;
int    b=258;
b=m;
b的空間比m的大,把m的內容放進b綽綽有餘,不會有任何問題,多餘的空間一定要清零或1,(為什麼1),必須保證放進去的值和取出的相等
但是   m=b;會怎樣呢?b的空間大於m的空間,無法放下,對於這種情況電腦預設的處理是把b的最低位位元組放入,但是編譯器會要求我們寫出顯示轉換如下:
m=(char)b;這樣編譯器就知道這是我們故意要做的,而不是不小心寫錯了。
根據上述原因,凡是大空間的值放入小空間都需要顯示轉換,反之就不需要了。
2. 數組
當我們需要開多個相同類型的空間時,可以有一個簡便的的方法就是數組。
如 int  a[10];        表示開了10個int類型的空間
這10個空間分別是a[0],a[1]….a[9],使用起來和單獨開的空間完全一樣。把這10個空間的值都存成0;代碼如下:
a[0]=0;
a[1]=0;
a[2]=0;
a[3]=0;
a[4]=0;
a[5]=0;
a[6]=0;
a[7]=0;
a[8]=0;
a[9]=0;
還有一個簡便寫法:
int a[]={0,0,0,0,0,0,0,0,0,0};這一句連int a[10]都包括了,但是先寫int a[10],再寫a[]={0,0,0,0,0,0,0,0,0,0}就是錯誤的.
通常開數組空間一定要指明個數,但是在開空間的時候,直接有指派陳述式,指派陳述式可以表明個數,這時候就不用指明個數了.

需要說明的是數組開的空間肯定是連續的,除此之外都不能保證連續.
說到數組,就要提到字串,看代碼:
char str[]=”this”;
用雙引號括起來的內容我們稱為字串,這個字串儲存在數組str中,共佔有5個位元組,除了’t’,’h’,’i’,’s’外,還多加了一個字元’/0’,作為結束字元,注意不是’0’,
char str1[]={‘t’,’h’,’i’,’s’};
而str1也是個數組,它只佔用4個位元組,結尾沒有結束字元,就不能當做字串數組來訪問。
我們通常訪問字串數組的時候,只需要首地址就行了,不需要長度,也不需要結束位址,當訪問到字元’/0’的時候,就認為字串結束了。
2 地址空間(又稱指標空間)
2.1 地址空間(指標)的含義和使用
與上面講述的空間不一樣,有一種空間不是用來儲存資料而是用來儲存地址,我們稱為指標空間.使用方法如下:
int a;    開一個int類型的普通空間a
int *m;  開一個儲存a的地址的空間m
m=&a;  把空間a的地址存入到地址空間m中;  &符號表示取空間的地址,可以用在任何空間的前面.如&m,表示m空間的地址
m中儲存了a的地址就可以使用m來訪問空間a
*m=26;  *表示指標指向的空間, 必須用在指標空間的前面,在這裡相當於通過m給空間a裡儲存了一個數字26. *不能用在普通空間的前面.如果一個指標空間沒有賦值(也稱為初始化),是不可以用*操作符的.
2.2地址空間(指標)的類型
我們注意到,在開闢地址空間的時候,也先說明了類型,但與普通空間的類型的意義是完全不同,普通空間的類型主要規定了空間的大小,而對於地址空間來講大小都是一樣,對於任何類型的空間來說,他們的地址的長度都是一樣的, 指標類型的空間主要有兩個用途:
一 是在使用*符號的時候:
int a;       
int *m
m=&a;
*m=26;
修改的是4個位元組的空間
二 是指標進行運算的時候:
指標可以進行運算,但只能進行加法和減法,表示相對向後位移或向前位移,兩個指標空間的內容不可以相加,相加沒有實際意義,但可以相減,相減的含義是兩個指標空間相差多少.
int a[10];
int *m;
m=&a[0];
m=m+1; 也可寫成 m++;
這裡m+1並不是表示m裡的值加1,而是加上1*(int的空間大小),這裡的int就是指標m的類型,這樣m=m+1後,m裡面存的就是a[1]的地址,而不會是a[0]裡的第二個位元組.我們在對數組進行訪問時通常可以用指標的運算來來訪問不同的元素.
以上兩點說明了指標類型的用途,也解釋了指標運算的含義,如果有一種指標沒有指明類型,那麼就不可以運算,也不可以用*操作符,有嗎?有,void *,表示沒有類型的指標.
2.3指標類型的轉換.
所謂指標類型的轉換就是把a類型的指標放入b類型的指標空間裡,按道理,所有的指標空間的大小都一樣,不存在大小不匹配的問題,但由於指標類型的特殊用途,編譯器為防止我們出現錯誤,要求我們在不同類型指標空間賦值時要強制轉換.
如:
char *m;
int *n;
m=(char *)n;
n=(char *)m;
 3.結構體空間
結構體空間其實沒有什麼特殊的,只是開結構體的空間的類型比較特殊。先來看一段代碼。
struct unit
{
 int x;
    int y;
    char haveBall;
    char ballColor;
} ;
這段代碼定義了一個結構體,其中struct是關鍵字,先解釋一下關鍵字,關鍵字是C語言中有固定含義的英文單詞,我們寫程式的時候不能使用關鍵字來起名字,我們上面提到的資料類型也是關鍵字。
struct 的含義就是要定義一個新的結構體。後面unit是我們自己起的名字,然後是一對大括弧,括弧裡面是開空間的代碼,說明新的類型是由什麼樣的空間組成,並沒有真的開空間,最後用“;”結束。一個新的結構體,就是一種新的類型,上面的代碼只是定義了新的類型,我們用新的類型去開的空間,就是結構體空間。代碼如下;
unit  a;
新開出來的空間分別由int,int,char,char來組成如。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.