行業本質:我們在做產品&辦公室裡的木匠

海微發表於2012-09-05

我們在做產品&辦公室裡的木匠

這不是木匠的兒子嗎?他母親不是叫馬利亞嗎?他弟兄們不是叫雅各、約西、西門、猶大嗎? 《馬太福音》 13:55

科學是什麼?不少人對科學抱著一種敬畏,乃至神聖的態度。不盡其然,正如有人解釋,所謂的科學就是一門一門的學問。一門一門的學問加起來,就是科學。軟體開發是門學問。以此理推之,那軟體開發也隸屬於科學範疇之一。那這到底是一門什麼樣的科學呢?難道真的如常人所想象的那樣神祕,甚至有如科學世界神聖而不可侵犯嗎?抑或,如牛頓所說的,科學在上帝眼中不過是兒戲?

作為平凡的程式設計師,我們自然難以像偉大的科學家牛頓那樣把科學看得那麼透徹,可同時身為這個行業的從業人員,我們又定然不會向隔行如隔山的外人一樣,把軟體世界看得過於神祕,深不可測。那麼,程式設計師本身到底該如何審視自己的所從事的行業呢? “詩人對宇宙人生,須入乎其內,又須出乎其外。入乎其內,故能寫之。出乎其外,故能觀之。入乎其內,故有生氣。出乎其外,故有高致。” 我國近、現代相交時期的著名學者王國維在<<人間詞話>>裡有對詩歌有這樣精闢的評說。事不同而理同。同樣的,要思考軟體開發的本質,最好的方法莫過於即“入乎其內”,又“出乎其外”。“入乎其內”時,觀察其內在規律和外在趨勢。“出乎其外”時,時爾審視其細微之處,時爾縱觀其整體脈絡,品察其微妙。正如<<道德經>>所說的,“常無慾,以觀其妙;常有欲,以觀其徼。” 當這樣如此反反覆覆的觀察、審視之後,或許不難發現其實軟體開發跟其他實體行業差不多,都是在做一些具體的產品。<<聖經>>上記著耶穌的父親約瑟是個木匠。照著古時一般“父承子業”的傳統,耶穌本人也應會木工。或許比較巧,我的父親也是個木匠,可是我沒有走子承父業的道路,去做個木匠,而選擇了軟體開發。去過幾次父親工作的地方,觀察過他們的工作。靜而想之,其實自己從事的是軟體開發,但性質跟做傢俱仍是一樣。只是工作環境不同,使用的行業工具不一樣罷了。工作環境,有些髒亂、吵鬧的大車間換成了整齊的、安靜的現代化辦公室。使用的行業工具,從笨重的機器換成了輕巧的筆記本。此外,就是工作最終的結果不同,他們產出的是傢俱,我們產出的是軟體系統。

程式語言翻譯

科技時代,傢俱廠裡基本已經見不到最初的斧頭和鋸了。相對來說,在農村卻依然可以看見不少斧頭和鋸了。在若干年前,鋸、斧頭和尺子等就是木匠吃飯的傢伙,他們靠著這些,憑著自己的手藝,把一堆堆笨重的木料就擺弄成了平整的、結實的傢俱。

程式碼清單1:Carpenter類原始碼

/** * 傢俱廠裡的故事 */ package furnitureFactory;

/** * 木匠 */ public class Carpenter {

/**
 * 做傢俱的工具:鋸
 */
private String saw;

/**
 * 做傢俱的工具:斧頭
 */
private String axe;

/**
 * 做傢俱的工具:尺子
 */
private String ruler;

/**
 * 做傢俱的材料:木料
 */
private String wood;

/**
 * 要做的傢俱
 */
private String furniture;
/**
 * 木匠拿出鋸鋸木材
 * @return 鋸
 */
public String getSaw() {
    return saw;
}

/**
 * 給木匠一把鋸
 * @param saw
 */
public void setSaw(String saw) {
    this.saw = saw;
}

/**
 * 木匠拿出斧頭劈木材
 * @return 斧頭
 */
public String getAxe() {
    return axe;
}

/**
 * 給木匠一把斧頭
 * @param axe
 */
public void setAxe(String axe) {
    this.axe = axe;
}

/**
 * 木匠拿尺子畫圖,量木材尺寸
 * @return 尺子
 */
public String getRuler() {
    return ruler;
}

/**
 * 給木匠一把尺子
 * @param ruler
 */
public void setRuler(String ruler) {
    this.ruler = ruler;
}

/**
 * 木匠拿到木料
 * @return 木料
 */
public String getWood() {
    return wood;
}

/**
 * 給木匠做傢俱所要的木料
 * @param wood
 */
public void setWood(String wood) {
    this.wood = wood;
}

/**
 * 木匠做好的傢俱
 * @return 做好的傢俱
 */
public String getFurniture() {
    return furniture;
}

/**
 * 告訴要木匠做什麼樣的傢俱
 * @param furniture
 */
public void setFurniture(String furniture) {
    this.furniture = furniture;
}

/**
 * 找來木匠時,首先要做的傢俱和提供的木料
 * @param wood 提供的木料
 * @param furniture 要做的傢俱
 */
public Carpenter(String wood,String furniture ){
    this.wood = wood;
    this.furniture = furniture;
}

/**
 * 木匠開始做傢俱
 */
public String work(){

    //以做書桌為例

    //1、用尺子,按著書桌外觀要求,畫出設計圖紙。
    //設計圖紙上標名書桌各個部分長寬高,如書桌的四個腳長多少、高多少、寬多少等;

    //2、把傢俱拆分成幾個部分,如桌腳、抽屜、桌面等,再用斧頭和鋸分別做好這幾個部分

    //3、組裝。把桌腳、抽屜、桌面等,組裝到一起,就成了一張書桌

    //把做好的書桌交給客戶
    return  this.furniture;
}


public static void main(String[] args){

    //找來木匠師傅(這裡用木匠祖師:魯班),給他提供一些松樹木料,要他做一個辦公桌
    Carpenter luBan = new Carpenter("松樹木料","書桌");

    //木匠祖師開始工作
    String furniture =  luBan.work();

}

}

就像木匠一樣,有著他們業內特有的行業傢伙。同樣的,軟體從業人員也有屬於自己行業特有的作業工具。電腦、開發語言、整合開發環境等,程式設計師就是靠著擺弄這些,折騰出一個有實際意義、有商業價值的軟體系統來的。電腦是工作中最基本的硬體平臺。整合開發環境,諸如一些工具Eclipse、Office、資料庫,以及畫圖的工具等等是程式設計師行業道具。其中,開發語言是比較重要的工具之一。根據這個可以分出些不同的領域、不同的崗位、不同的稱呼來,如Java程式設計師、C++程式設計師、PHP程式設計師等等。但究其本質來看,不管是整合開發環境也好,還是任何一門程式語言也罷,都是程式設計師開發軟體系統時的工具。

程式碼清單2:Developer類原始碼

/** * 軟體公司裡的故事 */ package softCompany;

/** * 程式設計師 */ public class Developer {

/**
 * 整合開發環境:Integrated Development Environment 
 */
private String IDE;

/**
 * 使用的開發語言
 */
private String developLanguage;

/**
 * 電腦
 */
private String computer;

/**
 * 系統需求
 */
private String systemRequirement;

/**
 * 做好的系統軟體
 */
private String software;


/**
 * 得到程式設計師搭建的整合開發環境資訊
 * @return
 */
public String getIDE() {
    return IDE;
}

/**
 * 程式設計師搭建整合開發環境
 * @param iDE
 */
public void setIDE(String iDE) {
    IDE = iDE;
}

/**
 * 得到程式設計師用的開發語言
 * @return
 */
public String getDevelopLanguage() {
    return developLanguage;
}


/**
 * 指定程式設計師用什麼開發語言
 * @param developLanguage
 */
public void setDevelopLanguage(String developLanguage) {
    this.developLanguage = developLanguage;
}


/**
 * 得到程式設計師使用的電腦相關資訊
 * @return
 */
public String getComputer() {
    return computer;
}

/**
 * 給程式設計師一臺電腦
 * @param computer
 */
public void setComputer(String computer) {
    this.computer = computer;
}


/**
 * 得到程式設計師所理解的系統需求
 * @return
 */
public String getSystemRequirement() {
    return systemRequirement;
}

/**
 * 給程式設計師指定系統需求
 * @param systemRequirement
 */
public void setSystemRequirement(String systemRequirement) {
    this.systemRequirement = systemRequirement;
}

/**
 * 得到程式設計師開發好的系統軟體
 * @return
 */
public String getSoftware() {
    return software;
}

/**
 * 指定程式設計師要做一個什麼型別的軟體
 * @param software
 */
public void setSoftware(String software) {
    this.software = software;
}

/**
 * 給開發人員指定系統需求
 * @param systemRequirement 提供的系統需求
 */
public Developer(String systemRequirement){
    this.systemRequirement = systemRequirement;
}



/**
 * 根據需求,開發系統
 * @return  開發好的系統軟體
 */
public String developer(){

    //以進銷存系統為例

    //1、分析客戶提供的需求

    //2、根據需求做出設計。
    //一般先是大體的系統框架設計,然後再細化到模組設計,諸如庫存管理、銷售管理的具體設計等。

    //3、根據設計編寫諸如庫存管理、銷售管理等各個功能模組的程式碼

    //4、把做好的各個模組組織起來,連在一起構成整體,就是要做的系統軟體

    //把開發好的系統軟體提交給客戶
    return software;
} 

public static void main(String[] args){

    //找來開發人員,要其開發一個進銷存系統
    Developer developer = new Developer("進銷存系統");

    //開發人員開始開發。開發完成後,並把做好的進銷存系統提交給客戶。
    String software = developer.developer();

}

}

小結 木匠把從自然界的樹木拿來做成為人所用的傢俱,讓人的生活變得更舒適,體現了人類管理、享受自然界的萬物的義務和權利。程式設計師開發出軟體系統來,目的在於更高效、更便捷的管理我們人類所擁有的資源。透過現象看本質,軟體開發究其本質還是在於管理自然界的資源,只是中間人類利用自己的聰明智慧發明了些工具,以便管理起來更便捷、更高效。 在此,不禁想起在做系統設計時,為了程式碼條理分明、結構清晰、擴充方便等,常常要分層。跟資料庫互動的,單獨隔出來分為一層,叫做DAO層。跟業務互動,也單獨隔開來分為一層,叫做Service層。頁面展現的再次單獨分為一層,叫做展現層。類似的,在沒有計算機之前,人類通過筆來寫,通過算盤來計算,再用賬本來記錄。有了計算機,軟體走進了公司,走進了人們的生活,鍵盤和滑鼠就代替了筆,CPU就代替了算盤,硬碟就代替了賬本。於是,人們似乎不再面對面的直接跟實體物質互動,而是簡單的對著電腦、對著應用系統去管理遠處或近處的物質。這樣一來,在人和物質的中間單獨隔出了一層,叫做資訊化。因為社會需要、時代需要,如今資訊化不僅已經成為一個產業,甚至已經成為一個產業鏈。可不管是發展成產業,還是延伸到了產業鏈的地步,究其本質仍然逃脫不了“管理海里的魚、空中的鳥、地上的牲畜和全地,並地上所爬行的一切昆蟲。”即<<聖經>>所說的,“神說:‘我們要照著我們的形像,按著我們的樣式造人,使他們管理海里的魚、空中的鳥、地上的牲畜和全地,並地上所爬的一切昆蟲。’(《創世記》 1:26)”

一個老木匠 穆旦

我見到那麼一個老木匠 從街上一條破板門。 那老人,迅速地工作著, 全然彎曲而蒼老了; 看他揮動沉重的板斧 像是不勝其疲勞。

孤獨的,寂寞的 老人只是一個老人。 伴著木頭,鐵釘,和板斧 春,夏,秋,冬……一年地,兩年地, 老人的一生過去了; 牛馬般的飢勞與苦辛, 像是沒有教給他怎樣去表情。 也會見:老人偶而吸著一支旱菸, 對著漆黑的屋角,默默地想 那是在感傷吧?但有誰 知道。也許這就是老人最舒適的一剎那 看著噴著的青煙縷縷往上飄。

沉夜,擺出一條漆黑的街 振出老人的工作聲音更為洪響。 從街頭處吹過一陣嚴肅的夜風 捲起沙土。但卻不曾搖曳過 那門板隙中透出來的微弱的燭影。

9月,29日,1934年

相關文章