← Career advice
Advice Columnist

學寫程式為何甚艱難?

如果你想學寫程式,在網上搜尋一下,不難找到不少「輕鬆學習XXX」、「YY天輕鬆學會Python」的教材及影片;去電腦書店逛一圈,很容易就可以找到「七天學會Java」等的書籍,這些教材其實都在推廣一個信念,也就是: 學寫程式很簡單,人人都可以學會。 筆者對此信念後半部深表認同,但是對前半部所謂「學寫程式很簡單」,卻真是不敢苟同。

筆者深信No pain, no gain的哲學,世上大部份有價值的事物,都必須努力才能達到,如果真是可以「YY天輕鬆學會編程」,那豈不是明天所有軟件工程師都要失業?學寫程式,就像練馬拉松一樣,人人皆可做到,只是必須要付出努力。將一樣要付出努力才能達成的事物,簡化成「XX天就可以輕鬆學成」,會令初學者初遇困難時,誤以為自己無甚天份,繼而失去學習動機。反而一早說明學習時會遇上的困難,才能為初學者提供正確的心理準備。就像你要去挑戰一座高峰,你找了一個曾經登上該座高峰的朋友請教,那朋友卻說:「很簡單的,不用訓練,人人也可以上去」,這可不是安慰說話,而是害人不淺。

你必須學習新語言

程式語言之所以稱為程式語言,原因是因為程式語言確是一種語言,而且皆是專為向電腦說明步驟而發明的。因此本質上與自然語言有很多不同的地方,一個經典的Programmer笑話是這樣的:

A programmer is going to the grocery store and his wife tells him, “Buy a gallon of milk, and if there are eggs, buy a dozen.” So the programmer goes, buys everything, and drives back to his house. Upon arrival, his wife angrily asks him, “Why did you get 13 gallons of milk? ” The programmer says, “There were eggs!”

妻子明顯的意思是想丈夫買一加侖牛奶,如果有雞蛋的話,就多買一打雞蛋,但丈夫卻理解成以下的程式碼。

buy(1,‘gallon’,‘milk’);

if(has(‘egg’)){

   buy(12,‘gallon’,‘milk’)

}

就創造了這個經典笑話。當然笑話的內容不足為信,但程式語言與自然語言的差距卻是確實存在,現今出現了不少學習編程遊戲,幫助沒有任何編程背景的人理解一步步來的程式思維方式,算是為減低學習編程門檻的一大進步。當然為了提起玩家之興趣,亦只包括了較為基本的程式語言語法。

當代常用的程式語言,除了基本的流程控制結構,如if-else條件判斷式、while/do-while/for loop迴圈外,還有function函數、class類別、interface接口等高級概念,這些詞語在英語都有原來的意思,在程式語言的意思與英語相似而非完全一樣,因此對初學者而言,是要從零學起,就像重學外語的基本語法一樣。再加上很多希望學習程式語言的人,未必以英語作為母語,使學習門檻更高。幸運的是,程式語言與自然語言不同,一旦學成了一種程式語言之後,要再學習其他程式語言,斷不會像學習外語一樣又要從零開始,因此精通數門程式語言,遠比精通幾門外語要簡單得多。

你必須學會抽象式思維

寫程式常常需要運用抽象思維,例如所謂的佇列(Queue)結構,對應現實生活的就是大家不論買早餐、搭地鐵、搭巴士時都會排隊的隊列,佇列在電腦世界很有用,常常用作將任務順序執行,這種佇列因此又名為任務佇列(Task Queue)。排隊是日常常見的事,但是將排隊的概念應用於電腦程式之上,正是抽象式思維(Abstract Thinking)的典型。除了愛好數學、科學的朋友之外,大多數初學者甚少以此角度思考問題,因此覺得困難也是自然不過。

又例如函數(Function),如果你將函數理解成數學的函數如f(x) = x * x一樣,也就是將一些輸入(input)x,轉換成輸出(Output),那尚算容易理解。但當你將函數作為其他函數的參數(Parameter),形成所謂的回調函數(Callback Function)的時候,就需要抽象式思維了。

function square(x){

   return x*x

}

// Callback function in use

setTimeout(function(){

   // This function is called after 1000ms

},1000)

抽象概念另一大難處,在於難以用日常生活例子類比理解,筆者在教學時常常花九牛二虎之力,讓學生理解回調函數及非同步的概念,初學者直覺上不習慣以此方式思考。正因日常生活難以鍛煉抽象思維,於大多數人而言,唯一受過對抽象思維有系統訓練的地方,就是中小學的數學課(低年級科學課通常重直觀,非抽象思維),不過很多人不喜歡數學課就是了…

你必須分毫不差

很多職業都要求高度的精確性(Precision):醫生用藥必須準確,否則病人就有性命之虞;土木工程師需要準確計算建築承托力,否則建築物就會成為危樓。編寫程式也是一樣,一個標點符號的錯誤,就足以令整個程式錯誤,甚至停止運行,而且回報的錯誤更常常令人摸不著頭腦。 大家一定對以下的經典畫面,不會感到陌生。

當大家自己學習軟件開發時,錯誤就更加常見。曾經學習過JavaScript作網頁開發的人,都一定見過以下的錯誤:

驟看之下,該錯誤就如不知所云,只是告訴你Uncaught ReferenceError: people is not defined,其實這個錯誤的真正原因,在於上邊定義的是person而不是people,因此當瀏覽器嘗試運行時,只是發覺people未定義,因此就直接回報people is not defined的錯誤。

電腦不是人類,不能準確指出:「你把person寫成了people」的錯誤,只能夠重覆告訴開發者people is not defined。正因電腦並不真正「理解」(縱是當今最先進的人工智能,也難以稱為真正理解)人類背後行事目的,因此無法準確回報一個常人能夠即時理解的錯誤。要成為程式開發者,就需要將相關的錯誤訊息(如people is not defined),聯想到常見的錯誤(串錯了變數名字)。因此可以說,程式開發本質需要分毫不差,任何最微細的錯誤,都不能夠出現。 然而相對於電腦的分毫不差,人類可謂天生就常常犯錯,除非經過後天大量訓練,否則難以習慣。

你必須持續練習

有留意筆者之前文章的讀者,都知道筆者常常强調軟件工藝的重要性。要學成一門工藝,必須要持續練習,才可以精益求精。 正如學會廿六個英文字母不等如成為莎士比亞一樣,學會程式語言的基本語法,也當然不是學習軟件開發的終點。單元測試(Unit-Testing)、設計模式(Design Pattern)、程式碼結構(Code Organization)等,都是需要多寫多想,才能融會貫通。

筆者在軟件工程師成長手冊一文中,提過開發者有五個層次: 初學者(Novice)、進階初學者(Advanced Beginner)、能勝任者(Competent)、熟練者(Proficient)、專家(Expert)。要算是達到職業水平,起碼要到達第三層次能勝任者的級數。也就是對本身工作所使用的技術棧(Technology Stack)有一定瞭解,以及懂得發掘新技術,同時有能力學習新技術。而科技發展日新月異,技術推陳出新,程式開發亦自然如是,要能夠掌握新的技術,也一定需要持續學習。對絕大多數初學者而言,學習程式最難跨過的障礙,正是缺乏足夠時間去持續練習。因此這個因素簡單易明,卻也是癥結所在。

你必須有創造式思維

由普羅大眾角度看來,編程是一個只與電腦、數字打交道的職業,其實創造思維(Creative Thinking)在編程中,也是不可或缺。編程的本質,就是由無到有,創造(Create)一個能夠解決問題的程式。天底下沒有兩個程式設計師會寫出一樣的程式碼,就正如不會有兩個寫出一樣文章的作家。

編程果真需要創造思維嗎?其實對一個專業程式設計師之日常工作而言,從沒有兩個問題是完全一樣,因為如果該問題已經解決過一次,就再沒有解決的必要(除了教學用途外),這也是著名的DRY原則(Don’t Repeat yourself)。例如為物件排序(Sorting),也許你會認為方法只有一兩種,但光是維基百科的Sorting Algorithm條目,就有超過二十種不同算法,而且每個方法,也有各種優劣之分。

為物件排序如此目標明確的問題,都可以有超過二十種算法,真正現實世界之系統,例如會計系統、倉存系統、客戶資料管理系統,就更可謂有無限種解決方法。程式設計時要選擇最佳最有效率的方法,就如一個畫家創作時選擇最美的表達方法,都必須有創造思維在其中,只是編程稍為限制,程式碼必須正確才能運作,筆者認為,這實是一種基於邏輯之創意(Logic-based creativity)。也正因如此,學習編程,也代表必須學習如何運用創造思維。

總結

一口氣講了學寫程式之困難所在,絕不是為了使各位正在學習編程的人卻步,而是正正因為學習編程的中途,會有不少障礙攔路,早早準備,就如攀登高山前充份準備一樣,才是合適的學習心態。

 

GetLinks Recruitment

GetLinks Recruitment

GetLinks Recruitment 是一家全方位的人材招募公司。 自2015年以來,我們已經為亞洲超過20,000位人才找到了完美的匹配, 我們的 使命是為求職者和僱主提供一個高效 的 連接平台。 GetLinks Recruitment 迅速成為不少 公司值得信賴的合作夥伴,在全球多個地點設有辦事處,提供一個真正全球化的專業人士和企業網路。

Keep reading

Related career advice

【IT事務所】匯豐選擇新加坡作全球AI開發中心——香港真正需要守護的,不只是金融中心地位,而是未來的創新話語權
Advice Columnist

【IT事務所】匯豐選擇新加坡作全球AI開發中心——香港真正需要守護的,不只是金融中心地位,而是未來的創新話語權

當匯豐銀行(HSBC)宣布在新加坡設立全球人工智能卓越中心(Global AI Centre of Excellence)時,香港社會隨即引起廣泛討論。有人認為這只是跨國企業的正常業務部署,也有人擔心,這是否反映香港在全球創科競爭中的吸引力正在下降。畢竟,匯豐於1865年在香港創立,其發展歷程幾乎與香港由區域港口蛻變為國際金融中心同步,即使今天集團總部設於倫敦,香港仍然是匯豐最重要的盈利市場之一。因此,當集團把肩負未來發展重任的全球AI研發中心設於新加坡,而非香港,難免令人思考,這個決定背後究竟釋放了甚麼訊號。 然而,若將焦點停留在「匯豐沒有選擇香港」,或將事件簡單解讀為香港與新加坡之間的一場勝負,恐怕會錯失真正值得反思的課題。匯豐並非撤離香港,也沒有削弱香港作為其核心市場的地位;相反,這項部署反映的是跨國企業在人工智能時代重新分配全球資源的新策略。今天,企業已不再按照歷史淵源或市場規模決定創新中心的位置,而是根據人才、生態系統、科研能力、算力基建,以及人工智能治理環境等因素作出長遠部署。 事實上,每一個經濟時代都有不同的競爭法則。工業時代,比拼的是港口、物流和土地;金融全球化年代,則取決於法律制度、資本市場及金融基建;但踏入人工智能時代,競爭焦點已轉移至誰能提供最優秀的人才、最成熟的創新生態、最快的科研成果轉化,以及最值得信賴的AI治理制度。換言之,今天跨國企業尋找的不再只是金融中心,而是一個能夠持續孕育創新的城市。 正因如此,新加坡近年的發展值得香港深思。多年來,新加坡政府持續推動國家人工智能策略,積極投資科研、數據中心、高效能運算及人才培育,同時吸引Google、Microsoft、Amazon Web Services、NVIDIA等國際科技企業設立區域研發中心,逐步建立完整的AI創新生態。當頂尖企業願意落戶,世界各地的人才自然隨之而來;而人才聚集,又進一步吸引更多企業投資,形成良性循環。對跨國企業而言,這種完整的創新生態,往往比單一稅務優惠或資助政策更具吸引力。 另一方面,杜拜近年的崛起同樣值得留意。阿聯酋早於2017年設立全球首位人工智能部長,其後推出《UAE AI Strategy 2031》,並透過杜拜國際金融中心(DIFC)建立AI Campus,積極吸引全球AI企業及創投基金落戶,目標是在金融科技、智慧城市及人工智能應用方面建立國際影響力。由此可見,無論是新加坡還是杜拜,都不是單純發展人工智能技術,而是將AI視為未來經濟轉型及提升國際競爭力的重要戰略。 相比之下,香港近年亦積極推動創科發展,包括建設人工智能超算中心、推動「InnoHK」科研平台,以及配合北部都會區發展創新科技產業。這些措施方向正確,亦展現政府推動AI發展的決心。然而,香港仍需面對幾項結構性的挑戰,包括高端AI人才供應仍然不足、科研成果商品化速度有待提升、國際科技企業研發中心數目有限,以及本地創投市場近年較為審慎。這些因素都可能影響跨國企業部署高增值AI項目的意願。 不過,香港真正需要思考的,並不是如何複製新加坡或追趕杜拜,而是如何發揮自身獨特優勢。香港擁有世界級金融市場、普通法制度、成熟的金融監管體系,以及全球最大的離岸人民幣市場,同時肩負「背靠祖國、聯通世界」的重要角色。與其競逐成為AI工程師最多的城市,香港更應致力發展成全球領先的AI金融創新中心,把人工智能深度應用於銀行、保險、資產管理、跨境支付、監管科技、綠色金融等高增值領域,建立其他城市難以取代的競爭優勢。 除此之外,香港更需要重新思考自己在全球AI治理中的角色。未來國際競爭,不只是誰擁有最先進的大型語言模型,更重要的是誰能建立值得世界信任的制度與標準。歐盟推出《AI Act》,美國持續完善AI安全政策,新加坡亦發展AI Verify等治理框架,均說明人工智能競爭正逐步由技術層面延伸至制度層面。如果香港只著眼於AI應用,而未能積極參與規則制定,未來便可能只能跟隨其他司法管轄區的標準。相反,若能結合普通法制度、金融監管經驗及國際化優勢,在金融AI治理、跨境數據流動、AI風險管理及數碼信任等領域建立具有國際認受性的制度,香港便有機會由AI應用者逐步發展成AI規則塑造者(Rule Shaper),進一步提升國際影響力。 當然,要實現這個願景,政策配套仍然不可或缺。香港除了持續培育跨學科AI人才,亦需要加快科研成果商品化,完善高效能算力及數據基建,建立更具國際公信力的AI治理制度,同時大力協助中小企數碼轉型。畢竟,香港九成以上企業屬於中小企,若人工智能只能惠及少數大型企業,整體經濟競爭力便難以真正提升。唯有讓AI成為所有企業提升效率、創新及拓展市場的共同工具,香港才能建立真正具韌性的AI經濟。 回顧香港過去數十年的成功,每一次重大轉型,都不是依靠既有優勢,而是敢於把握全球經濟變革所帶來的新機遇。今天,人工智能正重新塑造金融、商業、教育及公共服務,也重新定義城市之間的競爭。匯豐選擇新加坡設立全球AI卓越中心,只是一個值得深思的案例;真正值得香港關注的是,未來十年,還會有多少跨國企業在部署下一代技術時,作出類似的選擇。 因此,香港真正需要守護的,不只是國際金融中心的地位,更是未來的創新能力與國際話語權。歷史固然賦予香港獨特優勢,但未來能否繼續保持領先,將取決於今天是否願意持續投資人才、科研、生態系統及制度建設。 匯豐的根在香港,但企業的未來永遠向着最具創新力的地方生長。 歷史可以成就一座城市,但唯有創新才能延續一座城市的競爭力。真正決定香港未來的,不是我們曾經擁有甚麼,而是今天願意投資甚麼;不是我們曾經創造過多少輝煌,而是我們是否有勇氣在人工智能時代,再次成為改變未來的引領者。 如果說過去六十年,香港憑藉金融連接世界;那麼未來六十年,香港更應以人工智能連接世界,以創新定義未來,以制度贏得信任,以人才創造價值。唯有如此,香港才能在全球AI競賽中,不只是保持競爭力,更能成為全球AI金融創新的重要樞紐,並在國際人工智能治理體系中,發揮更積極、更具影響力的角色。

【職場 Hacker】運用SHOW 框架:如何打造個人品牌
Advice Columnist

【職場 Hacker】運用SHOW 框架:如何打造個人品牌

以下故事,純屬虛構,如有雷同,實屬巧合 Sarah 是一位資深顧問,專業能力很強,但她有一個問題:沒有人知道她。 「Kenneth,我做了很多專案,也幫客戶解決了不少問題,」Sarah 說。「但當別人有需要時,第一時間總不會想起我。我應該怎樣提升自己的能見度?」 「你需要的不是單純曝光,」我說。「你需要讓別人看見清晰、可信,而且有證據的專業價值。SHOW 框架可以幫你。」 什麼是 SHOW 框架? SHOW 是 MAKER 層中 Exposure(曝光展示)模組的實踐框架,幫助你把專業能力轉化為別人看得見、找得到和願意相信的個人品牌。 SHOW 代表四個步驟: Sarah 的 SHOW 策略 我用 SHOW 框架幫 Sarah 將多年累積的專業能力,整理成別人容易理解與信任的個人品牌。 S – Signal(信號) 我先問 Sarah:「別人第一次認識你時,你希望他們記住甚麼?」 Sarah 說:「我希望他們知道,我不是一般顧問;我擅長用數據協助企業看清轉型問題,並把策略真正落實。」 我告訴她:「這就是你的專業信號。你不需要向所有人介紹所有能力;你要讓目標客戶一聽便明白,你為誰解決甚麼問題。」 於是,Sarah 把自我介紹整理為一句清楚的定位:「我協助企業以數據釐清轉型問題,並將策略轉化為可執行的行動。」 H – Hub(中心) 第二步,是為這個定位建立一個中心。 Sarah 過去的經驗散落在不同簡報、舊履歷和通訊錄中。別人即使聽過她,也很難快速找到她的案例、觀點和聯絡方式。 我建議她先把 LinkedIn 個人頁面當作主中心:清楚寫上專業定位、整理代表案例、列出可提供的服務方向,並放置聯絡方法。 我告訴她:「你的 Hub 不一定要很複雜,但必須讓有需要的人,一進來便找到你是誰、做過甚麼,以及如何與你聯絡。」 O – Output(成果) 第三步,是持續讓專業成果被看見。 Sarah 不再只在完成專案後把經驗留在公司內部。她開始將不涉客戶機密的學習整理成短文、分享簡報和實用工具。 她每週在 […]

ESG 政策與物業管理的進化:從綠色建築到社區參與
Advice Columnist

ESG 政策與物業管理的進化:從綠色建築到社區參與

隨著ESG(環境、社會及管治)政策成為全球共識,物業管理早已不再局限於傳統日常營運與保安清潔,而是可持續發展、實踐「碳中和2050」目標的關鍵樞紐。ESG報告已成為上市公司與房地產基金的常規披露項目,物管團隊不再只是單純的設施維護者,更是碳數據蒐集、減碳目標執行與成效匯報的核心單位,因此需要建立標準化碳審查、能源及廢物監控機制,以便追溯各項樓宇指標可。 香港已訂立在2035年前將碳排放較2005年水平減半,並定下在2050年或之前,商業及住宅樓宇分別減少三至四成及兩至三成用電的方向,物業管理正是推動「節能綠建」與「全民減廢」的前線核心力量。要實踐這些目標,不能只依賴新建大廈的綠色設計,更要透過持續的物業營運管理,把減碳理念融入日常營運的每個細節,從冷凍機組、升降機、公共照明的節能調校,到分類回收、廚餘收集、減少一次性用品等安排,同時配合「全民減廢.資源循環.零廢堆填」的政策方向,減低堆填區溫室氣體排放。 物管團隊可借助分項電錶、感應裝置、物聯網及人工智能去監察用電模式,優化設備運作時段,在盡量不影響住戶舒適度的前提下節省能源;另一方面, BEAM Plus為物管提供系統化的可持續管理框架,透過節能改造、高效設備更換、隔熱改善及光伏系統安裝等工程,長遠可壓縮營運開支,達成業主、住戶及物管公司三贏的局面。硬件升級以外,社區參與這項軟實力同樣舉足輕重,管理公司可透過環保工作坊、零碳挑戰、二手市集等活動,推廣節能減廢的生活模式,引導業戶改變生活習慣,令ESG由制度條文,扎根成為社區共同的生活價值。 優質的綠色管理有助實現環境效益與資產價值同步提升,物業管理者必須具備將ESG融入資產全生命週期管理的宏觀思維,善用科技與物聯網進行智慧化能源管理與風險監控,並協調業主、租戶、政府及供應商等,共同構建可持續發展的共融社區,引領香港物業管理走向更加綠色、智慧與具社會責任的新時代,為行業與社會創造長遠價值。 香港房屋經理學會前任主席 鄭玉琴女士