2016-03-29

【輔仁媒體】植樹林:「靚仔,幫我做個網站啊?」 (733)

(photo via cc Flickr user Vincent Brown)

(photo via cc Flickr user Vincent Brown)

「靚仔,幫我做個網站啊?」到目前為止,這問題我聽過不下五十次。事發現場通常在校園之內,或者親友面前,又或者中學同學聚會。我在外人面前,除非是大學同系,或者非常熟悉的朋友,我一般聲稱自己是文員。反正文員跟「網頁編寫員」的工作都是在電腦面前打字。就算我將「網頁編寫員」五個字說出口,平凡的香港人都不會明白的。對他們來說,網頁只是儲存在電腦或者智能手機裡面的圖畫。

我遇到最經典的例子是來自我一個朋友的朋友,他由我朋友得知我會「做網站」,於是直接聯絡我。初時還以為是騙子來電,因為他提供的條例苛刻,而且這個人我從不認識,根本不值得我浪費時間考慮。工作內容大概是採集校園新聞網站,新聞文章及圖片全自動由「電腦」處理並發放出來,並且即時發放到特定同學手機中。我拒絕接下這份工作後,他竟然趁我下課的時候衝到我面前,跪地求我幫他。然後我良心責備,就即日隨便做了個範本(Prototype)應付他。他竟然從此沒再打擾我,我覺得事有蹊蹺,就打聽一下他的消息。我卻發現了他天真的以為那個網頁就是成品,他還拿着那網頁炫耀。

最近創業浪潮興起,這個問題出現了另一個變種:「我們現誠聘一程式員。」對我來說,見怪不怪。這個問題有如無底深淵,而且各個行業都會發生,只是資訊科技行業發生得比較頻密,比較嚴重。以我所知,問這個問題的有兩種人,一個當然是人事部,另一個是以為程式員就是魔術師,能夠一日內做出完整的社交網站。正所謂「無氈無扇,神仙難變」,多數人以為「做網站」唾手可得,不需計劃,亦不需配備,更加不需額外資金。

我遇過的要求稀奇古怪,事先大多缺乏計劃或分析。他們通常一發現問題,就以為「程式員」就能解決。例如要求網站顯示全港交通燈信號,或者即時全港樓盤報價。首先政府公開的資料,一部分需要親身書信申請,一部分收費,一部分機器難以讀取,需要人手轉換。而政府根本沒有公開過交通燈信號,所以這要求現時不可行。至於樓盤報價本身資訊非透明,一般市民亦難以即時向多間私人公司,取得如此大量的數據。除非資源豐厚,組建團隊或運用資金,購置大量服務器,取得以及處理資料,但這種規模非一人之力可完成。

其實他們需要一個完整的技術團隊,包括技術總監、經理或者顧問(Technical Director, Manager or Consultant)、系統架構師(System Architect)、系統分析師(System Analyst)、程式員(Programmer or Developer)、測試員(Testing or QA)、網路工程師(Network Engineer)等等。而外行人通常以為一個剛畢業或者乳臭未乾的小程式員就能勝任他們提出的工作。以興建大廈和修補地下水管來比喻。首先施工難度和資金已經相差太遠,而且一般人都能夠從外察覺到其差距。所以沒有人會認為興建大廈會比修補地下水管輕鬆、簡單、容易,亦都不會只聘用一個工人完成這浩大的工程。兩者能以外表衡量,但是軟件工程就非常困難,好比數學家證明「一加一等於二」或者四色定理(Four color theorem)

除此之外,我還有遇到一個相似的問題:「現在非常流行做智能手機應用程式(俗稱Apps),你認為要花多少錢?兩萬港元足夠嗎?」這就牽涉到這個產品到底有複雜。當你考慮購置一個單位的時候,你不會只向代理說:「我想買一個單位,隨便就可以。」一個理性的消費者,要付出數以百萬計的港元時候,不可能作出如此不負責的決定。他會考慮那個單位環境如何,坐北向南,交通配套,或者公契條款等。做軟件同樣都要考慮各種細節,才能給出適合的報價。因為軟件架構隨需求而變,所以初步報價通常不會仔細分拆各項功能,只會給出大約範圍。而報價一出,對方通常認為,那個價錢超出自己的預算。

主要原因是對方根本沒想到,應用程式背後需要服務器。只要應用程式提供線上查閱資料的功能,背後就不可能不考慮服務器。智能手機不能無中生有取得另一個人的個人資料,又或者不透過任何服務器得到全球的天氣資訊。過程當中必定有一個中介人,例如信差,或者傳媒,或者資訊科技世界的服務器。用戶注冊登記的資料,提供的圖畫聲音,或者新聞資訊,都必須有一個地方儲存起來,而服務器就發揮它的作用。服務器是用來接受、處理或者發放任何信息。而應用程式要求手機之間交流信息的話,都要靠服務器。USB記憶體、你家中的電腦、自己的手機都不可能隨便成為服務器。如果一個應用程式能夠向你發出任何通知,或者幫你「雲端儲存」你的檔案,或者隨時隨地為你提供適合你的即時資訊,它背後自然有服務器在運作。

至於服務器與應用程式之間溝通,需要一個特別的渠道。行內稱之為API(Application Programming Interface),這個渠道有別於常用的即時通訊軟件,或者短訊服務。這些API可以由現有的服務,或者額外度身訂做的服務組成,視乎情況而定。如果不希望這些API公開給所有人任意使用,其實可以選擇保密形式處理,其他人就不能夠使用到那些API。API和服務器呈現出來的網頁相似,只是它以非常簡單的文字、數字或者符號表示出來,並且需要特製的軟件轉換成有意義的資訊。另外服務器的效能,網路速度,以及使用的開發語言,都會影響溝通方法,或者速度。即是服務器愈強勁,網路愈快,它就能同時快速地處理更多人的要求,更大量數據。

另一個經常遇到的問題就是,開發軟件期間要求更改功能。有人會覺得這是按幾個按鈕,十分鐘就能解決的事情。當然這絕對不容易。又以建造大廈作例子說明。大廈建成之後,如果要改圖則,必須考慮得非常仔細。一來可能違法,二來可能影響大廈結構,三來需要人力物力改建。這些考慮因素和改動軟件功能一樣,都需要資金和時間。就算軟件尚在開發期間改變需求,都需要額外的資金和時間彌補。如果不同應用程式需要實現同一樣改動,背後牽連到的步驟也可能相差甚遠。最容易誤判的改動就是,手機應用程式要額外支援平板電腦,或者只支援桌面電腦瀏覽的網頁要額外支援手機。如果應用程式的版面設計簡單,這種改動相當容易。如果程式的技術或者版面設計複雜,就會是牽一髮而動全身,而且會影響用家的使用習慣及體驗。

公司政策規章之類都會拖累開發軟件的步伐,尤其是在大公司或者政府這些遵守嚴格制度的機構。有時候跟這些機構交手,時常受制各種煩瑣的流程和過時的品牌準則。例如網頁設計必須參照印刷的規範,支援落後且不安全的瀏覽器或者軟硬件。開發軟件時就有可能受一些無謂限制而耽誤進度,或者重寫背後的機制,增加負擔。我遇到最嚴重的是公司決策出錯,而要縮短開發程序的時間流程,以及臨時刪減功能。到頭來損失的不只是金錢,還有推出市場的時機。

如果你認為一個優質的軟件可以低廉價格就可以完成開發,或多或少反映出你不太了解資訊行業的運作。而市場上各種免費的軟件,背後絕對採用了不同策略,轉嫁成本到其他地方。開發軟件絕對不比建造大廈簡單。



原文連結




No comments: