Skip to the content.

關於軟件開發同編程

好多行外人對軟件行業有誤解,以下係可能比較有爭議性但我覺得好撚啱嘅嘢:

— — -

  1. 學寫程式使唔使數學好叻?

要好叻小學數學。(我唔係講笑,加減乘除同埋餘數一定要識同埋要好熟)。至於使唔使識其他數學,就睇你寫程式係咩範疇。例如你搞 deep learning 要學 stats,搞 3d graphics 要學 linear algebra,搞聲音要學 signal 同 wave transform 嘅嘢 (我全部都唔識)。但有好多程式唔使呢啲嘢嘅。

由於大學教授通常都識得唔少相對高深嘅數學,所以佢哋諗到程式嘅應用都係嗰啲嘢,亦所以大學嘅電腦課程勁多數學。但喺 “industry” 就好睇你做邊範。我自己喺科技公司主要做 “backend” 嘅應用程式,十年以嚟用非小學雞數學嘅次數應該少於十次。

但係講返,好多軟件嘅應用範疇都同高階數學有啲關係,學返幾招榜身都好嘅。 (利申:我唔識數學)

1.1 學寫程式使唔使好有邏輯?

我覺得寫程式最重要係「知道自己想做啲乜」。因為寫程式最難嘅嘢其實係將一啲「全世界都知係乜」嘅概念分拆成更簡單嘅組件,最後令到電腦都識執行。呢種技能同一般人理解嘅「好有邏輯」係有啲關係嘅。

另一個重要技能就係要思維要「精準」。電腦會好準確咁執行你俾佢嘅所有指令,所以稍有差錯,就會令到成個程式都有問題。「精準」都同一笐人理解嘅「好有邏輯」有啲關係。

至於使唔使正式學「邏輯」呢?我就覺得冇必要嘅。(如果你邏輯差到寫唔到程式,諒你上幾堂「邏輯學」都唔會學得明啲嘢⋯)

1.2 一般嘅 IT9 咁「毒」,係咪寫程式只要數理好就得,語文能力唔太緊要?

其實程式唔係「電腦語言」咁簡單。程式當然要喺電腦行到,但源碼 (source code) 係主要俾人睇嘅。有冇諗過點解程式要有分「源碼」同 “binary/machine code” (唔知中文叫乜),就係因為一份係俾電腦睇,一份係俾人睇。

既然程式源碼係俾人睇嘅,咁寫程式就好考程式員嘅「表達能力」同「溝通能力」。一個程式嘅功能可以有幾十種唔同方法去寫,有啲就好易明,但有啲方法會「睇死人」。正如有啲人寫文會寫到 1999,寫程式都會。喺現代社會,一個 team 隨時十個八個人,如果你寫程式寫到 1999 其實都幾大鑊。

我自己個人睇法係,如果大學電腦科減一兩個數學必修課,加返一兩個 creative writing / effective communication 嘅 course,咁樣會對大家都好。

— — -

  1. 我想學 programming,應該先學咩 language ?

以前我成日答呢個問題,但諗諗下就發現個問題根本錯晒重點。學習總需要一個原因。正如你學日文可能係想睇明啲動漫原作,或者想喺日本遊行嗰陣知道啲人同你講乜,甚至可能係想溝個日本妹/仔。但如果你冇一個咁嘅「原因」,而係憑空學一個新語言,咁你就比較難堅持到落去。

所以而家我會反問:究竟你想寫乜嘢類型嘅程式?寫 webapp 學嘅嘢,同寫 game 要學嘅嘢,同寫 AI/scientific/whatever 程式要學嘅嘢完全唔同,雖然基本嘢一樣,但好多時實際嘅開發環境係冇交集嘅,等於你想學英文溝鬼仔,我叫你讀沙士比亞咁樣。

學寫程式最好玩之處係可以立即「學以致用」。學完 hello world 可以即刻寫返個 hello world 出嚟,仲可以立即「舉一反三」變多個 hello universe 出嚟𠻹。 如果你根本冇特別想寫程式嘅衝動,只係好被動咁「接受資訊」而唔係主動諗下點樣攞新學嘅知識嚟「玩」,咁就算堅持到,進度都會好慢。

— — -

  1. 學寫程式要學幾耐?

呢個問題我唔係好識答。Malcolm Gladwell 話要練習 10000 小時就會專精,我自己嘅經歷都係咁上下,前後十年先開始覺得自己有「自立」嘅能力,即係遇上新嘅問題唔使靠其他人教我都可以自己搞得掂。好多叻嘅人學兩三年就已經幾掂。尤其如果你只係工作上有需要寫啲程式,通常會有啲比較「完善」嘅開發環境,有好多奇怪問題唔太需要理,咁就唔使浪費太多時間去搞嗰啲問題。(例如精算師寫程式計風險,未必需要知道咩係 segmentation fault)

好多人睇到要學幾年就可能會感到頹喪,但其實呢個問題又係睇返你本身動機。「七日內學懂 C++」就一定唔得架喇(我學咗超過七年都唔覺得自己識⋯),但關於寫程式嘅學問博大精深得嚟,亦都可以「拆件分售」嘅 — — 例如如果純粹想用幾日嘅時間「體驗」一下寫程式嘅感覺,不妨上網搵一隻叫 “Human Resource Machine” 嘅遊戲。基本上就係叫玩家寫簡單嘅 program,好易上手亦都幾好玩。不過普通人應該冇咁易爆到機嘅,嘗試打爆機嘅過程中你可能會體驗到編程係咩一回事(亦即係理解到我哋同你嘅差距 :0)

— — -

  1. 做軟件開發係咪成日自己一個人對住個 mon?

喺 21 世紀做軟件開發其實好多時係要同團隊其他人互動嘅。印像中好多軟件工程師話自己只有 ~1/3 時間係自己寫code,其他時間都係討論問題點解決、開會、覆電郵之類。

如果想知多少少可以睇下吾友嘅文章《美軟件工程 用中國「廉價」勞工?》[0]

— — -

  1. 點解寫隻 app 要幾十萬/幾百萬咁貴?

呢個係經濟學嘅問題。供求 (supply and demand) 吖嘛。而家科技行業大熱,叻嘅人全球缺貨,而科技公司大把錢請人。

不過仲有個原因,係基本上每個人都會低估軟件開發需要用嘅時間(時間~=金錢)。估算開發所需時間係軟件行業嘅一大難題嚟,通常都係嚴重低估,就算係資深軟件工程師都會估錯。(甚至 quote 你幾十萬嗰條友都會估錯。)所以你以為某個功能「好簡單」啫,其實隨時搞幾個星期。加加埋埋就好貴。

如果你仲係唔順超,不妨參考下拙文《點解軟件咁貴?》[1]

— — -

  1. 香港發展 STEM 教育係咪會振興香港科技行業?

近年好多人講 STEM 教育。我敢講大多都係跟風。正如上面話齋,科技人才全球缺貨,咁自然有人想增加供應,而如果你諗緊將來做咩行業,科技行業對人才嘅需求亦都係一個重要嘅考慮。所以香港搞 STEM 教育一定可以幫助抒援全球人才需求問題,同埋可以幫助解決學生日後嘅前途問題。

不過幫唔幫到香港嘅科技行業呢?首先。

首先,你要留到人。

香港唔係好多公司俾得起錢請人。如果你係叻叻豬嘅,去美國嘅科技公司做唔好?(事實上我識嘅勁人絕大部份都走晒去外國。)再唔係,其實中國科技公司出手都唔差。香港俾得起錢請人嘅公司通常都做係金融嘅。所以搞 STEM 或者可以振興香港嘅金融行業。

至於點解香港搞唔到科技,都係經濟問題。軟件公司點解咁好賺,係因為 scalability 高、marginal cost 低。例如 Microsoft Office 咁,開發成本係好高,但每賣多一份嘅成本就非常低。所以只要市場夠大,成本唔係問題。

美國市場大、單一,啲人相對有錢,所以軟件行業嘅發展神速。中國市場大、單一,啲人就快好L有錢,所以軟件行業嘅發展都好快。香港冇呢支歌仔唱,梗係發霉啦。當然香港嘅公司都可以 target 外國市場,但一個競爭咁大嘅行頭,喺香港做又有咩優勢呢?點解唔直接去當地設立公司呢?

喺我嘅角度,香港要振興科技行業嘅唯一方法係一國一制[2]。咩「大灣區」都唔夠,要將香港 100.00% 融入中國大陸先至有得搞。(世界上所有嘢都要取捨嘅,我冇話香港科技行業一定要振興呀。至於香港嘅 IT9 北上搵機遇,你唔會係第一個亦唔會係最後一個。)

— — -

好似都寫到幾長。暫時咁多先。