29 1 月 2013

Beelu 精簡程式碼的 Perl 課程

perl-beelu

各位同學大家好,我的名字叫 Beelu,目前服務於某電子公司,工作的內容為公司內部的系統整合與維運。

學 Perl 的動機

很榮幸能跟諸位同學一起上完 30 小時的 Perl 實務課程,並且順利地領到了結業證書。我本身是一個 C/C++ 的程式設計員,所以原本對於程式也有些了解,但當學得越深入,越感不足,C/C++ 的執行效能是快沒錯,而且跟作業系統底層有直接的連結,可以讓我探索作業系統的運作方式,所以非常適合寫驅動程式,不過也要什麼?什麼就沒有,小到複雜點的資料結構如雜湊,大到資料庫存取或是複雜的input/ouput 例如讀寫 Excel、資料庫…都需要程式員慢慢的把程式給”刻”出來。後來我學了 C#,這種好多了,跟 Java 比較相近,寫程式的感覺猶如從走平面道路換乘高鐵,因為微軟體供了眾多的類別庫,不過寫起程式來落落長,method 的名字都比長的,感覺這是一種沒有 IDE (整合開發環境) 就不能舒服地寫程式的語言。雖然豐富,但他沒讓我享受到寫程式的那種暢快。反而讓我感覺到我是一個程式工人,日復一日的依靠 IDE 的強大快速的產出程式碼,沒有享受到程式設計的快感,沒有感覺到掌控電腦的感覺,感覺是電腦在掌控我,用複雜的開發環境與組態,用眾多的類別庫吞沒我,這不是我要的。

程式設計師,一定要有兩把武器

最後我終於了解,一個程式設計師,一定要有兩把武器,主要武器用於工作,必須要夠萬能,能夠支援開發大型專案的結構,語言要能結構化,這樣才能便於團隊運作。所以 C/C++/C# 依然是首選。而次要武器必須嬌小易用,如瑞士小刀般能很快地做出要的東西,能在手掌把玩,能劍隨心轉,能隨手寫出有用的小程式而解決實務的問題,而不是寫個程式還要開 Visual Studio 還要翻一堆資料,動不動數百行程式才能收工。為了尋找適合我的語言,我尋尋覓覓,陸續地嘗試了 LUA,Ruby,VBA,Java Script,Power Shell,Shell Script,Rebol,Python…甚至一些奇奇怪怪的語言我都去試試看最後讓我找到了,他就是 Perl。

我的第二把利器 – Perl

Perl 如大家所知是一種 script 語言,他歷史悠久,發展至今已經超過 20 年,他有還不錯的執行效能,他有眾多的函式庫可以取用,它內建有限但變化萬千的資料型別,開發上我只需打開 vi 文字編輯器就能把事情完成,特別是在文字處理與資料擷取上有所擅長,能在短短的程式內操弄資料於股掌之間,進而擷取出有效的資訊。為了自學這種語言,我利用工作之餘,找了 一些資料看,但總是覺得學不好,就是說寫是會寫了,拿書東抄抄西改改也能寫出一個程式,感覺還是用 C++/C# 的思維在寫程式,只是換了一種語言,完全沒有釋放這個語言的威力。這不是我要的,後來就想,雖然資質不好,我總能找個好的師傅教吧,跟著名師學,沒有學會蓋世絕學至少也學到心法跟招式,總比自己閉門造車好多了。所以找好的老師變成是我的目標,我花了一點時間在網路上尋找課程,有三家,有附屬於 Solaris 的訓練課程,有網管人員專用課程等等,這些都不是我要的,我不要制式的官方教材,我也不是當網管,我不要限定這語言在網管的應用。

尋找優質的培訓中心

最後,我找到了,國內最有口碑的電腦訓練中心,富捷培訓(原:奇科電腦),而且課程還是由富捷的技術團隊總召親自上的,想說這樣總不會錯了,但是老實說我心裡還是毛毛的,我資質不算佳,從小進補習班家常便飯,我深知一個好的師傅才能讓學生由內而外的把功夫學好而不是只學了招式而套招去寫程式,所以上課前我還去了一趟教室,看看上課環境,偷看一眼老師的長相,要求課程規劃師Anita 拿教材給我翻閱後,這時才安心,知道這是我要的東西。

喜獲良師,學習效果事半功倍

整個課程很順利約 30 小時,每周上三小時,課程內容也安排的很好,由淺入深,富捷的老師總是不吝其煩的仔細為同學解說,總是有問必答,並還能分享他個人的寶貴經驗給同學。上課方式生動,上課前也能先複習上次教的內容,讓我們能連貫起來而不會忘了之前的課程,教授的內容並不限於書上的,常常有即席題目,或是同學拿工作上的困難來請教老師而在課堂上馬上解決。

上課的節奏由靈活的內建資料型別開始,流程控制,正規表示法檔案處理一直到進階的功能。你看,內容並不多對吧!這就是一個好的老師的威力,他能將精華之處摘要出來,刪掉花俏的變化型項目,讓學生能在 30 小時有限的時間內專注於重點學好內功,因為老師知道一定要基礎觀念清楚,之後的變化型就不是難處了。富捷老師並且提綱挈領的傳授我們學習 Perl 要特別學好的三個主題,是啥東西我就不講了,你去上課自然會知道。精準的學好這三個主題,讓我受益匪淺,整個Perl 對我來講不再是一坨複雜的悠久歷史包袱的語言,不是一個這樣也可以那樣也可以怎樣都可以但是不知所措的語言,奇科的老師讓我看到了語言的骨幹,一切都觀念與思維都清晰了起來,因為其他複雜的主題都是由這三個項目延伸出去的,讓我往後的自學可以舉一反三。

我覺得這課程真的很值得,不是在於其課程的精彩與舒適的上課,而是在於奇科的老師能夠用學生聽得懂的方式將其內力灌輸給我們,讓我們能自然的使用 Perl,能直覺的利用內建資料型別跟不多的 funciton 達成以往用 C/C++/C# 要很多行才能達到的效果,他也提供個人多年的 Perl 程式設計經驗與我們分享,告訴我們 Perl 適合用於處理那些問題,怎樣做有效率,讓我重新找回了程式之美,也找到適合我的次要武器。

程式設計百百種,重要的是找到自己適合的武器

最後再強的武器也是有缺點的,但是知己知彼才能好好的解決問題,提供我個人的經驗分享,我覺得 Perl 的缺點是對於 Windows系統的結合不太好,例如 COM 元件,安全機制,System level access…雖然可以透過別人的 package 達到功用,但是不如用 C# or PowerShell 來的直接。

對於網頁程式設計也不好,不如 PHP or Ruby on Rails or ASP.Net 好。

對於跨平台也不太好,不如J ava好,雖號稱跨平台,但是除非你一直用基礎功能,不然跨於 Windows, Linux, OSX 你總是會被一些事情牽絆住而要特別處理。

對於 GUI的 處理算是不好,不如C# 的WinForm 開發環境或是Java方便。

其實以上我也不太在意,因為我工作上不會常寫 GUI,也不需要跨平台等等,我需要常常分析系統 log,做資料擷取以掌握系統動態,也就是文字處理跟資料彙整。這方面,Perl 就強了,要是他是第二名,應該沒有人敢稱第一名。他可以用精簡的程式達到擷取與彙整的功能。而 Perl 是我研究過唯一鼓勵精簡程式碼的語言,事實上寫起來還挺爽的,不會的人就是看不懂,連猜都猜不出來,而會的人卻能知道箇中巧妙,用一些組合就能妥善的搞定資料,會有點駭客的感覺跟點石成金的感覺。

我推薦富捷老師這課程給要找靈巧次要武器的人,推薦給跟我一樣常常要處理系統組態跟分析系統狀況的人,推薦給常常手癢要隨手寫一些小程式的人,推薦給想再找回程式熱情跟程式之美的人。最後謝謝富捷培訓與老師給我美好的上課經驗與再一次提昇我能力的機會。