EXCEL VBA大數據分析視覺化程式設計
完整文字與影音連結:https://terry55wu.blogspot.com/2021/01/excel-vba.html
本學期應邀回母校台師大開課課程主要是:
用EXCEL VBA做大數據分析視覺化程式設計
另一個母校,東吳大學也邀請我開課,但限於自己的時間無法排出適合的時間,
於是系主任便推薦我開設遠距課程於是,
便有了可以在台師大上課,並將上課錄影除了提供上課學生複習,
也可以將後製後的影片,提供東吳的遠距課程的想法,
這樣我只要認真地把一次課程作法,就可以讓兩邊的學生都學習的好辦法。
於是開學後,台師大受限電腦教室,選修人數只有50人,加上加選5人,
有55位學生,幾乎是秒殺,至於東吳遠距課程,沒有這樣的限制,
所以選課人數近百人,有95位選修。
一、課程大綱:
期中前,主要從EXCEL高階函數、巨集錄製到VBA程式設計,
資料來源為政府開放資料,配合樞紐分析表。
期中後,網路爬蟲+樞紐分析到視覺化圖報表,用EXCEL內建功能與錄製巨集寫爬蟲,
無法抓取資料則用IE物件,將IE瀏覽器嵌入EXCEL VBA程式中,只要能連結的網頁,單可以下載裡面的資料。
課程進行中提供雲端講義,裡面有說明、畫面與老師自己寫的程式碼,並隨課全程錄影,
後製後上傳YOUTUBE,建立播放清單,直接件給學生複習與學習。
建立一個GOOGLE論壇,只有學生可以加入,
課後會將上課的YOUTUBE影片建立播放清單,並貼到論壇,
好處就是會自動轉信給學生,這樣我就不用一個一個的郵寄了,
用了超過十年覺得沒什麼問題,只是雖是論壇,
但討論的介面做的很不好,最好用的還是分享上課影片清單。
二、修課人數/學院分布
三、期中專題作業
四、期末專題作業
五、本學期授課心得:
1.兩學分真的有點趕,因此輔以影音錄製與雲端講義,對認真學習學生幫助很大。
2.期中專題有範圍,但許多學生都能加入自己的需求和想法,加上EXCEL容易上手,雖說需要撰寫VBA程式,但因為懂得錄製巨集與修改的方式,都能完成理想專題。
3.期末專題為難度很高的網路爬蟲+製作圖表,但結果超過預期的好,可見學生接受度很好,以學生回饋意見可知,上課錄影可重複學習備查,與雲端講義助益很大。
4.遠距學習(東吳)結果因為有影音與雲端輔助,成果不遜於實體上課。
非資訊背景教程式設計
非資訊卻講程式設計二十一年(89年巨匠教VB)
比較沒包袱,能從非資訊角度看學習與應用
重視實作,很多人看的懂書上寫的但寫不出程式
程式寫作要會寫,還要熟練,更需要完全正確(99分程式還是無法執行)
教學的核心都在如何幫助學生學會寫程式。
從EXCEL函數開始,再學習錄製巨集,再慢慢進入VBA程式設計的世界
如何幫學生寫出又快會好又正確程式
1.所有程式都是自己預先多次撰寫,用自己的寫作風格撰寫,不要求學生有標準答案,可以用自己的方式與邏輯寫程式。
2.提供雲端即時講義,取名雲端白板,有解答程式畫面結果與文字敘述。
3.隨課錄影,並課後上傳YOUTUBE播放清單用用GOOGLE論壇分享。
4.期中報告以開放資料為資料來源,用EXCEL樞紐分析圖表、函數、巨集與VBA完成專題。
5.期末報告以網路爬蟲取得資料(GET與POST),用EXCEL製作圖表與VBA完成專題。
Pyhton V.S. VBA
自己也教Pyhton發現還是比VBA來的困難
1.安裝環境
2.有EXCEL可以存資料,甚至當資料庫
3.有錄製巨集可以產生不會寫的程式
4.樞紐分析 vs Pandas
5.圖表 vs Matplotlib
入門的學生與非資訊相關科系,建議可以先從學習VBA設計下手
第14次上課教學影片分享:
(期末專題作業說明&全省氣溫改為跨工作表與物件的使用&跨工作表說明與用IE物件)
教學論壇:
https://groups.google.com/forum/#!forum/excel2vba2020
吳老師 2021/1/20 分享
同時也有581部Youtube影片,追蹤數超過4萬的網紅吳老師教學部落格,也在其Youtube影片中提到,文大Python程式入門或證照第5次PYTHON轉VBA&改為Cells物件與事件驅動和除錯&自訂表單&啟動表單程式撰寫隨活頁簿啟動&範例BMI改用VB&MONTHCAI改為VBA版本&串列型態與輸入成績練習&讀取外部檔案與切割到串列&讀取檔案與計算成績 上課內容: 01_重點回顧與PYTHON轉...
「vb函式庫」的推薦目錄:
- 關於vb函式庫 在 吳老師excel函數與vba大數據教學 Facebook 的最佳解答
- 關於vb函式庫 在 吳老師excel函數與vba大數據教學 Facebook 的精選貼文
- 關於vb函式庫 在 吳老師excel函數與vba大數據教學 Facebook 的最讚貼文
- 關於vb函式庫 在 吳老師教學部落格 Youtube 的精選貼文
- 關於vb函式庫 在 吳老師教學部落格 Youtube 的精選貼文
- 關於vb函式庫 在 吳老師教學部落格 Youtube 的最讚貼文
- 關於vb函式庫 在 [問題] VB很多寫起來都很方便,C++是強在哪裡呢? 的評價
- 關於vb函式庫 在 .NET Framework 核心技術導論 - Mobile01 的評價
- 關於vb函式庫 在 04_102程式說明之四(VB.NET資料庫教學) - YouTube 的評價
vb函式庫 在 吳老師excel函數與vba大數據教學 Facebook 的精選貼文
VBA處理大數據政府開放與快速做出查詢系統
完整連結:
http://terry55wu.blogspot.tw/2016/05/vba.html
這是在東吳大學進修推廣部的VBA進階課上課的範例,
分享如何用簡單的VBA知識,就可以輕易地做出查詢系統來,
讓您快速輸入查詢關鍵字,就可以輕易地將查詢結果輸出到新的工作表中,
只需要有些VBA的基本知識,再多認識工作表物件(sheets)就足夠了。
建議先學會以下分享課程:
用EXCEL批次查詢實價登錄開放資料(大數據處理實例) [連結]
用EXCEL設計按清單批次查詢資料(自動新增工作表) [連結]
公訓處Big Data加值應用課程分享 [連結]
用EXCEL快速建立資料查詢系統(錄製巨集與修改) [連結]
如何建立EXCEL版的成語查詢系統 [連結]
如何快速在EXCEL中建立查詢系統(免資料庫)之1 [連結]
如何快速在EXCEL中建立查詢系統(免資料庫)之2 [連結]
如何將單次查詢改為批次查詢 [連結]
資料庫批次篩選新增與更名工作表 [連結]
大數時代來臨如果不懂得裡用自動化方式處理資料,
處理資料將非常沒有效率,
至於處理大數據的方案很多,
但最通行也沒有額外費用的大概只剩VBA了。
而且開啟EXCEL就包含VBA,除了在Windows外,
MAC蘋果電腦一樣也有EXCEL,
VBA也可以沿用以前VB的資源,這樣看來VBA處理大數據應該沒有什麼對手了。
本範例主要是利用EXCEL的篩選功能時做成VBA,
可以一鍵就可以批次查出政府開放的實價登錄的查詢結果,
自動依據清單,可以自動將清單項目,逐一自動新增工作表,
並將查詢結果匯入,也可以隨時更改查詢需求,
除了便利外,也非常有彈性,
並可結合從網路下載資料到EXCEL中,隨時更新最新的資訊。
當然未來也可以結合雲端資料庫,與APP連動了。
內政部不動產實價登錄網站 [連結]
範例檔 [下載]
上課內容:
01_下載內政部實價登錄開放資料
02_下載EXCEL檔案
03_只下載新北市開放資料
04_留下不動產買賣資料
05_貼上查詢VBA程式做修改
06_產生輸入地址關鍵字介面
07_自動新增工作表並輸出結果
程式碼:
教學影音(完整版在論壇):
http://terry55wu.blogspot.tw/2016/05/vba.html
教學影音完整版在論壇:
https://groups.google.com/forum/#!forum/scu_excel_vba2_86
課程特色:
1.如何將函數轉成VBA2.VBA與資料庫快速結合
EXCEL函數、 VBA程式設計與資料庫是分別屬於三個領域的知識,
但卻是目前大家都需要的一項專業技能,要把三者融合的很好實在非常不容易,
剛好我有近20年的VB程式設計與資料庫設計的經驗,
教EXCEL函數與相關課程也有多年,因此清楚如何把最重要的知識教給大家,
ADO資料庫設計的知識非常多,但根據我多年的設計實務經驗,
覺得最重要的是掌握SQL語言,就可以輕易的完成查詢、新增、修改與刪除等功能,
就可以輕易的完成自己想處理的大量資料,大大提高工作效率了!
上課用書是:
Excel函數&VBA其實很簡單(http://www.books.com.tw/exep/prod/booksfile.php…)
Excel VBA 與資料庫整合大活用(http://www.books.com.tw/exep/prod/booksfile.php…)
完整教學影音DVD申請:http://goo.gl/ZlBZE
論壇:http://groups.google.com/group/labor_excel_vba?hl=zh-TW
相關教學連結:
如何設計VBA表單與EXCEL當資料庫用(85期)
提高效率VBA入門班第1次上課心得分享
EXCEL VBA處理股票分析自動最佳化範例
如何在EXCEL VBA中快速刪除空白列
定存範例轉VBA與只能輸入數字的InputBox
如何學會EXCEL VBA資料庫系列之一
EXCEL VBA入門:如何撰寫自動格式化的VBA程式
EXCEL VBA入門之一:如何函數轉VBA
VB.NET設計(九九乘法表&小狗動畫&撲克牌&字幕)
回覆Excel VBA入門與進階課的差異?
如何批次下載股市資料到EXCEL中之2
如何用VBA快速取得期貨交易資料(開收高低量)
如何在EXCEL VBA隱藏與顯示工作表
如何移動工作表與排序之1
如何批次下載股市資料到EXCEL中之1
如何批次下載股市資料到EXCEL中
如何建立表單與將EXCEL當成資料庫
如何讓用ACCESS將EXCEL的資料
如何排序工作表
如何將單次查詢改為批次查詢(EXCEL VBA自動化)
如何在EXCEL VBA的工作表隨機上顏色
如何快速在EXCEL中建立查詢系統(免資料庫)之2
如何精簡VBA程式與傳遞引數
如何快速在EXCEL中建立查詢系統(免資料庫)之1
如何將大量工作表整合在一個工作表
如何在EXCEL VBA新增沒有重複名稱工作表
如何自動下載YAHOO股市資料到EXCEL中
如何建立表單與將EXCEL當成資料庫使用
如何在EXCE VBA中複製工作表
如何在EXCEL VBA如何保護工作表
如何在EXCEL VBA新增沒有重複名稱工作表
如何在EXCEL工作表中移動
EXCEL VBA辦公自動化_如何建立查詢系統
如何當下拉清單改變時自動抓取資料之一
如何將數學函數轉EXCEL VBA設計之二
如何增加EXCEL VBA按鈕
如何設定EXCEL VBA開發環境設定說明
如何將EXCEL函數轉成VBA
如何再VBA中建立EXCEL的自訂函數讓公式變簡單
1.EXCEL VBA設計(自強基金會2012)第4次上課
http://terry55wu.blogspot.tw/2012/03/excel-vba20124.html
2.如何把EXCEL"函數"變為 "VBA"?自強基金會2012第5次上課
http://terry55wu.blogspot.tw/2012/04/excel-vba.html
3.自強基金會2012第8次上課
http://terry55wu.blogspot.tw/2012/05/excel-vba20128.html
4.自強基金會2012第9次上課
http://terry55wu.blogspot.tw/2012/05/excel-vba20129.html
5.EXCEL_VBA與資料庫--自強基金會2012(Ending)
http://terry55wu.blogspot.tw/2012/…/excelvba-2012ending.html
EXCEL,VBA,函數東吳進修推廣部,EXCEL VBA 函數 程式設計 線上教學 excel vba 教學 excel vba指令教學 vba範例教學excel excel vba教學視頻 excel函數教學 excel函數
vb函式庫 在 吳老師excel函數與vba大數據教學 Facebook 的最讚貼文
用EXCEL表單增加進度列與更新狀態
這是表單設計的延伸部分,主要是程式如果大量批次處理,
如果畫面上沒有進度列更新狀態,如果太久沒回應,將讓使用者無所適從,但如何增加進度列在表單下方或明顯處?
設計流程:
01_完成畫面
02_先增加進度元件
03_將進度元件增加到表單
04_元件程式歸零與設定最大值並迴圈增加值
教學影音完整版在論壇:
https://groups.google.com/forum/#!forum/scu_excel_vba2_86
課程特色:
1.如何將函數轉成VBA2.VBA與資料庫快速結合EXCEL函數、 VBA程式設計與資料庫是分別屬於三個領域的知識,但卻是目前大家都需要的一項專業技能,要把三者融合的很好實在非常不容易,剛好我有近20年的VB程式設計與資料庫設計的經驗,教EXCEL函數與相關課程也有多年,因此清楚如何把最重要的知識教給大家,ADO資料庫設計的知識非常多,但根據我多年的設計實務經驗,覺得最重要的是掌握SQL語言,就可以輕易的完成查詢、新增、修改與刪除等功能,就可以輕易的完成自己想處理的大量資料,大大提高工作效率了!
vb函式庫 在 吳老師教學部落格 Youtube 的精選貼文
文大Python程式入門或證照第5次PYTHON轉VBA&改為Cells物件與事件驅動和除錯&自訂表單&啟動表單程式撰寫隨活頁簿啟動&範例BMI改用VB&MONTHCAI改為VBA版本&串列型態與輸入成績練習&讀取外部檔案與切割到串列&讀取檔案與計算成績
上課內容:
01_重點回顧與PYTHON轉VBA
02_PYTHON轉VBA細節說明
03_將輸入輸出改為Cells物件與事件驅動和除錯
04_將輸入輸出改為自訂表單
05_自訂表單加入元件設計說明
06_自訂表單程式撰寫與ENTER轉為按鈕
07_啟動表單程式撰寫隨活頁簿啟動
08_範例BMI改用VBA說明
09_用Range物件取得值與表單設計
10_九九乘法表改用VBA輸出
11_MONTHCAI改為VBA版本
12_串列型態與輸入成績練習
13_串列型態與計算總分與平均
14_讀取外部檔案與切割到串列
15_讀取檔案與計算成績
完整影音
http://goo.gl/aQTMFS
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/pccu_python_2018_2
懶人包:
EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524
TQC+Python證照目錄:
Python 第1類:基本程式設計
技能內容:變數與常數、指定敘述、標準輸入輸出、運算式、算術運算子、數學函式的應用、格式化的輸出Python 第2類:選擇敘述
技能內容:if、if...else、if…elif
Python 第3類:迴圈敘述
技能內容:while、for…in
Python 第4類:進階控制流程
技能內容:常用的控制結構、條件判斷、迴圈
Python 第5類:函式(Function)
技能內容:函式使用、傳遞參數、回傳資料、內建函式、區域變數與全域變數
Python 第6類:串列(List)的運作(一維、二維以及多維)
技能內容:串列的建立、串列的函式、串列參數傳遞、串列應用
Python 第7類:數組(Tuple)、集合(Set)以及詞典(Dictionary)
技能內容:數組、集合、詞典的建立、運作及應用
Python 第8類:字串(String)的運作
技能內容:字串的建立、字串的庫存函式、字串的應用
Python 第9類:檔案與異常處理
技能內容:文字I/O、檔案的建立、寫入資料與讀取資料、二進位I/O、編碼(Encoding)、異常處理
課程簡介:入門
建置Python開發環境
基本語法與結構控制
迴圈、資料結構及函式
VBA重要函數到Python
檔案處理
資料庫處理
課程簡介:進階
網頁資料擷取與分析、Python網頁測試自動化、YouTube影片下載器
處理 Excel 試算表、處理 PDF 與 Word 文件、處理 CSV 檔和 JSON 資料
實戰:PM2.5即時監測顯示器、Email 和文字簡訊、處理影像圖片、以 GUI 自動化來控制鍵盤和滑鼠
上課用書:
參考書目
Python初學特訓班(附250分鐘影音教學/範例程式)
作者: 鄧文淵/總監製, 文淵閣工作室/編著
出版社:碁峰? 出版日期:2016/11/29
吳老師 107/12/3
EXCEL,VBA,Python,文化推廣部,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境
vb函式庫 在 吳老師教學部落格 Youtube 的精選貼文
文大Python程式入門或證照第5次PYTHON轉VBA&改為Cells物件與事件驅動和除錯&自訂表單&啟動表單程式撰寫隨活頁簿啟動&範例BMI改用VB&MONTHCAI改為VBA版本&串列型態與輸入成績練習&讀取外部檔案與切割到串列&讀取檔案與計算成績
上課內容:
01_重點回顧與PYTHON轉VBA
02_PYTHON轉VBA細節說明
03_將輸入輸出改為Cells物件與事件驅動和除錯
04_將輸入輸出改為自訂表單
05_自訂表單加入元件設計說明
06_自訂表單程式撰寫與ENTER轉為按鈕
07_啟動表單程式撰寫隨活頁簿啟動
08_範例BMI改用VBA說明
09_用Range物件取得值與表單設計
10_九九乘法表改用VBA輸出
11_MONTHCAI改為VBA版本
12_串列型態與輸入成績練習
13_串列型態與計算總分與平均
14_讀取外部檔案與切割到串列
15_讀取檔案與計算成績
完整影音
http://goo.gl/aQTMFS
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/pccu_python_2018_2
懶人包:
EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524
TQC+Python證照目錄:
Python 第1類:基本程式設計
技能內容:變數與常數、指定敘述、標準輸入輸出、運算式、算術運算子、數學函式的應用、格式化的輸出Python 第2類:選擇敘述
技能內容:if、if...else、if…elif
Python 第3類:迴圈敘述
技能內容:while、for…in
Python 第4類:進階控制流程
技能內容:常用的控制結構、條件判斷、迴圈
Python 第5類:函式(Function)
技能內容:函式使用、傳遞參數、回傳資料、內建函式、區域變數與全域變數
Python 第6類:串列(List)的運作(一維、二維以及多維)
技能內容:串列的建立、串列的函式、串列參數傳遞、串列應用
Python 第7類:數組(Tuple)、集合(Set)以及詞典(Dictionary)
技能內容:數組、集合、詞典的建立、運作及應用
Python 第8類:字串(String)的運作
技能內容:字串的建立、字串的庫存函式、字串的應用
Python 第9類:檔案與異常處理
技能內容:文字I/O、檔案的建立、寫入資料與讀取資料、二進位I/O、編碼(Encoding)、異常處理
課程簡介:入門
建置Python開發環境
基本語法與結構控制
迴圈、資料結構及函式
VBA重要函數到Python
檔案處理
資料庫處理
課程簡介:進階
網頁資料擷取與分析、Python網頁測試自動化、YouTube影片下載器
處理 Excel 試算表、處理 PDF 與 Word 文件、處理 CSV 檔和 JSON 資料
實戰:PM2.5即時監測顯示器、Email 和文字簡訊、處理影像圖片、以 GUI 自動化來控制鍵盤和滑鼠
上課用書:
參考書目
Python初學特訓班(附250分鐘影音教學/範例程式)
作者: 鄧文淵/總監製, 文淵閣工作室/編著
出版社:碁峰? 出版日期:2016/11/29
吳老師 107/12/3
EXCEL,VBA,Python,文化推廣部,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境
vb函式庫 在 吳老師教學部落格 Youtube 的最讚貼文
文大Python程式入門或證照第5次PYTHON轉VBA&改為Cells物件與事件驅動和除錯&自訂表單&啟動表單程式撰寫隨活頁簿啟動&範例BMI改用VB&MONTHCAI改為VBA版本&串列型態與輸入成績練習&讀取外部檔案與切割到串列&讀取檔案與計算成績
上課內容:
01_重點回顧與PYTHON轉VBA
02_PYTHON轉VBA細節說明
03_將輸入輸出改為Cells物件與事件驅動和除錯
04_將輸入輸出改為自訂表單
05_自訂表單加入元件設計說明
06_自訂表單程式撰寫與ENTER轉為按鈕
07_啟動表單程式撰寫隨活頁簿啟動
08_範例BMI改用VBA說明
09_用Range物件取得值與表單設計
10_九九乘法表改用VBA輸出
11_MONTHCAI改為VBA版本
12_串列型態與輸入成績練習
13_串列型態與計算總分與平均
14_讀取外部檔案與切割到串列
15_讀取檔案與計算成績
完整影音
http://goo.gl/aQTMFS
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/pccu_python_2018_2
懶人包:
EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524
TQC+Python證照目錄:
Python 第1類:基本程式設計
技能內容:變數與常數、指定敘述、標準輸入輸出、運算式、算術運算子、數學函式的應用、格式化的輸出Python 第2類:選擇敘述
技能內容:if、if...else、if…elif
Python 第3類:迴圈敘述
技能內容:while、for…in
Python 第4類:進階控制流程
技能內容:常用的控制結構、條件判斷、迴圈
Python 第5類:函式(Function)
技能內容:函式使用、傳遞參數、回傳資料、內建函式、區域變數與全域變數
Python 第6類:串列(List)的運作(一維、二維以及多維)
技能內容:串列的建立、串列的函式、串列參數傳遞、串列應用
Python 第7類:數組(Tuple)、集合(Set)以及詞典(Dictionary)
技能內容:數組、集合、詞典的建立、運作及應用
Python 第8類:字串(String)的運作
技能內容:字串的建立、字串的庫存函式、字串的應用
Python 第9類:檔案與異常處理
技能內容:文字I/O、檔案的建立、寫入資料與讀取資料、二進位I/O、編碼(Encoding)、異常處理
課程簡介:入門
建置Python開發環境
基本語法與結構控制
迴圈、資料結構及函式
VBA重要函數到Python
檔案處理
資料庫處理
課程簡介:進階
網頁資料擷取與分析、Python網頁測試自動化、YouTube影片下載器
處理 Excel 試算表、處理 PDF 與 Word 文件、處理 CSV 檔和 JSON 資料
實戰:PM2.5即時監測顯示器、Email 和文字簡訊、處理影像圖片、以 GUI 自動化來控制鍵盤和滑鼠
上課用書:
參考書目
Python初學特訓班(附250分鐘影音教學/範例程式)
作者: 鄧文淵/總監製, 文淵閣工作室/編著
出版社:碁峰? 出版日期:2016/11/29
吳老師 107/12/3
EXCEL,VBA,Python,文化推廣部,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境
vb函式庫 在 .NET Framework 核心技術導論 - Mobile01 的推薦與評價
模式,我們開始使用Windows 與Visual Basic;1995 年Internet. 的到來,推翻了我們溝通的方式,全球 ... Runtime、CLR)、廣泛的類別函式庫,以及定義.NET 語言的共通語. ... <看更多>
vb函式庫 在 [問題] VB很多寫起來都很方便,C++是強在哪裡呢? 的推薦與評價
看到這篇文章非常有感觸,因為原po的心境與疑問我曾經走過,
雖然我的程式資歷還並不算深,我想我可以試著回答這個問題。
我是念土木系的,大學必修的計算機程式也是教c++,我還被當過一次,
九年前當掉我的老師,現在成了我博士班的老闆,
但我心底非常感激他當初當了我,才讓我發現寫程式是多麼好玩的一件事。
總之,大學時代重修c++的那時候,雖然我已經能認同寫程式是很有趣的事,
但是在我眼裡,我所學的東西實在太有限了,對土木系而言,為什麼需要計算機程式?
因為我們常常在碰到矩陣,可是至少在我們這個時代,已經漸漸不需要「寫程式」了,
因為excel實在已經可以處理掉我們大學部會用到的所有難題。
而後來升上碩士班,我其實在碩士班念的組別還在土木所下,
只是和資訊沒有這麼高度相關,可是因為因緣際會,在碩士班的時候,
我因為兩個原因決定要學VB:
一個是我在excel裡用到了VBA,另一個是我用VBscript來寫asp,
我覺得VB不但好學易用又無所不包,小小的投資、大大的獲益,
當時我回顧自己初學c++的過程,心底也冒出一個很大的問號:Why C++?
當時我受到VB的震撼也許就和原po一樣,我覺得它不但能輕易作出漂亮的GUI,
而且正因為VB是比爾蓋茲的親生孩子,所以它在微軟帝國的平台下可說暢行無阻,
其實我那時最欣賞的是excel+VBA,
因為你的使用者介面和資料儲存媒介完全就放在一個令你熟悉不已的環境當中。
在c++裡,你要會fstream來做檔案I/O,而就算不做視窗操作介面,
也至少要有個while loop配合switch case之類做個操作選單,有點麻煩。
後來碩士班畢業到重返校園的這段期間,我開始接觸物件導向程式設計,
卻開始有了全新的視野,也直接正視到了VB6.0一個最重要的問題:
它的物件導向支援能力是有缺陷的。也許有人會說,那VB.Net不就解決這個問題了嗎?
但廣義來說,.net「本身」算是一種全新的語言,
只是它允許你用自己所熟悉的語法去操控它,
換言之我並不認為VB是「進化」到.Net平台而且因此擁有了完整的物件導向能力,
相反的講,它應該是被「併吞」了,也或許因此才被賦與了完整的物件導向功能。
(講得好聽一點或可說是「融合」,因為嚴格來講它們都是微軟帝國的子嗣嘛。
但我認為一個語言的特色與核心價值就在於它擁有「別的語言無法輕易做到的功能」,
進到.net平台之後,因為函式庫與容器類別共用的原因,這樣的事幾乎已經不存在,
任何一個VB.Net可以輕易作到的事,
用C#或CLI/C++一定也能在「相同的辛苦程度」下完成。
然而,這也是為何我深深認為.net並不像是一個平台,
而是一種「可以穿上個種語法外衣的獨立語言」,
因為乍看之下你會誤以為它對所有程式語言取了「聯集」,
事實上它當然沒有如此強大,它取的只是「交集」。
舉C++的例子是最明顯的,.net有一套類似STL的容器類別與演算法,
而且它鼓勵(或曰強迫?)你使用這一套,
如果你曾和我一樣試著幫舊的c++ code穿上.net的外衣,就會知道它有多麼排外,
不如把整份code全部重寫。)
而我認為原po的問題可能就在,
初階的計算機程式課程多半著重流程控制等基礎概念,
但這些基本功能絕對是任何一個程式語言都能辦到的事,
它還無法看到程式的個別特色和專長,但vb在這方面顯得相當討好初階使用者,
諸如「作出漂亮的GUI」這件事本身,我和原po有完全相同的迷思,
我剛開始學程式設計時,很不能忍受為何要寫那種dos時代的console主控台介面,
更好奇「為什麼市面上被公認的c++好書從不教人做漂亮的GUI」,
我後來終於想通這個問題是因為在外頭的課終於接觸了OOP和MFC,
我的心得是:MFC是用來理解OOP的一個實例,
但說實在它對程式設計的啟發性過低,使用上又太麻煩,
我認為「翻著一本厚重的手冊,找出你要的函式及應該傳入的參數」對一個程式員來講,
只是一種應該承擔的必要之惡,而且隨著時代演進,
會一直有人企圖找出「減輕這種必要之惡」的方法,可是相對來講,
程式設計的基本精神,流程控制的原則,design pattern這些東西,
卻是會長長久久,會成為你「永恆的資產」,而不需隨著時代過去而頻繁更新的。
那麼回到主題,既然只是要學基本精神,為何要選c++?
因為它的可能性最廣。當你初學程式語言,
你很難想像未來的你會在資訊世界的哪一塊,到底接近機器還是接近人,
是低階的、寫driver、操作記憶體做自控呢?還是高階的,當MIS,用oop寫應用程式呢?
可是C++讓你走向兩邊都成為可能。
就低階來講,它可以使用指標操作記憶體(雖然這基本上是危險動作,不被鼓勵),
就高階來講,它擁有既完整又強悍的物件導向功能。
再講到更重要的「政治意義」,
其實我心底覺得這才是你選用何種程式語言做為開發工具的重點。
當你已經掌握了程式設計的基本概念,要換一種語法是輕而易舉,
可是你一定也要因此投入心力與成本。
除了語言本身的特色(高階與低階,或某方面的特長)之外,
我認為語言的可用性與便利性,所比較的就是在它背後的函式庫及類別庫,
誰的內建函式庫又大又方便,往往就能博得程式員的歡心,
比方說我一開始為vb所驚豔,因為它的字串不但是內建的變數型別,
而且字串處理函式又多又強大,可是我錯了,因為當時我不知道C++的字串型別,
只要透過.c_str()就能轉成c-style的字元陣列字串,然後餵給c的字串處理函式解決。
而c++大部份「較複雜」的字串處理函式(像split)都放在c的函式庫裡面。
然後我又覺得vb的array要做redim改變大小,
實在比c++的malloc動態記憶體配置要方便太多,這點我錯得更離譜,
因為當時我還沒學STL,如果會用vetor容器,它又比vb的redim要方便太多。
我的兩點親身經歷就說明了,使用者往往無法在短期內了解一個程式語言的好,
是因為他不知道這個東西被放在內建函式庫的哪裡,甚至能不能輕易被做到。
可是函式庫或者類別庫就牽涉到我所定義的「政治」,
它是別人包好的東西,當然就操在別人手裡。
第一個要看「統不統一」;c++的compiler有很多廠家、很多平台在做,
如果你慣用的函式只要換了一個開發環境就不再有效,或要改變語法,
那它不值得牢記在心,或者說它讓一個語言分裂,不如再多學其他語言算了。
其實領悟了這個概念後,我終於知道了為什麼知名的c++好書從不教人做漂亮的GUI,
因為GUI正是C++當中從來不統一的部份。
第二個要看「恆不恆久」:語言可能進化,當然也有可能消滅,
當然一個程式語言要完全在地球上消失並不容易,或說它的生命週期一般而言都很長。
先講「進化」,進化是正面用詞,代表功能更強大,
但進化當然有困擾,因為你要更新,假設它不向下相容的話。
所以一個常常在進化的程式語言未必不是好的,但至少代表它還不成熟,
才需要改版得這麼頻繁。而進化亦有文明和野蠻之別,
C++的進化是有一群龐大嚴謹的委員會製定的,而且多半會顧念向下相容,
以新增代替修改。可是VB是微軟帝國的,基本上它說了算,
君不見如此多人為XP請命,微軟仍想強硬終結其生命,以遂Vista推廣嗎?
就如.net其實也是個非常好的平台,但它畢竟改得有點快,
從1.0到3.0,已經有蠻多東西都長得不太一樣了,想精通它,
可能等它先成熟或者自己的工作(研究)需要先碰上會更好。
再講「消滅」,其實是同一問題,世間少有恆長,VB確實是比爾蓋茲的「愛子」,
而且比爾蓋茲最初的心願曾是:「沒有VB做不到的事」,
可是微軟帝國會存續(也許),蓋茲卻會先衰,如今C#做得如此之好,
我認為VB就算沒被放棄,至少可能已經開始面臨失寵危機。
當初它的優勢何在呢?簡單、直覺、好用;而其實這些優勢已被採納到.net平台之上,
而且可能有過之而無不及,在這情況下,VB的優勢已被.net粹取而去,
但它本身卻只能算是.net的一個子集,其實,如果就我個人的看法來講,
這語法還能做很多事,所以仍有很大的價值,
但也因為不只它能夠做到,所以這價值已經沒有從前那麼大了。
話再說回來,我回到校園再作博士班的進修,還是念土木所,
只是念與資訊高相關的電腦輔助工程組,因此程式開始變成了我的本行,
但是回顧我一路以來斷斷續續接觸程式的過程,曾經有過的這些心境,都還歷歷在目,
其實我現在從不會比較程式的優劣,世上沒有最強的程式,只有最強的設計師,
那就像世上沒有最強的武術,只有最強的武者一般。
雖然,我們可以就「普及率」、「易學度」、「可攜性」之類的指標,
來評估哪種程式語言最適合做為自己的「母語」,但如果要就此比較優劣,
那就像孔子比關公,文聖武聖要如何分出高下之別呢?
一點淺見,給各位大大見笑了,望能拋磚引玉,造福各位板友…
--
我 是 可 悲 的 廢 柴 作 家
https://bloodaugust22.spaces.live.com
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.193.41.88
... <看更多>