:::

2020年臺灣工程師喜愛的程式語言與資料庫竟然跟全球流行不一樣 / The Popular Script Language and Database Technology in Taiwan in 2020

23-2020_ENG.png

Pui Pui大家午安啊,我是在寒冷又溼漉漉的地方裡,期望下雨降在集水區的布丁。在這個寒冷的天氣裡,今天就跟大家聊聊臺灣工程師最受歡迎的程式語言跟資料庫技術吧!

全世界工程師最後的救星Stack Overflow在2020年二月發佈了2020年開發者調查結果。統計5萬多位工程師最喜歡的程式語言中,JavaScript以67.7%名列第一。年初時Easy Website的站長網站哥以這份開發者調查資料為基礎,將臺灣開發者所流行的程式語言與資料庫繪製成統計圖表,結果竟然跟世界潮流不太一樣。至於差異在哪裡,就讓我們看下去吧。

資料來源 / Data

Stack_Overflow_website_logo.png

(圖片來源:Stack Overflow)

本篇資料是以Stack Overflow的2020年開發者調查(2020 Developer Survey)結果所進行的分析。Stack Overflow是知名的程式設計領域問答網站。自2008年8月推出後,根據StackExchange的網站資訊統計,到2021年已經有2100萬個問題與1400萬位已經註冊的使用者。Stack Overflow可說是程式設計領域工程師最常用的問答網站。如果在寫程式時遇到了問題,我會先嘗試把程式跳出來的錯誤資訊拿去Google搜尋,而Stack Overflow通常都是搜尋結果排名前面的推薦解答。

Stack Overflow自2011年起每年都會舉行開發者調查活動,並將調查結果典藏在Stack Overflow年度開發者調查網站(Stack Overflow Annual Developer Survey)之中。在2011年年初進行2010年的調查時,填答人數僅有2532人。而在2020年二月的調查中,開發者填答的數量增加到了6萬5千位。根據EDC的調查結果,2019年軟體開發者為2390萬人。由此可知,Stack Overflow的填答結果大概佔了全世界的0.27%。

作為一位臺灣的程式工程師,Easy Website的站長網站哥特別關注2020年開發者調查結果中臺灣工程師喜愛的程式語言與資料庫。他利用Python跟R語言深入分析了亞洲國家華人工程師間最受歡迎的程式語言、過去兩年臺灣最受歡迎的程式語言(2018-2020)、在臺灣使用度最高的資料庫等統計資料,並將之繪製成四張統計圖表。當他跟我分享這份統計結果時,我也覺得非常有趣。在經過他的同意之後,我們就一起來看看臺灣工程師的喜好跟全世界之間到底有什麼不同吧。


亞洲國家華人工程師間最受歡迎的程式語言 / The most popular language in Asian  ethnic Chinese countries

2021-0322-230143.png

(資料來源:Stack Overflow Developer Survey 2020)

Stack Overflow的2020年開發者調查中,最值得關注的統計資料是全世界最受歡迎的程式語言。在統計57378位填答者的結果後,排行前五名的程式語言各別是JavaScript、HTML/CSS、SQL、Python與Java。其中JavaScript與HTML/CSS的組合很明顯是為了開發網頁應用的技術,而SQL結構化查詢語言則是相當泛用的程式語言,這三者名列前茅並不令人意外。新興的直譯式程式語言Python和上一世代的編譯式程式語言Java則是位於第四名和第五名,也許這象徵了程式語言世代之間的交替。

2._.jpg

(圖片來源:Stack Overflow Developer Survey 2020Easy Website)

在瞭解了全世界最受歡迎程式語言的排行後,我們來看看網站哥為華人工程師統計的最受歡迎程式語言排行。華人工程師的所在地區主要是分析中國、香港、日本、馬來西亞、新加坡、韓國與臺灣。上圖可以看到各個地區的華人工程師所喜愛的程式語言之間的差異。

這七個地區所在位置的華人工程師所喜愛的程式語言,在排名和所佔比例上都十分相似。Java、JavaScript和Python三大程式語言,不僅排行大多為各地區受歡迎程度的前三名,而且所佔比例也相當大,可說是華人工程師的主流。在全世界最受歡迎的JavaScript,在華人工程師中僅是第二受歡迎的程式語言。至於第四名之後的程式語言,在各地區則有很大的不同,而且所佔比例跟前三名相比都有不小的差距。其中僅有馬來西亞的排名分佈跟其他地區有些不同。最受馬來西亞工程師歡迎的程式語言排行前三名為Java、JavaScript跟PHP。其他地區排名第三的Python,在馬來西亞淪落到第五名,落後於排名第四的C#。

為什麼華人工程師所偏好的程式語言會是Java?而華人工程師所偏好的程式語言與世界潮流偏好的JavaScript之間的不同,又表示什麼意涵呢?從我個人的經驗來推測,這個結果可能暗示著華人工程師偏好將程式語言視為工作技術,而非用於創新的工具。Java這種編譯式語言是上一代許多大型專案偏好的程式語言,也是以前許多學校所教授的課程內容。上一代工程師所開發的專案如果能夠持續穩定地運作,對於後續接手的這一代工程師而言,的確沒有什麼需要特別更換架構的理由。儘管後來因網頁應用而興起的JavaScript、以及與因人工智慧而興起的Python,兩者蔚為軟體界的新寵兒,但由於在工作上繼承了前人的架構,也就繼續使用Java來維護系統,而這可能就是華人工程師偏好Java程式語言而不是JavaScript的可能理由。

過去兩年臺灣最受歡迎的程式語言 / The most popular language in Taiwan in 2018 - 2020

3._.jpg

(圖片來源:Stack Overflow Developer Survey 2020Easy Website)

在了解華人地區工程師偏好程式語言跟世界潮流之間的差異之後,網站哥將分析的角度從橫向轉到縱向,觀察臺灣工程師所喜好的程式語言中,2018年到2020年之間的差異。圖表的橫軸列出了12個程式語言,縱軸為填答者人數。每個程式語言皆有三個直方圖,個別反應出了2018年、2019年與2020年的填答數量。其中,綠色的2020年的整體分佈,就是前一張圖表中臺灣的部分。

從比例來看,2018年到2020年排行前三名的程式語言都保持不變,個別是由Java、JavaScript與Python佔據山頭。從填答數量來看,主流的三個程式語言有著不同的趨勢。Java與JavaScript的偏好人數在2018年與2019年較高,但2020年有明顯降低,呈現衰退的趨勢;Python在2018年偏好人數較少,但在2019年和2020年有明顯增加,呈現成長的趨勢。

根據這張圖表的結果,我整理一下個人的觀點。繼承前面的說法,我認為每種程式語言的偏好會個別反映出工程師對於守舊工作和創新挑戰的取捨。Java反映的是工作上的需求;而Python則反映了人工智慧的新興技術。至於JavaScript嘛,雖然我已經在用Node.js來做資料分析和視覺化處理,但一般工程師還是會認為它的主場是網頁應用上,而網頁應用也是一種維持前人專案架構的工作,因此地位會跟Java類似,偏好JavaScript的工程師也可能是將程式語言視為工作需要的技術。

我對於JavaScript的看法也可以從PHP和R的歷年趨勢獲得一些佐證。PHP的趨勢與JavaScript類似,兩者都是在2018年與2019年受到較多工程師的喜愛,但在2020年降低。而PHP的主場,毋庸置疑的就是用於網頁開發(為PHP的GUI Extensions掬一把眼淚)。另一方面,以統計和資料分析為主場的R語言,一直在學界有著穩固的簇擁者。跟JavaScript的歷年趨勢並不一樣,R語言在2018年到2020年之間變化並不大。儘管R語言在Shiny這種互動的視覺化上會用到JavaScript,但從兩者歷年趨勢之間的差異來看,JavaScript的定位顯然跟R語言有所不同。換句話說,臺灣工程師並非是以資料分析為目的來使用JavaScript,很可能還是將JavaScript用於網頁開發的應用上。

綜合以上觀點來看,從2018年到2020年之中,主導傳統專案的程式語言Java和網頁應用相關的JavaScript與PHP的臺灣工程師逐漸降低,而以人工智慧和資料分析為主的Python則逐漸增加。當然,我這種個人觀點的劃分並不精確,畢竟Python也是可以作為網頁後端伺服器、而JavaScript也能拿來作資料分析與人工智慧(例如TensorFlow.js)。不過從大方向來看,仍然可以察覺臺灣的軟體工程界正邁向世代交替的路上。我也期待Python這種直譯式、具有便捷軟體包管理系統的程式語言能夠成為主流,讓「Write Once, Debug Everywhere」的Java早日退場吧(是的,WekaCortonaDSpace,你們還是早點安息吧)。

不過話說回來,這張圖表仍然有兩點改善的空間。一是縱軸的單位應該在圖上標示,二是最好是用當年的百分比來作為縱軸的單位。由於每年的填答人數總數都不盡相同,如果單純用填答人數來做歷年比較的話,只能反映出單一程式語言在不同年之間的差異。但如果比較的單位是百分比,那就可以看到程式語言之間的歷年趨勢變化,在解釋上比較有意義。

在台灣使用度最高的資料庫 / The most popular database in Taiwan

2021-0323-170556.png

(資料來源:Stack Overflow Developer Survey 2020)

看完了臺灣工程師喜歡的程式語言排行後,讓我們來看看資料庫的部分。上圖是Stack Overflow 2020年開發者調查中最受歡迎的資料庫排行,排行前三名的資料庫各別是海豚MySQL、大象PostgreSQL、 網子Microsoft SQL Server。這三個資料庫都是發展成熟的關聯式資料庫,而新形態NoSQL資料庫並沒有對資料庫技術帶來革命性的變革,MongoDB和Redis僅排名在第五名和第六名,甚至不如因行動裝置興起而重獲重視的SQLite。

4._.jpg

(圖片來源:Stack Overflow Developer Survey 2020Easy Website)

同樣地,網站哥也將焦點集中到臺灣工程師上,製作了一份臺灣工程師使用度最高的資料庫排行。該排行中最受歡迎的資料庫前三名各別是MySQL、MongoDB和Microsoft SQL Server。全球第二受歡迎的資料庫PostgreSQL,在臺灣工程師的受歡迎程度僅有第四名。

關聯式資料庫、非關聯式資料庫、新型資料庫 / RDBM, NoSQL, and New SQL

這個結果令我相當意外。以MongoDB為首的NoSQL的確在臺灣有過一陣風潮,不僅許多相關書籍如雨後春筍般的出版,學界也因其容易架設、使用的特性而開設了許多相關課程。不過我個人對MongoDB的涉獵並不多,對於MongoDB在臺灣工程師之中相當受到歡迎的理由,仍需要更多的觀察。

我在資料庫技術的選擇上比較保守。在NoSQL概念興起的時候,我並不是直接採用MongoDB這種新型技術,而是選擇使用RedBeanPHPSequelize這種物件關聯模型框架(Object-Relational Model, ORM),來將原本設計在資料庫的邏輯全部轉移到程式語言端。在程式開發的過程中我會大量使用ORM來建立、修改、刪除物件,而有資料分析需求時再回到SQL語法來進行查詢。因此對我來說,實際操作大多面對的是高層的ORM。至於底層資料庫的選擇上,只要挑一個ORM能夠支援的資料庫即可。在搭配ORM的情況下,我在小型專案上常使用SQLite,當資料量變多時再切換到PostgreSQL。通常ORM都具備在不同資料庫之間遷移的功能。

0_SjaSaU5YPd8u0Mr8.jpg

(圖片來源:Google Spanner:A NewSQL Journey or Beginning of the End of the NoSQL Era)

除了已經廣為人知的關聯式資料庫和NoSQL資料庫技術之外,我最近關注的是新興的NewSQL技術。NewSQL的特色是結合了關聯式資料庫經典的ACID穩定性,同時具備NoSQL的橫向延展性。有興趣的朋友可以看看Gokhan Simsek的介紹。不過在網站哥所製作的排行榜中,屬於NewSQL的技術似乎僅有Microsoft Azure下的Cosmos DB入榜。這部份我還瞭解的不夠多,請求高人在下面的留言區給我指教。

SQLite其實比大家想象中的更好用 / The reasons to use SQLite

sqlite370_banner.gif

(圖片來源:SQLite)

另一個令我意外的一點是SQLite在全球和臺灣排行之間的差異。SQL在全球排行到了第四名,但在臺灣則相對不受歡迎。在很多臺灣工程師的眼中,SQLite只能用於小型專案,無法用於需要多人同時操作的其他應用場景,特別是網頁應用上。但其實很多人並沒有意識到SQLite在APP開發、個人資料分析以及教學上的實用價值。

隨著智慧型手機的興起,有些小型APP的開發上可以選擇在本機端以SQLite儲存資料。Web SQL Database也是用SQLite作為資料庫技術,讓網頁開發者能用SQL語法存取結構複雜的資料。

另一方面,SQLite在許多中小型研究專案的資料分析中也非常實用。我常常聽到研究者在抱怨「Excel沒辦法容納我要分析的資料」,或是在分析大量資料時用來儲存資料的格式,卻是使用純文字檔案CSV格式(而且編碼通常都有問題)。面對個人的資料分析問題,我一率推薦SQLite。將資料儲存成SQLite之後,不僅資料的儲存方式統一、儲存成二進位檔案也比純文字檔案節省空間,而且還能夠用SQL語法調用資料,大幅度提升分析的效率。

最後,在教學上,SQLite可說是架設起來最簡單的關聯式資料庫,同時也支援大部分標準的SQL語法,正是學習SQL程式語言的最佳起點。我們可以輕易找到一些具有圖形化操作界面的工具來建立和管理SQLite資料庫。在Windows作業系統中,我最常用的就是DB Browser for SQLite Portable。不需安裝,開箱即用。當其他課程還在安裝MySQL與PHP的組合、或是為了Microsoft Access不同版本而苦惱時,你已經可以用SQL語法來為SQLite資料庫建立table了。

麻雀雖小,五臟俱全,這正是SQLite的最佳寫照。希望上述這些SQLite的優點,可以讓大家對SQLite重新改觀。

如何改善這張直方圖 / Suggestions to improve the chart

最後來說說網站哥這張圖表的改善空間。除了縱軸應標明單位之外,也許可以將橫軸的資料庫順序依照回應人數多寡遞減排序,讓讀者能夠迅速瞭解資料庫排行。此外,由於資料庫種類眾多,導致直方圖的顏色多有重複,最右邊的橘色直方圖甚至已經超出了右邊圖例的說明範圍而消失。而且在資料清理上也有可以改進的空間。圖例中「Amazon DynamoDB」與「DynamoDB」這兩項似乎是相同的資料庫技術,在分析時應予以合併。

遇到這種項目太多的直方圖,我們可以選擇僅呈現填答人數較多的前10名項目,最後一項歸類到其他。另一個方法是將資料庫技術進行分組比較。舉例來說,我們可以把資料庫技術區分為RDBM、NoSQL、NewSQL三組,先比較三組整體的差異,再看各組之中不同資料庫技術的差異。由於這三種資料庫類型的應用場景都有些許不同,分組比較會比混在一起來看還要清楚得多。


結語 / Conclusion

本篇是以Stack Overflow的2020年開發者調查網站哥整理的統計圖表來說明2020年臺灣工程師喜歡的程式語言與資料庫技術,再加上我的一些個人觀點。當然,我知道自己的所知有限,這些解讀可能存在相當程度的誤解。如果大家有什麼看法,歡迎在下方留言區一起討論。

調查結果的價值 / The value of survey results

2021-0323-035719.png

(圖片來源:Stack Overflow Developer Survey 2020)

總結來說,Stack Overflow的2020年開發者調查所統計的全世界軟體工程師趨勢,對於開發者、求職者與教育界可各別帶來不同的啟發。

對於開發者來說,這些主流的技術可能是開發專案選擇程式語言、框架、資料庫時可以作為參考的依據。選擇主流的技術,表示較容易找到熟悉該技術的相關人材,讓專案有比較高的機率能夠順利進行。同時,開發者也可從主流技術中學習新興的技術,確保自己的技術水準能夠與時俱進。

對於求職者來說,主流技術是選擇學習目標的一個很好的方向。主流技術反映的是大部分工作所需要的技能,而且通常該技術的學習資源也會相對較為豐富。選定一個合適的學習目標,能夠有效提升學習效率,並早日找到理想的工作。

對於教育界來說,更是應該將主流技術納入課程安排。雖然「程式教學」這門科目在近年來逐漸獲得重視,但仍有許多教師僅是以自己已知的技術進行教學,往往跟世界潮流脫節。當然,為了備課還要學習新的技術,的確是一件很辛苦的事情,我能夠體會教師的辛苦。不過將最新的知識帶給學生這件事情本來就是教師的職責,只能期許老師們加油囉。

關於Easy Website / About Easy Website

2021-0323-035559.png

(圖片來源:Easy Website)

最後來講講前面三張圖表的製作者網站哥主推的Easy Website。該網站主要是如何架設網站的教學,並介紹了多個架站平臺,包括Webnode、Wix、Weebly、Jimdo、SimpleSite,並分析這些平臺的優缺點。未來網站哥可能還會加入關於程式開發(網站哥稱之為「編碼」,但這個詞蠻容易造成混淆)與行銷的教學文章。如果對網站架設感興趣的朋友,不妨關注一下Easy Website的發展。


那麼這次從Stack Overflow的2020年開發者調查來看臺灣工程師喜愛的程式語言與資料庫的討論就到這裡了。在這邊我也來做個小小調查:如果你也是一位軟體工程師,那麼這些主流的程式語言中,你知道那些語言呢?

歡迎在下面的留言處跟我們分享你的想法。大家的意見是我繼續分享的動力喔!如果你覺得我這篇實用的話,請幫我在AddThis分享工具按讚、將這篇分享到Facebook等社群媒體吧!

感謝你的耐心閱讀,我是布丁,讓我們下一篇見。

總共2 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

  1. 印象中 Web SQL Database 規範被放棄了

    回覆刪除
    回覆
    1. To 邱繼緯,

      沒錯,Web SQL Database在很久以前就停止維護了
      https://www.w3.org/TR/webdatabase/

      儘管如此,如果只是要個人處理資料,又不想要安裝什麼特別的環境的話
      JavaScript + Web SQL Database就能讓人在Google Chrome瀏覽器中,輕易地用SQL語法來管理資料

      主要還是個人分析使用啦

      刪除