行業本質:Web程式設計師&電腦螢幕前的汽修工

海微發表於2012-09-05
  耶穌就打發兩個門徒,對他們說:“你們往對面村子裡去,必看見一匹驢拴在那裡,還有驢駒同在一處。你們解開,牽到我這裡來。若有人對你們說什麼,你們就說:‘主要用它。’那人必立時讓你們牽來。” 這事成就,是要應驗先知的話,說:“要對錫安的居民說:‘看哪,你的王來到你這裡,是溫柔的,又騎著驢,就是騎著驢駒子。’” 門徒就照耶穌所吩咐的去行,牽了驢和驢駒來,把自己的衣服搭在上面,耶穌就騎上。 
                                                                       《馬太福音》 21:2-7


數學家說,這個世界是個數字的世界,那麼程式設計師會說這個世界是資料的世界。程式就是對資料的處理。在軟體開發的眾多分支領域中,Web開發是主流。出乎其外,跳出Web開發看Web開發,縱觀Web應用組成,大體可以分為三部分。第一部分是資料庫,主要負責資料的增、刪、改、查。第二部分是瀏覽器,主要負責資料的展現、瀏覽。第三部分就是Web應用程式,夾於資料庫和瀏覽器之間,主要負責根據瀏覽器發過來的請求,到資料庫中去對資料庫中的資料進行增、刪、改、查,並且將處理結果返回給瀏覽器。
資料庫有專門的廠商,有諸如Oracle、DB2、MySQL、SQLServer等成熟的產品。瀏覽器也有通用的IE、傲遊等。這兩部分基本上不用Web程式設計師關注太多,重點是關注Web應用程式這部分。其中,Web應用程式是執行在Web容器中的。此外,Web容器也是有成熟的產品。Java方面的諸如WebSphere、JBoss、Tomcat等。如此盤算下來,Web程式設計師主要工作僅剩下負責Web應用程式的開發。當然,因行業不同,需求不同,這部分是變動最大的,最靈活的。
整個Web開發,可以用現實生活中的物流來做比喻。如果資料比作現實生活中的貨物的話,那麼瀏覽器則類似於現實生活中店面裡的櫃檯,資料庫則類似於現實生活中的倉庫。不必多想,Web應用程式就類似於夾於櫃檯和倉庫之間的運輸車了。就像Web應用程式負責請求查詢資料一樣,運輸車負責根據店面銷售需求從倉庫中提取貨物。就像Web程式負責儲存資料一樣,運輸車也負責將店面多餘、暫時不用的貨物運輸到倉庫。
無須大驚小怪,從這個角度來看,Web程式設計師就類似於鑽在汽車底下面、全身髒兮兮的汽修工了。與之不同的是,汽修工可能在室外工作,程式設計師在室內幹活;汽修工用的是鉗子和扳手,程式設計師用的鍵盤和滑鼠;汽修工面對的是汽車,程式設計師面對的軟體;汽修工可能在流水性上批量生產汽車,程式中大部分是定製系統。客戶需要時,找來幾個"汽修工",啟動一個專案,定製出一輛"新車"。需求不同時,車型也不一樣。如果是個人用的,注重美觀,可能造一輛大眾或寶馬;如果是短途的,又是小量的運輸,可能就造一輛麵包車;如果是拉煤的,又是長途,可能就要造一輛火車了。車造好了,一直在跑,偶爾難免拋錨、出故障等。剛開始可能出現的問題小,頻率低,時間一長,零件慢慢老化,問題就大了,頻率也高。這個時候就輪到汽車修理工幹活了。

Web程式設計師難道不就是天天在做著這些事嗎? 汽車造好了,客戶買回了家,就一直在用。系統做好了,上到生產環境,一直在執行。隨著時間的推移,資料庫中資料越來越多,到一定級別時,表中資料量達十萬級別,百萬級別,甚至更多,系統效能開始慢慢降低。另外,客戶在使用的過程中,發現某個現有的模組需要改動,或者要在當前的系統基礎上新增新的功能。日積月累,時間長了,系統像那在馬路上已經跑了數年的汽車,因為年老氣衰,跑一陣子就喘口氣,咳嗽幾聲。搞不好,又得送進維修廠折騰一陣子。可幸的是,汽車破爛了,主人有錢,就可以買新的,讓舊的退出工作崗位。軟體系統就不一樣了,“改頭換面”不是輕易而舉的事,哪怕客戶再有錢也不行。系統一旦上線了,有了生產環境的資料,則每一次變動,都得在原來的設計上更改。系統就像人的身體,是一個有機的整體,這一層調那一層,這一方法呼叫那一個方法,事先都約定好了。系統設計做得好,免疫力強,患個小感冒、或摔了一跤磕破了點皮,無關大礙。可大的變動,就像要換一支胳膊、或換一條腿,系統設計再靈活也難以支援。即使支援也得付出沉重的代價。 或許,從這一點來看,汽修工比程式設計師更幸福些。

程式語言翻譯

資料庫,其實也是個軟體。術業有專攻,資料庫就是一個專門用來管理資料的軟體。這管理就類似於現實生活中的倉庫。倉庫可以往裡面儲存貨物,也可以從裡面取出貨物。具體的儲存和取出,由倉庫管理員來設計和協調。另外,時不時出於管理等需要,還需要做出些統計報表。與其類似,資料庫主要作用就是對資料進行增、刪、改、查。具體的操作,也有資料庫管理員。
兩者雖然類似,但仍有些不同。第一,倉庫裡的貨物無法備分,資料庫裡的資料可以備分,而且一般都會作了備分。第二,倉庫可以看得見,包括裡面的貨物也都是肉眼所能見的。資料庫一半看得見,一半看不見。資料庫裡有資料,但不可能直接開啟儲存資料的檔案,必須得在客戶端執行指定的命令才能看見,所以說資料庫“是一半看得見,一半看不見”。正因為不能完全看見,操作起來才更有難度,需要一定的理解能力、抽象能力,通俗的說,更注重腦力,而非體力。倉庫管理,因為貨物都為可見物,對腦力的注重相對來說少了許多,對體力注意的多些。因此,有了第三個不同,資料庫管理員的收入普遍比倉庫管理員高,甚至高出幾倍。

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

/** * 發生在物流世界裡的故事 */ package logistics;

/** * 倉庫,主要負責貨物的儲存和取出 * 相當於資料庫部分 */ public class Storehouse {

/**
 * 倉庫管事員
 * 說明:這個角色類似於軟體開發中的資料庫管理員
 */
private String administrator;

/**
 * 傳呼倉庫管理員
 * @return
 */
public String getAdministrator() {
    return administrator;
}

/**
 * 指定倉庫管理員
 * @param administrator
 */
public void setAdministrator(String administrator) {
    this.administrator = administrator;
}

/**
 * 有倉庫,一般就有倉庫管理員
 * @param administrator
 */
public Storehouse(String administrator){
    this.administrator = administrator;
}


/**
 * 儲存貨物
 * @param goods 貨物
 */
public void storeGoods(String goods){
    System.out.println("把貨物分門別類放到倉庫裡指定的位置儲存起來。");
}


/**
 * 取出貨物
 * @param location 貨物儲存的位置
 * @return 返回取出的貨物
 */
public String getOutGoods(String location){
    System.out.println("按著指定的位置,從倉庫中取出相應的貨物。");
    return "貨物";
}

/**
 * 按照要求統計倉庫貨物
 * @param 統計的需求
 */
public String statistics(String request){
    System.out.println("倉庫管理員按著統計需求,根據庫存實際情況做成報表。");
    return "統計報表";
}

}

應用軟體一般是定製的,但細化到具體的行業,各個行業的行業特性大體上是固定不變的。因此,有些公司摸索出行業的特色,開發出了適合這個行業的通用型的應用軟體,作為產品在市場上銷售。對於這種就如同汽車廠里根據市場情況分析,預先研發、並且批量生產了一款型別的汽車。對於那種定製的,則類似於客戶相不種批量生產的,直接跟廠商說出要什麼樣型別的汽車,廠商再為他定製。(當然,事實上汽車行業裡,這種定製情況極少,但如果客戶很有錢,出價高,那就另有別論了。) 不管是批量生產,還是定製,出來的廠品都是車。作為要和倉庫打交道的車一般比較憨厚、實在,甚至被專門取了個通用外號,叫貨車。貨車沒有小轎車那般的浪漫,今天從這個地方“輕輕的我來了”,明天又在另外一個地方“空空的我走了”。相反,倒是更像臧克家筆下的《老馬》。

                        老馬
                                        臧克家

總得叫大車裝個夠, 他橫豎不說一句話, 背上的壓力往肉里扣, 它把頭沉重的垂下!

                 這刻不知道下刻的命,
                 他有淚只往心裡咽,
                 眼裡飄來一到鞭影,
                 它抬起頭望望前面。

“鞭影”來了,老馬就抬起頭來“望望前面”,不管大車有沒有裝得太夠,“背上的壓力往肉里扣”,同時還毫不抱怨,“橫豎不說一句話”。同樣的,貨車也是這般的性格,這般的命運。銷售火爆了,加班加點的運。銷售淡季了,又重新往倉庫運。銷售市場的風“不知道往哪一個方向吹”,所以貨車也是“這刻不知道下刻的命”。就這樣,肉體和心靈的雙重壓力擔在身上,用不了多久,很容易未老先衰。慶幸的是,司機可以平時好好保養,其間問題時也可以找汽修工。 Web應用程式就相當於這憨厚、老實的貨車。作為程式設計師的你,如果同情這老馬般命運的貨車,平時在工作中就多多照顧它吧。

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

/** * 發生在物流世界裡的故事 */ package logistics;

/** * 貨車,主要負責在倉庫和櫃檯之間實現貨物週轉運輸 * 相當於程式設計師開發的Web應用程式 */ public class Truck {

/**
 * 貨車司機。
 *(會開車的,一般多少會修車,只是缺少工具和要替換的零件)
 */
private String driver;

/**
 * 汽修工。(汽修工肯定會開車,也可做司機)
 */
private String repairman;

/**
 * 有事時,找來貨車司機
 * @return 貨車司機
 */
public String getDriver() {
    return driver;
}

/**
 * 給貨車找個司機
 * @param driver
 */
public void setDriver(String driver) {
    this.driver = driver;
}

/**
 * 出故障時,找汽修工維修
 * @return
 */
public String getRepairman() {
    return repairman;
}

/**
 * 出故障時,給貨車指定維修工
 * @param repairman
 */
public void setRepairman(String repairman) {
    this.repairman = repairman;
}    


/**
 * 貨車和司機是繫結在一起的。買了貨車,肯定會有司機開
 * 說明:在軟體開發中,自己做的程式肯定會用,首先肯定會使用;
 *         其次,熟悉內部實現,有毛病時知道問題原因在哪,知道怎麼改。
 *         可以做"司機"去開"貨車",但從角色上看更類似於汽修工的角色。
 * @param driver
 */
public Truck(String driver){
    this.driver = driver;
}

/**
 * 主要任務:在倉庫和櫃檯之間來回運輸貨物
 */
public void transportGoods(){

}

生產是為了銷售。與此類似,技術帶來資訊化產品最終也是為了服務於業務需求。簡而言之,即為“技術服務於業務”。工廠裡生產出來的產品的好壞,實驗室裡的研究報告或許並不能說明什麼,結果最終要靠消費者說話。畢竟消費者的眼睛是雪亮的。同樣,在軟體開發中,設計做的多麼好,用的技術多麼先進,客戶可能並不關注,他們注重的是最終的軟體產品。業務需求是否已經滿足,查詢和提交的速度是否足夠快,以及頁面是否美觀等。

程式碼清單3:Counter類原始碼

/** * 發生在物流世界裡的故事 */ package logistics;

/** * 櫃檯,主要負責於展現貨物,和發出調取貨物的需求 * 相當於Web程式中的瀏覽器部分 */ public class Counter {

/**
 * 展現貨物
 */
public void display(){
    System.out.println("按著貨物類別,分門別類擺好,向消費者展示。");
}


/**
 * 發出調取貨物的需求
 */
public void sendGetGoodsRequest(){
    System.out.println("根據銷售良好和店面的現有貨物數量不足,發出提取貨物的需求!");
}

/**
 * 發出儲存貨物的需求
 */    
public void sendStoreGoodsRequest(){
    System.out.println("根據銷售情況欠佳和店面的現有貨物過多,發出儲存貨物的需求!");
}

}

enter image description here

相關文章