[初學者必讀] 為何我推薦QML作為第一個學習的程式語言

什麼是QML?

對很多程式語言的初學者來說,第一個遇到的問題肯定都是「究竟要從哪一個程式語言開始學起呢? 」。我只能說,要依照你的學習目標而定,這個問題沒有一定的標準答案,想學習開發手機應用程式跟想學習開發網頁應用程式的就不相同,就連開發手機影用程式也區分成是針對Android或iOS而有所不同。

我知道很多人會推薦Python作為第一個學習的語言,原因不外乎是語法簡單、應用領域廣,我個人並不否定這個說法。但你可曾想過,是否有其他語言也有類似的特點呢?答案當然是肯定的,我接下來一系列教學所使用的程式語言,QML,就是其中之一。

QML是 Qt Markup Language的縮寫,Qt(發音同Cute)是一個基於C++的開發框架,而QML是Qt所設計來撰寫GUI(圖形使用者介面)的一個程式語言,它是屬於QtQuick模組的其中一環,QtQuick模組也提供了相當多基於QML的GUI元件,方便於應用程式的GUI開發。(註:何謂框架、模組?我之後會再寫一篇文章來解釋。)

QML有哪裡好?跟Python比又好在哪裡?

其實程式語言沒有所謂的好壞,根本上是無從比較的,端看你要用這個語言來做甚麼,就像我問你,英語跟日語哪個比較好?當然是看你要使用這個語言的環境與對象。只是針對初學者來說,選擇一個容易上手的程式語言,奠定相關基礎之後,再學習其他語言或許會比較簡單。我也很清楚,相對於Python這個程式語言,QML是冷門且比較少人使用的,所以接下來我針對幾個特點來說明。

  • 開放原始碼Open Source

QML跟Python都是開放原始碼,雖然說Qt是一家商業軟體公司,但已Qt整個框架來說,大體上還是開放原始碼的,所以在函式庫的部分,還是得基於其授權方式(License)加以使用,這樣的限制在任何Open Source框架或函式庫都是一樣的。

  • 跨平台

Qt整個框架中,包括Qt C++和Qt QML的模組,都支援在大多數的平台上執行,不論是Windows、macOS、Linux,甚至是Android跟iOS,都可以運行基於Qt開發的應用程式。這一點,Python也能做到,但兩者在跨平台運行的背後原理不盡相同,不在此討論。

  • 語法簡單易懂

QML跟Python的語法都屬於簡單易學,但因為QML本身是設計來作為GUI的開發,所以邏輯上更為直覺易懂,它本身是一種描述式語言,只要你懂得如何描述物件本身,以及物件之間彼此的關係,就能寫出對應的程式碼,這也是為什麼我推薦QML作為第一個學習的程式語言,關於這一點,後面會再稍作說明。

  • 具物件導向概念

QML跟Python都算是比較新的程式語言,以設計理念而言,自然都具備的物件導向的概念,而QML其實骨子裡也是用C++開發而成的,那肯定是具有物件導向的特性。至於甚麼是物件導向,對於初學者來說,我不希望一下有太艱深且抽象的概念,讓學習者聽起來模模糊糊,導致打退堂鼓。相反地,我認為直接透過大量的實作練習後,再回頭去深入了解程式碼的架構,才發現「原來這就是物件導向啊!」,這應該才是比較有效的學習方式。

  • 應用領域廣

不諱言,Python的應用領域非常廣,不論是大數據、人工智慧、遊戲開發等等領域,都可以看到Python的身影,這也是為什麼Python這麼多人使用的原因。而QML身為一種GUI的開發語言,自然在應用程式不需要畫面或所謂GUI的情況下,就不一定會使用到。但如果把範圍放大至以Qt這個框架來看,其應用面跟Python比起來,自然也是不惶多讓。市面上有使用Qt做為開發框架的應用程式,可能比你想像的還要多。像是LINE的桌機版本,還有Tesla電動車的數位儀表板,都是以Qt開發而成的。

根據以上特點,我相信QML跟Python對初學者來說,都會是適合入門的程式語言,而且在網路上的學習資源也都很多。此外,Qt官方提供的開發文件非常詳細,其自帶的開發工具中所附的範例程式碼也足夠參考。

那跟Python比起來,QML有哪些優勢呢?我列出以下特點供您參考,為何我認為它比Python更適合初學者。

  • 描述式語言

前面提到,QML本身是一種描述式語言,雖然QML全名是Qt Markup Language,以Markup這個單字,通常中文翻作”標記式”,因為它的概念類似HTML這樣的語言,透過標記的方式去描述物件,但我個人比較傾向於”描述式”這個說法,這也比較符合QML一開始在Qt模組名稱是使用Declarative這個單字的解釋。那何謂描述式?下一個段落會直接給你看一小段範例程式碼,並說明程式碼對應的畫面呈現,看完應該就能懂了。

  • 同時學習到 JavaScript

看到這裡,你可能會問我說,「已經要學QML就頭痛了,還要同時學另一種程式語言喔?」先簡單說明,因為QML主要是描繪GUI裡的物件,而這些物件本身可能是可以被操作的,或是當某些事件發生時有特定的變化,這些看不到的背後邏輯,並無法透過QML撰寫。舉例來說,假設畫面上有一個透過QML繪製出來的按鈕,當我在一個按鈕上點擊時,會發生甚麼樣的事情,是由開發者所定義的,這些定義就是所謂的邏輯。而邏輯開發的部分,在QML裡,是可以使用JavaScript這個程式語言來撰寫的。所以在整個學習過程中,入門的JavaScript也是必要的,不過別擔心,JavaScript的語法也算是簡單易學的,我並不會特別針對JavaScript這個語言再特地說明和教學,而是自然而然在範例中學習並理解。

  • 開發快速

Qt官方提供了許多模組,在開發上可以省去很多時間,也因為QML加上JavaScript的使用,不需要花太多時間在先了解一些專有名詞,並搞懂其理論。而是在做中學,不論是透過官方提供的範例程式自學,或者是參考我接下來一系列教學文章,相信都能在短時間就可以看到一定的成果。

難道都只能從Hello World開始學起嗎?

很多人在初次學習程式語言時,不論是哪一種語言,不論是從書籍或網路等資源,通常第一個就是學習印出Hello World,而且是在所謂的終端機介面中輸出這些字。這是為什麼呢?

現在這個時代,我們所理解的電腦都是有豐富畫面的,也就是所謂的GUI圖形化操作介面,而GUI在微軟的Windows作業系統出現之前,其實就存在了,但並不普遍。在那個時代,甚至GUI還沒問世之前,電腦的顯示畫面只有如同在終端機看到的樣子,類似於Windows裡的命令提示字元。所有當時學習程式語言,要看到執行的結果,最直接的方式就是在畫面上輸出文字,以至於第一個學習的程式總是印出Hello World。

如今,所謂的桌面視窗應用程式,也就是運行在像Windows或macOS這些視窗作業系統下的應用程式,才是一般使用者會直接看到樣貌,所以對初學者來說,學習開發具有GUI的視窗應用程式,才是最有感的。

我知道,會有人問說,那開發GUI一定要會寫程式嗎?答案是否定的。此外,我想可能也會有些人對我前面提到的看法持反對意見,認為GUI可以透過開發套件工具,直接用拖曳的方式,快速製作出想要呈現的畫面就可以了啊!這樣的說法其實我也同意,就連Qt開發套件也提供這樣所謂WYSIWYG(所見即所得)的設計工具。

那為何還需要學呢?原因很簡單,就是我一再強調的,QML是用來開發GUI的程式語言,它不像C++或Python,主要是用來開發上述所謂邏輯的部分,學習的面向不同。而且這樣的描述式語言非常直覺,可以快速修改程式碼後並看到畫面的呈現結果。對初學者而言,就學習的效果和可以獲得的成就感上,我相信都更勝於其他程式語言的。

來個範例程式瞧瞧吧

說明了這麼多,不如直接來個簡單的範例程式,讓你大概了解我所謂的描述式是多麼直覺易懂。

這張圖的左邊是程式碼,右邊是執行的呈現畫面。請你先遮住左邊不看,描述一下右邊的畫面裡有甚麼,我估計你的描述應該跟以下相去不遠。

有一個紅色方塊,它的右邊有一個綠色方塊,下面有個藍色方塊。

好的,接下來看一下左邊的程式碼,我以下的描述,相信你可以很容易從程式碼中對應出來。

首先,畫一個方塊,命名為redRect,寬高皆為50,顏色是紅色(red)
然後,再畫一個方塊,命名為greenRect,寬高分別為30和40,顏色是綠色(green),方塊的左邊對齊方塊redRect的右邊
接著,再畫一個方塊,命名為blueRect,寬高分別為60和20,顏色是藍色(blue),方塊的上方對齊方塊redRect的下方

看懂了嗎?就是這麼簡單,沒錯,非常直覺易懂。這就是我所謂的描述式語言,短短幾行程式碼就可以產生出對應的畫面,而且容易理解,幾乎不需要太多解釋,就可以推論出這個語言的語法和撰寫方式。當然,這還只是第一步,接下來我會有一系列的教學文章,帶著各位有興趣的讀者,進入這個程式語言的世界。

Read more

聽說 AI 都能寫程式了,那我還需要學程式語言嗎?

自從ChatGPT橫空問世,人們在獲取知識的方式,發生很大的改變。很多既有的知識或疑問,可以不用在透過Google等搜尋引擎,搭配正確的關鍵字,從中找到相符的結果。 有了ChatGPT,只要用聊天的方式,用人類自然語言詢問,就能在短時間統整出邏輯清晰且條理分明的結果。不論是知識的學習、文章的統整、甚至程式的撰寫,都能透過AI工具快速產生具有一定水準的成品。 那,既然AI都能幫忙寫程式,而且也寫得不錯,我還需要學習程式語言嗎?答案是「肯定」的。 AI是輔助工具,不是程式設計師 沒錯!AI能寫出不錯的程式碼,但如果你本身不懂程式設計,你如何判斷它寫出的結果,是否符合你所想要的?對懂程式的人來說,他會比較清楚該如何對AI工具「下指令」,程式設計師可以利用AI工具的輔助,節省掉實際開發與除錯的時間。 再者,要寫出一個可以應用的程式,並非如此簡單。從一開始的需求分析,到架構設計、模組化元件、單元測試等等,絕對不是透過跟AI工具講三兩句話就能產出的。 AI是透過背後龐大資料與分析模型取產生我們想要的結果,意即,它做不到「無中生有」。相較於AI,人類的優勢在於「創造」。AI工具的出現與

By 三寶爸工程師

[程式教育] 該學哪一種程式語言才好?你必須先了解程式語言的7個應用領域

之前一再強調,學習程式語言不完全是為了將來當工程師而學的。但對初學者來說,在這麼多種程式語言中,究竟要選哪一種程式語言做學習呢? 在這之前,我們要先了解,程式語言的應用,大概有哪些領域。先看看自己對哪一個領域有興趣,不妨從該領域下手,學習一種該領域會用到的程式語言,並透過學習去完成一個小作品。 以下是依照應用領域的分類,列出該領域的幾個主要採用的程式語言。 一、網頁開發 (Web Development) 網頁(網站)開發是最普遍的一種應用,幾乎每個人每天會接觸到的,都脫離不了網頁開發的相關產品。在這裡我要特別說明,「開發」網站跟「架設」網站是兩回事,如果只是要「架設」網站,那是可以不需要學會寫程式就能做到的,因為有太多現成工具就可以達到「架設」網站這件事。關於「架設」網站的工具,我們有機會再另外寫一篇文章說明。但不論如何,網頁(網站)的基本運作原理還是要懂的。 網頁開發的部分,一般來說還區分「前端」和「後端」的開發與維護。

By 三寶爸工程師

[程式教育] 我未來不想當程式設計師,那還需要學程式語言嗎?

這個問題,最中肯又八股的答案當然是「不一定,但有學比較好」。如果問我,我肯定是建議你「最好要學」。 我換個問題,我未來不想當英文老師,那我需要學英文嗎?答案應該很清楚了! 你可能會說「不一樣啊!」請你仔細想想,學習「語言」跟「程式語言」的目的,我在 [程式教育] 學習程式語言的Why and How 這篇文章內有提到,兩者的目的一樣都在「溝通」,只是對象不同。 以目前AI發展的速度,也許不久的將來,「語言」也不需要學習了也說不定。屆時,「程式語言」的角色可能反而更吃重。並不是說你要學會用程式語言來開發軟體,而是透過學習程式語言吸取基本知識和延伸的能力。以下我列出五點,學習程式語言所能帶來的價值。 一、提升問題解決能力與創造力 學習程式設計可以培養邏輯思維和系統化解決問題的能力。這些技能在各種職業中都是非常寶貴的,無論是管理、行銷、工程還是醫療領域,遇到複雜問題時,能夠分解問題並系統地找到解決方案是非常重要的。 程式設計是一種創造性的活動,讓你能夠實現自己的想法和項目。

By 三寶爸工程師