行業本質:Web程式設計師&電腦螢幕前的汽修工
耶穌就打發兩個門徒,對他們說:“你們往對面村子裡去,必看見一匹驢拴在那裡,還有驢駒同在一處。你們解開,牽到我這裡來。若有人對你們說什麼,你們就說:‘主要用它。’那人必立時讓你們牽來。” 這事成就,是要應驗先知的話,說:“要對錫安的居民說:‘看哪,你的王來到你這裡,是溫柔的,又騎著驢,就是騎著驢駒子。’” 門徒就照耶穌所吩咐的去行,牽了驢和驢駒來,把自己的衣服搭在上面,耶穌就騎上。
《馬太福音》 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("根據銷售情況欠佳和店面的現有貨物過多,發出儲存貨物的需求!");
}
}
相關文章
- 程式設計師的本質程式設計師
- 程式設計師差別的本質程式設計師
- 程式設計的本質程式設計
- 程式設計師你會修電腦嗎?程式設計師
- 程式設計師的工資高,到底程式設計師的工資有多高?程式設計師
- 全國程式設計師工資新統計,“高危”行業就這收入?程式設計師行業
- 談談一個程式設計師本該具備的素質程式設計師
- 一個電腦程式設計師被謀殺程式設計師
- 程式設計師的工資禁忌程式設計師
- 遊戲設計的本質(一):數值的本質遊戲設計
- 黑客故事:如何接管Java/Clojure/Scala程式設計師的電腦黑客Java程式設計師
- 從程式設計師到專案經理(6):程式設計師加油站 -- 懂電腦更要懂人腦程式設計師
- 從程式設計師到專案經理(6)程式設計師加油站 - 懂電腦更要懂人腦程式設計師
- 程式設計師的基本素質如何?程式設計師
- 理解函數語言程式設計的本質函數程式設計
- 程式設計師的晉級之路:程式設計師如何快速工資翻倍?程式設計師
- 為什麼程式設計師工資比其他行業高這麼多?程式設計師行業
- 架構設計的本質架構
- 程式設計師有哪些電腦技能讓外行感到神奇?程式設計師
- 程式設計師必讀的六本書程式設計師
- 完美程式設計師的10種品質程式設計師
- 在網際網路行業Java程式設計師的工資標準是多少呢?行業Java程式設計師
- 程式設計師,一個吃青春飯的行業程式設計師行業
- 電腦螢幕時間長短在哪裡設定 電腦螢幕息屏時間設定
- 電腦程式設計師侵吞46名儲戶12萬元程式設計師
- 國外一些知名程式設計師的辦公室和電腦桌程式設計師
- 電腦程式設計是什麼?程式設計
- 怎麼調整電腦螢幕顯示亮度 怎麼設定電腦螢幕亮度
- 多執行緒程式設計總結:一、認識多執行緒本質執行緒程式設計
- 不會 A/B 測試的 Web 設計師不是好程式設計師Web程式設計師
- 程式設計師必看的那些電影程式設計師
- 程式設計師的專業主義精神——評《程式設計師的職業素養》程式設計師
- 給程式設計生涯充電的 10 本書程式設計
- 成都Java程式設計師工資多高?Java程式設計師
- 為何程式設計師工資高?程式設計師
- 程式設計師應該讀的10本書程式設計師
- Web設計師需要程式設計知識嗎?Web程式設計
- 扎心的程式設計師,你不會修電腦一定懂作業系統吧!程式設計師作業系統