2008年9月5日 星期五

電腦與我 -- 程式設計 -- 永遠玩票的我

大學考上了電機系, 當然有許多電腦相關課程。不過, 我倒是沒有往『程式設計』那邊傾斜太多, 只是以正常的分量選修: 程式語言, 計算機概論, 計算機結構, 作業系統, 演算法 ...。從此, 確立了一個方向: 程式設計將是『興趣』與『好幫手』, 而不是未來工作的主軸

雖然一直是玩票的身份, 但緣份還是領著我接觸不少程式語言 ---- 尤其是『幫別人寫作業』。

.

  • BASIC

國小時, 最早接觸的就是小神通電腦內建的 Basic。接下來, 除了 DOS 附的 Basica, GW-Basic, QBasic, 還玩過True BASIC, Turbo BASIC 和一些現在早就忘記名稱的 BASIC 編譯器。而高中時比賽用的也是 Basic。

國小就開始學程式設計, 還有另外一個好處是養成了對英文『囫圇吞棗』的直覺。if ... then ... else, for ... next, go sub, return, 這些字沒查字典大概還能猜出意思, 但我連 Type mismatch, Illegal function call, Syntax error, Invalid command parameters, 這種句子也都不查字典, 就這麼『囫圇吞棗』, 在除臭蟲的同時, 也對這些英文『一回生, 二回熟』 , 漸漸進入狀況。

.

  • Pascal

高中時自學, 到大學時用 Pascal 寫了一個大程式, 處理類似倚天中文的印表機控制指令, 讀入點陣字型或向量字型, 平滑放大, 轉換成 Fujitsu DL1100 的控制碼, 最後列印出彩色的文件。 在那個 Windows 3.1 剛發行, 還沒有『所見即所得』的年代, 這可是很大的工程。

當時使用的技巧 :

  • 判斷英數與中文, 計算出每個字在字型檔案裡的偏移量, 還有處理例外狀況
  • 建立參數表格, 讓程式知道上百種字型檔案的各項參數, 內碼範圍, 以及例外
  • 用 spline 混搭加權平均, 平滑放大點陣字型,
  • 將點陣圖型, 轉換輸出成 Fujitsu DL1100 點矩陣彩色印表機的控制碼

印表機簡易設定參數 (倚天中文系統, 中文維基)

  • 設定列印字型 ~fk (楷書)
  • 設定字型大小 ~t24
  • 設定文字行距 ~ln (n:自然數)
  • 設定文字字距 ~xn (n:自然數)

(mobile01)
... 由於受到MAC的影響,講究所見即所得(What you see is what you get)的市場需求開始出現。因此MS的Windows 95與office 95開始要求從基本改變,可以隨意縮放大小的螢幕字型,必須搭配可以配置輸出的列印效果。...,印表機廠商也配合改變而有了驅動程式(DOS時代作業系統是沒有印表機驅動程式的,印表機相容性由應用軟體自行負責),...

.

  • Clipper, Fortran

這兩個都是『幫別人寫作業』才接觸的。

Clipper 是 dBase III 資料庫的程式語言, 高中時幫我媽的同事寫夜校商科的作業。

Fortran 則是大學時幫 木土系 和 農機系 的同學寫作業。---- 先看懂他們電腦作業的題目, 再從他們的課本找到相關章節的範例程式, 排列組合一番, 除臭蟲, 大概就是這麼一回事。

.

  • MASM 組合語言 (Assembler)

高中時淺嚐過, 不過僅止於 Debug 反組譯程式, 或用 Debug 寫小小的 .COM 檔。沒有真正玩過 MASM compiler 或 linker。

大學時, 陪著當時的室友兼高中死黨 Sean, 一起討論 資訊系 的組合語言專題, 一起通宵除臭蟲。其實, 我也算是那個時候才學組合語言的。

後來, 組合語言對我來說, 大多是 inline 嵌入在其他程式語言, 以彌補高階語言的不足。例如: RDTSC -- CPU 測速

.

  • C

大一程式語言課, 才學了 C。

接下來系上 (包括研究所) 的電腦程式作業, 大部份都是以 C 完成, 再延續到後來的 Matlab 和 UNIX C Shell。雖然比起來, 我對 Basic 和 Pascal 還是比較有感情, 但也沒有刻意去著重哪個程式語言的使用, 而是依當時的狀況去選擇。有時, 也會將舊程式, 或者是寫了一半的程式, 整個改寫成其他語言。

.

  • Delphi

當兵時候學的 Delphi, 是我第一個接觸的 Visual Object-Oriented (視覺化, 物件導向) 程式語言, 因為 Delphi 的核心是 Pascal, 所以用起來格外親切。同在海軍船廠的幾個預官, 大家分工合作, 透過 SQL 來替原本沒什麼 UI 的資料庫, 加上 輸入, 查詢, 列印, 批次處理 等功能。

就業之後, 我用 Delphi 在 Windows 底下做了一個量測工具 :

  • 從 印表機介面 (EPP) 輸入外部訊號,
  • inline 組合語言 RDTSC 負責精密計時
  • 類似示波器般, 顯示縮放量測的結果
  • 瓶頸是 EPP I/O 速度 2~4 us, 如果找方法突破, 還可以更精密

之後, 也用過 免費 但同樣是 Object Pascal 的 Lazarus 以及 Dev-Pascal。不過, 最近沒有開發大型工具程式的需求, 就沒有再繼續使用。

.

  • VB for Office

VB for Office 是我 就業後使用最多的程式語言, 以 Excel 為主, 不過 Word 和 Outlook 也都有寫過。以下條列我寫過的主要功能 :

  • 依清單自動寄出 Excel 會議記錄
  • 批次將 Word 檔另存為純文字檔
  • 解析特定的 HTML 內容, 將電話, 地址... 等欄位, 填到 Excel 表格
  • 產生弦波, 三角波, 方波 wave 檔, 可自訂參數
  • 檢查 netlist, 將舊版軟體無法支持的字元或過長的名稱, 代換成可以處理的內容

.

  • JavaScript

JavaScript 是 2007-09 當了部落客之後才開始接觸的, 真正上手則是 2008-07 的事, 截至目前為止相關的事跡都在 JavaScript 標籤, 或是以下的文章

.

5 意見:

發表您的回應
  1. 阿佳 提到...

    我沒有你這麼強的程式實力

    不過在一般商業界,Excel VBA真的用的很多。我也會寫一些簡單的...對改善工作效率很有幫助
    雖然很多人一直在狗幹微軟 Office,不過只要商業界還是在用這些VBA的話,要改用到Open Office真的很難啊

    畢竟,一小段的VBA也是回家寫了整晚的成果啊!!!

  2. 水瓶尤加利 / Eucaly61 提到...

    @阿佳,
    有時候太久沒寫, c/VB/javascript 的語法都要重新熟悉。
    .... 我畢竟還是玩票 ...

  3. 匿名 提到...

    我可請您幫忙寫一個簡易Dbase程式嗎?若願意我們再估價.

  4. 水瓶尤加利 / Eucaly61 提到...

    @ 匿名
    有大約20年沒寫Dbase, 手邊也沒有工具書,
    所以不好意思, 應該是幫不上忙了

  5. 林雪凡 提到...

    這文章真有趣,您學得好多啊!我是直到大學時期才知道世界上有程式這種東西……

    手癢癢,什麼時候我也來寫一篇類似的東西好了!

張貼留言