ChatGPT 可以取代Programmer嗎?
2022年11月30日,是人工智能的一個重要日子,OpenAI在這一天推出了以Transformer模型為主的ChatGPT語言模型。ChatGPT剛一推出就已經震驚世界,因為其自然語言 理解及自然語言生成,都比之前的模型有非常大的進步,不少嘗鮮者都發覺ChatGPT之語言能力,大大超出了大眾的想像。
筆者身在倫敦,讓ChatGPT以十二月冬日倫敦為題,賦詩一首。
2022年11月30日,是人工智能的一個重要日子,OpenAI在這一天推出了以Transformer模型為主的ChatGPT語言模型。ChatGPT剛一推出就已經震驚世界,因為其自然語言 理解及自然語言生成,都比之前的模型有非常大的進步,不少嘗鮮者都發覺ChatGPT之語言能力,大大超出了大眾的想像。
筆者身在倫敦,讓ChatGPT以十二月冬日倫敦為題,賦詩一首。
筆者兩年前連續寫了兩篇Node.js終結者
,分別介紹了Deno 的設計理念,以及Deno比Node.js優勝的地方。
筆者亦在第二篇文中寫了Deno的弱點
,主要在於Deno
與Node.js
龐大的NPM套件庫並不兼容,令現有的Node.js專案難以
轉會。而在11月13日推出的Deno
版本1.28,就正正是推出了廣泛之NPM Support! 馬上支援超過130萬的npm
套件。
此文是2018年筆者拙文四個原因令Linux更適合作Server
的續集,旨在探討一個筆者思考多年,卻未解之難題: 就是為何Linux Desktop永遠都不受普遍用戶歡迎呢?
迄今為止,根據StatCounter的數據,Linux Desktop 在桌面及手提電腦市場只有2.81%
的佔有率。
在開始探討前,先講解一點背景資料。筆者由2012年開始在常用電腦只用Linux、沒有Dual Boot也沒有Windows VM備用,到了今天剛好第十個年頭。筆者習慣使用不同Flavour的Ubuntu,在探索的過程中亦曾使用過Fedora、Debian 、Linux Mint等受歡迎的Linux發行版(Distros)。現正在使用的,是Ubuntu 的22.04 LTS版本,也就是長期支援版本(Long Term Support version)。
在這十年使用Linux旅途上,筆者也曾經向不少人推介過使用Linux,迄今為止,筆者成功影響多位人士使用Linux,無獨有偶的是,這些人都是Programmer,至於非Programmer呢? 筆者成功說服的例子是── 0位 。 筆者在推介時往往這樣說: 「Linux Desktop 美觀,速度快、安全、穩定、方便依個人喜好設置,基本上你希望有的功能都有; 你不知道你需要的功能,安裝一兩個軟件就可以輕鬆解決。」 筆者往往得到的回答卻是: 「真的嗎?,Linux 不是很難用的嗎?要打command 先用到的。」
如果你有類似的疑問,這是既有印象在作怪,在很多人的印象,Linux是這樣的:
筆者不是經常會寫關於React的文章,對上一篇寫關於React
的文章已是2019年講關於以React Hooks來編寫函數式部件(Function Component)的文章,
因為在筆者看來,React
自2013年推出以來,API 已經非常穩定,近年開發重點主要放在改善效能以及改善開發者體驗(DX, Developer experience)之中。 React
17 更罕見在官網之中,際出一句No new features
,殊不知這一切只是為了React 18
舖路。
React
18 可說是自React
16.8 推出 React Hooks
兩年多以來最大變動,其中主要變動都離不開兩個字 ⸻ 並發(Concurrency)。
也就是React
18的主要功能,都為了改善React
在並發編程方程之效能支援,以及改善開發難度而設的。
"Why are there so many programming languages?" You probably asked this question when you first learned programming. It is downright confusing to see so many programming languages are around, as if they are designed intentionally in this way to confuse newcomers. If you are asking any of the working professional programmers out there, many of them are going to give you contrasting opinions: "Java is dead","Real programmers code in C++", "Ruby is a toy language" or "You are stupid if you don't code in Python".
As explained by Paul Graham's article Beating the Averages
, Programming Languages are not merely seen as tools. They also influence the way programmers think about their code. Naturally, most programmers have a strong opinion on the choice of programming language, which unsurprisingly they prefer the one that they use every day.
As a programming mentor, I need to answer this question to my students on a daily basis, preferably in a clear and brief manner. It is surprising to me that there are no good existing infographic that explains how programming languages evolve to become what it looks like now. Therefore, I decided that it is a brilliant idea to create one by ourselves.
不知大家有否親歷過類似的情況:一位講者在侃侃而談,講解其公司/組識未來資訊科技發展的宏圖大計,如何使用人工智能(Artificial Intelligence)、深度學習(Deep Learning)去 提升公司效率,更可大大增加盈利云云。筆者當然亦曾在類似情景之中,每次聽到用深度學習解決問題時,筆者例必竪起耳朵,細聽到底深度學習是用作解決其公司/組識當前遇到的甚麼問題。結果往往令筆者大失所望,很多這些宏圖大計都是流於表面,花了許多時間去討論大方向,討論抽象的策略,卻不見有討論過實際運作方案的Technical Details。
為何會出現這樣的現象呢?筆者認為是因為由於普遍大眾對資訊科技界認識不深,有一些科技用語由於聽起來很厲害,就往往成為含混的重災區。人工智能
看起來很科幻,Deep Learning
(深度學習)聽起來也很莫測高深,作為一個Pitching的題目也很吸引,所以往往就通通「炒成一碟」,務求提過所有科技Buzzword,演講就可平安過關。
人工智能其實有悠長歷史,由上世紀50年代開始就已有人工智能的概念,定義也有廣義與狹義之分。這是一張筆者數年前分享的示意圖。
在世上大多數的技術行業,工作之箇中技術都往往是行業機密,因為這關乎商業利益,斷不會隨便公開予大眾。例如著名廚師的食譜、半導體的生產技術、礦產開採技術等等,誠然在今日互聯網世代,這些技術之相關知識很多時亦可在網上窺得端倪,但往往只是在表面輕輕帶過,箇中奧妙,都不足為外人道。在這一點Programmer則與其他行業不太相同,因為有開源軟件(Open source software)之存在。對世上數千 萬Programmer 而言,閱讀、使用、參考其他Programmer的工作是很稀鬆平常的事,即使是世界級Programmer所編寫之程式碼,也很容易在Github 等網站閱讀得到,基本上不存在知識壁疊。很大部份日常Programming常用之程式庫(Programming library),正是以開源的方式,在社群之中共享,在各種技術行業之中,這是一個相當獨特的技術生態。
NPM Wombat Reference
就以筆者最熟悉的Npm packages
為例,NPM
上2019年就有超過一百萬個packages,每月總下載次數達500億次,因此可以肯定地說,不論一個軟件工程師是如此出類拔萃,使用他人所寫的程式庫乃是不可避免。
既然使用他人所寫之程式如此必要,我們更應有一套行之有效的方法,去判斷一個library是否適合手頭上之專案,否則當專案太依賴該library之後,造成與程式庫間之依賴耦合(Dependency Coupling),到時想再改回來,就已經恨錯難返了。
既然活用他人之程式這樣重要,那有何原則可以判斷應該如何挑選library呢?筆者在下筆這篇文章之前,都在網絡上搜尋過類似文章,發覺這個重要問題,竟然很少人談及過,筆者就斗膽在此分享一些個人經驗,希望可以幫到正在閱讀的你。
筆者看來,揀選library 可遵從以下五大原則,並將一一以例子詳加解釋: