2016年6月2日 星期四

第一次學程式語言,到底該選哪個語言?

許多人對學習程式語言有興趣,往往問的第一個問題就是,到底該從哪個程式語言開始?選擇哪個程式語言選擇哪個程式語言
關於這個問題,常常有文章針對目前比較熱門的程式語言做分析,例如 C、C#、Java、Javascript、Perl、Ruby、Python、Lua、Swift、Objective-C,哩哩摳摳一大堆。說真的,對於第一次學程式語言的人,應該一頭霧水(講那麼多專業的東西,就是不會才要學啊),完全不知道怎麼選擇,這個問題讓許多想學程式的人打了退堂鼓。
其實這個問題應該用另一種角度去分析,先了解這個概念:程式語言是相通的,主要是先學過一個「臨界點」
聽起來有點抽象,我用一個故事來說明。當初我在十四歲的時候,還是 Apple II 時代,由於對電腦遊戲深深著迷,不過不是著迷玩遊戲,而是著迷遊戲是怎麼做出來的,所以超級想學寫程式。我記得我還報名了救國團開的 BASIC 程式語言課程。印象中那個老師笑容滿面很會講,但是我就是猛抄筆記,因為什麼都聽不懂。兩個月的課程過去了,完全有聽沒有懂,對程式語言還是一竅不通。
不過我的熱情未減,我問念資工系的表哥什麼語言最厲害,他說組合語言 (Assembly, 是一種低階的機械語言)但是對我來說太難了,所以他建議我學高階的 Pascal 程式語言,至於為什麼已經不可考,於是我就去買了一本 Pascal 的書來看。當時我才國二,也沒人教,也沒人問,基本上這本書根本是無字天書,大概從第一句話開始我就"有看沒有懂"。但是由於我對學寫程式太有興趣了,雖然看不懂,還是每天拿出來看,居然還看到了第七章(大概那本書的一半多)。
大約半年後有一天,我還是拿著那本 Pascal 無字天書在那裡傻傻的看。忽然間,我印象非常深刻,神奇的事情發生了,就像被雷打到了一樣,莫名其妙「磅的一聲」,下一秒我忽然完全懂了,我興奮的從椅子上跳了起來,心裡一直想著「啊,原來如此」,馬上跑去找出來之前救國團 BASIC 課程的筆記,裡面記錄著當初上課內容(當初只是抄下來,等於是另一本無字天書),我一行一行的看著,每一行我都看得懂了,心裡想著「原來老師當初在教這個」「原來這只是個雙迴圈」「原來這麼簡單啊」。
接下來的人生,程式語言對我來說簡直易如反掌,我國三學了 C 語言,到了大學唸的是數學系,沒有教程式語言,但是靠著國中學的程式語言基礎,還可以到美國念資工研究所,畢業後還在矽谷做軟體工程師。所以說,你第一個先學哪個程式語言真的不重要,你要學的是其中相通的道理,只要你學超過一個臨界點,學通了之後,再來學其他的程式語言就很簡單了,大多只是一些語法的不同或者一些不同的資料結構,學起來知道要點,會非常自然、非常快。
但是每個程式語言還是有其深度,並不是通了就好,通了之後還要求精,而且觀念要精確,不可有“可能可以”或者“試試看”的心態。之前看過有個工程師對 C 語言的指針 (pointer) 不精,也不求甚解,寫了奇奇怪怪的 code,一時好像 work 了,但是卻藏著 bug,因為這些 bug 還害我飛去日本客戶那邊一趟。
由想做的應用來反推,自然就知道該學哪個程式語言
講了那麼多,你已經了解主要是學程式語言的共通性,哪個語言先學並不是那麼重要,結果還是得回到同一個問題,總要先選一個吧?是沒錯啦!
其實很簡單,就看你想學程式語言做什麼?例如你想學會程式語言後,能夠做手機 App?還是機器人?還是網站?還是 Windows 工具?還是 Mac 遊戲?有太多的地方都會需要軟體,所以你只要先選定應用,就可以反過來推出你應該先學什麼程式語言。舉例來說,也許你對手機遊戲很有興趣還是工作上需要寫手機 App,而且鎖定蘋果 iOS,那麼你就先學 Swift。如果你鎖定 Android 平台,那你就先學 Java。如果你什麼應用都沒有決定,只想當興趣,那麼就像我的故事,其實什麼語言都可以,就算是過時的 Pascal 也沒關係(當初Pascal 讓我對程式語言開竅後,我再也沒用 Pascal 寫過一行程式)。不過一般還是會先找到應用,可以看到程式語言與實際應用的結合,這樣程式語言學起來才會相輔相成、互相呼應,例如手機 App 是個不錯的入門點,可以獨立開發也有很大的市場需求,但是不建議從網站的基本語言 HTML/CSS 開始,因為這是標記語言和其他語言不是那麼的「通」。
現在的我當然會很多程式語言,但都是因為工作上的需要,進而學習新的程式語言。所以程式語言不是哪個比較強或者比較流行就去學哪一個,基本上跟你要做的應用有關,不同應用有不同的開發環境,不同的開發環境會用到不同的程式語言,到時你自然就會知道你該學什麼新的程式語言。
自己是否有寫程式的基因?
從種種的跡象顯示,軟體的確已經成為下個世代的產業主流,例如 App、大數據、物聯網、虛擬實境、人工智慧等等都是建立在軟體設計上面的應用。台灣雖然號稱科技之島但卻找不到軟體工程師,呈現粥多僧少的現象可以好好利用,因此如果對軟體有興趣或者想要成為科技搶手人才,那麼 Swift(蘋果 iOS 平台)、 Java(安卓 Android 平台) 或者物聯網開發都是很好的出發點,最後這裏附上兩小時 App 以及物聯網課程,可以先了解看看自己對程式語言的接受度再來決定,只要填寫以下簡單的問卷(一分鐘時間)就可以獲得:

沒有留言:

張貼留言