有人對 Swift/SwiftUI 程式設計有興趣嗎?

我一直在思考一堆問題..
打破才能創新
我看到很多模板的教育
從小學就是背多分?
於是看到很多人,很多老師,很多拿到資源的都在抄襲,最後產品都一樣都沒價值
什麼Line等等,不是沒人做就是一群人做的通訊軟體

我非本科系,我全部自學,我每天在想新的方法論
我是偏科,拿不到那些什麼政府資源,拿不到那些拿外國改一改Paper work就有錢領所以需要真本事

你的課程一點意義都沒有,也就是30年前的教科書這樣寫,20年前的教科書也是這樣寫,10年前的教科書還是這樣寫。也就是如什麼C#從1.0到2.0到3.0等等你會發現內容差不多,市售書10本8本都一樣。
另外翻過來說,程式教育的目的是什麼?我去山上教學生什麼都沒有,網路很差,電腦很爛,學生素質跟家庭?
基本教程式什麼迴圈等等由學校正規老師去教即可,不用叫什麼小學幾年級就塑模

我的教法是什麼是程式,為什麼需要程式,他就是解決生活面對的事,她是一種思維。然後告訴同學什麼亮燈,亮白色..最後出題讓她們寫紅綠燈程式。我教的事看得到用的到實際的東西。現在教育寫Hello,寫三角形到底幹什麼?價值是?我也丟專案給航太系三角行式,物體位移變大變小轉彎就是什麼都寫不出來。不是飛機都可以天上飛,不是工程數學都考100分。也就是台灣的教育都在背。真的用時沒有一招拿的出來。如果國小就這樣教他們的思維就跳脫不出去。而且通訊軟體的通訊協定也不是這樣,他是由很多發行訂閱通知非常多資料結構構成
雪白西丘斯
感謝提供寶貴經驗,小弟出發點只為在暑假教自己女兒,覺得值得分享,因此野人獻曝,不值一哂,見笑了。
#8. Swift Playgrounds: 學習程式設計1

如果有下載 Swift Playgrounds 的同學,千萬不要錯過裡面的遊戲,建議從「學習程式設計 1」開始,我女兒花三天就全部過關,在最後會教 for 迴圈來破關,剛好跟第2課呼應。


不過,遊戲的過程跟我們的課程順序沒有關聯,兩者都可以各自學習到程式設計的邏輯。
雪白西丘斯 wrote:
Swift Playgrounds...(恕刪)


遊戲是最好的教育方式

要吃牛肉不一定要養頭牛

這種互動教學很多,現在人有很多線上互動課程可以用
以前說讀書,會讀書,不斷地學校讀書拿學歷
讀書其實有形無形不只是課本一些數位媒體人與人的互動都是,怎麼快速找到要的能力也是重點課程之一

遊戲教學有一個壞處,也就是程式是解決人遇到的問題並不是只用來玩.
我用STEAM平台教,丟給學生玩,現在小朋友都很聰明很快就破關
但他們可能覺得很好玩,誰最快破關,他們可能沒思考if loop 等實際含義

我喜歡用實際案例去驗證,比如說紅綠燈,平交道,電視,冰箱等看得到,摸得到且是實際人需要的當成隨堂測驗,不會叫他們去Show 什麼 Hello World,什麼畫愛心的

也就是程式是解決問題領域的,不是只是拿來技術展示的,就跟研發展一樣,你的產品解決一項別人的問題別人會買單,你花一個很貴人家看不懂或根本就沒有這種問題的技術展示就沒用
感謝提供寶貴經驗,小弟出發點只為在暑假教自己女兒,覺得值得分享,因此野人獻曝,不值一哂,見笑了。

有心很重要

但~我真的想超英趕美,怎麼想突破..我也想怎麼教新進同仁,怎麼讓整個台灣等軟體工程更強
簡單的說如果你用if else loop 從頭寫到下,坦白說五個階層就非常難理解,坦白說你寫2000行就差不多
你沒有新方式,你怎麼寫2000萬行很容易擴充很容易維護

我爸是建築工人,簡單的說蓋10樓以下的房子,只要2年的師父不用看設計圖大家都能蓋,但要建101大樓就不是那麼容易,可以畫設計稿的建築師沒有幾個人且畫出來的都是非常有價值的

台灣軟體工程就是拿外國Open Source API 敲敲打打改改,組積木隨便拼一拼而已,很多細節就不說了

至於國小教,我覺得,現在小朋友也太可憐了,以前國中課程放在小學就教,英文,數學等等,也就是大人的無能卻要期待小孩去,最後大家書讀很高,卻都不知做什麼,薪水都很低
所以什麼if else loop 還是由正規的教育體系去教
#9. while 迴圈

在第2課最後面提到的問題,1加到100的總和是5050,但是從方程式y = x來算三角形面積計算,卻只有5000,為什麼多出50? 這是因為1加到100並不是直接計算三角形面積,而是計算100個長條形的面積,也就是說:

1 + 2 + 3 + ⋯ + 100
= 1x1 + 2x1 + 3x1 + ⋯ + 100x1 (即每個長方形高=y, 寬=1)

所以每個長條形會多算0.5的面積,100個長條形剛好多出50的誤差,如下圖。


微積分的原理就是將長條形再細分,逐漸減少誤差,慢慢就趨近於實際三角形的面積。例如我們如果將長條形的寬從1縮短為0.5,誤差就會減半,如下圖。


這樣的面積和,相當於以下算式:

0.5x0.5 + 1.0x0.5 + 1.5x0.5 + 2.0x0.5 + ⋯ + 99.5x0.5 + 100.0x0.5

要如何用迴圈來計算呢?這次我們不用 for 迴圈,改用 Swift 另外一種 while 迴圈:

// 1-2b while loop
// Created by Heman, 2021/07/08
let 寬 = 0.5
var x = 0.0, y = 0.0, 總和 = 0.0

while x < 100.0 {
x = x + 寬
y = x
總和 = 總和 + y * 寬
print(x, 總和)
}
print(總和)

因為寬度(x軸的間隔)是固定的,因此用 let 設為常數。x, y以及總和設為變數,初始值歸零,這裡要注意用 0.0,代表實數,而不是整數 0。

接下來進入 while 迴圈:

while x < 100.0 { }

意思是「當x小於100.0時,執行 { } 裡面的指令」,注意用實數 100.0,不能用整數 100。計算結果總和是5025,誤差從50減少為25!同理,如果將程式中常數「寬」改為0.1,誤差又更小了,甚至改到0.01以下(但不能是0.0),直到誤差可以接受(例如誤差小於1)為止。


同樣的原理可以計算任何曲線的面積(近似值),例如下面的拋物線(二次方程式: y = 25 - (0.2*x - 5)2),如果要計算x從0到50範圍內,曲線與x軸所圍的面積(近似值),同樣可以用 while 迴圈來解,就當成作業。
#10. 迴圈的力量

迴圈是程式語言中最強大的指令之一,在迴圈中不管是多複雜的運算,我們想讓電腦執行100次或100億次,也不過是更動一個數字的差別而已。

不過,對初學者來說,撰寫迴圈很容易出錯,以下三個範例程式都有些「小毛病」(稱為bug臭蟲),請動手試試看,你能夠找出bug嗎?

// 1-2c Debug exercise #1
// Created by Heman, 2021/07/09
// 求1到100整數和
var 總和 = 0
for i in 1...100 {
總和 = 總和 + i
}
print(i, 總和)

1-2c: 還記得什麼叫「迴圈參數」嗎?最後一行會造成什麼錯誤?

// 1-2d Debug exercise #2
// Created by Heman, 2021/07/09
let 寬 = 0.5
var x = 0.0, y = 0.0, 總和 = 0.0

while x < 100.0 {
y = x
總和 = 總和 + y * 寬
print(x, 總和)
x = x + 寬
}
print(總和)

1-2d 程式可以執行,但是結果差一點點,不盡人意,為什麼?因為迴圈最後一次執行,x = 99.5時, 因為我們先加總,再遞增x,所以下一次 x 變成100.0 時,已經不再是 x < 100.0,達成脫離迴圈的條件,結果總和就少加了一筆。

這種稱為「邊界條件(Boundary condition)」的問題,所謂「邊界條件」指的是第一次進入迴圈以及最後一次要脫離迴圈的條件,這會影響 { } 裡面程式碼的順序或邏輯,所以寫迴圈時務必要檢查邊界條件的情況。

// 1-2e Debug exercise #3
// Created by Heman, 2021/07/09
let 寬 = 0.5
var x = 0.0, y = 0.0, 總和 = 0.0

while x < 100.0 {
y = x
總和 = 總和 + y * 寬
print(x, 總和)
}
print(總和)


1-2e 程式可以執行,但是差了關鍵的一行,結果會造成很大的問題,稱為「無窮迴圈」,也就是說,永遠達不到脫離迴圈的條件,在此例中,脫離迴圈的條件是 x 大於或等於100.0,但是 x 沒有遞增,就永遠不會大於或等於100.0。

這是 while 迴圈以及另一個 repeat 迴圈特別要注意的問題。for 迴圈因為必須先界定好範圍,比較安全,不會造成無窮迴圈。

可見迴圈雖然是重複相同的工作,但其實每一次重複都有一點點差異,而且這點差異,必須能夠累積到達脫離迴圈的條件,否則就會造成無窮迴圈,變成瞎忙空轉。

這個邏輯其實跟宇宙運行的道理一模一樣,太陽雖然每天都是從東邊升起、西邊落下,但其實每天角度都有點微小差異,就是這點感覺不到的差異,造就地球的春夏秋冬以及豐富的生態。難怪古人說:「天行健,君子以自強不息」,我們每天學點新東西,多一些小改變,就能讓自身變強變好。

所以,下次如果有人對你說:「你這個別人已經做過了」、「你這個會失敗」、「你憑什麼跟別人不一樣」⋯⋯等等,不要太在意,答案就在迴圈裡:失敗就再重複一次,只要一直累積微小的差異,就會做出不一樣的東西。不用怕,年輕就是有失敗的本錢。

感谢分享
卡位期待大作
我只是想表達...對於我(們)這些想學卻連門口都找不到的人,樓主的願意付出讓我感佩萬分
或許這裡能人輩出,但是希望樓主能夠忽略那些冷言冷語,我答應您會把您的分享看到最後的
萬分感謝
雪白西丘斯
您的支持太寶貴了!雖然我知道大部分學生很少問問題或發言,但如果一直沒有人支持與回饋,久了我難免也會開始懷疑人生。
期待大作😍😍😍
#11. 資料類型(Data Type)

在範例1-2b中,我們提到 x, y 的初始值必須為 0.0,不能用整數 0,為什麼呢?

因為在Swift程式語言中,對「資料類型」有較嚴格的規定,所謂「資料類型(Data Type)」是指資料的分類,也可稱為「資料型態」,在某些運算時,不同的類型不能混用。

Swift的資料在用 var/let 定義時,就必須決定「資料類型」,而且之後不能再改變。

Swift 有哪些資料類型呢?在第一單元的課程中,我們先學基本的5種資料類型,包括字串(String)、整數(Int)、浮點數(Float)、實數(Double)以及邏輯(Bool, 或稱布爾、布林)。

Float 與 Double 兩種類型其實都是帶小數點的實數,Float是32位元,Double是64位元(位元長度是Float兩倍,故稱Double,可精確到小數點以下15位數,比奈米級更精確,Float精確度則只到小數點6位)。
  • String 字串類型
  • Int 整數類型(含正負值),在64位元電腦上最大可表示19位數
  • Float 浮點數類型(32位元)
  • Double 實數類型(64位元)
  • Bool 邏輯類型(或稱布爾類型),只有兩種值 true, false
在命名規則上,如果用英文名稱的話,習慣上「類型名稱」的字首要大寫,常數、變數或下一課的函式等英文名稱,字首小寫。也就是說,如果我們日後看到一個字首大寫的Swift關鍵字,那八成是一種資料類型。

資料的宣告與命名習慣舉例如下:
 let pi: Double
var r: Int
var myName: String
var 對話: String

注意這裡變數名稱與類型名稱之間的冒號(:),在 Swift 裡面有「屬於」「從屬」的意思,如
let c: Int
定義常數c屬於整數類型。

如果我們定義常數或變數時給定初始值,則根據初始值,Swift可以自動判斷類型,這時「屬於某類型名稱」可省略掉。例如:
 let pi = 3.1416
var r = 200
var myName = "Angela"
var 對話 = "Hi there! This is Angela."

注意其中 let pi = 3.1416,因為我們目前用的電腦大多是64位元,所以Swift在自動判斷實數類型時,會採用 Double 類型,如果用舊型32位元電腦,則自動判定為 Float 類型。

如果要寫一個很大的數值,可以用 e 來表示10進位的次方,例如亞佛加厥數,可以寫成 6.022e23 表示 6.022 x 1023,會自動判斷為 Double 類型。
 let a = 6.022e23

當資料進行 + - * / 等運算時,不同類型之間不能混合運算,這是Swift語言比較嚴格的規定,如 Int 與 Double 不能直接運算,甚至包括 Float 與 Double 之間也不能混合。

如上例 pi 是 Double 實數,r 是整數,如果要計算面積:
 let pi = 3.1416
var r = 200
var 面積 = pi * r * r

則會出現「類型錯誤」,如下圖。



這時候怎麼辦?就必須人工進行類型轉換,通通轉成Double實數類型,或是通通轉成Int整數類型,如下例:
 var 面積 = pi * Double(r) * Double(r) // 定義面積為Double實數類型

var 面積 = Int(pi) * r * r // Int(pi) ==3,會截掉小數點(無條件捨去)

注意類型轉換後,並不影響原來的變數的類型,而只是取其值來轉換。所以 pi 仍是實數 3.1416,r 仍是整數 200。

這裡的 Double(r) 看起來好像是要將 r 倍增("Double"是兩倍的意思),但其實是要取 r 的值轉換為 Double 實數類型。這是 Swift 語言稍不完美的地方,但這不能歸咎Swift,因為幾乎所有現代程式語言,都繼承了 Double 類別名稱。

字串類型的資料值(稱為value或literal)必須用雙引號 " " 括起來,其中有個特殊的用法,就是倒斜線 \ 代表要進行特殊轉換,包括:
\t 對齊到下個定位鍵 (Tab)
\n 換行
\() 取用()內的變數值或運算結果


例如
 var myName = "Angela"
var myAge = 16
var 對話 = "Hi there!\nThis is \(myName).\nI'm \(myAge).\n"

print("對話")
print(對話)

注意上面的「var 對話」中, \(myAge) 會自動將整數16轉換成字串"16"。

資料類型的觀念在 Swift 程式中非常重要,但也是初學者最容易混淆的部分,可以在Swift Playgrounds上面多做實驗,嘗試錯誤。
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 9)

今日熱門文章 網友點擊推薦!