Latest

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

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

By 三寶爸工程師

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

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

By 三寶爸工程師

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

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

By 三寶爸工程師

[程式教育] 如何學習程式語言?5個推薦的免費學習平台

上一篇我們提到了3種不同的學習管道,有些管道,像是教學機構,會設計專屬的學習平台,當然是只有付費加入課程才有機會使用。不過,大部分的學習管道,其教學的內容,還是以線上既有的一些免費學習平台為主。 所以,這一篇我們就來介紹5個推薦的免費學習平台。不同的平台,其設計上針對的學習年齡層也有所不同。透過這一篇,希望讓大家在進入學習前,有一些簡單的概念,並選擇適合的平台去學習。之後我會再針對這些平台,提供對應的學習管道給大家。至於,要透過自學或是付費找教學機構學習,就依照個人需求而決定。 一、Scratch Scratch是由麻省理工學院所開發出來的一套「視覺化程式語言」開發平台。上圖就是Scratch的開發介面,透過這個開發介面,利用左方的一些控制元件(積木),將其拖曳至中間的工作區,依照順序設計出腳本,就可以讓右方那隻貓咪依照設計進行對應的動作。 這個平台是支援多國語言的,中文當然也是其一,所以學習上不用擔心語言的問題,只是需要了解這些翻譯過的控制元件和操作介面的用途,是必要花費的學習成本。這個平台,據我所知,目前大部分的小學和中學,在學校的資訊科技相關課程,都有教授這個平台。如果

By 三寶爸工程師

[程式教育] 如何學習程式語言?比較3種不同的學習管道

前一篇我們提到,學習之前必須搞清楚「動機」與「目的」,再尋找對應的有效學習方法。但是對程式語言的初學者來說,還沒有理解基礎知識的情況,包括有哪些程式語言?分別應用在哪些領域?都還是矇矇懂懂的,很難有明確的動機與目的。 對國高中生來說,除了技職體系或五專之外,大部分的學生還未進入所謂專科教育。在沒有任何電腦科學的基礎知識下,不論你一開始是學習哪一種程式語言,我們可以把學習管道區分為以下三大類。 簡單來說,這三種學習管道是依照「自己學還是別人教」跟「單向學習還是雙向反饋」這兩個分辨點來加以區分,所以在學習曲線、花費的時間跟金錢成本上,當然也有所差異。 一、自主學習 自主學習,意即從零開始完全靠自己尋找相關資訊,一步步摸索前進。好處是因為全都自己來,學習過程比較深刻、容易記得住。但缺點是可能無法有系統性的學習,在未整理的龐大資訊量中,要花相對多的時間尋找正確的學習資源。 對於有自主學習經驗的學習者來說,在已經有明確的學習目標的前提下,只要尋找到適合自己的學習資源,那學習成效也是不錯的。但相對的,沒有明確目標,就容易在過程中發散,或甚至根本不知道如何開始,導致學習受挫。 缺點:不

By 三寶爸工程師

[程式教育] 學習程式語言的Why and How

前面我們淺談了「為什麼要學習程式語言?」和「程式語言是什麼?」,應該都理解了學習「程式語言」的重要性。不過,在進入「如何」(How to?)學習之前,我們要再談一次「為什麼」(Why?) 為何要再問一次Why呢?因為前面的Why只探討了「重要性」,當你知道了一件事很重要,並不表示你會興起想要去做的念頭,也就是「動機」。 學習要有足夠的「動機」和正確的「目的」 舉例來說,大家都知道「運動」很重要,也知道運動能帶來很多好處。但是,真正有規律在運動的人,相對或許是少數。因為大多數人,還是沒有「立即性」的需求,讓他能觸發想要實踐的心。換句話說,就是沒有足夠的動機,所以運動的優先權會被排在其他被認為更重要的事之後。 再舉個例子,我們從小都被灌輸「英文」很重要,但學習英文的動機和目的,大多數是為了「考試」

By 三寶爸工程師

[程式教育] 程式語言是什麼?

前一篇我們談了「為什麼要學習程式語言?」,了解了「程式語言」的重要性。接下來我們來說明一下,什麼是「程式語言」,讓大家有個概念,簡單理解它的輪廓。如果你問ChatGPT,它可以給你精準而明確的回答,如下圖所示。但我想用更容易理解且不帶專業術語的白話來說明。 語言的用途 - 溝通 程式語言,既然裡面有「語言」二字,表示它也屬於一種語言。所以當然要先從我們認知的人類「語言」談起,「語言」最主要是用來「溝通」的,對吧!? 「語言」,是人類彼此溝通的工具,要達到溝通的目的,語言需具有「共通性」。也就是說,「我講的話、你聽得懂」。人與人之間透過「相同」語言來溝通,那語言「不同」,自然無法達到溝通的目的。 不同語言間的溝通 - 翻譯 簡單來說,「程式語言」就是用來作為人與電腦溝通的工具。

By 三寶爸工程師

[程式教育] 為什麼要學習程式語言?

程式教育的重要性 自從108課綱將資訊科技納入必修課程之後,程式語言相關的教育組織或團體也開始如雨後春筍的發展。在部分歐美國家,程式語言屬於國民教育的一部分,早已行之有年。但在台灣的教育體系及環境下,要讓「程式語言」這門知識,達到所謂的普及通識,還是有一大段進步的空間。 學習程式語言,不是為了將來成為程式設計師(軟體工程師)。就如同,學習作文的目的,不是為了將來成為作家。在身邊事物都充斥著資訊科技的現在,舉凡看到的、聽到的、用到的,幾乎都是透過程式指令所產生的應用。 學習程式語言,至少可以培養以下三種能力。這篇文章我們分別就這三個能力來加以說明,程式語言教育的重要性。 能力一、邏輯思考力 程式,是透過一連串的指令,讓電腦產生相對應的動作,以達成某種特定的功能。為了讓電腦能順利的運作,這一串所謂的指令,就是由程式語言所撰寫而成的。在學習的過程中,學習者必須有系統性地思考,針對需解決的各種不同情境,而培養出邏輯性的思維。 能力二、創造發想力 程式設計,雖然是屬於電腦科學的一環,但也有人說,程式設計是一門藝術。要讓電腦透過指令去執行特定的功能,在設計上部會只有一種方法可行。

By 三寶爸工程師

[Qt QML] 如何在QML裡建立與Python物件的connections

前一篇文章,[Qt QML] 如何呼叫Python class functions,示範了如何從QML呼叫Python的類別函式。這一篇延續下去,也跟QML與C++的系列文章一樣,我們看看如何建立QML跟Python的connection,其目的就是當Python物件發生一件event時,可以透過connection執行在QML這一層的slot function。 跟[Qt QML] 如何在QML裡建立與C++物件的connections這篇文章裡的範例程式一樣,點擊畫面中的按鈕,等待三秒鐘後,視窗背景變成紅色。QML程式碼的部分,一樣沒有修改,僅用Python實作相同的邏輯。 Python程式碼部分 跟C++的部分一樣,首先宣告一個Qt signal名為eventTriggered()。 eventTriggered = Signal() 當UI點擊按鈕時,呼叫triggerEvent()這個Python class function,指定三秒後去觸發上面的eventTriggered() @Slot(int) def triggerEvent(self, second

By 三寶爸工程師

[Qt QML] 如何呼叫Python class functions

之前我寫了一篇文章,[Qt QML] 如何呼叫C++ class functions,簡單示範了如何從以QML撰寫的GUI來呼叫C++層所定義的class function。相同的,這篇文章則是把C++實作的部分改成用Python實作,實作目標與該篇文章的範例程式一樣,「等待三秒將應用程式關閉」。首先貼上這個範例程式的執行結果,其實就跟該篇文章看到的一樣。這篇的重點是如何在QML中呼叫Python的類別function,所以下面就簡單說明一下Python程式碼的部分,至於QML的部分,跟上面提到的那篇文章中是一樣的。 Python程式碼部分 跟該篇文章一樣,我定義了一個類別,一樣名為Controller,也宣告了一個類別function名為quitApp()。 因為Pyside並沒有像在C++一樣有提供Q_INVOKABLE這樣的marco,所以要讓QML可以呼叫Python類別function的話,就是利用如同C++中的另一個方法,也就是定義為slot function,做法是只要在function之前加一個“decorators”,為“@Slot”,如下。 @Slot(i

By 三寶爸工程師

[Qt GUI] QtQuick/QML 與 QtWidgets 的選擇

上一篇文章([Qt for Python] PySide 與 PyQt 的選擇)我簡單敘述了PySide跟PyQt的比較,不論你的最終選擇為何,對於初次選擇Qt作為GUI開發框架的學習者來說,一開始可能又會面臨到另一個困擾,就是QtQuick/QML跟QtWidgets的差異與選擇,所以在進入正式的系列文章之前,先來談談這個問題。 跟上一篇相同,先講結論,我認為選QtQuick/QML就對了。原因很多,不過我一樣列了三個最主要的理由,如下。 第一、完美切割 UI 跟 bussiness logic 對網頁程式開發有一定了解的開發者來說,對於 MVC 這個設計概念應該都不陌生。採用QtQuick/QML開發UI的話,等於是天然的MVC架構,完全把UI的邏輯跟商業邏輯切割清楚,不論你在商業邏輯的實作部份,是用C++或Python,都可以容易地在設計上符合MVC的設計理念。 雖然說,QtWidgets也是有獨立的UI檔案,是基於XML的文件。但在UI的操作邏輯,還是得透過C++或Python的實作來達成。光這一點優勢,就有足夠的理由選擇QtQuick/QML來實作UI。

By 三寶爸工程師

Qt for Python

[Qt for Python] PySide 與 PyQt 的選擇

Python是目前全世界最多人使用的程式語言,也是應用範圍最廣的程式語言之一。除了當今最火紅的AI人工智慧領域外,舉凡網頁應用程式、桌面應用程式,甚至手機應用程式,都能看到Python的蹤跡。 在桌面應用程式的部分,Python能搭配的GUI框架有非常多種選擇,其中又以Qt這套跨平台GUI開發框架最為廣為人知。然而,Qt for Python卻有著複雜的歷史,導致目前市面上是有兩套GUI套件可供開發者選擇,分別是PySide和PyQt。如果你對於相關歷史有興趣,請參考下面這部影片。 該如何選擇? 那這兩個該如何選擇呢?這不是什麼大人跟小孩的選擇,直接說我全都要這麼簡單的。先講結論,兩者都可以選擇,但我會建議選擇PySide。下面的篇幅從三個層面來簡單分析,說明為何我這樣建議的理由。 第一、套件提供來源 PySide是由Qt官方(The Qt Company)所提供的Python for Qt的套件,雖然有一陣子它的套件維護和更新不及於PyQt,但隨著Python越來越多人使用的情況下,Qt官方對Python的支援程度,也跟著其主要的C++函式庫的腳步,持續著更新及維護。所

By 三寶爸工程師

Qt Quick/QML

[Qt QML] 如何在QML裡存取C++物件的類別成員

在之前的文章我們介紹了在QML如何呼叫C++的class function,那如果我們要直接存取類別成員時,該怎麼做呢?當然我們可以直接透過呼叫class function去做到這件事,但是如果該成員變數的值有所變動時,而這個值是我們需要在UI即時呈現變化的,那該如何處理呢?簡單來說,就是再結合上一篇所介紹的,在QML裡建立與C++物件的connections,當該變數的值有所改變時,發出一個signal,其連接的slot function再去做對應的動作。但以實作上來看,可以有較簡潔的寫法,從程式碼上看不到有任何地方建立connections,但實際上概念就是透過connections去達成的,我們透過以下的簡單範例來解釋。 我們一樣先從畫面的解說和功能描述開始,如下圖,視窗中央有一段文字顯示目前count這個變數的值。另外有兩個Button,上方Button的功能是點擊後將count的值設定為3,而下方的則是將ㄙcount加10。一旦count的值改變,中央那段文字所看到的數字也會跟著改變。 Qt C++部分 我們一樣延續之前的程式碼進行修改,首先,在Controller這

By 三寶爸工程師

Qt Quick/QML

[Qt QML] 如何在QML裡建立與C++物件的connections

上一篇我們介紹了在QML中如何呼叫C++ class functions,這一篇我們講解一下,反過來如何從C++呼叫QML裡的JavaScript functions。不過這裡我要特別強調,實作上我們確實可以從C++這一層來呼叫QML裡的function,但實際上,以架構上的角度,並不建議如此設計。因為以架構上來說,UI這一層使用QML撰寫的程式碼只會有UI的相關邏輯,譬如說畫面流程的轉換,它不應該被屬於bussiness logic的C++這一層來操控。那應該怎麼做呢?最好是採用Qt裡的signal and slot機制來達到需要的結果,也就是說,以bussiness logic的角度,它只要在某事件發生時將signal發出即可,至於要接收該signal的物件就自行將connection建立起來,然後定義對應的動作(slot function)。 OK,既然在設計上不建議從C++呼叫QML裡的JavaScript functions,所以我覺得也沒有必要介紹該實作方式了。所以接下來就給一個簡單的範例程式,敘述如何在QML裡建立的與C++物件的connections。基於上一篇文章的

By 三寶爸工程師

Qt Quick/QML

[Qt QML] 如何呼叫C++ class functions

在開發Qt應用程式時,不論其目標執行環境是Desktop (Windows/macOS/Linux) 或 embedded,我都建議採用QML來開發GUI的部分。其主要的原因之一是,在程式架構上可以很容易地把畫面跟商業邏輯的部分拆開。如此一來,在UI改版的情況下,幾乎不需要修改到商業邏輯的部分,這提高了在開發及維護上的彈性和效率。 這邊提供一個簡單的範例程式,來示範一下如何從以QML撰寫的GUI來呼叫C++層所定義的class function。先講解一下畫面的部分(如下圖),視窗中間有一個按鈕,當按鈕被點擊時,等待三秒後將應用程式關閉。這邊提到的「等待三秒將應用程式關閉」,其實使用QML撰寫就可以很快速的實作出來,但因為這一篇文章主要是要示範如何呼叫C++的class function,所以我們用C++來實作這個功能。 Qt C++部分 首先,依據MVC的設計概念,我習慣會在C++這邊定義一個class名為Controller,它就是負責實作上面提到的商業邏輯部分,而UI跟商業邏輯間的溝通和交互,主要都是透過這個類別來進行。我們在Controller裡定義了一個public

By 三寶爸工程師

初學者必讀

[初學者必讀] 在開始學習之前,你應該了解的三件事

1 動機與目的 其實學習任何新事物都一樣,首先你得搞清楚你為何學習(動機),以程式語言這個領域來說,要學習哪一個程式語言並非你首先就要思考或決定的問題。一定有某個事件觸發了你想要學習的想法,這就是所謂的動機,足夠強烈的動機才可以讓自己在學習過程有所衝勁。如果你只是單純因為聽說程式語言很重要,但你不知道學了要幹嘛?那講難聽點也只是跟風,學習過程就很容易遭受挫折而放棄。 試問一下自己,覺得自己的英文能力好嗎?回想一下你在求學階段,之所以學英文是為了什麼?大多數人的回答肯定都是為了考試,對吧!?以這樣的動機,自然學習起來就會感受到痛苦多於成就感,當然,錯誤的學習方式又是另一個問題,不在此多加討論。 搞清楚學習動機後,再來你還得思考一下,你在學習後想要得到什麼樣的結果(目的),這就牽涉到你要往哪個方向學習了。舉例來說,有人想要學習開發手機App,那就得先確認你要針對Android手機還是iPhone手機。不過,也有些技術是可以在Android和iPhone裝置都可以運作的,我們之後也會花點篇幅來介紹這個部分。 再舉個例子,有些人對網站技術有興趣,想要自己架設網站,那就得先搞清楚,架設網

By 三寶爸工程師

初學者必讀

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

什麼是QML? 對很多程式語言的初學者來說,第一個遇到的問題肯定都是「究竟要從哪一個程式語言開始學起呢? 」。我只能說,要依照你的學習目標而定,這個問題沒有一定的標準答案,想學習開發手機應用程式跟想學習開發網頁應用程式的就不相同,就連開發手機影用程式也區分成是針對Android或iOS而有所不同。 我知道很多人會推薦Python作為第一個學習的語言,原因不外乎是語法簡單、應用領域廣,我個人並不否定這個說法。但你可曾想過,是否有其他語言也有類似的特點呢?答案當然是肯定的,我接下來一系列教學所使用的程式語言,QML,就是其中之一。 QML是 Qt Markup Language的縮寫,Qt(發音同Cute)是一個基於C++的開發框架,而QML是Qt所設計來撰寫GUI(圖形使用者介面)的一個程式語言,它是屬於QtQuick模組的其中一環,QtQuick模組也提供了相當多基於QML的GUI元件,方便於應用程式的GUI開發。(註:何謂框架、模組?我之後會再寫一篇文章來解釋。) QML有哪裡好?跟Python比又好在哪裡? 其實程式語言沒有所謂的好壞,根本上是無從比較的,端看你要用這個

By 三寶爸工程師