第1279回-運算思維與程式設計-吳紹裳-1-序言

5/19週六,國中會考的第一天,早上先去逛菜市場,中午去考場看看女兒的狀況,感覺還蠻穩定的。回家後13:30 在FB上看到吳紹裳老師臉書貼文

  • 將自己程式設計的學習心得,逐一分享給大家!這是一系列的開端,從序言開始,分享我對於運算思維、程式設計與系統分析的想法,並逐步進入主題。

我按了影片連結去觀看,吳紹裳-從運算思維與系統分析談起-1-序言 - YouTube,原本是躺在飄浮式涼椅上悠閒的閉目聆聽,但聽著聽著不禁開始正襟危坐地聽,到後來則是跪著聽,哇!真是天神傳福音啊!對於程式教育的前世今生、還有學習階段和工作階段的連結,都有通透的見解!

由於我比較沒有辦法用聲音來思考,我得看著文字、看著上下文,才比較能夠吸收吳老師的功力。因此我想打逐字稿。

我首先想到的是,用 Chromebook 播影片,然後在手機上開google 文件,把手機靠近小筆電,語音辨識做成文字檔

後來又想說也可以直接在 YouTube 上做字幕,就像我在第1262回-學習就像終身幼兒園-1-導讀 所使用的做法一樣。
  1. 從youtube 下載影片
  2. 上傳到自己的youtube
  3. 新增字幕 => 自動從語音辨識產生字幕
  4. 下載英文字幕 srt 檔
  5. 用純文字編輯器打開英文字幕 srt 檔,一段一段複製到 google 翻譯,把中文翻譯複製到英文這邊來,修改翻譯內容,變成雙語字幕。
  6. 上傳雙語字幕
  7. 調整字幕出現的時間點
可惜這個想法是失敗的,因為目前在 YouTube 後台中,只有英文語音可以自動產生字幕,中文還不行。

沒關係先打逐字稿吧!但好久沒打了不知道現在有沒有簡便的方式?而且又要能在 Chromebook 上做,上網搜尋與評估之後,我決定使用開源軟體 oTranscribe 來打逐字稿
早上九點多稍微試做了一下,覺得還蠻方便的,不用在兩個視窗之間切來換去,兩隻手都在鍵盤上就可以搞定打字和播放暫停影片的動作,因為答應老婆要去山上玩,所以十點先匯出存檔。

中午吃過飯後用大約半小時完成最後的部分,把google 語音辨識的文字修改一下,總比從頭到尾自己打字快!

後來我也用臉書私訊吳老師徵得同意,所以我把逐字稿刊登在此:

00:02 
大家好!
自從歐巴馬在數年前提出程式設計的重要性,
並且要把課程向下延伸到國小、甚至幼兒園階段,
接下來,全球就如火如荼的
想要在程式設計這一塊領域當中發揚光大

00:25 
事實上,計算思維跟程式設計,
這兩者之間有什麼樣的關係呢?
我們強調運算思維是要去解決問題的能力,
程式只是解決問題的一種工具,
這兩者之間我們要怎麼樣學習,讓它並行不悖呢?

00:49 
因此我打算在未來的日子裡,
慢慢的來分享,
個人對於運算思維與程式設計的一些觀念以及想法,

01:05 
我打算要做的課程,大概有這些:
我們可以從算思維的觀念、能力來談起,
然後再來學習所謂的程式「六力」
利用 Scratch來完成這個程式「六力」,
由於 Arduino 和 Micro:bit 是最近很夯的物聯網,
我們也會提到這一塊
Scratch 積木式的程式語言
畢竟有它的限制性
所以我希望能夠盡快的脫離 Scratch
而回到真正的程式語言Python

01:51 
完成了前面這幾個階段的課程之後呢
我想要用一些實際的案例
例如
用 Pygame 來寫遊戲程式
用 Django 來寫一個網頁程式
甚至做一些繪圖、圖形、視窗介面的處理
至於這些課程到時候會發展成什麼樣子
我想就邊做邊看吧

02:16 
首先我們來看看運算思維
在今天的課程裡面
我並不打算談這個
因為你只要打開Google的瀏覽器
打上運算思維四個字
就會有一系列的文章
這個我們留待下一個單元裡面再來討論

02:43 
我反而要討論的是
在運算思維沒有出現之前
我們是怎麼樣來用電腦來解決問題的
事實上電腦程式設計並不是最近幾年才出現
四五十年前就已經有程式設計了
在當年我們沒有運算思維這個名詞之前
我們通常採用的就是所謂的系統分析與設計的一個概念
今天我們先打算稍微說明一下系統分析與設計的一些想法
下一次你再去配合運算思維
你就會發現這兩個之間其實是有一定的關聯性的

03:31 
所謂系統分析
一開始我們一定是要確立
我們到底想要做什麼樣的東西
我們需求是什麼
並且把他進行一個的實體描述
比如一家公司要做進銷存管理系統
我們可能確定好這個需求之後
甚至還要去跟每一個單位的員工訪談
跟會計單位訪談
最後確立出我們需要的東西
並且將這些東西進行實體模型圖的建立
比方說這些單位有哪些關聯
這些資料要從哪一個地方流到哪一個地方
這些資料跟實際的單位又有什麼樣的關係
最後把這些資料進行所謂的「正規化」的作業
事實上這個就是傳統式的關聯式資料庫的做法
我們會建立資料欄位、建立資料表
了解資料跟資料之間的關係
然後再考慮我要建置在哪一個系統之上
我要用哪一種程式語言
我的架構是長什麼樣子
我的功能結構圖是長什麼樣子
全部做完之後
才是真正進行程式開發跟除錯的動作

04:56 
程式開發有很多種語言
用C、用 JAVA、用 Python
甚至用最近的Go、KOTLIN
這些都是可以做程式開發的
我們會透過結構化的設計、物件導向的設計等等
甚至考慮到使用者的介面、網頁的介面
跟一個單純的應用軟體介面是有不同的
甚至,如果自己沒有能力開發
是不是可以委外呢?

05:27 
就好像一個建築師
他畫好建築圖之後
他也會找優良的營造廠商來幫他去蓋這個房子
這個就是委外的概念
當然做好之後
我們會進行效能的評價
如果發現哪些地方不好
我們可能這邊要再重新來一次
不過由於前面的這些動作
看起來好像跟程式開發一點關係都沒有
尤其是國內
長久以來都是一個工程師
程式設計師
包辦所有的工作
因此在系統分析這一部份呢
可能是大家都比較弱的一環
但是透過上面的說明
大家應該可以了解
系統分析不等於程式設計
因為在系統分析的過程當中
我們並沒有真正去考慮到
程式要用哪一種語言
程式要設計成什麼樣子
而是分析完畢之後
才來進行程式設計的動作

06:35 
同樣的道理
運算思維也不等於程式設計
運算思維是建構於解決問題的思考模式
透過問題的確立之後
去分析這個問題
需要哪些解決步驟
需要怎樣子的演算法
需要怎麼樣的找出它的規律性
去重構你的方式
這些不是程式設計
只是運算思維完成之後
當我想法想完全之後
才用某一種程式語言來完成我的想法
因此運算思維是屬於高層
這裡講的高層不是指能力
而是指程式設計的外圍
先想好再執行

07:28 
現在問題來了
是雞生蛋還是蛋生雞?
也就是說
要先有程式設計的能力
才能學習運算思維
還是先有運算思維的能力
才能學習程式設計?
一個完全不懂材料工程、不懂流體力學、不懂建築工學的建築師
怎麼可能畫得出建築圖呢?
反過來說
一個泥水匠
他知道這些材料
知道這些工法
但是他又沒有足夠的能力
他就畫不出建築圖來
所以運算思維重要,
還是程式設計重要?
其實我覺得這兩個都重要

08:20 
基本上如果能夠擁有程式設計的能力
你可以更了解運算思維
一個完全不懂程式設計的人
有時候運算思維那種觀念想法
他很難接受
因為他並沒有程式設計的能力
所以他沒有辦法用電腦的方法來思考
反過來說如果完全不去學程式設計
完全學運算思維
也學不下去,為什麼?
因為你根本不知道電腦是怎麼樣思考的
你怎樣去規劃

08:57 
因此,運算思維只是一個概念
程式設計是一個完成這個概念的能力
兩個是相輔相成的

09:09 
程式語言當中
大家可以看到2017年IEEE的程式語言排行榜 
JAVA、C、Python、C++、JavaScript
程式語言非常的多
但是不管是用哪一種語言
其實他運算思維的概念是一樣的

09:32 
我們運用程式語言完成一件工作
去完成這個工作
是程式語言的目標
怎麼樣去完成
可能就是運算思維所要培養的能力了

09:55 
程式設計有它一定的基礎跟方法
程式設計裡面
我個人認為有「六力」是非常重要的元素
至於是哪「六力」
「六力」跟運算思維又有什麼樣的關係呢
我想
今天就先到這裡為止

10:13 
我們下期再會
謝謝大家

留言