在寫電子書過程,感謝很多前輩提供經驗記錄在他們的部落格上,減少很多試誤情形,值得參考的文章有默者的 如何自助出版電子書 (2):ISBN申請與國圖送存 和圓糰的 【記事】菜鳥向:手把手教你寫一本電子書!── 看完後,你在不懂我也沒辦法了!
2025年2月12日 星期三
ISBN 申請與國圖送存
在寫電子書過程,感謝很多前輩提供經驗記錄在他們的部落格上,減少很多試誤情形,值得參考的文章有默者的 如何自助出版電子書 (2):ISBN申請與國圖送存 和圓糰的 【記事】菜鳥向:手把手教你寫一本電子書!── 看完後,你在不懂我也沒辦法了!
2024年5月26日 星期日
數學學習的想法
2024年4月14日 星期日
重力加速度 g 與圓周率 𝞹
27 = 01 10 11b 十進位轉二進位
(2a+b) b
__1__0__1____
/ 01 10 11
1________ (2x 0 + 1) x 1 = 1
10 11
0_____ (2x 11 + 1) x 1 = 111 > 10
10 11
10 01___ (2x 100 + 1) x 1 = 1001 < 1011
10
從上面算是可以看出整數 27 開根號可得整數 5 餘 2,這方法比泰勒展開簡單多了,效能又好。2024年3月17日 星期日
2023年12月25日 星期一
資工系的功課
資工系的專業科目,幾乎每一科都要寫程式,Andy 就讀交大資工系之後,大二下修一堆需要寫程式的專業科目,開始後悔了。
2022年11月25日 星期五
從黃武雄自傳看如何學數學
前些日子在網路上看到一篇台大數學教授黃武雄先生自傳,刊登於數學傳播 42 卷 1 期,文章中有兩個段落關於數學學習值得提出分享。
一個是第 5 頁的 (3.5)「起惑點」,數學的學習像是石頭一塊又一塊疊上去,你某個單元沒有搞通,基礎就會不穩固,要怎樣才能繼續向上進步?就是回到你不懂的地方「起惑點」從新開始,因此除了極少數的人,最後幾乎都可以弄懂,每個人資質不同,天才的人很快學會,大鳥慢啼的要久一點時間學會,只是學校因進度安排無法等待所有人跟上,所以容易造成落後者落後太多而放棄。如果你有時間又想重獲數學能力,就是回到「起惑點」重新出發。
另一個是第 13~15 頁的 (7.3) 教材擺盪,一份好的教材應該淺中深三種程度內容並列,並標註內容難度,不同程度的人可以根據自身狀況學習,這樣不會讓程度佳的同學覺得枯燥沒挑戰性,程度差的不會說怎麼沒有一個看得懂,現在我們的學校教材基本上放中等程度的內容,然後刪除較艱澀的部分,對程度差的同學沒有補救內容,每次教材改編總是在難易之間擺盪,只治標不治本。這我深有同感,小時候家中有很多書籍雜誌,很多我都看不懂,但是我可以任意取之閱讀,久而久之慢慢理解內容,最後都成為我未來知識的種子,所以教科書內容難易並呈給讀者自己選擇是比較好的。
2022年10月24日 星期一
再談 APCS
每年底學測前,總是興起準備 APCS 考試的話題,因為近日看到金門大學陳鍾誠教授挑起這議題,想說說自己的看法。先說,我是已經 36 年程式設計資歷的工程師,相當清楚如何入門學習程式設計、遭遇困難問題如何逢凶化吉,以及程式工作的職涯發展,另外,自己的小兒也正在讀交大資工,在此分享我們的經驗。
我的心得是,一輩子走程式設計這條路,不是人人都有辦法一直走下去,因此應該要先審視自己的個性,程式人通常有以下特點:
一、愛好自學 ─ 電腦科技日新月異,三不五時會有新技術、新語言、新工具出現,因應需求有時被迫更換使用新東西,非愛好學習者,通常承受不住這種壓力,我寫了三十多年程式,到現在還是經常在學東西,不只程式語言,更多的是跟程式無關的,因為有時解決問題的靈感來自其它領域的知識。學習方法不外乎老師教授以及自己學習,老師教的最大好處,快速有系統地把知識傳授給你,但是你的腦子能否快速吸收這些大量知識,那又是另一回事,很多知識是需要基礎的,如果少了這些先備知識,是無法充分理解應用的,況且有些問題是不明的,因此自己要訓練自己有自學能力,能夠成為自己的老師,分析問題原因,可用的對策有哪些,否則卡關無法突破,你就會想要轉職,個人認為時間花在補習上,你就少了時間訓練自學。
二、理性思考 ─ 越理性的人,邏輯思路通常越清晰,邏輯越清晰,寫出來的程式出錯的機會就越少,品質也越好。程式除錯時也非常需要縝密的抽象思考,甚至要有觀察力、想像力,當程式出現異常時,我會先觀察問題現象,根據線索釐清問題,想像以及假設程式處在某種狀況才導致問題,從這些地方下手多數可以迎刃而解,當然也曾遇過要同時改善三五個地方才能解決的,甚至也碰過不可能的任務 ─ 控制不可控制的系統,這些都需要像偵探般細心判案才能解決問題,個人覺得棋奕類的遊戲是訓練抽象思考很好的工具。不善於理性思考的人,寫出來的程式出錯率極高,光除錯就把自己搞死了,你就不會想當程式設計師了。
三、耐性沉著 ─ 人非先知聖人,程式總有寫錯的時候,此時需要除錯,這也是最考驗耐性的時刻,如果你能一邊寫一邊測試,那是最好的,因為可以容易立即發現錯誤並修正它,不過這也會造成進度緩慢,因為有些程式一直被重複測試浪費時間。那一次全部寫好再測試不就好了?如果這麼做,複雜系統可能無法立即發現錯誤點在哪裡,需要程式碼一個區塊一個區塊檢查,有時還看不出問題點,學生時代,我曾用一個禮拜時間寫出約 1000 行組合語言程式碼,結果用三個禮拜的時間除錯,經過那次教訓後,就採用邊寫邊測的方式設計程式,雖然程式設計進度不快,但是成功率提高很多。因此耐性沉著是程式人非常關鍵特質,少了它,你撐不久。
2022年8月21日 星期日
2022年5月25日 星期三
2022年4月15日 星期五
2022年4月5日 星期二
蕃茄工作法 (Pomodoro)
許多人有玩手機的習慣,然後就影響了正事,這裡提供一個時間管理的方法,稱為蕃茄工作法,以半小時為一週期,工作 25 分鐘然後休息 5 分鐘,這五分鐘你可以喝水、上洗手間、回 E-mail 或 LINE,這樣可以確保正事都會做到,因為一個人要長時間專注工作是很困難的。所以上班八小時相當於有 16 個工作時段,把每天工作分 16 個小任務,這樣工作和休息都有顧到。同樣的學生也可以把讀書和寫功課以這方法安排進度。
2022年2月16日 星期三
2022年1月11日 星期二
職業證照
2021年12月30日 星期四
解決問題的方法
在 FB 學生課業或是程式社群,總是會看到一些人貼文尋求協助,但是看到他們自己明知道自己的問題所在,卻不願直接面對處理,而是尋求神奇救援,根據個人經驗,這是徒勞無功的,自己從事研發工作近三十年,遭遇過的難題不計其數,但是都一一破解度過難關,能存活到現在,表示自己的方法是有效的,就盡己所知記錄下來。
先看一個尋求神奇救援的例子,
XXX 哪裡可以學得好,網路都是英文資源,中文資源普遍版本太舊,一模一樣的程式碼都會顯示錯誤,英文我超級爛,拜託各位程式高手幫幫我吧!
雖然發文者不至於躺平不想努力,但是不去想辦法克服已知的問題,這樣的求助貼文僅能抒發心情,它是無法徹底解決難題的,幫得了這一次,以後的問題呢?沒有人可以幫你一輩子。那怎麼做才有效呢?
首先要認知到,解決事情是要付出代價的,無論是金錢、時間、健康或是其它,當自己處理事情的能力變強時,所需付出的代價會變小,就好像一位富翁買一台車子,對他而言只是一筆小錢,但是對窮人來說,可能是畢生積蓄甚至買不起,所以累積自己的處事能力是很重要的。
再來看自己手邊的資源、時間,有多少能力做多少事,不要過度擴張,例如中學生參加全科補習搞得每天睡眠不足,做事看長遠,短期衝刺還可以,如果是長期那必會付出巨額代價。
學習新知識或技術是可以增強自己的能力,所以務必投放學習時間,即使學校畢業仍應繼續,也就是活到老,學到老,目前我的學習重心是放在英文和程式語言,個人覺得投身於創作教育是可以推動社會進步,因此會繼續朝這方面努力。
創作或專案進行過程中,總是會遭遇各式問題,那可以將它們列出來,容易處理的可以先搞定,大項目可以分解成小項目,有些事是要排先後順序,一些事沒搞定前,某些事是沒辦法進行的,就像蓋房子,一樓沒蓋好之前,是不可能蓋二樓的,而有些事可以同步進行節省時間的,因此要分辨狀況處理,如果想獲得最佳效率,那需要仔細思考規劃,必要時滾動式修正,一開始可能因為沒經驗而規畫不佳,實施後檢討修正讓工作或學習漸入佳境。
2021年11月28日 星期日
補習和睡眠
經常看到中學生在 FB 社團發問補習和睡眠問題,這兩件事確實是學生時代很重要的事情,當你有這方面的困擾時,怎樣是有效的解決方法?
先談補習問題,它或許可以讓你短期內獲得佳績,但是一直依靠外力輔助是會上癮的,倘若學習的能力沒有被訓練起來,當日後沒有補習班可以上時,你就很難再進步,一旦踏入工作場域,那更沒有老師有系統循序漸進指導,所以及早訓練自學是有利未來長遠發展。
回想自己以前從小五開始參加補習,因為當時班上同學幾乎都參加班導私開的課後輔導班,有點像交保護費的概念,自己的成績始終在中間並不突出。國中初期也是參加補習班並且補全科,但是有些同學吃檳榔、玩電動,另外自己大部分可以自讀,所以國二之後就沒再去補習班,但成績總是普通一般,國三準備考高中,最弱的科目只有英文,所以請家教補強它,最後考上五專電機科,此時已經沒有補習班可以上了,只能自修,還好所學的學科都是自己喜愛的,所以成績都是名列前茅,因此插班大學考研究所也都是自讀準備,雖然這樣沒辦法考上頂大,但是想取得一個學位,這樣的策略是足夠的。以前英文一直是我的弱項,約 20~30 分左右,因為沒有興趣把時間放在英文學習上,而是投入專業研究以及其他業餘興趣,所以補習班以及家教都不會讓我的英文有所進步,直到工作後的需求,讓我意識到英文的重要,才重拾學習的動機,然後花時間逐步攻克,文法靠旋元佑文法,單字靠Lingvist,聽說靠Funday,現在自造聽寫工具再強化聽寫能力,雖然學習速度不快,但是自己持續進步中,現在則是每週跟國外同事固定開會。
因為個人從小大部分的時間都是自修,因此很習慣自學,自學最大的問題在遭遇問題時,沒辦法在最短的時間內快速打通障礙關節,另外還有自律以及自我時間管理的問題,雖然自學效率不佳,但是它仍然重要,因為出社會後,很難找到導師引導你,只有自己清楚問題所在,然後花時間解決自己的問題,若能養成自學習慣,自己就是自己的老師,遇到難題自己就可以解決,個人是鼓勵同學能自學就及早盡量自學,即使自學初期效果可能不彰,但是自己有心學習,最後一定可以找到學習的竅門,而且隨時間推移學習的能力也會越變越強。
另外,
2021年11月4日 星期四
200 小時的衝擊
在 FB 看到哈爸貼文,說他為女兒開高中生自學 Python 寫遊戲的線上課程,不過小朋友缺乏學習動機,以致於成效不彰,若我遇到這種狀況,經過規勸後仍執意不聽,都是直接放生,不喜歡求人,不會浪費精力在此,等需求時,他自然會有求於你,那時再伸手幫忙。
今年暑假開學前三個月,已經跟我小孩說應該自學程式了,以個人經驗大約需要 200 小時學習時間,可惜當時他興趣缺缺,自認為開學後,老師會循序指導,此時自學是瞎子摸象效率不佳,所以把時間都放在西洋棋上,現在開學了,選修了一門交大資工最硬的程式實作課,那這門課到底有多硬?首先老師只給同學影片連結,其餘自學,老師只是裝飾品,每週上課就是上機挑戰問題,兩小時內解題者金牌,下課前解題者銀牌,其他時間解題者銅牌,每週都有下週上課的功課,所以現在沒上課時就乖乖寫程式,完全沒有空閒時間,超級認真,追趕他暑假浪費的時光,雖然教訓是殘酷的,但是親臨血淋淋的經驗後,才會真實深刻體會。
有人問我是不是跟學注音一樣?小一不教注音,資工大一不教程式?應該說他是誤入叢林的小白兔,選修了這門交大資工探索課程,體驗資工各種學科領域,這門課的重點除了各領域知識整合外,另一重點在自學,體驗出社會後常遇到的狀況,他說每個禮拜頭腦被一大堆全新的知識轟炸,到現在將近兩個月了,還可以適應,只是他沒時間做其它的事了,基本上,當你知道未來會學甚麼東西時,有空就趕快去學,以免到時候沒時間學習而壓力很大。
2021年10月15日 星期五
APCS
近年人工智慧快速發展,讓很多人關注資訊工程領域,因此許多學生對資工系極感興趣,在 FB 社團每隔一段時間,總有同學提問未來想讀資工應該如何準備?基本上,想讀資工有兩條路線可以選擇,一條走 APCS,另一條走數學路線。有同學想在讀大學之前就開始學習程式設計,加上現在大學資訊科技領域的科系另外提供 APCS(Advanced Placement Computer Science / 大學程式設計先修)能力檢測成績優良的同學升學管道,使得準備 APCS 變得非常熱門,本文就以準備 APCS 升學優劣討論。
個人寫程式 35 年了,了解不是每個人都適合寫程式,讀資工極需抽象思考,這也為什麼數學成績越好的同學越適合,頂大的資工系幾乎是數學滿級分同學的天下。我非常贊成從高中階段開始學習程式設計,因為許多工程應用的程式需要高中數學基礎才設計得出來,不過升學以 APCS 為主線,這我就不太贊成,依據淡江大學電機系饒建奇教授觀察,初學完 30 小時,多數同學 APCS 成績大約為觀念 3 級,實作 2 級,兩者滿級分皆為 5 級,如果你想要兩者皆有 4 級分達到頂大入學標準,那麼這學習時間,可能約在 500 小時以上,因此考量這個管道的同學,應衡量自己的時間資源,而且各大學入學經由 APCS 管道錄取人數仍遠少於傳統課業路線, APCS 入學名額約占 5% 左右,因此這些時間如果投入英數自三門學科學習,也夠上頂大,而且率取的機率還非常高。
想走數學路線,那麼需要強化自身數英自三科成績,特別是數學,可參考大學學測的準備策略一文。雖然走課業路線,不用花太多時間學寫程式,不過我仍建議,在寒暑假期時,花點時間參加程式營隊或是自學,可以先搞清楚自己適不適合走程式設計這條路,因為它不是人人適合這份工作,它就像繪畫、唱歌、運動、數學等技能。能不能想出程式碼,能不能自己除錯找 bug,它比學校數學題難度高數十倍,如果一題數學解十分鐘就讓你頭痛不已,那一個小程式幾十行程式碼要花你半小時以上,甚至數小時,如果你不喜歡這種煎熬的感覺,那就不適合以此為終身志業。
2021年10月3日 星期日
中國通史 100 集
我的學生時代沒有網路可以看各式各樣影片,個人覺得有些知識若能從影片中瀏覽學習,是不錯的方法,因為一次看不懂可以一看再看,這樣不必苦讀死記。
近日在同學 LINE 群組看到老師分享 Youtube 中國通史 100 集,覺得這對中學生學習中國歷史是有幫助的,從文明起源到清朝結束,每集 45 分鐘,共 75 小時,我比較有興趣的是,它還有英文翻譯,這是很棒的語文學習材料。
2021年9月17日 星期五
我的電腦程式語言學習歷程 (下)
續前文,研究所畢業後正式踏入社會,雖然大學主修航海,但了解自己專長在電機方面,並且對研發工作有興趣,因此我主動自薦信應徵本土家電廠,而且只有投遞一家,因為母親很喜歡這家品牌,家中各式大型家電都是用這個牌子,我就沒再投其他公司,然後每週緊盯人事的回應,最後如願應徵上。因為我會寫程式,所以公司安排我設計冷氣、洗衣機、微波爐等家電控制器,從電路設計到單晶片程式一手包,這也練就商品設計需關注那些重點的功夫,話說學生時代曾發誓不再寫組合語言,不過現代各式電子商品都有微電腦控制器,寫這些控制器的程式語言就是組合語言,真的不能亂發誓。通常控制器程式記憶體一般不超過 8 kBytes,我寫過最小的 MCU 是 4 kB 用在微波爐上,而且還含有十幾種烹調火力食譜。另外,公司使用 Mitsubishi 系列 MCU (後來 2003 併入 Renesas),CPU 架構和 6502 相似很快就上手,還有我設計的東西,老媽也非常賞臉採購,一用也十年以上。
2000 年決定轉換跑道,前部門經理退休,任職一家儀器公司研發協理,問我要不要改到電子量測儀器行業,不過就職前,我去巨匠電腦學 VB6,因為當時只會設計非視窗版程式,但是 PC 的應用程式仍不會設計所以想學,一個月後到新公司,雖然 VB6 沒有立即用上,除了以組合語言寫程式外,不過開始用 C 寫單晶片程式,而且儀器也需要連接到電腦,前人有用到 Delphi (Object Pascal)、LabVIEW、LabWindows 等設計,所以這些都要學,這段時間也摸到 8051,一邊帶人一邊開發產品,主要使用 Toshiba、Samsung 等廠牌 MCU。
2002 年網路大流行,新的總經理是一位極度有冒進心的人,挑選我擔任他的特別助理,幫他尋找新市場商機,此時開始自學 HTML、JavaScript、ASP,這段時間因應總經理的想法,獨自設計一些網路應用雛型軟體,不過隨著網路泡沫,公司差點面臨倒閉,總經理離職了,因為已經結婚了,我不願追隨他到新公司,每日工作到晚上的日子,選擇回原來研發部門繼續儀器設計,除了撰寫使用說明書,並利用 VB6 設計一些儀器連線電腦的小程式,以及生產測試自動化系統程式,也用它寫網路爬蟲爬 Yahoo 奇摩股市基金資料,2006 公司 ODM 儀器大廠桌上型電表,我也負責韌體設計,因為產品各項指標皆符合大廠目標,2008 被大廠併購。
小孩開始長大想教授他一些科技的東西,此時 LEGO NXT 正夯,可用類似 LabVIEW 圖控程式,若改寫其中韌體也可以換成 NXC 或 Java 寫程式,這些都有研究一下,可惜小朋友興趣缺缺,我不會強迫他學習,以免打壞未來學習的興致,通常好的學習要有動機與同儕相伴,當時時機不對我就帶他往數學之路走,另外因為 NXT 而與探奇教室邱信仁老師、 CAVE 曾吉弘老師和新埔國中薛尤榮老師結緣。
進入大公司後,繼續設計桌上型以及掌上型儀表,使用 Microchip、NEC、Atmel、Renesas 等牌子 MCU,仍以 C 為主要設計語言,組合語言是搭配微調 Bootloader 記憶體容量與位址而用。2014 年閒暇研究 Raspberry Pi 喜愛 Python,而且用它寫測試程式超方便,2016 年起,因公司組織更動而併入日本研發團隊,開始以 C# WPF 設計應用程式。此外,自己是 Maker,因此也玩過 MIT App Inventor,摸 Micro:bit 碰 MicroPython,玩 Arduino 寫 ROSA,從 C 的風格變成 C++ 程式庫。
2021年9月13日 星期一
我的電腦程式語言學習歷程 (上)
近日在 FB 看到哈爸一篇貼文關於他的電腦程式語言學習歷程,讓我也回想自己 35 年來碰了那些電腦程式語言以及開發了甚麼。
從小第一次知道電腦這種東西,差不多在四十幾年前,因為家裡出租宿舍給大學生,見過程式打卡,一切都懵懂中。
我的第一個學習的程式語言是 BASIC,專科一年級寒假同學找我一起報名真理大學為校外人士開設的電腦課程,在計算機中心上課,比較偏商業應用,記得當時學習寫九九乘法表、泡沫排序法等基本練習題,此時家裡沒有電腦,沒辦法進一步學習。
專二上學期,母親去日本旅遊帶回一台 CASIO FX-700P 可程式計算機,可以寫 BASIC 程式,RAM 2 kBytes,對程式初學者而言綽綽有餘,雖然說明書是全日文,但是從程式碼範例依舊可以了解程式邏輯如何解算數學問題,例如直角坐標與極座標轉換、解聯立方程式等,這台 FX-700P 計算機讓我對 BASIC 的使用發揮到淋漓盡致,程式指令就是那幾個,看你怎樣組合它們,所以我寫過電玩金撲克以及橋牌叫牌模擬程式,程式碼行數約在 200 行左右,寫到計算機程式記憶體極限範圍了。
專三開始學 6502 微處理器,當時學 Assembly 組合語言,還真搞不清楚電腦的運作原理,最難懂的是 PUSH、POP Stack 堆疊以及 Interrupt 中斷的使用,剛學完還不知道怎麼應用它,直到 CASIO 計算機隨身玩了兩年,專四終於買了一台 Apple IIe,除了有電玩消磨時間外,也開始從 BASIC 應用程式研究到 Apple II 系統程式,才開始有數位系統的全貌概念。
專四學習系統模擬,用 FORTRAN 程式寫一個感應電動機啟動瞬間電壓、電流各項參數模擬,這算是整合了電機機械專業知識,因為我已經很熟 BASIC,轉換到 FORTRAN 不是太困難,也許不小心用 BASIC 語法寫程式,但是 Compiler 編譯時會提醒你語法錯誤改正。再者學校專題研究,我自選了 PLC 模擬器,也就是自己寫一個 PLC 編譯器,用 Apple II 模擬 PLC 工業控制,可以輸入階梯指令碼能模擬控制器 Relay、Timer 等運作,這些程式都是獨立完成,我想應該是從小習慣自己設計桌遊的關係。
專五最瘋狂了,即將期考卻沒有放心思在功課上,那時自己搞馬達轉速測速控制,這時已經會運用 Apple II 硬體,透過 Relay 控制玩具馬達啟動,然後用 Optocoupler 光耦合器擷取訊號來計數馬達轉速,因為轉速極快,非得用組合語言來寫,差不多花一週時間寫完一千多行程式,然後用三個禮拜的時間除錯,雖然最後完成專案很有成就,但是當時發誓以後再也不要再碰組合語言!





