iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
生成式 AI

AI x Hardware系列 第 7

🌬️ 風中的挑戰:從積木到真實 Python,Program Manager 的第一份規格料理

  • 分享至 

  • xImage
  •  

序章:學徒的第二道挑戰

第一道料理完成後(PRD → Spec → 積木程式),我心裡有種雀躍。
就像第一次能把菜切好端上桌一樣,雖然只是小菜,但那是我的成果。

然而,師父並沒有讓我沉浸太久。

「會切菜的人很多,但能掌握火候的才是廚師。」

這句話像風一樣吹過我的耳邊。
我知道,積木程式就像調理包,雖然快速、方便,但如果要站上真正的舞台,
我必須開始學會 真實的 Python,脫離積木編輯器的保護。


第一章:PRD 的升級

這一次的挑戰不是簡單的「按下按鈕 → 顯示箭頭」。
師父給了我一份新的 PRD:

PRD 項目 說明
使用者故事 「我希望小車能自己避開障礙物,不會一直撞牆。」
需求編號 PRD-002
驅動因素 使用者需要小車在自動模式下具備基本安全性
驗收條件 小車遇到障礙物時,必須停止或繞過

這是一份「真正有意義」的需求。
因為它不再只是單純的「顯示圖案」,而是涉及到感測器輸入、狀態判斷、動作回饋


第二章:Spec 的細節

師父提醒我:

「PRD 是食材,Spec 才是料理的食譜。」

我開始把 PRD 轉換成可以執行的 Spec:

Spec 編號 條件 行為
SPEC-201 前方無障礙 小車前進
SPEC-202 前方有障礙 小車停止
SPEC-203 障礙消失 小車繼續前進

這次,條件變得複雜了。因為「有障礙 / 無障礙」不是按鈕輸入,而是感測器判斷。

在沒有真實感測器的情況下,我選擇用 按鈕模擬障礙物

  • 按鈕 A = 模擬「障礙物出現」
  • 按鈕 B = 模擬「障礙物消失」

這樣即使在模擬器裡,我也能測試邏輯。


第三章:積木編輯器 —— 調理包的便利

我先打開 micro:bit 的 MakeCode 編輯器,像上一道料理一樣,用積木拼出流程。

  • 當按下 A → 設定狀態 = 「有障礙物」 → 停止小車
  • 當按下 B → 設定狀態 = 「無障礙物」 → 小車前進

https://ithelp.ithome.com.tw/upload/images/20250921/20103824eTDph2cbJ8.png

這樣的積木程式,就像調理包一樣:快速、可食用,但我知道,這還不是「真正的料理」。
因為每次邏輯要修改,我都得重新堆積木,效率並不高。


第四章:當積木變成程式

我切換到 Python 模式,MakeCode 幫我自動生成了程式碼。

obstacle = False

def on_button_pressed_a():
    global obstacle
    obstacle = True
    basic.show_icon(IconNames.NO)
input.on_button_pressed(Button.A, on_button_pressed_a)

def on_button_pressed_b():
    global obstacle
    obstacle = False
    basic.show_icon(IconNames.YES)
input.on_button_pressed(Button.B, on_button_pressed_b)

def on_forever():
    if obstacle:
        basic.show_string("STOP")
    else:
        basic.show_string("GO")
basic.forever(on_forever)

一開始我心裡竊喜:「啊,這不就是 Python 了嗎?」

但師父搖頭:

「這還是調理包的味道,能吃,卻不算你炒的。
真正的 Python,就像你自己下鍋,沒有保護欄,沒有捷徑。」

我這才明白:

  • 自動生成的 Python → 其實仍然依附積木,可以隨時切回去。
  • 真實的 Python → 不能逆轉回積木,必須自己掌握結構與邏輯。

第五章:真實 Python 的起手式

師父說:「寫程式,先要會下鍋。」
對 Python 來說,下鍋的第一步就是 起手式。

一個最基本的 micro:bit Python 程式,通常會長這樣:

from microbit import *  # 匯入 micro:bit 函式庫

while True:  # 主迴圈,永遠執行
    display.show(Image.HEART)  # 顯示愛心
    sleep(500)                 # 停 0.5 秒
    display.clear()            # 清除畫面
    sleep(500)                 # 再停 0.5 秒

這就是「真實的起手式」。有幾個關鍵:

  • from microbit import * → 就像打開瓦斯爐,讓你能使用 micro:bit 的所有功能。
  • while True: → 表示「永遠持續執行」,相當於積木裡的 重複無限次 (forever) 迴圈。
  • display.show()控制顯示,類似積木裡的「顯示圖案」。
  • sleep(500) → 程式暫停 0.5 秒,就像料理要停火一下。

這樣的程式,已經無法再轉回積木
它是真正意義上的 Python 程式碼


第六章:把避障邏輯寫進真實 Python

有了起手式,我開始動手寫避障小車的邏輯。
這次不用 on_forever,也不用自動產生的函式,
而是自己動手,像廚師一樣掌握火候:

from microbit import *

# 狀態變數:是否有障礙
obstacle = False

while True:
    # A 鍵 = 模擬障礙物出現
    if button_a.is_pressed():
        obstacle = True
    
    # B 鍵 = 模擬障礙物消失
    if button_b.is_pressed():
        obstacle = False

    # 判斷狀態
    if obstacle:
        display.scroll("STOP")
    else:
        display.scroll("GO")

這一刻,我第一次感覺到程式真的「在我手裡」。

沒有積木幫我兜底,沒有調理包,
只有我和螢幕上的字母,一行行對話

當我按下 A,看到畫面滾動「STOP」;
當我按下 B,顯示「GO」時,
我知道自己已經邁出了 學徒到廚師 的一步。


第七章:模擬器與硬體驗證

我先在模擬器裡測試:

  • 按下 A → 螢幕滾動顯示 STOP
  • 按下 B → 螢幕滾動顯示 GO

接著,把程式下載到實體 micro:bit 裡測試,效果與模擬器一致。

這一刻,我覺得自己真的「煮了一道完整的料理」。


第八章:廚師修煉的體悟

回顧這次挑戰,我明白了:

  • 積木程式:就像調理包,能快速理解流程,適合學徒練習。
  • 自動轉換的 Python:像是料理機幫你代炒,能吃,但沒掌握。
  • 自己寫的 Python:才是真正的料理,火候由自己控制,邏輯也更清晰。

而這種能力,正是 Program Manager 需要的。因為當工程師交付一份程式時,我能看懂其中的邏輯,甚至指出哪裡可能會出錯。


結尾:下一道特級料理

完成第二道挑戰後,我知道,程式邏輯我已經能獨立掌握。

但師父的話再度響起:

「廚師不只是會煮飯,還要會設計菜單。」

下一步,我要挑戰的不只是寫程式,而是 設計完整的 PRD 與 Spec,並與 AI 協作,讓我能成為一位能領導全局的 Program Manager

這將是我第三篇的故事:《與風同行》。


🎯 第二篇重點整理

故事核心:從「積木」到「程式」的轉變

  • 學徒從積木(調理包)走向真實 Python(掌握火候):從簡單的拖拉進化到掌握實際程式語言。
  • PRD & Spec 不再是玩具:它們成為能精準描述避障小車行為的規格文件。
  • 第一次真正體驗到「程式邏輯在自己手裡」:感受到自己掌控程式流程的力量。

實作練習

  • 積木模擬:用按鈕 A/B 模擬感測器,判斷是否有障礙。
  • Python 程式:手寫出「判斷障礙 → 停止 / 前進」的核心邏輯。
  • 測試方式:同時運用模擬器實體 micro:bit 進行驗證。

學習價值

  • 學會從積木自動生成的程式,順利過渡到自己手寫 Python
  • 開始具備工程邏輯,能看懂程式碼並有能力發現潛在的設計缺陷

上一篇
🌬️ 追風的學徒:從 PRD 到程式落地,我的第一道 Python 小點心
系列文
AI x Hardware7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言