如果由程式語言經營航空公司.... If Programming Languages ran the Airlines 

原文為:
If Programming Languages ran the Airlines

好久沒有英翻中了啊~因為覺得作者描寫得還蠻有趣且裡頭藏了不少梗,加上先前強者我同學 but 這篇 程式設計師的格言 也是辛苦日翻中來的,看還沒人翻譯這篇所以也來無責任譯注一下,有些採用意譯而非不逐字實翻,有什麼建議或翻不清楚的地方歡迎交流~

個人認為作者所提的幾個共通設定為:出發機場是整個開發平台,而到達機場是執行目標平台,飛機本身是Runtime environment、official library、IDE這類開發工具與元件,機上同行乘客是使用相同平台的開發者,機長是PM、PL,飛抵目的地就意謂著順利開發完成。

一、PL/1 Mainframe航空

當你到達機場後發現根本不像是什麼機場,只是在河旁的老舊木建築。當你想問這為什麼不像是機場時,一個非常老的老人答說他們從開始建造起就是這個樣子了,所以他一定很棒。當你詢問可以在哪裡check in以及飛機何時起飛時,得到的答案卻是這邊根本沒有什麼飛機,因為他們覺得飛機太新潮了。相反的你必須把自己跟行李丟進在河上划行的小船裡,只因為人們已經使用這種船有數個世紀之久,所以這種船已證明他們也是非常好的。你抱怨這種船根本不可能帶你到2000哩外的目的地,但老人堅持你應該試試看,因這艘船從沒讓他失望,雖然事實上他的自信根本不知從何而來,因為它只航行過兩哩....。最後你別無選擇,只好給他一次機會,起初一切都相當順利,老人能夠駕馭這艘船快速的往下游划去,但當你終於到達海上時,老人就心臟病發死了。你現在正處於汪洋的正中,除了一對槳外什麼也沒有....祝你好運。

(譯注:不知道該怎麼說,沒有體驗過老古董巨獸啊....當時的確應該沒什麼完善的開發環境,所以只好直接找老人溝通,應該是指OS吧?但為什麼是船、為何留下一對槳,這我總覺得是有什麼梗....但我實在想不出解釋,有人知道嗎?)


二、C++ 航空

當你到達機場,眼前有五個入口。你走向其中一個時隨即被什麼人叫住了,他警告你只要選了其中一個就不能再回頭,包含目的地在內的一切都要在這時候決定。你考慮了一會,選擇了一個對你來說最好的入口。

(譯注:或許是指容易被開發平台綁定住,同樣都是C/C++的專案可以用到四五種IDE,如果又用了IDE綁定的API就幾乎註定無法無痛轉換平台,為了開發方便而偷懶使用平台限定語法的案例應該佔了大多數。)

當你走到櫃檯check in後你拿到一張機票,上頭記載著從名字、地址到你家裡的狗的名字,還有你家衣櫃的所有內容。你詢問為什麼上頭有如此多對這趟飛行無用的資訊時,你得到了這樣非常好的回答,因為你完全掌握你所要做的一切。當你在餐廳的桌前坐下時,服務生不會給你任何東西,因為你拿的機票是錯的,如果你問如何才能得到食物,你會被告知該在選擇機票之前就想好這些事情。

(譯注:能搞定址跟值的關聯才能搞定C....大量無用的資訊於愛好者來說反而是很興奮且理所當然的事,餐廳這事我的解讀是試用、試寫練習的階段,而此處不上餐應該是說用錯compiler所以build不出東西,因為有些人把build出binary的過程稱為"cook")

帶著困惑上了飛機後,你會得到一份有兩片麵包的餐點,但你得要用一把武士刀去切他們。你看到四周的人都試著在切麵包,偶而也會發生切到自己的手臂或手指這類意外,你問旁邊的人為什麼他們不給一把普通的餐刀去切麵包,因為這把武士刀實在太危險了!但這人卻回達只有武士刀才夠利足以切斷麵包,如果你辦不到的話就是個愚笨的新手

(譯注:這段真的是超感同身受的....當你寫慣Java、C#這類語言-特別是物件導向及3rd party lib特別豐富的,其實有些小事情只要套套API包包framework就搞定了,回頭寫C/C++卻有很多簡單的事情都得針對記憶體直接進行操作,當然效率很高是沒錯,但相對的也增加邏輯錯誤時的風險,所以才說是拿武士刀在切麵包。至於最後一句話感覺是在諷刺無視用途皆主張C/C++語言至上者的心態吧?)

至少....這架飛機速度非常快,你即將在很短的時間內就抵達終點,但就在你快到達目的地機場時,駕駛員被告知降落跑道被更換了。因為這架飛機在離地後就不能更改降落跑道,所以駕駛員將返回出發的機場並且重新開始整趟飛行....。

(譯注:雖然C/C++執行效率非常好,但因為開發平台綁定的後果非常麻煩,因此只要需求有了改變就常常意味著部份或全部得要砍掉重練)

三、PHP 航空

當你到達機場,你發現許多人四處拖著飛機零件。當你詢問為何是這種狀況時,一個人回答「因為你要飛行,所以這就是他們正在製造它的原因」,你正要試著問這裡是否有任何預先組好且通過安全測試的飛機時,那個人已經帶著夾在手臂下的大機翼消失了....。當你登機後(這時左機翼還沒有完工,但空姐保證會在起飛前完成),你遇到了一個小孩子,你問他是否是第一次飛行,但看起來他卻是這架飛機的駕駛員。這個孩子說他從嬰兒時就開始玩玩具飛機,且他有套真正的駕駛服,所以他是非常有資格架駛這架飛機的。

(譯注:PHP利用基本組件加上插件的方式拼湊出環境後,是可以在執行中再去加掛新元件的,如果沒有找到完全符合需求的預組套件,需要再加掛也是很常有的事,加掛後的穩定性或許就不是原套件能保證的了。而那個駕駛員小孩....不知道他玩的玩具飛機是不是在指Perl?XD)

飛機剛起飛後有遇到一些亂流,但隨即就好轉且正常上路了。當飛機正在飛越海洋時遇到了一場暴風雨,這孩子看起來顯得有些害怕,但依然盡力想要挽救局勢,隨著愈來愈多乘客感到恐慌,小孩開始哭泣並且放棄掙扎。你試著自行操控這架飛機,但這裡沒有任何使用手冊....。當飛機直向海面正要墜毀時,你看了看窗外並看到一個人正在小船上慘叫。至少,你走的並不孤單.......

(譯注:PHP的平台維護有相當程度要依賴系統管理者或PM的認知,由於專案多少在開發完成前平台都還可以能改參數、加元件....或許就沒有逐步建立文件紀錄,一旦管理者或PM人間蒸發時,下頭的開發者可能誰也沒法了解到全貌,畢竟會寫的人未必能夠維護平台,一旦關鍵人物消失平台失控時,有時Programmer再強也還是救不了system crash的命運。至於最後酸說走得並不孤單....嗯,這真是太機車了XD)

四、.NET航空

你抵達一個非常新穎的機場只有一個櫃台可以供你check in,但你不需要做任何等待且有位非常友善的女性會幫助你。Check in之後你決定要吃些東西,這裡只有一間餐廳但相當的貴,不過食物還不錯,所以你也就不在意了。你被另一位非常親切的空姐導引到你的班機,這裡只有一條長廊可以讓你通行,所以其實你不需要任何協助,但換個角度想其實他也倒蠻舒服的。你的班機是機場上唯一的一架,但他很棒,有很好的椅子以及美妙的機上晚餐。大約20分鐘後,你降落在一個跟出發地完全相同的機場,因為那也是.NET班機惟一能降落的地方。

(譯注:新穎的機場意味著一個華麗的操作平台,單一櫃台代表入門處只有一個,只有一間餐廳且很貴代表只有Visual Studio可以選XD(不過早已有免費的精簡版可下載),不斷強調非常親切是整個平台畢竟大家都蠻容易上手,食物還不錯代表上手不難,而只有一條長廊代表沒有什麼3rd party方案嗎?只有一架班機這點如果從Compile的角度來解釋,反正最後都是被轉換到CLR才執行,這倒也就有符合作者的描述,至於降落點唯一當然可以是指執行的平台上要有相同的CLR。但後頭這邊的描述如果是以Framework版本來解讀就不為真了,畢竟.NET FW的特色是彼此不相容(向上向下都不行,我指1.1及2.0),機場是否一模一樣及惟一就不一定成立了。不過作者寫的真的太美好了,如果是不在乎環境被綁架、想要好上手方案單純的人看到這種描述,搞不好只會覺得這樣很棒咧(遠目))

五、Java航空

你帶著所有的行李抵達機場,相當的重,所以你感嘆道"真希望能有誰來幫我提他們...."。很快的,航站內所有角落的人都向你這跑來並提供他們的服務。有些人向你要求一些小錢,但大多數都是免費的,因為他們就愛拖行李。起初你對這群人期待過高,但是過了不久,你逐漸了解其中部分的人且發現他們真的不錯。當你快要抵達班機時,你發現這邊不只有一架,而是完全不同的五架,但他們都是飛機且都能帶你去任何想去的地方,其中有些甚至是免費的。你看到一些人-特別是穿西裝打領帶的,他們不相信一切免費的班機且對多樣化的選擇感到焦慮。所以他們走進一棟巨大的藍色建築物,你聽說只要付出足夠的錢就可以讓藍色建築裡的人替你做任何事幫你做決定,但你因為有點缺現金且發現從沒看到任何人再走出這棟建築物....所以你決定選擇其中一架免費班機。在一段愉快舒適的旅程之後你順利到達目的地,你試著說服你的朋友選擇搭乘Java航空去旅行,但他們全都對你說"他是免費的嗎??那他不可能是好的...."....

(譯注:很重的行李應是指各式3rd party library,四處出現的幫手應是指各式3rd party development tools,就愛拖行李或許是指熱心的開放源碼社群?過於期待是因為真正順手且像Eclipse好用的工具並不多吧。這邊的班機應該是指不同的VM與平台提供者,而做選擇對於某些人來說的確是很難,所以他們就去找了....呃....藍色巨人來花錢消災XD....做任何事跟做決定就是客製化跟顧問啊~但只要一但用了就很難再轉換系統,因此也就沒人走出來了XD,最後則是諷刺某些不相信免費解決方案能順利解決問題者的心態。)

結論:感謝所有跟我很認真討論各個梗來源的好同學們,我還真是吃飽太閒翻完了....這作者感覺很討厭PHP,另外要嘛是不懂.NET,要嘛就是M$的支持者XD!!是說二三四五我都搭過耶,怎麼會有如此不忠實的顧客!(大誤)

要轉載麻煩留言告知一下,感謝大家觀賞

2009/3/10追記:開始發現有轉載了,不過至少都還有附上連結....

tag :

留言

Re: 無題

> 打內工程師

其實你講到的點也是事實,IPC在設計上如果撇開針對環境面的特殊規範,其實大多也是靠公板電路、公板驅動做底,畢竟台灣的產業環境就是這麼短線,大家其實是用各種NB solution去套機構件達成客戶的需求,就算機構方面做的再好,PC本質上可能不穩定的因素一個也沒少掉,所以您說到會選用PLC其實是很好理解的,當然真的很耐用的產品還是存在,只是如果是對耐候要求不高的某些BOX IPC(例如說只耐震)....其實扣掉用CF或SSD外說真的跟Mac mini、XPC這類的small top沒什麼差別,大概只是多了mount或rack吧。

至於像無法安裝.NET FW還是要看廠商是不是在eXP部分有做過客製化造成的,這裡頭其實有不少環節可能會出問題,從製造商到客戶端都有可能,售後感覺不好其實也是有特別背景因素的,不過這就不方便公開多談啦....現在時機歹歹,原本被認為穩健的IPC族群最近也是被影響不少,只能說希望製造業的寒冬趕快過去,不然身在供應鏈上的也是很抖啊....

無題

提到關於IPC我就很想聊聊。說真的,我們這邊越來越多人都在避IPC,非必要場合絕對不用IPC,就應用面來說,其實IPC這年代優勢已經很小,尤其不少IPC除了只是用了母子版設計外,完全沒有工業級的感覺,真的要做程控也會用PLC絕對不可能用IPC這相對不穩的方案。但最重要也最致命的是,IPC的公司售後給我們很多人印象很差,而且價格又高,軟體限制多,說真的和HP WorkStation/Server之類相比沒有太大競爭力。IPC近年的確不好做,個人認為最大因素是因為一般桌上型電腦和低階Server越來穩定,我們委託nCS設計的一套測厚非關製程的系統,甚至用的是HP一般的小型家用電腦來做。IPC對我而言其實只是解決方案的選項之一,我也是能避就避,有一次我也中槍碰到MOXA的IPC竟然不能自己安裝.NET 3.5問題,還好那個CASE我落跑成功,否則叫我把整片LINQ查詢改回T-SQL語法,根本是在惡搞。

我這方其實也不好做,不過我覺得純粹是台灣短視近利文化劣根性造成的,因為同業西門子等外商就賺到翻掉,所以我上班也只當練功,時間到了下班走人回家練密技,嘿嘿~小時候不練功,現在就要狂練功。

cnBeta在台灣應該沒啥名氣吧,依照回文是繁體的量來看的話…而且我也沒看到同事在看。

Re: 無題

>>打內工程師
我是學生時期被迫學Java(但除了做專題外幾乎沒機會實戰)、接Case時改用.NET(如您所說..省事省時好移交嘛)、參加比賽開始玩PHP、為了工作只好開始用C/C++,其實原本最弱的就是C/C++,所以似乎cnBeta那邊對我的描述有不少意見(笑)。感覺利用IPC做SI方面工作的人還是比底層多的多,這領域在賺錢方面不像消費性電子大廠般有盛名,蠻多人都不願意進來做,不過以練功來說算是個不錯的地方。

其實要不是我透過Referrer知道有誰連入,我也不知道有cnBeta這個站啊....它在台灣的軟體界有名氣嗎?

無題

真巧合阿,您竟然是做IPC底層滴~應該是半同業了,我的程式偶爾會用在IPC上,但是要能跑.NET 3.5的IPC我才會去用,我的業主主要是中鋼,研華的IPC用量不少,最近也有一些MOXA的。我的入門是從QBasic開始的,PHP曾經占據我很長的時間,後來也是有一段時間在煩惱到底要走JAVA還是打內,但後來定下來就是跟著微軟走,一直就用VS,反正公司會買,而且有這麼多技術奇人異士,軟體我再搞也不可能有啥搞頭,專案開發都是一律選省時的東西,準時下班玩別的比較實在,ㄎㄎㄎ。
說來也神奇,您的文章被轉到cnBeta後,才看到這篇…。

Re: 無題

> 1.1當然幾乎不能在2.0執行阿(我沒碰過可以的),2.0當時就是MS痛下決心長痛不如短痛砍掉1.0/1.1這個半實驗品,2.0才是一個成熟的FW商品,像是現在很多XPE的IPC最低都是以2.0為標準,我"升級"的意思是說,至少不用對你的軟體動很大的手術,就可以移植到2.0,當然這也要看CASE,我運氣還好,都沒碰到要動大手術的。

抱歉很忙晚回了,您是寫IPC的上層軟體嗎?我是IPC的底層工作者....
如果是自己開發的軟體、code握在手上當然我想是有辦法去tweak,但如果是像我提的特定第三方軟體非要回頭裝1.1才能跑,這就是比較麻煩的狀況了。

> 其實,打內現在面臨一個M型化問題,就像現在社會的消費能力,很多打內工程師心中也很疑問為啥MS忽然發瘋起來搞這麼多新玩意,很多人也說根本用不到,其實大多數人包括我是不可能有那種程度理解為啥要發展這些東西,我懂得話,我就不叫打內工程師,改叫CLR設計師啦,工程師就是腦筋不好,做工滴。MS新規劃的很多新東西都和大型企業的應用有關,反而和中小型應用比較無關,反正擺明目標就是要幹掉JAVA,而.NET和JAVA的路線剛好有點倒過來,JAVA打從一開始就是大而全,包山包海強大無比複雜的讓人抓狂,現在反而要想辦法讓大家能簡單的完成一個很容易的小型需求;.NET雖然願景也是大而全,但是一開始是致力於簡單好用整合快,而現在時機成熟了搭配Windows 6系列,整個瘋狂往外發展啦,畢竟那些身價千萬的設計師,總不能只是在MS當神主牌養著吧。

以我從Java入門、後來為了寫工具程式搞UI跳槽寫C#的經驗,其實日後我如果是要開發Win-based GUI,我還是會選.NET吧,雖然常有人笑說visual studio又肥又大啥都是抄各種Java IDE來的,老實說我是沒什麼非要用啥語言或平台寫才高尚或誰抄誰就是爛的想法,自從M$想開出了Express版免費IDE就已經是個堪稱偉大的進展了,至於完整的VS功能也是日趨完整,反正不是什麼企業級的大案子,UI程式我要的是開發順手而不是拜神主牌啊(我個人也很不喜歡啥都要用C寫才好這種意見)。我知道Eclipse很強大,但是東掛一個西掛一個plugin也覺得很煩,就算現在不寫Java了,還是常常可以看到各種Embedded or Micro controller平台的IDE是用Eclipse改的,真的是陰魂不散....M$的策略我倒覺得也不是壞事,世界上本來就存在各種喜好的PG,而我在開發GUI上還蠻吃M$那套的(笑)。

BTW,感謝您的留言,您是第一個在敝站留長篇的訪客:)

無題

1.1當然幾乎不能在2.0執行阿(我沒碰過可以的),2.0當時就是MS痛下決心長痛不如短痛砍掉1.0/1.1這個半實驗品,2.0才是一個成熟的FW商品,像是現在很多XPE的IPC最低都是以2.0為標準,我"升級"的意思是說,至少不用對你的軟體動很大的手術,就可以移植到2.0,當然這也要看CASE,我運氣還好,都沒碰到要動大手術的。
其實,打內現在面臨一個M型化問題,就像現在社會的消費能力,很多打內工程師心中也很疑問為啥MS忽然發瘋起來搞這麼多新玩意,很多人也說根本用不到,其實大多數人包括我是不可能有那種程度理解為啥要發展這些東西,我懂得話,我就不叫打內工程師,改叫CLR設計師啦,工程師就是腦筋不好,做工滴。MS新規劃的很多新東西都和大型企業的應用有關,反而和中小型應用比較無關,反正擺明目標就是要幹掉JAVA,而.NET和JAVA的路線剛好有點倒過來,JAVA打從一開始就是大而全,包山包海強大無比複雜的讓人抓狂,現在反而要想辦法讓大家能簡單的完成一個很容易的小型需求;.NET雖然願景也是大而全,但是一開始是致力於簡單好用整合快,而現在時機成熟了搭配Windows 6系列,整個瘋狂往外發展啦,畢竟那些身價千萬的設計師,總不能只是在MS當神主牌養著吧。

Re: 無題

>>> 打內工程師
> 不太對喔,打內FW是有向下相容性的,應該說新的FW是由舊的FW堆疊上去的,我.NET 2.0寫的東西都可以在.NET 3.5平台正常運作(其實"沒裝"2.0根本不能裝3.0和3.5吧 ...有時候只看到3.0,其實只是把2.0藏了起來)。就算是分水嶺1.1要升級到2.0也很容易。
-----------
我想是我在半夜翻原文導致漏寫一些條件了,個人的開發經驗主要在1.1及2.0時期(畢業後就被迫改寫F/W了..),1.1當然不能執行2.0 開發的程式,但單裝2.0卻也不能直接執行1.1開發的程式,像要使用XP內建的某些以1.1開發的程式時就會遇到這種麻煩問題(印象中是Movie Maker?)。

至於3.0及3.5雖然版號大躍進,就如您所說的3.0為2.0再堆疊上四項功能,而3.5再替2.0及3.0堆疊上一些fix & enhancement(3.5的安裝就包含2.0及3.0及SP..爆大),就我個人來說其實不認為3.0及3.5有必要跳如此大的版號,在3.0剛推出時事實上也有不少開發者覺得用個2.1就夠了....至於未來如果有像1.1升上2.0這麼大的改版幅度時,微軟是不是能記取教訓一樣用堆疊更新的方式來達成向下相容?希望他們會囉:)我會對原文敘述做些補正,感謝您的意見,短期內我大概是沒機會再實際去開發.NET的東西了....

無題

不太對喔,打內FW是有向下相容性的,應該說新的FW是由舊的FW堆疊上去的,我.NET 2.0寫的東西都可以在.NET 3.5平台正常運作(其實"沒裝"2.0根本不能裝3.0和3.5吧 ...有時候只看到3.0,其實只是把2.0藏了起來)。就算是分水嶺1.1要升級到2.0也很容易。
管理者相關
文章類別
BloggerAds
最新留言
月份存檔

顯示所有文章

用戶標籤

6D Canon 開箱 Google NEX5N 平板 Nexus7 7D 食記 A16 火燒雲 風景 遊記 DESIRE 手機 LX3 燒臘 烤鴨 體驗 寫手 BloggerAds 敗家 牛肉麵 江子翠 板橋 中餐 民宿 台中 阿喵 阿鬼 夜景 K20D Panasonic 陽明山 Pentax 洋食 義大利麵 早餐 小吃 中和 咖啡 漢堡 美式 和食 拉麵 日本 班尼迪克蛋 Bagel 早午餐 Brunch 攝影 麵食 披薩 底片 烏龍麵 壽喜燒 日式 和民 動畫 歌詞 感想 音樂 化物語 Nikon 三芝 ヱヴァンゲリヲン新劇場版 肉丸 歐式 IKEA 德國豬腳 希臘 地中海 義式 神社 桃園 勺勺客 陜西 中菜 snapshot 蒙馬特 景點 MZ-5 電影 LCD 咖哩 VGL GA-REI-zero 博多 TAMusic 海角七號 MacrossFrontier 機車旅行 旅行 機旅路線 羅馬尼亞 海外旅遊 機旅 月蝕的假面 Taipei Taiwan WANTED VideoGamesLive ImgBurn TDK GRAZIE

交換連結
eReferrer