about 4 years ago

最近公司頻道從 IRC 換到 Hipchat 上面,本來也想要把 Hubot 也一起搬過去的。

但是 Hubot 的安裝真是惡夢,光是 node.js 版本和 npm 之間的 dependencies 就可以搞死人。我們公司現在又沒有專職的 SA,工具蠻多都是我自己下海寫的....

最後想了一下,決定找一套在 ruby 下也很好開發的 hipchat bot framework。

最後找到這套 isis。因為敝公司 是 100% 靠 Ruby 吃飯的,所以瞬間就把寫 bot 的門檻拉到很低...

掛上 hipchat bot 的方式

因為 bot 是常駐在聊天室的,所以你必須要幫 bot 申請一個 hipchat 專用帳號。

hipchat:
  jid: DDDD_XXXXX@chat.hipchat.com
  name: Full Name
  password: <password>
  history: 3 # num of history fields to request
  rooms:
    - DDDD_room_name@conf.hipchat.com
    # - DDDD_second_room_name@conf.hipchat.com

Bot 走 Jabber 通訊協定。Jid 和 Romm 的資訊在 https://yourcompany.hipchat.com/account/xmpp

jid 格式 DDDD_XXXXX@chat.hipchat.com,room 格式 DDDD_room_name@conf.hipchat.com

開發 / 掛上 Plugin 方式

isis 的 plugin 撰寫很簡單。基本上只要到 lib/isis/plugins 多開一個 class 繼承 Isis::Plugin::Base,然後掛進 config.yml。
這樣就做好了...

Local 測試

bin/isis run 就可以把 bot 跑起來了。而若要背景常駐要跑 bin/isis start

Deployment

開發完畢推上 git 之後,要讓 bot 重開還要跑到 server 上跑 bin/isis restart。懶人如我當然覺得這很麻煩,所以我用 gitploy 和 Rake 檔寫了 autodeploy,跑 rake deploy 就會動了。

順便還參考 hipchat/hipchat-rb 的 deploy 檔,做了 deploy hook 掛在 bot 的 deploy rake 上,這樣起碼有人 deploy bot 時大家會知道,以免 bot 被搞爛了沒人發現...。

config/gitploy.rb https://gist.github.com/xdite/5424771

Rakefile https://gist.github.com/xdite/5424780

後記

昨天後續還寫了幾隻常用 bot,比如說「午餐吃什麼 bot」、「redmine #issue_number bot」、「網頁自動抓標題 bot」。

不過這不是重點,重點是 bot framework 架好之後,禮拜五晚上同事們竟然不睡覺,一直在惡搞這隻 bot 瘋狂加功能....XD

看起來 bot 的確可以玩出不少花樣啊...

 
about 4 years ago

這是一兩個禮拜前貼在 Facebook 牆上的心得。整理一下重貼在 Blog 上...

整理一下過去幾年的心得,如下:

JD 部分

寫清楚 Job Description

  • 寫清楚公司能提供什麼(薪資福利)
  • 希望對方已經有什麼經驗?(已具備什麼技術,什麼職位就寫什麼)。

不要徵超人

不要徵 「超人」。徵「超人」沒有意義。

這裡的超人若以 Web 界來比喻,就是你可能看到 JD 這樣寫「熟 Rails、熟 jQuery、熟 ORM、熟 API 設計、熟 OO Design、熟....」

若一個工作職缺,出現「超人」的內容。通常表示:

  • 這個公司只缺一個人,就是做到死的超人。Developer 不是笨蛋,看了也知道雇主想幹嘛…
  • 雇主不知道自己想徵什麼人。這對 Developer 來說也是危險訊號。

如果你不是這種心態,是認真想招到合適的人。那麼請把需求寫清楚。

  • 如果團隊用 Git 很深,那麼寫上「會使用 Git」。
  • 如果團隊用 Rails,那麼寫上「熟 Rails」。
  • 如果團隊用 Rails,願意收 junior,那麼寫上「具備 MVC 開發經驗」。

不要貪心寫得希望對方什麼條件都具備,這樣十之八九只會收到一堆充滿 BuzzWord (對方希望合你胃口嘛)的垃圾履歷,大大拖慢你篩寫出正確合適的候選人的速度。

必須要理解到一個現實,不是每個人一進公司,就有辦法馬上 pickup,寫一堆「熟OO」並沒有任何幫助。只要寫應徵此職位的「最低條件」即可。

舉例來說:因為如果對方不會 Git 你又不想 train 他 Git,你就要寫「會使用 Git」。如果你可以接受 train 對方 Git,只要寫「不害怕 Command Line」即可。不然寫一個「熟 Git」,雙方都不知道這到底是「熟」是要「熟」到什麼程度…

不要請對方直接寫信到 jobs@mycompany.com

通常這樣做的下場是,「你會覺得自己會收到一堆來亂的履歷」。這不是應徵者的錯,因為你沒告訴人家「你想看什麼樣的履歷」。

而且,不是人人都有辦法寫出「有重點」的履歷。

我建議的方式是乾脆設計一張表單,請對方照格式填。不需太制式,但你可以用這種方式引導對方把他自身的重點 highlight 出來。而且 fit 你的需求。

這樣可以節省你在看履歷時很多時間。

Appsumo 的 Noah Kagan 在 Learn Chief Sumo's Proven Automated Hiring Formula 也是用了類似的手段。只不過他做得接近自動化…

至於我們公司的 應徵表單,我是這樣設計的..

把招聘啟示貼在正確的地方

徵人公告只是一篇文章,你可以貼在任何地方。

但就我的經驗是,貼在你平常在混的社群裡就好,不要到處亂貼。高曝光率對招聘一點幫助都沒有。

怎麼說呢?這幾年下來,我發現共事過最棒的同事,或收過來看起來不錯的履歷。都是在社群裡面徵來的。不是在社群裡面原本就有見過面的,就是看我的 Blog 在徵才,寫信過來應徵的。再不然就是平常有在 Facebook follow 動態的人。

至於那些在其他地方看到徵才啟示寫過來的履歷。怎麼說呢?你真的會覺得他寫過來的東西「不合胃口」。

相信我,收到「很多」履歷,絕對也不是什麼好事...。因為最痛苦的往往不是你已經很忙了,卻招不到人。而是你已經很忙了,還要花上一堆時間過濾履歷;挑來面試的人,還瘋狂浪費你寶貴的時間…

Noah Kagan 在 Learn Chief Sumo's Proven Automated Hiring Formula 這篇其中的一個招聘技巧。也是建議不要到處亂貼,儘量把徵才啟示、通知放自己家產品的 Facebook Page 邊欄,或者是產品網站、產品通知信裡。

這些原本就認同你產品的人,有極大的機會 fit 公司 culture。而不是網路上的任意陌生人。

其他

這篇文章已經太長了。下次有空再來寫 interview…

 
about 4 years ago

一直以來( 5-6 年前開始..),我都是用 IRC 在管團隊的 Log 和通知。

這個習慣最早以來是跟前輩學習來的。這在比較強悍的技術團隊內部,幾乎是行之有年的標準 Convention。

( 可見 Flickr 著名的 10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
投影片 (P.52),不過他們大概 2006 年就開始這樣做了,這篇只是後來比較漂亮的整理...)。

當年 在 T 客邦,也是用 redmine + IRC bot 自己搞了一套。

把 Log 都打到 IRC 有很多好處。團隊成員去開會、或者暫時離開。回到電腦前,還是可以很快速的掌握剛剛發生了什麼事。再加上 issue tracking 或者是 system alert 其實是很洗信箱讓人容易分神的東西,所以我們把這些幾乎都搬到 IRC 上,建立出一個可以非同步但又高效率的合作開發模式。

不過這個模式還是有一些極限,所以最近在 survey 過後,最近我決定把 公司 整套 solution 搬到 Hipchat 上。

主要搬家原因

  1. 發現每個同事一進來都要教怎麼用 irssi + 工作站掛 irc,學習成本很高
  2. 公司聊天室是 skype, log 在 irc 上,開兩窗有點麻煩。加上 skype-bot 不是不能作,只是我覺得 skype-bot 很吵…
  3. 人員離職很麻煩,因為要把 irc room 的 key 和 info 整套換掉,無法作權限控管
  4. demo 給別人看 irc solution 時也很麻煩,因為對方一定看得到我們的 key ....
  5. 對 irc 訊息上色要試很久,對一般的 developer 門檻有點高
  6. irc log 多半要切到桌機才能看,沒有 mobile solution。

所以最後就整套就搬到 Hipchat 了。看起來大家現在是用的蠻習慣的。

Hipchat 的好處

  1. 主要是 Web Based,但有 iOS, Android, Mac, Windows, Linux client
  2. 有 group 和 permission control,踢人加人很方便
  3. API 整合,寫 bot 很容易
  4. 聊天行為與一般 IRC chat 蠻相近的
  5. 貼圖貼檔案貼 Link 很方便
  6. 一樣會存歷史紀錄,就算離線了,重新上線還是可以找 Log
  7. 很多主流系統整合支援( github, redmine, capistrano, airbrake….)
  8. 5 人以下現在是免費的方案…

Hipchat integration

我們目前是把目前的幾種 Log 都打到 hipchat 上

  1. Github (github 的 hook 支援 hipchat, pull request, push , merge 都會通知...)
  2. Capistrano Deploy http://blog.hipchat.com/tag/capistrano/
  3. Airbrake ( server error 通知系統, airbrake 支援 hipchat )
  4. Redmine (官方的 hipchat/redmine_hipchat 不好用,所以我自己改了一隻 rocodev/redmine_hipchat 出來)

之後還會掛更多東西上去…

 
over 4 years ago

Here are the reading marterials I recommend in 2013:

Basic

If you are new to Ruby / Rails world, I suggest you take following courses :

Learning Rails

Use following courses to build a simple application, like a "forum"

Basic web development

Intermediate Ruby on Rails

( If you are not familer with TDD with Ruby on Rails, these two books might be a good start)

UT on Rails is also a excellent learning material

Testing

Advanced web development

Refactoring Ruby / Rails code

Writing better Ruby code

Podcast / Journal of writing better Ruby/Rails code

Object-oriend Design in Ruby on Rails

Know Rails better

Guideline of writng Ruby / Rails code

Resources of latest Ruby

 
over 4 years ago

Github 今天上了新的 features: Contributions

在新的個人頁面可以看到過去一年自己 Commit 的軌跡...。

看了一下,我公開的 commit 有 923 次。

2012-public

含 Private repo (公司和自己的 side project),有 3363 次。

2012-private

另外一些之前整理在 FB 上的數據。2012 年,我:

  • 出國了四次
  • 去過了三個國家
  • 給了超過 10 場 talk
  • 完成了五個案子
  • opensource 了兩個熱門 gem
  • 拿了一個世界大獎
  • 開了一間公司
  • 開發了超過 10 個 Rails porject
  • 寫了超過 60 篇文章
  • 寫作了超過 30 萬字
  • 讀了超過 200 本書......

加上去年一整年 commit 的 3300 次。

到底哪來的這麼多時間啊?..orz

結論是,應該要來放個假了嗎?

 
over 4 years ago

Essential Rails Design Patterns
http://rails-101.logdown.com/books/3-essential-rails-pattern

限時特價 9.99USD

被大家嫌拖稿很久的本書,終於在 12/22 新增了接近 8 萬字,共 165 頁的內容。

Rails 101
http://rails-101.logdown.com/books/1-rails-101

限時特價 4.99 USD

( 籌備 Rails 4.0 版本中 ,到時候會寄出免費更新 )

特價到 2012/12/31 午夜為止。

 
over 4 years ago

開始有計畫整理一些在 RubyConf China 大家線下問我的問題的答案。

挑選出來暫定的第一篇是大會期間詢問度最高的:「如何閱讀 Rails 原始碼」。

想要「閱讀 Rails 原始碼」的原因很多,不過多半的出發點都是想要能夠設計出更好的 Plugin (Gem)、或者是希望能在程式碼出錯時,能夠更快在 Rails 原始碼快速找到答案。

但擺在眼前的事實是, Rails 的原始碼已經成長大到成幾萬行的怪獸,如何「看懂」或者是有效率的找到答案,已經變成是一個很大的難題。

以下是我根據這幾年的經驗,能夠給各位的建議:

1. 從單純的部分切入,例如 Helper

最令大家頭疼的地方是,這麼多程式碼,要從哪部分開始讀起。

如果你是初心者,想要跳進這個池子裡,想找點簡單的東西讀,我會建議你先從「Helper」的部分開始讀。「Helper」是整個 Rails 程式碼裡面最獨立的部分(不牽扯到 request 呼叫),而且結構相對單純。

2. 從 request 開始,到 rack,到 routing,到 controller,最後再到 model

我真正開始有系統的讀懂 Rails code,是從一門線上 Owning Rails開始的。這門課的宗旨是,就是教你有效掌握搞懂 Rails 的核心與結構。相當有趣的是,他並不是教你讀任何 Rails 代碼,而是實際一步步帶你造出一個「mini Rails」。而造完這個 「mini Rails」之後,學員也能夠開始神奇的開始擁有快速找 code 的能力。

我在去年曾經寫過一篇 Owning Rails masterclass 介紹過這個課程。

第一天:造出自己的 mini Rails

帶你如何寫出精簡版 ActiveRecord、寫 rack app、用 rack app 改出精簡版 ActionController、自己 implement 出 before_, after_, around_ filter、自己 implement 出 view。然後最後再用你自己刻出來的這套 mini Rails 寫 web application。

第二天的課程

Refactor 昨天寫的 mini Rails,教你如何 trace Rails core。利用 Rails internal API 客製化出你想要的特殊 function、library。作業有 custom validator、custom finder、create responder、create form builder、使用 Railtie 客制 Engine、造 plugin。

宥於這是付費課程的關係,我也無法公開提供各位更進一步的教材內容。但是我能夠告訴各位這們課程為什麼會這樣設計,讓你可以也依循著這個軌道去自我進修。

rack

一個 request 進來,首先通過的是層層的 rack middleware。所以必須要先理解什麼是 rack,rack 的運作原理是什麼。可以試著自己先寫一個 rack app 玩看看。

如果想知道 Rails 裡面的 request 流程會經過哪些 middleware,被加過哪些工。可以在 Rails 專案裡面打 rake middleware,再去把 class 一個一個叫出來讀。

routing

request 通過 rack 層進來後,首先面對的是 dispatch 問題,Rails 透過 routes.rb 進行 dispatch。而如何 dispatch 到正確的 controller,中間靠的就是 regexp。

controller

開發者在 controller 會牽涉到兩個常用的相關機制:Filter 與 View Rendering。Filter 時怎麼運作的。method 應該是回傳「值」,怎麼做到自動回傳的是 render 出來的view。

model

ActiveRecord 的上一層就是一套 ActiveModel API。其實 Rails 不一定要靠 ActiveRecord,也可以透過實作一個 Class 加上部分機制做出自己的 ORM。其中 validation, finder 都是這方面的課題。

3. 搞懂 Rails 的啟動流程

RailsCast China 曾經 release 過一個很好的影片:The Rails Initialization Process By kenshin54

講解了整個 Rails 啟動流程。你也可以讀由 Ruby on Rails 官方釋出的這篇官方教學啟動流程去更加了解啟動過程中究竟會經過哪些檔案,如果要寫 plugin 可以 hook 在哪一些部分。

4. 實際簡單寫一個 Rails Plugin

最好的學習方法就是動手實作。在看過以上這一些資料之後,我建議你可以實際透過開發一個 Gem 去更加了解整個 Rails 內部的結構。

目前 Rails Plugin 幾乎都是以 Engine Gem 的形式釋出。所以透過撰寫一個 Gem,可以了解到:

  • 如何將自己的 Library 與現有 API 整合
  • 如何將自己的 Library 掛 / 不掛進啟動 process 中。
  • Engine 與 Railtie 的結構
  • 如果有相依檔案,如何撰寫 generator,把檔案放進去 project 裡面。
  • 如果有檔案操作和客製選項,如何透過 thor 這個工具去達到檔案修改的目的。

算是一個相當好的鍛鍊。

5. 讀別人(熱門)的 Rails Plugin

有時候,想要實作某一些功能不得其法。最好的方式就是去讀有類似功能的 Gem,去看看其他作者怎麼做的。有時候會翻到他們用了不少你根本不知道的 Rails API。

順著他們用這些 Rails API 的方法,可以更快的在 Rails 原始碼找到你要的答案…

小結

希望以上的方法能夠協助各位更快的上手讀通 Rails 的原始碼。有任何問題歡迎留言在底下討論。

 
over 4 years ago

這是我今年參加 RubyConf China 2012 所給的演講。

不過這個投影片裡面的不少內容,是在現場直接解說掉的,所以只看投影片的話,可能不會知道這樣的設計慢在哪裡。這陣子比較忙,如果有空的話,過一陣子我再寫一個全文版的。

這個演講的主旨是:在以往,我們設計 Rails Application 時,為了想要寫出一些漂亮的架構,會參考一些 Best Practices,或者是參照官方 Rails 官方指南的 Convention 建議,進行設計。

但是這一些 Convention 或依照直覺的軟體設計,很大的成分其實會造成你的 Application Performance 下降。這些問題即使你裝了 New Relic 還是絕對抓不出來。而這些設計可能也不太能算是 Rails 或者是相關套件的錯,甚至是 nobody's fault。這個 talk 會帶你找出這些問題,解釋原因,並且給出修正方案。

 
over 4 years ago

昨天看到神人 vgod 寫了一篇 過早最佳化是萬惡的根源,這篇文章是不錯。但是,對於「職業」那邊實在有太多奇怪的假設。

想了一下,決定還是在 FB 寫了一下我的看法,然後再轉貼到這裡來。

===

簡單回一下好了。關於職業的部分。我本來也是覺得就如同跟 @vgod 一樣所說,在裡面可以全新鍛鍊和學習各種知識和技能。

我在大學裡面,就是抱著這樣的心態,學習各種知識。我在大學裡面最認真修的課,不是數學(唯一感興趣的是線性代數、離散數學、代數)
,而是....去修資科系基礎理論的課,什麼作業系統、計算機結構、演算法、資料結構、數位電路、etc...大概能修的我都修了。數學系最
重視的微積分、高等微積分,我沒有很喜歡。而且,我大概下課的時間都泡在系上的機房,弄網路、伺服器、寫寫簡單的網站。

而最後我也是抱著這樣的心態,選擇了第一份工作。因為我覺得大學的環境才能讓「自己有選擇想練什麼武功的自由」。
我希望一直這樣持續下去。

然而,接下來的事情。你們知道了,我被打臉了。狠狠的打了一巴掌。

那一天,我才發現我關在學校自己練的等級,跟職業的人是差上那麼多。這才是讓我選擇馬上離開那個環境的主因。

很多人以為「自己有選擇想練什麼武功的自由」,才能讓自己的 power 開到最大。我對這件事情有截然不同的感受。為什麼職業的環境會成長很快。因為上班領錢,才有限時被交出成果的壓力。而且那個壓力能造成的動力是遠比自己下定決心要練什麼技能的動力還要可怕的。上班,你會被迫限時學到跟這個領域所有「基礎」的工具。一個月「基礎的程度」,可能直接贏掉自己自由學「半年」以上的程度。

而且特別是,如果你的同事和老闆,都是佼佼者的話....。到現在我還是相當感謝曾經共事過的 @gugod, @ihower, @gslin, @hlb, @嬸嬸 XD

我學到的就是。如果你想把什麼東西學好,稍微深呼吸一下(當然就是自學一點皮毛,希望不要進去之後死太慘),就跳下去...。
害怕溺水的恐懼會被讓你瞬間就學會游泳。(如果你跳下去就死拜託不要怪我...orz)

如果你曾經看過我半年前寫過的為什麼我想創業 一文。
你就會知道,我在這四年裡面「被迫」學會了多少事。

職業工程師,並不是只有用 PHP 寫了一千個論壇和購物程式那麼無聊。老實說,寫到第二個第三個,你就會知道 Framework 的重要性。

當然,如果你之後玩到神兵級 Framework 如「Ruby on Rails」。那麼你還會更會知道,這世界不是只有 CRUD。(Ruby on Rails 本身
的架構採用了大量 Patterns of Enterprise Application Architecture 這本書裡面的實作,裡面也大量用了 Design Pattern 的技巧)。

不只如此,你還會從周遭的 ecosystem 的 plugin 中學到各種各式各樣的 pratical、theoretical 的佼佼實作。

當這些東西看多了以後你就更進一步的發現,語言根本不是重點,掌握這些「企業級理論」(註)的核心精隨,才是重點。

而當進一步又將 Ruby on Rails 玩的十分純熟之後。就會馬上意識到,用什麼語言寫,把 code 寫得多快已經完全不是重點了。

  • 如果專案控管能力不佳,需求一直在改變,那麼就算你的「架構理論」玩的再漂亮都是一樣的,結不了案就是結不了案。
  • 如果團隊協調能力不佳,那麼不管公司投再多人進來,累死的就是那幾個人而已。
  • 如果時間成本能力不佳,不是會造成公司大虧損賠本,甚至會專案進行到一半就被迫終止。

很多人以為我網站寫的很快,是因為 Framework 的關係。真的不是這麼簡單...,那是我身上擁有所有的技巧綜合出來的結果。

如果我沒有領錢「被迫」進行我很多「不喜歡」的事,我不會學到這一些東西。如果我沒有「被迫」去處在那一些環境,我能學到的東西就限於「我在學校時一開始能望過去的眼界」,而不是環繞在我周遭各個神人的眼界。

而這也是為什麼我會寫出那兩篇文章的初衷。我不是出來走這麼一遭,不會發現我當初那樣的假設,完全不堪一擊。

而再舉一個例子,曾經很多人一直對我,開口閉口就是 Ruby on Rails 值得學習,感到很不解。事實上,我也是從這個 Framework 的進化裡面,
才學到人不能把眼界只侷限在某一個端點。我個人的能力,很大的原因是跟隨這個 Framework 一起成長的。如果我當初不是碰這個 Framework 起來,我恐怕真的沒有這個能力成長的這麼迅速。因為台灣沒有太多「大型」Scale (PV 千萬以上) 的網站,可以逼迫一個工程師直接從最基礎的 Turtorial 中,自學到那麼多 optimze techniques、best practices(更何況這種等級公司的入場卷,也不是你說想要應徵就能應徵上)。

從這個 Framework ecosystem 裡面產生出來的 plugin 也是世界上各式各地的程式設計師貢獻出來的,這裡面融合了他們公司現在「最好」的 pratices,有些甚至是 future architecture。如果我在一間悶頭自幹工具的公司上班,我是沒有機會見識到這一切的。

我不認為自己一開始有多好的眼界,能有辦法看到多棒的未來,並且照著我所看到的事堅定的往前走。甚至,直到現在,我現在還是不認為自己還是具備這個能力。但我唯一知道的是,我不能把自己鎖在自己的眼界裡。

我想說的話,就只有這樣而已。

[註] :Deisgn Pattern、Agile、Testing、Scaling、Performace Tuning …

 
over 4 years ago

上一篇中,我談到了三個能力是我建議培養的:「大量快速閱讀、外語交流、邏輯歸納推導」。接下來我想談談,我會勸你「什麼樣的決定不要作」。

這一篇我曾經思考了很久,我到底要不要認真的寫出來。(考量到文章刊登出來的批評聲浪)

最不值得做的事

1. 漫無目的的拿高等教育學位(大學、碩士)

台灣已經來到一個瘋狂的病態狀況。大學錄取率超過 100%。什麼人都能夠上大學。甚至大學招不滿人,還拜託對岸的大陸學生來念大學。

來念大學的人,往往也不知道自己來念大學的目的是什麼,只是因為爸媽叫自己來念,就來這裡放空四年等畢業。因為負擔不起學費,於是半工半讀,甚至多數學生整個大學生涯都在打工,唸書反倒是兼差而已。

在寫完上一篇文章的時候,有讀者發問:『私心希望加上「後悔以前沒有做什麼」的部分 XD 』

我必須要很認真的說,我最後悔的是:『後悔沒有拒絕我爸的願望:去念大學』。

別誤會,我並不是要說後悔曾經念過這間學校、後悔去念應用數學系。(甚至我這一輩子最感謝的就是當年被大學老師鞭策出來的極佳邏輯能力)

而是,早知道我喜歡的「作網站」這個職業。並不需要靠付高額的高等教育學費就能取得相關知識,並變成職業從業者。我不需要逃避那些我不喜歡修的課,修我根本沒興趣的學分,只為了取得學歷在等畢業。

因為甚至我翹課的時間,都是在宿舍玩架站或者是泡系上機房弄伺服器…

我可以早一點去就業,早一點為社會有貢獻。而不需要國家浪費在我身上的寶貴高等教育資源。最輝煌的四年時間被當年不懂事的我,浪費在「滿足我爸對我的表面期望」。

我爸真正的期望應該是希望我成為一個有用的人,不會餓死自己,對社會多少有貢獻。而不是去「拿一個大學學位」(取得一個大學學位是他『希望』的一種『表現形式』)。

這黃金的四年我浪費了很多時間在閉門造車,在揮霍人生,而不是真的認真的幹一些有意義的事業出來。

** 我的能量一直等到大學畢業後、終於不用躲躲藏藏的滿足別人對我的表面期望之後,才用力的迸發出來。如果可以,我希望我一開始就不用花時間在這件事情上。**

而一直到出社會、甚至當主管以後,我才開始意識到全民盲目的拿高等學位這件事,對國家的競爭力是多麼可怕的傷害。很多人以為讀大學用的都是自己的錢,浪費學費也是自己家的事。事實上,完全不是這回事。不管是讀公立大學或者是私立大學,國家都花了非常多錢在你身上。每一個人讀大學的成本,其實並不是光光只有學費而已。事實上政府對每一間學校的大量補助,才讓你可以每學期以最多只繳五六萬的代價就取得學位。事實上若真要計算,一個學期正常的每人教育成本應該是幾十萬台幣...。

但是,這當中有多少比例的人真的渴望上大學唸書?恐怕真的很少。幾乎絕大多數的學生都把念大學當作是可以打電動郊遊的坐牢而已。國家投注四年心血,結果學生放空放四年。

這完全是巨大的實體資源(金錢)以及黃金的無形資源(年輕人的青春)浪費。但卻沒有人對這件事情提出質疑。

大家都覺得外國人都超厲害,十幾歲二十幾歲技術就都超強,做出超屌的網站,創上超級厲害的公司。為什麼台灣人沒辦法?

很簡單,因為台灣人的人生從 22 歲才開始…人家 15-18 歲就開始了...

很多人也害怕,如果沒有一個大學學歷會找不到好的工作,有不錯的薪水。我出社會、當上主管以後才知道企業選才的標準完全不是你念哪個大學畢業的。而是你專業技能的純熟度、你當年的可塑性(年紀)。(換句話說你越老,但技術越嫩,競爭力只會越來越弱。)

沒有一個好的大學、碩士學歷,也只會影響你「第一分工作」的起薪。「第一分工作」並不是人生的全部。「第一分工作」只是唯一一個人家願意容忍你犯超級愚蠢錯誤的地方。

把時間浪費在『坐學校牢』上,完全沒有意義。如果你有一件事超級有熱情,那麼你就應該現在去作。如果你想光宗耀祖,那麼你應該從現在開始。

爸媽不會跟你說這件事,而他們會認為我在傳邪道。

2. 不要去當研發替代役

我的不少朋友和同學都是男生。他們不少人選擇服替代役,而不是直接當兵。我可以跟大家說,他們剛錄取的時候第一年都很開心。然後,然後,然後他們就不會再跟你講後面的故事了.....

因為大家都很後悔。但是你聽不到這些後悔的聲音。

每當有大學生在 conference 或社群聚會攔住我,詢問我對於未來的建議規劃,每次聽到有人想去再念個碩士,念完個碩士想再去當個替代役…

我總會試著勸他打消這個念頭,因為我知道後面會發生什麼事。但是我永遠都擋不住,因為他們總會堵我一句:「替代役 pay 起薪比較高,而且三年有保障...」

我聽到這一句,我就不繼續再講下去了。因為再講下去,我又會看成是「邪道中人」了。

現在看來,經歷了這一段歲月之後,我會回頭認為,也許台灣的「科技替代役」制度,原本是為了保證科技業人才的來源,以及保護科技業人才不因為當兵一年之後退伍變白癡(後來我覺得這有點像是都市傳說,因為不少人上班後被操了一兩個月後,魂就回來了。)。

** 但後來某種程度上,我認為是把台灣優秀人才殺光光的一種可怕制度.... **

為什麼?首先是「研發替代役」的資格需要「碩士畢業」。

嗯。聽到「碩士畢業」,其實多半就是「放空....」。

放空兩年,接下來綁三年的研發替代役的生活。

為什麼綁三年替代役通常是開始後悔的起點?因為真實的狀況是,有辦法申請到研發替代役的公司,多半是已經相對有經濟規模的大型公司了。雖然他們有辦法給上「穩定」的 pay。但是通常役南們能拿到的也就是「穩定的工作內容」,沒有什麼特別性的機率拿到能夠開疆拓土的機會(逼自己成長)。穩定 pay 保證不低,但是幅度通常也跳不高。

其實出社會頭三年,是一個人很黃金的三年。因為第一年有人願意大幅負擔你學習犯錯的機會。接著第二年,你開始不再犯錯了,大致上可以開始摸出自己擅長什麼,適合往哪個方向走。第三年,開始有籌碼換上 pay 更好的工作。(而這個 pay,運氣好的話,甚至可以拿到比剛出社會高上 1.5 甚至 2 倍的數字)

而科技業的工作更現實,每三個月風向就換一次,每六個月技術就革命一次。甚至每年的黃金主題,都不一樣。

許多人會後悔。原因歸納不出以下幾個:

  • (1) 現在工作,三個月就不喜歡,但是他不能跑,於是之後 2 年 9 個月的日子,放空…
  • (2) 現在工作,做得算有點興趣。但是完全沒有向上向左向又突破的空間,只好放空…
  • (3) 外面有更好的機會,有超級好的 pay,跑不了。有被外國挖角的機會,也跑不了。放空…

你可以觀察到,最後的狀況幾乎都是放空…

放空完浪費了多少歲月呢?這樣一輪下來,通常都是 27,28 歲了… 這時候,他們才開始想找自己「真的有興趣的工作」。但,門檻這時候變得非常高...

我身處在這個火熱的軟體圈子,時不時的就會接到很多軟體獵頭信(國內外都有)。不少的 offer 都相當好,只是囿於時空背景,無法接受邀約。最後,他們也總會希望我推薦幾個優秀的人才,因為想進入台灣拓展分部,而他們都願意給的起非常非常好的 pay。

這不是偶爾才發生的特例,我一天到晚都在接到這種的詢問信…

但我卻總是只能愛莫能助。因為能夠介紹的優秀人才不是正在「替代役」,就是正在「念碩士班」準備「替代役」,或者是根本還沒當兵(年紀太小或太老正在閃兵役)。

而對方也沒辦法接受,收進來的工程師 27,28 歲技術還是很菜的 junior ….(因為這個年紀,在外國都應該要是 Senior Engineer 或 Architect 了)

矽谷蓬勃的軟體生態,在於優秀的人能夠在各個公司靈活流動,把各個公司優點有效的交互傳播。同時,因為沒有誰被簽約綁死的問題,所以人才可以不用浪費大量時間在放空等出獄,想換領域鍛鍊就換領域。三年的鍛鍊就變成架構師,根本不是不可能的事。

只要有天份,只要沒被綁死,幾年內都有機會鍛鍊出萬丈光芒。你也許說不是每個人都拿的到外國的好工作。第一年當然不太可能。但是第三年,誰能曉得會發生什麼事呢?

但是我們的社會觀念卻是,把流動視為不成熟。把綁架回來互相浪費看成保障。

你要怪世界進步的太快,我們追不上。怪政府無能,拖累國家競爭力。我卻認為是我們自己活生生憋死了自己。卻還在找替罪羊。

3. 不要自願關在一份你根本不喜歡做的工作,下班再找機會作喜歡的事

要是我能從出社會的幾年來,得到的最寶貴教訓,無非是這一課了。

** 千萬不要白天去作完全不喜歡而且沒熱情的工作(即使薪水看起來還不錯),晚上再用閒暇時間找機會作自己有熱情的事。**

也許你聽過了很多,熱血車庫創業,下班努力扭轉人生的故事。想要努力自己說服自己你也可以…

我不想直接潑你冷水笑你這根本是在做夢。

直接來說說自己的故事好了。

我出社會之後頭兩年,也有這種美麗單純的幻想。當時也是選了一個我沒有太討厭沒有太喜歡,但上班時間規規矩矩做事。晚上可以有很多時間「偷玩」自己喜歡的東西(寫部落格、寫網站)的工作,而且最重要的,這個工作還是一份鐵飯碗...(半公家機關,符合我家對我的期望)。

直到兩年的某一天,碰上一個技術遠高於我卻大我沒幾歲的前輩。才意識到原來當初這種這種想法簡直是自 high,是在自毀長城。

人家每天上班八小時都在玩自己喜歡的東西。我每天下班還要努力擠才有兩小時可以進行業餘可笑的練習。不要說綻放光芒了,光是要追上他,我要努力到什麼牛年馬月 -_-?

那個禮拜過後我馬上就辭職了。

我還沒有時間馬上想清楚我未來要幹什麼。但我很清楚的知道一件事:再這樣繼續下去,很快我就會被我自己挖的洞埋掉。

一兩個禮拜以後我跑去找了一份我應該有興趣的工作開始幹,就是職業的網站工程師,

四年過去了…

四年過後我站在這裡。這一路上經歷過的事簡直遠超乎我的想像。我蓋出來的網站、我的部落格文章讀者不計其數。我經歷了很多各種好笑、感動的 event(你可以 google 到一大堆)。我透過網路,結交到了一大堆沒見過太多面,卻很交心的朋友。我在我這個年紀,玩到了超過正常人應該玩過的網站專案數量。在奇怪的年紀當上資深經理。在完全沒心理準備的情況下拿到世界賽首獎。

對一件事情有熱情真的是一件很可怕的事情。

我在這個奇妙的旅程中發現一件鐵律:有熱情的事情你才有動力把它做得好。而做得好,就很容易
生出成就感。而這個成就感又會激起你更大的熱情,把事情做得更加好。而一旦你把某件事情做得無人能敵,奇妙的機會就會自然從天上掉下來。

從前不知道怎麼敲門得到的機會。會在幾年後的某一天,以意想不到的方式掉在你面前。而因為身上的技術已經不再是僥倖。所以就算這個幸運可能是意外,也能夠牢牢的被抓在自己手中,不再溜走。

有些人總覺得我總是能得到的奇妙的幸運,或者是到底哪來的這麼無窮詭異的毅力在充實自己。我只能告訴你這是熱情。我喜歡作這件事不只是每天的 8 小時。我每天花的時間是 12 小時。甚至是週末還把這件事情當娛樂。

所謂「一萬小時的威力」並不只是個噱頭而已。他是真的會產生 something 的,而且這個 something 無窮巨大。

要是我當年選擇了繼續作這一份沒有溫度的工作。什麼事情都不會發生。因為我一輩子可能都只會是一個業餘工程師。只能繼續躲在角落酸別人,他是幸運他是幸運…

我不知道為什麼在台灣的大家都有一種奇怪的執念。要是經濟有虞就算了,無虞也要逼自己作自己不喜歡做的事情。再說服自己其實下班可以再擠時間偷做,然後這樣總有一天就有機會出頭。

我學到的唯一一件事,就是喜歡的事情就絕對不要當業餘。一個月的職業訓練,就足足幹掉三年的業餘偷練。而把一件事情做到真正好,上天會讓接下來的一切順理成章出現…

如果你只是為錢作一件你完全不喜歡做的事,相信我,你真的會每天活得就好像在地獄裡。而給你再多 pay 當補償還是一樣,因為下班為了發洩情緒,你還是會選擇把它狠狠花光。但相反地,要是你正在做的事情是喜歡的事,其實收多少 pay 你可能根本也不在意。而且,當你喜歡到能夠把這件事情做得非常好。那麼那個數字上天是不可能少給你的。

小結

這兩天寫了這麼多字下來。我發現我自己也遠遠寫超過了未畢業的大學生可能看得懂的範疇。但無論如何,我還是想把這些悶在心裡很久的話寫出來。

即便冒著被人罵邪道的危險。我試圖告訴大家,其實

  • (1) 可以不需要念大學
  • (2) 替代役可能不是幫你解套,而是有可能斷了你無限未來的一條路
  • (3) 熱情比什麼都重要

最起碼我想拿我自己來說,應該可以看起來應該是一個很難被挑骨頭的例子吧。我是一個普通家庭出來的普通小孩,大學念的也是大家看起來很普通的系(甚至可以被人說不好的學校)。而一直到 24 歲之前,我都按照著普通家庭對我的普通期望,過上一個非常普通的人生。

唯一的不同,就是我在 24 歲以後開始想清楚了,我不應該再為了滿足別人的表面期待去過我的人生,眼前可以走的路,也不是只有政府和爸媽所說的那幾條路而已。然後我就這麼出發了。

而我在這個旅途中,也看到現在世界是長什麼樣的。這也是為什麼我寫了 三個要學習的技能三件不要去做的事

(1)世界正在以越來越快的速度再演化。快到現在任何的國民教育完全跟不上的階段。從前必須要上高等教育才能修到的學分,現在都可以透過網路越來越容易的取得這些知識,甚至超越本國大學可以供應的範圍。而從正規大學取得的知識,從前在畢業後還可以保值個兩三年。現在可能還沒出校門口就直接過期了。

是不是要花上這個四年取得越來越被廉價化的學歷,坐上四年根本沒有人喜歡的大學牢,背上你潛意識裡面覺得根本不應該背的大學學貸。我覺得這是可以思考的事情。

(2) 我們爸媽的時代,跟我們身處的時代,其競爭以及變化的程度,完全不可同日而語。這十年間科技的變化程度大家也看到了。而這個速度只有可能更快,而不會更慢。所以是否真的有那個價值繼續依照爸媽陳舊的建議悶著頭走一條「放空的路」?

很多人總是說,台灣的人才素質很高,但卻很奇怪的沒有辦法在世界上綻放光芒。某種程度上,我認為就是因為我們長期以來雖然「聞」到世界正在劇烈的變化,卻還是悶著頭走著一條老早過期的路,但還是期望著會有一個比別的國家更好的結果。

我們社會繼續用著奇怪的迷思,把未來有希望的孩子,一一推進黑洞裡。(不用說推,很多人甚至根本是搶著自己跳進去。)幾年後發現不對了。才在電視政論上抱怨以及檢討為什麼高等教育廉價化,為什麼花了四年書只有 22k。為什麼我們的國民素質高,但是長期競爭力低落?

(3) 但隨著世界交流的門檻逐漸降低。取得國外的工作機會真的沒有那麼難。而且就以我身處的網路業來說,隨著全世界的軟體缺工潮,英文還可以的 Senior Developer 簡直人人都搶著要。

(我所在的這個圈子,美國矽谷挖美國其他州的人,美國挖加拿大的人,加拿大挖日本的人,日本人挖中國的人和台灣的人。大家到處互相挖來挖去。因為缺工...)

這世界機會簡直是太多了。完全不是只有「澳洲屠夫」才能真正賺得到錢。每當只要電視上報導,念完大學畢業,結果只能到別的國家「打工度假」賺錢當台勞(明明是國家培養的高級知識人才,卻選擇跑去用勞力賺錢)。我內心就真的只有「國家的教育資源又泡湯了」的感想…

學弟妹在我演講結束後,曾跑來問我,到底我們這個科系的學什麼技能才有求職競爭力。我給了他們一個他們沒有意料過的連結:Github Job board。而不是 104 …

多逛逛這裡,你就會知道練什麼技能是值得投資,而且也是大家需要的。

** 看世界,不要只看台灣。**

我想我這兩篇文章,要說的可能從頭到尾就只有這九個字......