July 13, 2006

Hello World !

自從貼出 blog [演講:深入淺出 Hello World -- 理解 Linux 上運作 Hello World 的種種機制 (台中場次) ] 後,幾乎每天都會收到網友的來信或 private message,有來信說對方是成功大學的學長、學弟,請多指教一類的 (原來心得分享也有「認親」的作用?);也有來信要我幫忙 debug、移植 toolchain、建構 kernel debugger;還有出錢請我 tune 在 ARM9 與 MIPS 下某個 codec 的 performance... 感謝各位網友的支持與幫忙打廣告,結果連對岸的新聞網站都出現這次演講的資訊 (!!),不過,問最多的問題還是:
  • 台南場次在什麼時間?
  • ARM 與 MIPS 架構的課程要怎麼參加?
  • 需要什麼背景知識?
簡要的回答,第一,台南場次時間訂於 7/22,詳情見 [TnLUG活動主題:深入淺出 Hello World - 台南場],相關的問題 (台中或台南場),請多利用討論區 [酷!學園 :: 檢視版面 - SA相關活動討論區];第二,目前已安排為某公司作兩天的 ARM training,請來信附上聯絡資訊,再來進一步安排;最後,所謂的背景知識應該要明確列出,不過我總認為,這種公開且免費的議程,不應該做太多限制,而且每個人的學習歷程不同、領悟力也有所差異,最重要的是,之所以題目定為「深入淺出 Hello World」,就是希望從不同的角度去思考。前面提到給其他公司的 training,以往題目都訂得很死板,比方說 "Practical Introdcution to GNU Toolchain"、"ARM System Programming",以及 "Embedded Linux Development",不僅準備教材內容是個苦差事,來參加 training 也很辛苦。

有時後會很懷念起,十幾年前開始學習程式設計的模樣,那個時候,80386 搭配 DOS,竟然可以做出那麼多事情,而且對系統的掌握還算足夠,或許,系統夠簡單吧。國小只學習兩種程式語言,一個是 BASIC,另一個是 8086 Assembly,前者開機時就有 BASIC ROM,而且 MS-DOS 後來也提供 QuickBASIC,後者就不必說了,debug.com 打開後,用 "e" 和 "u" 指令就一窺系統軟體的奧妙,好幾個寒暑假就泡在追蹤 DOS 核心與 BIOS 呼叫中度過。那時候,還不懂英文的我,翻著一堆原文技術書籍,依樣畫葫蘆加上亂猜就敲了一些程式進去,也很幸運的動起來,於是,陸續就開始整合一些小程式,逐漸開發出小型專案,說也好玩,等我會寫 "Hello World" 程式時,是國中以後的事情了,那時候才懂 "World" 單字的意思。當然,我不是個好的 programmer,學的東西還只是皮毛罷了,但是,讓我覺得相當幸運的是,我當初接觸的系統是 80386/DOS,只要看到 DOS 提示字元 C:\> 就讓我高興的睡不著,太神奇了,竟然有互動的效果,好像能跟電腦「說話」一樣,如果是現在的小孩,恐怕會覺得單調無趣至極吧。debug.com 對我來說,是個多麼神奇的程式,可以動態修改一個程式的行為、可作有限度的單步追蹤,也能寫些小程式,用中斷呼叫激發出種種不可思議。

然而,現在一切都改觀了,就算是相當有經驗的程式設計師,都得依賴某些「假設」,任憑這些「黑盒子」充斥於系統,開發工具很先進,但設計程式卻有種空虛感,不自覺就遇到來自底層的問題,甚至發生許多效能瓶頸,卻只能無助發呆... 該如何提昇寫程式的「樂趣」,是我一直想做的,進而,如何也對 System Programming 產生濃厚的興趣,則是另一個想探討的方向。以前玩電腦,都是偷偷的玩,趁大人不在家,努力的敲程式碼並反覆測試,住在鄉下也難以接觸電腦資訊,更別說花錢買軟體了,升國中的暑假,很想學習 C 語言,也在 K&R 的教材看到 "Hello World" 的程式,可是我沒有 C compiler,所以我決定要寫一個 compiler,想想,那時候多好笑,只要 COPY 一下就有了,何苦要折磨自己呢?最後,我用 QuickBASIC 寫了簡單的 C interpreter,外加一個不能動的 C compiler,但這過程卻讓我成長了。換做是今日,看到自己小孩晚上偷偷爬起床,抱著一堆電腦書籍,努力敲著鍵盤,盡寫些奇奇怪怪的程式,然後看到孩子因為螢幕上出現幾行文字,高興得蹦蹦跳跳,然後問了為什麼事情高興,只答覆了一堆不知所云的術語,該作何感想?

過去,一直把「玩電腦」、「寫程式」當作興趣,接觸的軟硬體環境也很單純,直到上了大學,我才將家中那台古董 80386 電腦收起來。在二十世紀末,目睹了軟硬體工業技術的巨變,不得不對心態作調適,過了好多年才發現,「玩電腦」、「寫程式」對我來說,已經偏離興趣很久了,特別是成為我謀生的工具後,常常陷入一種迷思:興趣與工作能兼顧嗎?「深入淺出 Hello World -- 理解 Linux 上運作 Hello World 的種種機制」這場演講中,會由一個簡單不過的 "Hello World" 程式開始,逐步揭開重重布幕,我不會談如何為了執行 C 語言撰寫的 "Hello World" 程式,去設計一個 C compiler 的過程,相反地,我們會看到一個設計良好的系統如 Linux 者,本身就是多大的「黑盒子」,運作 "Hello World" 的過程中,底層與上層有多少微妙的互動,以及一些 system programming 的演化,對於系統掌握度的衝擊。

昨天打了一天的簡報,一邊準備一邊想,不自覺又陷入思考,而今天早上跟某個廠商開會後,談論到某個深奧的技術,而我們能做的,除了涉獵厚重的文件外,大概只能無力地呼叫 API 了,或許,這才是完成專案的態度,請接受種種「假設」與「黑盒子」,因為我們身處於「先進科技的時代」。哎呀,我又借題發揮,並抒發牢騷,又淪為一篇沒意義的文字集合了,罪過、罪過。
由 jserv 發表於 July 13, 2006 03:58 PM
迴響

雖然我對底層的涉獵也很有興趣,也做了很多的研究,但私以為利用別人的 API 來完成想要或應該要完成的功能才是正途,正所謂站在巨人的肩膀上阿。至少這麼做對 "生活品質" 及 "生活輕鬆度" 有很大的幫助阿。哈哈。

胡岳偉 發表於 July 13, 2006 05:44 PM

我出錢請您tune 在 ARM9 與 MIPS 下某個 codec 的 performance...

fermi 發表於 July 13, 2006 06:03 PM

我认为J兄是否可以涉足除了纯计算机的其他领域,例如Biocomputation等,用计算机来创造生活,用双手来美化生活和社会,这样我认为不会陷入死泥塘。J兄有没有想过人体内部的helloworld呢。期待J兄的创意........

华雪亮 發表於 July 16, 2006 09:50 PM

您好, 不知道您的80386電腦還在嗎?

家中跑庫存和帳目的80386電腦掛了
嘗試將裡面的資料轉到p4電腦上,但是程式會有ERROR產生
由於當初程式是請別人寫的 只有EXE檔沒有SOURCE CODE
因此無從修改

如果大大願意割愛的話,可否回MAIL給我呢?

另外同意您在板上的想法,現在是小小新鮮DRIVER工程師

就常聽學長們再說黑盒子的事, 也聽到更古早以前學長的功力

去TRY黑盒子, 想我們完全沒這功力,想來羞愧

chun 發表於 August 8, 2006 04:23 PM

看到您最新發表的文章更正一下

我稱不上工程師, 目前只是小小小小小......小小的打雜 ><

努力學習中~

chun 發表於 August 8, 2006 04:29 PM