Skip to main content

炒作周期

· 11 min read
Gordon Lau
Software Engineer & Programming Instructor

科技世界,尤其是資訊科技世界,普遍有一種喜新厭舊的傾向,對運用時日漸久的技術,往往會衍生出一種厭倦之感,鮮明例子就如常用的程式語言如JavaPHP,被認為不再sexy,不及新穎的KotlinSwift吸引。曾經風頭一時無兩的3D打印,近年亦比以往的熱潮時冷卻得多。Bitcoin熱潮,在加密貨幣價格大上大落之下,也比起一兩年前減退不少。乍看之下,好像新科技都遵從著相近之發展軌跡,難道這是每種新科技發展都必須經歷嗎?

觀察

據筆者所能找到最早的資料,第一個有關這種規律的觀察,是於1995年由一間名為Gartner的顧問公司所做,研究員發現大多數新科技都會經歷五個不同階段:

  • 階段一 科技誕生期(Technology Trigger)
  • 階段二 過高期望期(Peak of inflated expectations)
  • 階段三 泡沫爆破期(Trough of Disillusionment)
  • 階段四 穩步爬升期(Slope of Enlightenment)
  • 階段五 實質應用期(Plateau of Productivity)

以一幅圖綜合五個時期就如下圖:

gartner_hype_cycle.png

為何你應該使用密碼管理員?

· 16 min read
Gordon Lau
Software Engineer & Programming Instructor

根據一項網上調查,發現超過7成用戶有超過10個網上帳戶,而大多數情況下都會於不同的帳戶重用密碼。更有3成用戶表示自己實在有太多帳戶,連自己也不清楚有多少個。縱然保安專家常常建議用戶應該為每一個帳戶設下不同的密碼,執行上卻是不切實際:一個正常千禧年代互聯網用戶,動輒就有四五十個帳戶,要以人腦記住四五十個不同帳戶的電郵已是Mission Impossible ,更何況是密碼呢?

問題所在

這項調查揭示了一個嚴重的問題: 互聯網無遠弗屆,網上應用如Google、WhatsApp為人類生活方便良多,但要安全使用這些應用,就必須有一個有效的方法管理密碼,但普遍用戶對如何有效管理密碼,其實是一籌莫展。 一個良好的密碼管理(Password Management)策略,應該遵從以下幾個原則:

密碼必須要有足夠強度

人類天生就會覺得自己與別不同,一句有趣句子就將這個世上普遍的錯覺綜合起來。

Everyone thinks they are unique until they have to create a username

事實也確實如此,自己名字的username總是被人捷足先登,因此很多人的username往往要加上出生日期才可以成功注冊。密碼也是同理, 人們常常以為自己的密碼很特別,不會有其他人使用,研究卻發現,很多密碼經常被世界各地的人重用:

  • 最常用的Password系列(Password,password1),也就是password的變種、
  • I love you系列(不同語言的i love you變種)
  • 字典常用字(sunshine,happy,football)
  • 順序或反序數字系列(1234567,24680)
  • 電話號碼系列(98475294,00831248233)
  • 鍵盤順手次序系列(!@#$%^&,qwerty)
  • 置換系列(Pa55w0rd,/\cc3$$)。

不幸的是,以上的密碼通通都不安全,即使看起來不錯的置換系列,強度也不足夠,因為置換規則s -> 5o -> 0都是早已廣為人知,也就代表駭客的密碼破解工具,早已包含此類規則。

著名的網絡漫畫xkcd就曾以password strength為題,解釋大眾對密碼強度的誤解。

Password Strength

Source

學寫程式為何甚艱難?

· 14 min read
Gordon Lau
Software Engineer & Programming Instructor

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

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

Snow Mountain

Source

非結構化數據

· 9 min read
Gordon Lau
Software Engineer & Programming Instructor

近年數據科學及人工智能發展迅速,大眾開始對數據(Data)有很大興趣,甚至有「數據是未來的石油」(Data is the new oil)的講法。很容易會聽到如大數據(Big Data)、數據導向決策(Data Driven Decision)、數據化組織(Data Organization)等等與數據相關的詞語,其中重點,不外乎都是如何運用已儲存的數據,通過數據處理及數據分析,從而得出結論,幫助決策。筆者今日希望談談的,是另一個技術用語,與大數據一詞經常一齊出現,就是非結構化數據(Unstructured Data)

Unstructured Data

軟件工程師成長手冊

· 15 min read
Gordon Lau
Software Engineer & Programming Instructor

筆者經常都强調軟件工程師有高下之分,不論技術或是解難能力都可以隨時日改善,亦曾大力鞭撻專家級初學者的無知,對軟件開發造成破壞。 初出茅蘆的軟件工程師及編程初學者想要改善自己技術,在茁壯成長的話,對自己技術層面有一個準確評價是至關重要,以免墮入「識少少,扮代表」的認知偏差。

Evolution of Programmers

Source

開始之前,先講講本文不是關於甚麼:

本文不是關於軟件工程師晉升之路

本文不是談論軟件工程師的職場晉升道路,因為時至今日,不少公司還是傾向將編程作為入門職位看待,軟件工程師晉升後,就會改為以專案管理工作為主, 而綜觀現實,專案管理與編程本身大相逕庭,所需能力也不盡相同,因此筆者認為以職位討論軟件工程師成長,沒有很大的參考價值。

科技會過時?

· 6 min read
Gordon Lau
Software Engineer & Programming Instructor

不諳編程或是編程初學者常常會有一個印象:就是資訊科技發展很快,一種最新技術可能數年又會變得「不再流行」,又時時會有一些新穎的科技流行語(Buzzword),早幾年是雲端、大數據,過了一會又是數據科學、人工智能、現在又出現了所謂的區塊鏈技術。編程初學者,在沒有先前經驗的情況下,往往無所適從,不知如何是好。

由蒸汽機講起

要理解科技變遷的原因,最好的方法莫過於觀察科技一直以來的發展歷史:蒸汽機這個名詞,聽起上來非常十九世紀,蒸汽火車是只有老一輩才曾經坐過的交通工具,十九世紀英國發明家占士.瓦特(James Watt)改良原有蒸汽機,正式開啟工業革命的時代。蒸汽機在工業時代不可或缺,當時出現了蒸汽火車、蒸汽船、甚至蒸汽推動的汽車。二十世紀初,內燃機(Internal Combustion Engine)的發明,使傳統的蒸汽機,慢慢退出歷史舞台,今時今日的汽車及輪船,皆是由內燃機所推動的。

Steam Locomotive

Source

Excel病特效藥:Office JavaScript API

· 5 min read
Gordon Lau
Software Engineer & Programming Instructor

有留意本站博客的朋友,可能看過有一種病叫Excel病這篇文章,都知道筆者絕不贊同亂用Excel作程式用途,因為Excel本身作為試算表,最適合作財務計算,或以數據生成圖表等功用。作為程式用途,則困難重重,舉一簡單例子,要在Javascript,顯示出1至10000的所有數字,是一個編程ABC的問題,程式初哥亦能輕易解決。

for (let i = 0; i <= 10000; i++) {
console.log(i);
}

要在Excel顯示出一萬個數字,則別無他法,需要一萬行去表達。

React Hooks(三):Redux-React-Hook

· 10 min read
Gordon Lau
Software Engineer & Programming Instructor

2019-09-03 筆者按: 現時最常用之React-Redux程式庫已加入React Hooks功能,因此讀者可以詳讀 本篇後續文章React Hooks(四)理解React Hooks在Redux應用上之最新發展。

React Hooks在React16.8.0的版本正式成為React的正式功能。正如前兩篇所言,React Hooks簡化了寫複雜代碼的難度,亦令React的函數式部件(Functional Components)亦能使用stateprops,可是傳說中React Hooks將會取代Redux呢?卻一直都是只聞樓梯響。這篇文章就會介紹一個筆者認為頗有前景的組件,就是在Github中的facebookincubator中的redux-react-hook

Redux React Hooks

專家級新手

· 13 min read
Gordon Lau
Software Engineer & Programming Instructor

今次要介紹的,是一個非常常見之現象,不論你是學寫程式、學做甜品、學寫文章,又或是練習球技、體能訓練等,都會經常窺見其身影。 想像一下:你的朋友問你:「你的駕駛技巧好嗎?比較起其他司機來說如何?」如果你本身有駕駛執照,但是不常常駕車,大概你會回答:「中規中矩吧,平均水平」;經常駕駛的人,因為經驗豐富,會覺得自己是中上甚至良好之水平。然而,這個想法人人都有,卻與現實完全相悖:因為任何羣體之中,必然有一半個體在中位數(Median)以下而一項經典的調查發現,八成的司機都認為自己的駕駛水平在平均之上這明顯代表在駕駛技術的世界上,大部份人都有自視過高的問題,也代表其實大多數司機,無法準確判斷駕駛技術之高下。

Dunning Kruger Effect

Source

從「同朕check下」談中文科技詞彙

· 12 min read
Gordon Lau
Software Engineer & Programming Instructor

本站文章以中文寫作,本來為方便香港讀者,在芸芸的英文文章之中,有一個另類選擇。出乎意料之外,我們近日發現多了不少台灣讀者閱讀本站文章,細想一下,大概是因為 筆者寫文好用中文科技詞𢑥,如型別推論(Type Inference)、機器學習(Machine Learning)、超文本傳輸協定(HTTP)等,台灣的軟件工程師搜尋相關的詞語,自然容易找尋到本站。然而,中文的科技詞𢑥,對不少香港軟件工程師而言,其實並不常用,那是甚麼驅使筆者會堅持使用這些中文科技詞𢑥呢?是愛?還是責任呢?

現況

首先由歷史背景開始談起,香港作為曾經英國一百五十年的殖民地,英文一直處於官方語言的地位,在學校英文是必然主科,由幼稚園就開始就需要學習英文,因此港人習慣了言談間中英夾雜, 所謂「同朕check下」,正是無綫電視藝員陳豪飾演崇禎皇帝時,衝口而出一句「同朕check下」,以正統書面語而言,即是「幫朕檢查一下」。崇禎皇帝口出英語,眾多的電視台工作人員,竟無人發覺,可見港人中英夾雜,早已是生活的一部份。

Check for me

Source

HTTP:互聯網的共同語言

· 12 min read
Gordon Lau
Software Engineer & Programming Instructor

互聯網的共同人類語言是甚麼呢?答案是英文,根據維基百科,世界上有五成四的網站都是以英文寫成,另外的四成六則以其他世界各地的語言寫成,所以說互聯網上的用家(即是各位)主要使用英文溝通也不為過。可是大家細想一下,互聯網上的電腦,又是怎樣互相溝通的呢?當你鍵入 https://www.google.com,為何遠在千里之外的Google伺服器,能夠與你桌上的手提電腦裏的Google Chrome溝通呢?這一切,要由互聯網誕生之初講起。

Languages of Internet

Source

Dart vs JavaScript vs TypeScript

· 11 min read
Gordon Lau
Software Engineer & Programming Instructor

隨著Flutter受到開發者的重視,Google於2011年推出的Dart又重新進入大家關注的視野之內,不過除了Flutter以外,其實Google的開發者早在2016年也推出過Angular Dart,讓開發者以Dart開發網站應用,不過由於Angular Dart對比TypeScript版Angular文本長期不足,因此沒有引起太多關注。Google推出Flutter,可以說為大家對Dart的信心注入了一劑强心針,大家又重新開始關注這個已有8年歷史的程式語言。

本文想介紹的是,就是到底Dart有何特色?與JavaScript比較,又有何優劣?由於TypeScript開始於前端日漸盛行,我們亦可以趁機比較一下三種語言的異同。

Dart vs JS vs TS

Web Technology為何征服世界?

· 11 min read
Gordon Lau
Software Engineer & Programming Instructor

2007年,蘋果宣佈發佈第一代iPhone,標誌智能電話時代的開始;一年之後Android亦宣告面世,從此時起,智能電話的發展迅速,Mobile App成為軟件的代 名詞,筆者初初成為軟件工程師時,總有朋友詢問我是否正在開發Mobile App,縱使筆者的專業一直都是網頁及後端開發之上。而其時亦有不少預測,預測網站將會被Mobile App完全取代。網站所用的HTML、CSS、JS等,亦將成為歷史,送入博物館之內。

結果十多年過去,Website 及Mobile App都依然存在,所謂的完全取代,從來沒有出現過。最大的改變,卻是網站所用的HTML、CSS、JS卻已在所有軟件領域落地生根。 後端開發有坐擁世上最多Package的NodeJS;資料庫有PouchDBMongoDB;資料交換格式有JSON,也就是Javascript的物件格式;網頁開發由十多年前的JQuery,變成了ReactAngularVue,也出現了漸進式網絡應用程式(Progressive Web App)JamStack的概念;桌面開發出現了Electron,眾多受歡迎的桌面軟件如SlackVisual Studio Code等都由 Electron所開發;手機應用開發也出現了React Nativenativescript,只運用Javascript就可以開發出一個完整的智能手機應用程式;iot中最常用的程式語言也是Javascript,有像Johnny Five一樣的程式庫;連人工智能的範圍,也有Tensorflow.js的存在。

Web Technologies

平常人都能掌握的Programming 原則

· 10 min read
Gordon Lau
Software Engineer & Programming Instructor

大家會定時整理自己電腦中的文件嗎?大家看軟件工程師工作時,往往會發現他們的檔案總是井井有條,資料有條不紊地排列。難道學習軟件工程能使人變得 整齊?原因其實在於軟件工程師經常需要處理大量檔案及資料,因此發展出一套完整的工程原則(Engineering Practice),久而久之,就掌握了資料管理 的要訣。而如果平常人也掌握了這些工程原則,在日常電腦使用,其實也有不少好處。

Visual Studio Code

如何對治思維籠統

· 8 min read
Gordon Lau
Software Engineer & Programming Instructor

以下情況相信大家似曾相識:

A公司希望完成一個專案,將專案外判給一間軟件開發公司B開發,專案開始後,總發覺B公司不太理解要求,製成品也與要求相去甚遠,與B公司的 程式設計師多次開會亦結果不彰,最終專案「爛尾」收場,A公司不得已又將專案再外判給C公司,同一問題似乎又再上演...

探究原因,何解此類問題經常出現?原因往往在於A公司的相關負責人本身沒有編程背景,因此給出的要求相當籠統,B公 司的程式設計師亦不理解A公司期望,因此導致專案最終失敗。

讀到這裏,大家可能會嚷道:「A公司的負責人當然沒有編程背景啦,不然A公司自己做就好了」其實問題重點不在於A公司本身是否有編程的專才,而在於產品 負責人(Product Owner)與程式設計師溝通良好與否,即使A公司本身有編程Team,如果溝通不良,專案失敗是不會改變的。要討論溝通良好與否,先 要理解平常人的思維方式,與程式設計師的思維方式,往往差別甚大。

Online Course不能承受之輕

· 10 min read
Gordon Lau
Software Engineer & Programming Instructor

Online course已成為學習的新潮流,尤其是學習科技類知識,大多數人都是上網於大規模開放線上課堂(Massive Open Online Courses) 選擇希望學習的課程。現時較熱門的平台有CourseraUdemyEdx等。 完全免費的例子例如MIT Open courseware亦是大行其道。 網上課程的普及,令不少人發出感嘆:「讀大學所為何?讀網上課程就好了。」然而,以網上課程學習,與真人教授課堂相比,有一道難以逾越的 圍牆:網上課程難以協助學習者建立編程所需的心智模型(Mental Model)。

何謂心智模型?

維基百科的心智模型(Mental Model)條目給出以下的定義:

A mental model is an explanation of someone's thought process about how something works in the real world. It is a representation of the surrounding world, the relationships between its various parts and a person's intuitive perception about his or her own acts and their consequences.

Qubit能吃嗎?

· 10 min read
Gordon Lau
Software Engineer & Programming Instructor

這幾天,各大科技網站都在報道IBM展示了世界上第一部商用的量子電腦, 不少科技網站也將量子計算形容為最期待的未來科技。那到底量子計算是何方神聖?為何令大家都引頸以待呢? 要理解量子計算的基本原理,最佳方法,就是由傳統的位元(bit)談起。

IBM Q System One

IBM Q System One

Source:https://www.pcgamesn.com/ibm-integrated-quantum-computer

Tecky新網站

· 8 min read
Gordon Lau
Software Engineer & Programming Instructor

如果大家在這一兩日有上過Tecky網站的話,應該發現了網站跟以前有些許不同:

  1. 網址由https://www.tecky.io 變為https://tecky.io
  2. 網站內容設計佈局有所不同
  3. 網站載入速度明顯加快

是甚麼改善令致有此分別?其實我們已將整個網站重寫,再重用本來現有設計及圖片。既然外表無大變化,那又為何要重寫呢?這不是浪費人力物力嗎? 要理解為何有此一着,要先從我們的舊網站講起:

舊網站

僅僅數月前,當Tecky Academy初組成之際,我們幾位創辦人曾經鄭重討論過網站該用甚麼技術建造,討論相當熱烈,最終訂下之策略卻很簡單:

先以wix 快速建立一個原型,再改善用戶體驗,然後用GatsbyJS重寫。

這個就是我們之前的原型製成品。

Wix Website

寫Blog與寫Code

· 9 min read
Gordon Lau
Software Engineer & Programming Instructor

在外國,程式設計師在課餘時間寫Blog是很平常的一回事,大家在找尋技術問題的解決方法時,除了全知的Stack Overflow之外, 很多時候閱讀的就是一些其他高手所撰寫的技術文章,博客平台如Medium等也應運而生。相較之下,香港甚少有聽聞程式設計師有寫博客的習慣,大概是由於 工作繁忙,抽身不暇。筆者此前也只是曾經在一些Facebook專頁寫過一些技術文,現在才算上是恆常出文。短短數月中,已感受到為何外國程式設計師如此樂 此不疲,即使要抽出私人時間,也會寫Blog出文。

Coding Horror

Source:https://ds6br8f5qp1u2.cloudfront.net/blog/wp-content/uploads/2015/03/9_Coding-Horror-blog-for-developers.png?x88475

新年願望:學寫程式懶人包

· 11 min read
Gordon Lau
Software Engineer & Programming Instructor

剛剛過了2019的新年,大家許下了甚麼新年願望呢?也許大家會希望在2019年學會寫程式,突破自己,但話分兩頭,又應該如何開始學習呢?今次就分享一個 MDN所提供的懶人包,供大家使用。以下所有預估時間,皆以小時計,方便大家估計所需時間。

所需工具

正所謂「工欲善其事,必先利其器」,學寫程式又怎可以無適當工具呢?首先當然你要有一部電腦,桌面電腦或手提電腦都可以,而平板電腦或智能電話就不 可以了。不論是PC或是Mac都可以,這個懶人包介紹的全部都是兩種平台都可以無礙使用的。軟件工程師通常會用文字編輯器去編寫代碼(Microsoft Word 不算),我會推薦的就是微軟推出的開源文字編輯器:Visual Studio Code(簡稱VS Code),推薦的原因, 在於VS Code本身開源,又是免費,而且有不少更新以改善功能,成為一個軟件工程師工作的利器。當然如果你從未曾使用文字編輯器的話,可能覺得很難上 手,因此附上官方文檔的連結,大家可以慢慢閱讀。

Visual Studio Code