實習總結


前言

  離開實習的那家公司已經有一個月了,但這篇文章卻遲遲沒有寫完,或者是找工作讓人折騰,或者還是自己太懶了,趁這兩天有一陣緩沖期,抓緊時間把這段經歷做個總結吧。在正式開始之前,首先介紹一下我實習的這間小公司的一些概況吧,這家公司做的是ERP產品,使用的技術是Winform/C#。在這實習的兩個月時間里,Winform給我的感覺是適合做桌面快速開發,但我還是不太喜歡這門技術,覺得Winform的前后台開發比較耦合,對界面的展現相當乏力,據聞微軟推出的WPF會是WINFORM的一個替代品,可見在未來WINFORM的使用率會逐漸下降。boss是一個新西蘭海歸,本身也有10年開發經驗了,現在回國創業。期間在與boss交流的過程中,發現一個有趣的事情:在新西蘭那邊軟件開發行業微軟的技術很流行,原因是微軟與那邊的大學合作緊密,采取了一系列激勵學生從事微軟技術開發的措施:開設專門學習微軟技術的課程,計算機學生可以免費獲得Windows正版認證,如果在學校的微軟課程中學習成績優異,還可以獲得額外的獎品,boss說他曾經在微軟的技術課程中考到了第一名,然后就被邀請到新西蘭微軟總部領取了一台XBOX游戲機,可見,微軟在那邊的推廣力度還是很大的。為什么微軟願意花這么大資金投入呢?相信沒有人願意做虧本生意。boss提到在新西蘭那邊,版權是受到法律嚴格保護的,如果員工發現公司沒有使用正版軟件,是可以直接告公司的,所以那邊的公司基本都會用正版軟件,微軟的投入不是沒有回報的。同時新西蘭的IT行業起步不是很早,所以在微軟的高推廣力度下收效非常可觀。

  閑說了這么多東西,接下來開始進入正題吧,首先要介紹的是工具篇。

工具篇

 “功欲善其事,必先利其器。” 作為一個開發者,除了具備優良的編程理念和敏銳的思路,同時應該能熟練地使用一些工具,內外兼修,工具的使用能大幅度地提升開發效率,帶來的效益是很可觀的。在實習的這家公司里,開發用的是Visusl Stdio 2010 和 SQLServer 2008。對於數據庫而言,我沒接觸過其他DBM,所以不好對比,但是一提起VS,仿佛我眼中就冒出火光了,對,這是我接觸過最強大,最具生產力的開發環境,沒有之一。對於這兩個常用的開發環境,這里就不在多說了,接下來將介紹一下其他的工具。

     1. ERStudio

  在未使用ERStudio前,我一直是直接在SQL-Server的Query窗口中寫CREATE TABLE語句,說實在話,我很喜歡這樣的開發方式,畢竟一切都在代碼的可控制范圍內。但手動寫CREATE TABLE對於TABLE少的情況下還好,一旦TABLE的數量比較多的時候就比較難辦,因為很難看出表與表之間的聯系,容易遺漏東西。ERStudio具有強大的數據庫建模功能,可以自動生成CREATE TABLE語句,同時還可以查看已建好的數據庫的結構,印象比較深的一次是使用ERStudio把數據庫中的大概30張表拉到可視化建模界面顯示,表與表之間的聯系能夠清晰地展現出來,對於了解整個模塊的數據庫設計提供了非常好的圖形界面。

      2. Team Foundation Server

   TFS作為一個團隊開發服務軟件,只需部署到服務器上,然后讓每個開發端的VS的團隊資源管理器連接到服務器,這樣就能進行團隊開發任務了。確切來說,TFS大概可以分為兩個部分,一個是源代碼管理,另一個是開發任務管理。對於源代碼管理,在日常開發中經常用到的操作有獲取最新版,簽入代碼,簽出代碼,解決沖突等。當然TFS還提供了很多強大的功能,這里就不一一列舉出來了。

  

  對於每個開發者而言,使用源代碼管理器,不僅可以專注於自己所負責的模塊的開發情況,也可以及時地獲取最新版本,同時源代碼管理器還保留了歷史開發版本,具有很高的安全性,對於團隊項目來說這真是必不可少的一個工具。

      TFS對於軟件開發管理方面同樣提供了很好的支持,使用開發任務管理,你可以建立自己的任務列表,設置每個任務的優先級,預計完成時間,開發標記(未開始,開始,已完成,阻塞),以及注釋等等。在之前做個人項目開發的時候,自己是沒有做提前規划的習慣,基本上是突然想到什么就做什么,開發任務很凌亂,所以效率確實不怎么樣。而開發任務管理可以幫助你整理任務,跟蹤你的開發情況,記錄每天的工作情況,久而久之你也許會驚喜發現自己的開發效率會在潛移默化中逐漸提高,至少對於我自己使用過后的感受是這樣子的。以致后來自己在做個人開發的時候,也喜歡使用開發任務管理軟件,不過我不是使用TFS,畢竟這是針對團隊開發而言的,對於個人使用有點過於龐大而且部署復雜,所以我自己使用的是一款叫做 TODOLIST 的免費軟件,我非常喜愛這個東西,因為它確實很好用,所以在這里推薦給大伙。

     

     微軟的TFS功能很強大,同時也是一個收費軟件,如果想使用免費的SVN,可以參見Mercurial,著名問答平台StackOverFlow就是使用這個版本管理軟件。

     3. SQL Server Profie

  SQL Server Profile 是一個監控SQL Server運行的組件,需要安裝SQL Server企業版才會有這個組件。使用這個組件的一個很重要原因是為了監控SQL和存儲過程的執行情況,因為實習的這家公司使用自己開發的框架,封裝了很多數據庫底層操作,所以有時出BUG了,需要查看某個存儲過程或SQL到底執行了沒有,這時候SQL Server Profie 就派上用場了。

  4. SQL Promt

  使用了SQL Promt后,我發現我越來越離不開它了。不知道SQL Server 2012對於T-SQL智能提示的支持做得怎樣,至少在我本機的SQL Server 08 Express R2的智能提示確實不怎么樣。SQL Promt是可以運行在SQL Server上的一個收費插件,提供了強大的智能提示功能。實習的這家公司很多業務邏輯需要寫成存儲過程,對於兩三百行的存儲過程如果智能提示很差的話,對於編寫者而言將是一個災難,因為我自己一開始沒有用這個插件,對比兩個開發模式,所以我深有體會,使用Promt可以大大提高開發效率。

技術篇

  1. 12層的開發框架

  傳統的開發框架基本分為最基礎的三層:界面UI層,業務邏輯層,數據訪問層。12層的開發框架是建立在傳統三層之上的,首先最底層是基礎層,分別定義了項目的界面,業務邏輯,數據訪問的基礎組件,供上層使用。層與層之間的調用也是有嚴格限制的,即上層只能訪問下層的東西。也許你會覺得12層好像很多余,使用傳統三層不也可以嗎?其實這就要牽涉到ERP的問題了,雖然ERP已經有一系列的標准操作,但不同的行業,細分到不同的公司,卻希望能有個性化定制,切實符合公司實際應用場景,如果使用傳統三層,那么有關個性化的部分會與公司的ERP通用產品緊密地耦合在一起,這是不利於后期維護和功能擴展的。12層的開發框架就是為了解決這個問題的,基礎層之上是標准層,標准層之上是行業層,行業層之上是公司層,這樣客戶個性化定制的功能就主要集中在上層了,這就避免了耦合,從而也能最大程度地重用代碼。

  2. 面向集合的SQL

  相信很多開發者跟我一樣,因為對於面向過程的熟悉,很容易把面向過程的思想也帶到SQL中來。比如說現在為一張表生成測試數據,面向過程的思想會這樣做:這還不簡單嘛,寫個WHILE循環,設定一個循環變量,一次插入一行數據,然后就翹起雙手坐等結果出來。這樣子的方案確實能解決問題,但又有沒有考慮過效率問題呢?如果按照一次一行的處理方式的話,SQL Server會為每一行Insert生成一個事務處理,一旦處理的數據量很大,速度是非常慢的。不如讓我們把視角從面向過程轉到面向集合,來看看面向集合又可以怎樣實現吧。

CREATE TABLE customer
(    cust_id       INT                    NOT NULL,
     cust_name  NVARCHAR(20) NOT NULL,
     cust_no       VARCHAR(10)   NOT NULL,
     CONSTRAINT pk_cust_id PRIMARY KEY (cust_id)     );

/*當對測試數據的隨機性不做要求的時候可以這樣做*/
/*已知有一張表history有1000行記錄*/
INSERT INTO customer
SELECT 'teroy',
             'no1'
   FROM history h1
 CROSS JOIN
             history h2

--這樣就插入了1000×1000行數據了
面向集合的SQL

  當然這個例子還不足以說明面向集合思想的應用場景,要講明白面向集合的思想還需要很大的篇幅介紹,這里也就點到為止了,畢竟我自己也處於接收面向集合思想的初級階段,就不敢繼續班門弄斧了,想要了解更多可以點擊:http://www.ituring.com.cn/article/details/472

  3. 使用腳本模板和界面模板

      很多時候,在進入功能開發的前期,我們都要做一系列基礎的工作,比如新建一個Form后,引入必要的命名空間,添加必要的界面控件等等。這些工作確實耗費時間,那么這時候就應該考慮使用模板了。我接觸過兩種模板,一種是T-SQL模板,另外一種是界面模板。創建T-SQL模板應該來說比較簡單,只要一點小技巧就可以了,那就是在SQL Server的Query窗口寫完模板后,存為文件后就把文件設置為只讀。而界面模板的話,就需要使用到VS提供的導出模板功能,具體這里就不進行介紹了,隨便一搜就可以查到相關的資料了,不然的話記得《VS 2010高級編程》這本書也有詳細地提到過,可以參考下這本書。  

/*
-----------存儲過程模板--------
----Anthor:
------Date:
-------------------------------
*/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

IF OBJECT_ID(N'','P') IS NOT NULL
DROP PROC proc_
GO

-----編寫你的存儲過程位置-------
CREATE PROC proc_

AS

BEGIN

END
Example-存儲過程模板

  4. 調試程序

      很多時候程序運行出BUG了, 通過拋出的異常信息無法定位到BUG,這時就需要使用調試功能了。VS提供了強大的調試功能,基本組合為F5+F10+F11+設置斷點,在敏感位置插入一個斷點,按下F5,程序運行到斷點處就會跳回IDE界面,這時已運行代碼變量的值都可以在程序中查看了,按下F10為執行下一條語句,如果程序有調用另外的函數,按下F11則可以進入所調用的函數中。調試程序也是開發人員必須掌握的基本技能之一。

  5. SQL編寫規范以及腳本的命名

    有關良好的編程規范所帶來的好處這里就不在老生常談了,“優秀的代碼是寫給人看的”這句經典的話已經涵蓋了方方面面。其實,良好的編寫規范的養成並不困難,除了學習編程規范的技巧之外,還要在開發中踐行這些編程規范,保持對寫優秀代碼的追求,這就可以了。這里簡單介紹一下有關T-SQL編程的幾個小技巧:

  • 關鍵字大寫,對於SQL的保留字如FROM,WHERE,AND等等,都使用大寫;
  • 使用縮寫,比如內聯一張表可以用INNER JOIN, 也可以直接使用JOIN,這時就應該選擇JOIN,盡量減少代碼;
  • 留空換行的選擇,來看一個對比:
    //單行寫完的SQL
    SELECT * FROM table WHERE table_id = 1
    
    //留空換行的寫法
    SELECT *
      FROM table
     WHERE table_id = 1
    
    //稍微復雜的SQL
    SELECT a.*,
           b.table_num
      FROM table1 a
      JOIN table2 b ON a.table_id = b.table_id
     WHERE a.table_id = 1

    對於越復雜的T-SQL,留空換行的寫法可讀性會大大提高。這個技巧的一個重點是對齊,這里就不再過多描述了。

    對於團隊開發而言,每個人都需要寫T-SQL腳本,並放到一個模塊的文件夾中,這樣在部署的時候需要運行一個小工具,就可以運行整個文件夾中的T-SQL腳本了。然而這樣卻有一個問題:我們知道T-SQL腳本的創建是要求有先后順序的,總不能在CREATE TABLE語句之前先往TABLE加入初始數據吧,所以為了讓腳本有序,需要在腳本命名的開頭寫上一個序號,同時要注意到一點是最好以5或10的遞增順序寫序號,比如00010_CreateTableStudent_Teroy.sql, 00020_InsertIntoTableStudent_Teroy.sql 等等。這樣命名是為了應付有時中間遺漏了什么腳本沒寫,就生成一個中間序號比較00005_CreatePrimayKeyOnStudent_Teroy.sql放到文件夾中,如果以1為增量,就不能這樣實現了。

非技術篇

  1. Visio & OneNote

   需求人員將ERP界面需要制作的東西畫在Visio上, 同時將對應的業務邏輯寫在OneNote上, 做為開發者, 就以這兩個東西為基准進行開發工作,所以實習期間除了打開VS和SQLServer外,這兩個東西也是必備品。Visio提供了專業的可視化處理,確實很好用,特別提一下OneNote,OneNote是一個可分享的筆記本,能更好地提供協作溝通功能,一個比較贊的功能是,它可以在每一個功能描述點之前添加一個打勾的選項,所以當你完成了某個功能點的時候,就順便在之前的勾打上,這就可以記錄你的完成情況,盡量避免了功能遺漏。

  2. 溝通交流的藝術

  作為開發人員,跟需求人員溝通交流是家常便飯的事情,ERP開發更是如此。我接觸的開發模塊是財務模塊,這是一個專業性很強的東西,因為你必須充分了解會計上的東西,不然開發工作將會一頭霧水,所以很多時候都需要和需求人員探討會計上的種種業務員需求。

  溝通交流也是一門學問,在我一剛開始進行溝通的時候,經常是等到需求人員噼里啪啦講完一大堆后,但我還是似懂非懂,提出疑問后,然后又需要別人再重復地講多一遍,這就是低效的溝通交流。那么如何提高溝通的效率呢?問題如果發生在自己身上就要尋求方法解決。首先,在於別人做溝通交流的時候,請保證自己一定要全神貫注,仔細地聽,認真地思考,這是高效率溝通的第一道保障;及時提問,當遇到自己不理解的地方,請立刻提出問題,不要等到別人噼里啪啦講了一大堆后再一起提問,因為你記不住這么多問題,而且東西經常是一環扣一環的,一個地方出現了斷點,那么后續關聯的地方肯定也是無法理解的,如果這時再讓對方繼續講,豈不是一堆空氣話?提問表達盡量簡潔而且易於理解,當遇到不懂的問題的時候,打斷對方,這時你不需要立馬拋出問題,因為沒經過認真組織的語言容易讓人費解,你可以稍微經過思考,組織好你的語言,爭取精簡而有力地闡明問題;在你最終弄懂了這些問題的時候,在對方繼續講述之前,可以適當地做一些標記,以防之后的遺忘。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM