高見龍

iOS app/Ruby/Rails Developer & Instructor, 喜愛非主流的新玩具 :)

Users in my blog

今天從Google Analytics翻了一些我自己這個小blog的數字出來看:

image

雖然僅列出前10名,但看到IE只剩2%多,感覺真好!

image

從前10名的數字來看螢幕解析度的話,大家的螢幕都越來越大,1024×768以下的都快消失了,也許以後設計網站的時候可以有更大的發揮空間了。

不過因為這只是個小小小站,樣本數不多(小於一萬),而且也不是很平民化的內容,所以應該會有滿大的偏差,僅供參考。

關於AS讀書會

image

昨天是第四回的AS讀書會,沒想到竟然能辦到第四回,真的太感謝大家的支持,到目前為止,每回的報名人數都一直在90~110人之間,比我想像的多很多。

沒關係,人多也有人多的玩法。

其實我沒特別跟大家說明,不過如果大家有注意到的話,每次上台分享的講者,我會刻意安排一位前輩搭配相對比較不那麼老鳥的新鳥。老鳥們通常有豐富的業界或講課的經驗,通常可以給我們帶來很完整的演出,而新鳥雖然也許講話會緊張,或可能會有些小狀況,但也常帶來一些”原來可以這樣玩”的新想法。

image

上台表演跟坐在底下聽,真的是完全兩個不同的世界

會這樣安排的原因是我想讓新鳥也有磨練的舞台,希望讓他們有一天也變成老鳥,然後再來提攜新的新鳥,這樣循環下去。我真心的希望可以藉由這樣的形式來達到另一種的“人人有功練”的理想,所以每次在向老鳥取經的同時,若新鳥們在表演時有些小的狀況的話,也還請各位多多包涵。

如果你也想上台分享心得,或是對某個主題/神人有興趣的,請別客氣的跟我說,狀況許可的話我再來幫忙橋時間。

我想這樣的聚會除了聽大家心得分享之外,會中、會後的時間,同好交流才是我覺得最重要的。我看到大家在休息時間大多不會只是坐在椅子上休息,而會起來找人聊天,這樣很棒!

image

你也想認識高手神人們嗎? 下次別害羞,名片拿上手,上前去說聲「您好,我是XXX,久仰大名..」,別擔心碰壁,這些高手神人們都很nice的。

而辦這個聚會對我個人我有什麼好處? 其實我賺很大:

  • 講話似乎有比較不會抖,人也比較不會晃、也不會飄來飄去
  • 見識到老鳥們是怎麼”表演”的
  • 學到不少辦活動的眉角,例如橋人、橋時間、橋場地等..

這些經驗值都不是花錢去上課就學得到的,我真的賺到了!!

最後

  • 只要大家願意繼續支持,我們就讓這個聚會繼續辦下去。
  • 希望可以在一年內辦超過12場次。
  • 誠徵願意跟大家分享心得的講者。

若有任何建議或想法,請別客氣的讓我知道。

感謝大家的支持!

Learning Something New

image

最近寫不太出技術相關的東西,那就來個比較閒聊(嘴砲)性質的主題吧!

在第三回的AS讀書會上,maso兄的talk裡的第一張投影片寫著:

“人活得好好的,幹嘛寫app?”

當下我也覺得,真的,人活得好好的,幹嘛找一些自己不熟的新東西來砸自己的腳?

AS2寫得好好的,幹嘛要學什麼AS3? Flash寫得好好的,幹嘛要寫什麼iOS app? PHP寫得好好的,幹嘛要學什麼Ruby/Rails?

在PTT的Flash板,偶爾會有一些類似「我該學AS3嗎」的主題。當然這樣的主題還是有少數保守派的板友會建議學AS2就夠用啦,幹嘛學AS3? 我承認新的東西不一定就比較好,但當看到越來越多的lib都只做給AS3的時候,也應該要知道整個環境的是往哪邊走了。

Rails 3.1將把CoffeeScriptSass加入變成預設支援;Adobe AIR的效能越來越好,也許在不久的將來用來寫行動app還滿有搞頭的;聽說GAE也開始支援Go了..或語有人對新東西會反抗或害怕,但新的東西一直在一出來,世界一直在進步,抗拒前進的人等於是在退步的. 當你遇到新的問題的時候,雖然用舊的解決方法不見得差,但說不定新的解決可以更簡單、省力。

又剛好在某個國外的研討會上,學到了polyglot這個單字,在wikipedia上翻到的解釋是:

“Polyglot (person), someone who uses many languages”

想想其實寫程式的工程師挺苦命的,為了糊口飯吃,除了基本的中、英文外,還得學各式各樣的程式語言。

我認為的”學新東西”不是指電腦程式語言,而是指學習新東西的心態。學習本身有人覺得苦也有人覺得樂,有可能你的老闆發現最近寫水果app好像可以賺很大,所以也要求你去學會它來幫公司賺錢,這也許會有點苦;對我來說,我沒辦法一直用同一招闖江湖,不學新東西來刺激一下我會死,所以對我來說是樂遠大於苦。而且我又是個愛現的人,每當在學習的過程中有新的領悟的時候,那種高潮的感覺如果只有自己爽,是會得內傷的。引用朋友Jace在噗浪上的一段話

“分享技術的目的,在於想讓大家都能感受到自己在瞭解一個新知識的那份感動...”

不吐不快,差不多就是這個心境。

也許有人看了TIOBE的排行,會擔心是不是自己所學的東西已經不流行了、過時了。我倒是不會擔心這個問題,任何一門程式語言被發明一定都有它的原因。

知名的Rubyist Aaron Patterson在某次的Ruby Conference上也提到:

“no language is perfect, every great tool has it’s dark-side”

這世上沒有所謂的最強的程式語言,只有最適合的程式語言。

好處?

學新東西有什麼好處?

你不知道你什麼時候會用到它

我自己的故事是,記得剛退伍的第一份工作是寫ASP的,但剛好公司某台重要的主機的作業系統是Linux,在我到職的第一天就發生主機硬碟空間不夠的情形。但因為同事們大多較熟悉微軟的作業系統,對於發生的狀況不太知道該怎麼做。其實我只用了簡單的tar指令,把一些過期但又不能刪掉的檔案給壓縮起來,並把這些動作寫成某個shell script並排到cronjob裡,問題就暫時解決了,當下也給主管不錯的印象。

當你學了不同的程式語言之後,可以同時也學到不同流派的想法

雖然程式語言免不了就是if..else.., for loop, while loop之類的東西,但在使用者的”文化”上就有不同的設計哲學。例如在Ruby裡有Enumerator#each可以用,for跟while就變得很少用或幾乎不用。雖然method後面的小括號可有可無,但大部份的ruby code都是把它省略掉的。

Python的程式碼強制縮排來取代大括號,讓程式碼看起來比較有一致性。如果你對Python有興趣,也可以進到interpreter裡輸入import this就可以看到The Zen of Python

Perl則是”TIMTOWTDI”(There is more than one way to do it)。

每個生態圈都有自己的文化,就跟小時候做的生物觀察的科學實驗一樣,觀察各個生態圈是很有趣的。

跟著趨勢走,對自己的飯碗也許也是另一種保障

時代會變、技術會變,沒人知道明天會流行什麼。

習慣新的東西,也會比較習慣新的狀況

簡單的說,你手上可以運用的籌碼越多,當遇到問題的時候就有更多種的解決辦法。

更有自信

承上,你會知道遇到狀況的時候該用哪種工具來處理是最快最簡單的,可以把事情做得又快又好,自信心就會慢慢的建立起來了。

有”活著”的感覺

古語說得好:「滾石不生苔」呀

也許本來已經熟悉的A,有可能會因為學會了B之後發現原來之前在A那邊有更好的解法

不同的語言帶來不同的思維,也許本來卡關很久的,用了別的思考方式一下子就解出來了。

有困難?

好啦,用講的誰都會,但做起來就是有困難,為什麼?

上班趕公司、客戶的案子做不完,下班之後都很累了..

下班後得帶小孩

的確,這個我不否認,照顧小朋友的確花了我相當多的時間,我幾乎得在小朋友晚上睡著之後才有自己的時間。

不是資訊相關科系的..

放心,我也不是。不過這不用太擔心,老實說,除了少部份的天才外,大部份的人透過練習是可以把一門技術給學得不錯的。

如何開始?

那該從哪邊著手? 以下是一些建議:

上課

我不是很鼓勵別人去補習班的,不過有的人就是沒人教就是學不會,那也許可以去試試無妨。

參加讀書會/社群聚會/研討會

你可能可以在這裡找到同好,有同好一起學習是件樂事,而且近來實體的聚會越來越熱絡,樂見其成。

要讀書

不讀書會面目可憎,我已經在胖了,再面目可憎下去就不能看了..雖然現在網路上的資料已經多到看不完了,但書本還是提供比較完整的學習結構。我習慣隨身都會帶一、二本書,也許在等車、等人的時間太無聊,可以拿出來打發時間。託iPad的福,現在可以一口氣帶很多本了。

寫blog

寫文章可以練習自己的表達能力、組織能力,可以讓自己學習過的東西透過整理變得印象更深刻。別擔心自己寫錯怕被高手電,其實高手都很忙,願意電你是你的福氣。又或許你會想現在大家都嘛在玩facebook/twitter/plurk了,誰還在寫blog那種過時的玩意? 那你可以參考這篇。 (我剛發現原來我的第一篇blog文字是在2005年1月的時候,在安裝phpMyAdmin遇到的問題)

在Ruby/Rails圈應該很多人聽過Gregg Pollack,不久前在他的一篇blog也寫到”Looking for a Mentor“,像Gregg這麼厲害的角色也還是一直不斷的在想辦法進步,我這種小角色怎麼能不努力呢?

當然,學習新東西也不是完全沒問題,在學習的過程中,有幾點可能要注意的:

  • 不要興趣太廣泛,把東西學到一定程度之後要換再換,不然最後”樣樣通、樣樣鬆”的機會很大。
  • 當你學了某種程式語言之後,你可能就會把它當做你手中的鐵槌,但千萬不要把遇到的問題都當成釘子,不然就失去了學新東西的意義了。

我的偏方

最後提供我自己的一些個人的學習偏方,不一定適合你,僅供參考:

找些硬的東西來啃

最近我試著在睡覺前把API拿出來啃,還滿助眠的。我現在儘量把它列為我目前每天睡覺前、起床後的工作之一,因為我覺得那是最基本的東西。不一定要熟記,但至少遇到問題的時候,你腦袋裡有關鍵字可以很快的找到答案。拜ipad所賜,可以讓我躺著看到自然睡著。另外拿別人寫好的原始程式碼來讀也不錯,很多高手寫的東西是書上不會教的,常會有「喔! 原來這個可以這樣寫」的體悟。

聽Podcast、廣播練英聽

我一直覺得自己的英文能力不夠,我會開英國BBC電台的廣播起來練聽力,部份聽不懂是難免的,但就讓自己的耳朵跟腦袋習慣這個聲音的存在。為什麼BBC? 單純個人喜好而已。

看影集練英聽

我喜歡看歐美電視影集,一週七天幾乎每天都看,如果時間夠的話,我一集會看兩次,第一次是沒字幕的,第二次才是放有字幕的。不過這個就自己斟酌了,因為很可會因為影集看了著迷而忌了原本該做的事。

結論

年輕時一直以為自己可以找到什麼密技能速成的,或是以為自己是天才隨便學一下就會的,事實上並不是,語言的東西不管是一般語言或是電腦程式語言根本沒銀彈,只有多練習一條路而已。

來算個簡單的數學,你知道1.01的365次方是多少嗎? 答案是37.78。也就是說如果你能每天進步1%,一年之後你會比現在厲害37倍. 雖然這數字有些理想化,但即便只做到三成,至少也能強10倍。

最後提醒大家,新技術通常很好玩,但不要盲目追求新技術,但也不要對新事物太過害怕而不去學它,過與不及之間該如何取捨,請小心拿捏。當找到屬於你自己的學習方法,也許你會發現其實這也是很有趣的。

一些個人的心得,與大家分享

我選擇的程式語言

image

這篇文章並沒有要比較哪個程式語言比較威,選擇適合自己的,寫得開心才是王道。

工作十餘年,手上吃飯的工具跟換女朋友一樣一直在換,以前看著TIOBE的排行榜跟股市一樣起起伏伏,擔心自己學的技術變成非主流、不值錢了,不過年紀大了,在乎的事情也變得不一樣了,腦袋沒辦法裝太多東西,覺得是該定下來的時候了。

當然,一直換的好處就是一直玩新東西,很有趣,但缺點就是學不精。這裡有一篇該學什麼程式語言,我覺得寫得還滿實際的。

跟著主流跑是不錯的選擇,比較安全,工作好找,而且用的人多,遇到問題的時候網路上能找到的答案也多,不過我個人就是喜歡非主流的玩具就是了。以下是一些我目前比較偏好,沒意外的話也應該會把它當做是長期投資的選擇:

ActionScript

Why?

  • Flash/Flex專用的程式語言。
  • 我對它的熟悉程度最高,這應該是我選擇它的主要原因之一。
  • 學習曲線中等。
  • 豐富的多媒體支援,即使很多人不喜歡它,但還是目前製作web game/FB game的首選。
  • 市場需求不算太低,很多台灣的企業還是會選擇用Flash來製作網站,這對”活下來”來說很重要。
  • 商業公司(Adobe)支援。也許有人就是因為有商業公司而不喜歡,不過我想這比起O社那種把別人買下來之後再把它用一些讓人覺得不舒服的手段把它弄爛好多了。
  • 一直有在更新,這挺重要的。
  • 有目前全世界普及率最高的runtime,幾乎每台能上網的電腦都有安裝flash player。
  • 不用太擔心瀏覽器相容性的問題,這應該是很多web front-end engineer的痛。
  • AIR可以用! 這是我選擇它的另一個重要原因,AIR除了可以拿來寫一般的應用程式,也可以拿來寫手機的app,特別是昇級到2.6版之後支援更多的iOS的硬體裝置,效能也改善不少(可參考Maso的這篇文章)。
  • 跨平台,有了flash player跟AIR,你做的網頁或是應用程式真的有機會可以做到”Write Once, Run Anywhere”。
  • 有很棒的framework(PureMVC、Progression、Gaia、Robotlegs),也有很多現成的lib可以用(3D、Particle..etc),不用每次都重新自己打造輪子。
  • 網路資源多,參考書也不少,官方的API手冊也很棒。
  • 新版的flash player將支援GPU,能做的事情更多了。

Why NOT?

  • 效能差? Flash在慢主要是因為太多圖檔在跑來跑去的關係,這即使用其它的來做也不見得比較好。之後的flash player版本會支援GPU,應該會改善很多。
  • 不開放? 我覺得這不是什麼問題,iOS也沒開放也是一堆人在追。我個人崇尚open source的精神,但並不是什麼東西都要open才是好的。
  • 開發工具太貴? 我覺得還好,Flash IDE不是一套幾百幾十萬,通常只要一、二個專案就可以賺回來。就算不買官方的軟體,也有免費的Flex SDK加上免費又超威且open source的FlashDevelop可以用。

Ruby

Why?

  • 我喜歡它簡單好寫又有趣的語法(純個人喜好)。
  • 學習曲線中等。
  • 有很威的Ruby on Rails可以用,這應該是很多人學習Ruby的原因,甚至很多人以為Rails == Ruby。至於為什麼選擇Rails,可參考這篇
  • 有很多別人寫好的Gem可以用。
  • Unix-like跟Mac OS都有內建安裝了,就算是windows也可以找得到安裝的版本,簡單好寫免編譯,拿來當”膠水“還不錯用。
  • 網路資源夠多,官方的reference也做得挺好
  • 因為學習Ruby/Rails的關係,能玩很多新玩具。這點對我來說很重要,要我一直用一樣的東西實在很痛苦,我不希望自己有一天變成是「號稱有十年工作經驗,但其實是只有一年經驗,但重複九次」。

Why NOT?

  • 效能差? 如果可以換來更好的開發效率,我覺得還好,而且老實說慢不到哪裡去。
  • 環境取得不易? 這點倒是真的,支援Rails的主機的確是相對的很少,不過對我來說不是太大的問題,我可以自己想辦法setup自己的主機,或是直接去AWS EC2自己弄個instance也能搞定。現在也有mod_rails(passenger)可以掛到現有的apache/nginx上,設定越來越方便。
  • 工程師不好找? 我想今年XDite在OSDC.tw上的那場talk應該有滿好的解釋(投影片)。

Objective-C

Why?

  • 商業公司(Apple)支援,不斷的推出新的設備,i-device的買氣一直居高不下,讓iOS app的需求越來越高,Objective-C的需求自然也跟著上衝,這點不用我講,看它在TIOBE的排名暴衝就知道了。
  • 是iOS app用的原生語言,其實優點不用太多,如果打算往iOS方向發展,光是”Native”這個優點我就會想選它了。
  • 系統不開放,我覺得這是優點,至少不用像另一邊的A牌系統,硬體廠商太多,光是解析度就好幾種了(可參考這則有趣的漫畫)。
  • 市面上的書越來越多,官方的文件更是多到看不完。

Why NOT?

  • 學習曲線高? 程式語法大家看不習慣,API method名子太長,不過這都只要寫一陣子就會慢慢習慣。
  • 開發工具要錢? 新版的Xcode4如果沒加入apple developer program的話,需要5塊美金購買,不過5塊美金比起其它的開發工具來說算滿便宜的。

結論

小的我的腦容量有限,大概目前只能也只想裝這三種了。那其它像Java/C/C++/C#/Python/PHP/ASP的不好嗎? 當然不是不好,不好的話怎麼可能還能長期佔據TIOBE的前幾名? 只能說青菜蘿蔔各有所好,我選擇對我自己來說合適的。

常會聽到有人說XXX語言的效能很差,但這不會是我在乎的點。自己出來開公司就會知道,公司每個月最大的開銷就是人力成本,如果我能用較少人力能換到一樣甚至更高的開發效率,我覺得那種工具就是我要的。

一些個人的想法,供大家參考。

The Art of Being Inspired

image

Photo Courtesy Orange_Beard’s photostream

做網路相關這行很有趣也很辛苦,必須不斷的學新東西來保持自己的競爭力。在學習的路上可能會遇到一些導師、前輩、大師會提點我們。不過到後來,其實就已經不是在前輩學怎麼寫function、怎麼寫迴圈了,更重要的是跟這些前輩們學”學習的方法”。大師之所以是大師,一定是有什麼方法,到底他們是怎麼樣學的? 都看什麼樣的書,或是跟誰拜師、吃了什麼仙丹、補品,才能有這樣的成就。

前不久發現在巴西舉辦的的Flash Camp 2011Grant Skinner的session,不過在schedule上的Grant的主題是「ADHD FTW, LOL」,其實我一開始看不太懂這標題的意思是什麼,後來看到投影片的標題寫著「The Art of Being Inspired」才懂原來是這個意思。slide也許晚些就會放出來了,不過不確定會不會有錄影,以下是一些場記跟個人的簡單心得。(ADHD應該是指注意力不足過動症)

如果AS有寫了一段時間的朋友,應該都聽過Grant Skinner這號人物,也應該很多人想知道為什麼Grant這麼神,能做出這麼酷、這麼炫的作品,他到底是怎麼學的? 或是有什麼秘訣? Grant在這個session就是要來分享一些他的學習心得。

"Ideas Have No Vaule Until They Are Recorded!”

很多時候我們都會有些點子,但如果不實際把它寫下來或做出來,它就永遠就不會實現,再好的點子也會沒有那個價值。Grant說其實他從很多地方得到啟發,像是從一些自然景觀,例閃電效果,有次他看了很長一條閃電覺得很酷,於是就自己試著用AS寫出閃電效果;還有像是草原上的草被風吹的效果,就想要試著用程式把它寫出來,而且要把它模擬到很自然。

有時候看到電影裡的一些特效,Grant也會想說「如果這個用AS寫的話,該怎麼寫」,例如最近一部電影”Tron: Legacy“,主角被背後的一道光打到,解體之後被傳送到網格世界的效果。

當然在工作上也可能因為專案的關係,需要研究某種特效出來,在研究的過程中也能常能學到不少新的技巧跟心得。另外網路上常看到有佛心的高手做一些方便的工具或是技術分享,也能從中得到一些啟發。

在session中Grant展示了一些他在受啟發時做的許多試作品,看的時候真的只有”哇~~~”的反應..(聊天頻道上也一堆”WOW!”、”Awesome”的讚嘆語)

“Build Tools for Yourself, and Others”

基本上跟”吃自己的狗食(Eating your own dog food)” 差不多意思,Grant就舉例說他們當初在開發EaselJS的時候,為了可以方便的把SWF快速的轉成給EaselJS用的格式,就寫了一套叫做Zoë的小工具。還有做了給Flash IDE用的panel,可以直接從fla就輸出EaselJS用的格式。一開始只是想做給自己公司內部用的工具,後來發現其實還滿好用的,就也放出來給大家用。

做自己的工具好處其實很多的,不僅方便自己公司內部的作業,而且對第一次接觸EaselJS的人來說也相當有幫助,減少對新玩具的恐懼感。

“Keep Everything Open”

其實這就是open source的精神啦! 當你把程式碼公開出來跟大家分享,各方高手如果發現哪裡有問題或是需要改進的,很多時候都會自動自發的幫忙改bug、做patch,讓整個功能更完整。Grant也提到,其實他也是因為EaselJS的關係,第一次使用Github

EaselJS在Github上的專案: https://github.com/gskinner/EaselJS

“Become Obsessed”

老實說,對某件事不夠沈迷的話,一旦遇到挫折,熱血很快就容易燒光了!

“Explore New Things”

Grant表示,他那時候只是為了想試一些新玩意就做了這個:

結果放上vimeo之後沒多久,馬上就有兩家公司來跟他討論要請他們做類似的產品了。

“Have Fun! and Be Passionate”

要好玩,才會熱情一直玩下去。像是他們就自己在android手機上寫了個AIR的程式,再搭配一些週邊硬體,來控制實體的軌道車:

後來甚至還有做出用聲音控制軌道車的,更有趣了..

其實這跟之前奶綠茶在第二回的AS讀書會展示的那個用手機控制flash寫的飛機跟車子的有異曲同工之妙。

在session的最後甚至還有demo了一下他們未公開的sex toy personal massager,這真的超有趣的,這沒辦法用文字說明的,得看影片才會知道它有趣的點。

另外過程中還有幾句比較有趣的:

“Holy shit!”

這是Grant看到很酷的閃電的第一個反應..

“Can you do bubbles? I said fuck yeah!”

這句可能得要看影片才會比較知道笑點在哪裡了..(聽說”fuck yeah”被現場的即時口譯人員翻譯成”fuck you”了..)

結論:

Picasso曾說 “Good Artists Borrow, Great Artists Steal”,Grant把它修正成”Smart Artists Borrow Great Artists”。其實大多數的我們都是小角色,跟大師”借用”他們的心得可以更有效的讓自己的學習之路更順暢一些。不過在跟大師借心得的同時也要小心,看大師打拳很輕鬆,那是因為他們已經把基本功都練很熟了,隨便出手就是很厲害的招式;但對初學者或是基礎不夠的人可能得注意,不要直接練拳不練功,眼高手低,到老可能會一場空的喔。

一點小小的個人心得,與大家共勉之!