about 2 years ago

「站在同一個地方,你會有盲點」我恩師這樣說。

如果你一直站在這

設想你在一個路口定點不動,有如舉牌子打工的工作一般,你能看到的是這個角落的風景,時間久了之後,你會開始知道,早上何時會有一個載著羊奶的伯伯騎著機車從你面前經過、中午的時候會有個馬尾女孩經過你面前去買午餐、傍晚的時候你會看到擁塞的路口一定會有一個帶著鴨舌帽的伯伯闖紅燈。

然後你會漸漸習慣這樣的模式,了解這樣的場景,像是固定劇本參雜著些微的變數,久而久之,就麻木了,也只習慣這樣的習慣。

換個景點可以看到更多

就像一個初階的工程師,在一間創業公司工作,也許不在乎代碼的乾淨與否,那麼久而久之,這個初階工程師就會看不到他的盲點,不知道如何把代碼寫的更容易維護,就像是你的遊戲人物獲得大量經驗值,卻無法升級顯示在 MAX 的地方一樣。

我突然想起我去年的歷程,短短一年總覺得遇到了好多人事物,我在一間創業公司上班,寫著我的骯髒程式碼,只知道能動就好,甚至還不小心把資料庫給炸了,在我對進步求知若渴的時候,我恰巧換了一間公司。

然而第二間公司給我更多的規範、更多的協作,讓我知道我的程式碼只要多細心多花一點時間,可以減少日後維護的成本,於是我在這樣的框架底下塑型了自我對程式碼的要求,也同時透過互相協做的方式學習到更高深的邏輯應該如何撰寫及思考,我覺得我很幸運、很慶幸可以待過這間公司,也謝謝他們願意指導我的骯髒程式碼。

回過頭來,我發現如果我沒有待過這兩個地方,那麼現在的我就不會對程式碼有要求,我就不知道如何寫出更好的邏輯,其實仔細想想,我的確是站了兩個地方,看了不同的風景。

避開道德綁架

離職,對於台灣人的家長多數的評價就是

  • 你怎麼一下就坐不住了?
  • 為什麼不再撐到年終在走?
  • 爛草莓
  • 沒定性
  • 年輕人都做不久

However, 當一個遊戲的副本打太多次的時候,經驗值是會變少的,那麼可以快速增加經驗值跟拿到更強的寶物方式就是,換更強的副本打吧,遊戲的道理往往可以套用人生,差別在於,遊戲可以重來,你不行。

現在不論是技術還是人與人之間的交互作用,都比以往更快速的在迭代,我們手上一樣拿著黑白棋子,差別在於那些叫你停滯不前的人們,在以前玩的是「五子棋」,而他們卻不知道當今的規則早就變成了「圍棋」,別在用以前人的建議玩現在的遊戲,你會輸。

我沒有想過我在出社會的第一年會換了三份工作,但我總覺得自己很幸運的是,我站在這些不同的地方,我都有學習到我所想學習的。

如果你對自己還有成長的渴望,那麼你就必須打破這道牆,去看看更高更遠的地方,放棄那些台灣舊有的家長道德觀念綁架吧。

 
about 2 years ago

我如同一般人一樣念完了義務教育,接受高中、大學的教育,驀然回首還真沒有一堂課程讓我有辦法達到如此高度的高專注力行為,我必須先承認上這堂課我沒有嗑藥,卻有辦法做到 72 小時不分心,能讓我逼出極限卻有能夠大量吸收滿載回歸的這個講師正是 王永福老師(福哥)

我在過去幾年之中,就讀大學時期有做過補習班助教、代課講師,也曾在我待過的公司進行每週簡報,對於上台面對群眾本身就不怕生的我,簡報,對我來說當然不是問題。

但是怎麼把簡報做好、講好,就是一個很深奧的問題了

意外的我加入了 xdite 老師所建立的全棧營,也很幸運的這個瘋狂的老闆請到已經六年沒有來中國授課的福哥。

三天的充實內容讓我覺得意猶未盡,這是一個值得紀錄的講課

初探簡報力

其實在收到公司要做企業內訓 TTT 訓練時,我壓根不知道這是什麼意思,講師也只是聽說很厲害,但我對這完全沒概念,想說應該就跟大學上課一樣,上完寫作業這樣。

強力開場的福哥在一開始就把這三天要做的事情跟大家提醒,並且用清楚簡單的簡報介紹了自己,這個自我介紹不是一般的敘述經歷而已,而是針對全棧營這間公司與我們老闆 xdite 的淵源開始,這個很細膩的開場讓我感受到這份簡報,應該不是 一個PPT打天下 ,而是特地訂製的。

在這過程中,福哥會不斷跟底下的聽眾互動,他會設定一個問題,對你提問,並且在一開始就規劃很明確的計分機制,讓你快速建立起對小組群體利益的一個認同感。

在這過程中你不會有傳統聽課的運作方式,他完全打破你對聽簡報的觀念啊,讓我們會不斷的進行小組討論,共同寫一張大張海報紙,甚至教我們利用簡單的便利貼,可以規劃出你講課的內容

接著福哥會直接「做給你看」,讓你去提出點子,然後貼在牆上,每一個人都可以參與到這個過程,與傳統講師講課不一樣的是,你絕對看不到有人會坐在位置上的XD

在講解之前也利用圖片的示範很清晰講解他接下來要你做的事情,是把便利貼貼在海報紙上,並且兩人一起上台,一人負責拿一人負責講

在這一天的課程下來,福哥傳授了很多簡報技巧,傳達了相當多的核心概念,讓我們面對以後在簡報或授課的時候,能夠用更高的標準看待自己,有一句話讓我覺得相當欽佩,「學生學不會,是老師教不好」

當一個職業講師能夠講出這句話,表示這堂課程他要能夠給予每個學生滿載回歸的收穫,否則這句話的說服力就會課程結束後蕩然無存。

很明顯的,我們全棧營的夥伴們都在一天的時間學會這些簡報技巧,而且是能夠在課後立即檢驗評估。

不是說的越多,就是越好

以往我們會有一個認知,就是講師在台上講課的時候,似乎只要投影片夠多或是講者經歷夠厲害,這樣的演講就是一個好演講,然而聽不懂、學不會,就是自己的學習力不足。

在福哥的課程裡,他傳達的核心概念,簡報只是用來做到「說服」,而不是所有的內容都放在上面,讓聽眾用看的,然後講者照念?

要如何才能做到「講的越少」卻能夠讓聽者懂得更多,福哥利用了很多簡報中的小套路,去跟聽眾互動、建立遊戲機制、聚焦於共同協作等部分。

在這些套路一一傳授之後,我突然明白,為什麼以往在聽課的時候,某些老師能夠讓我展現高度專注力,而多數的老師讓我聽了只想進入夢鄉,他是一個模版的技巧,可以延伸也可以進階,但當你都不明白的時候你無法掌握,只能認為

  • 哦,也許是這個老師講了很多笑話
  • 哦,也許是這個老師簡報做的比較好
  • 哦,也許是我當天比較有精神

但聽了福哥的講解與實操才知道這些不是偶然,而都是有厲害的 pattern 的啊

給學生高標準,是因為講師標準更高

福哥說,如果一場演講給自己的評分滿分是 5 分的話,那麼他對一般學員的門檻可能是 4.7 ,那對福哥自己而言,卻是 5 分滿分。

啊?怎麼會有人對自己的標準是滿分?做不到怎麼辦?

福哥不會在乎做不到,而是一定得做到,在一個晚餐的飯後,很榮幸能夠跟福哥求取知識,在路上他跟我們分享,來北京把簡報改成簡體的事情

在接受來北京授課的時候,福哥問了很多其他業界講師,認為中國大陸的學員也能看得懂繁體,所以簡報並不需要特別改,然而這麼一件小小的事情,其他講師不想做,可能是當你投影片數量太多的時候,你不會想要把每一個章節或是圖文改成簡體字,這樣維護或修改簡報的成本就提高了。

但是福哥他做給我們看了,他認為能夠讓聽眾有最好的感受才是最重要的,重視每一場簡報的細節、重視每一個聽眾的回饋,能夠讓底下聽眾有最好的體驗才是一切,聽完真的讓我想要獻出膝蓋了 XD。

永遠站在學生的角度

第一天的時候,有個題目必須是小組利用 A4 紙撰寫 PPT ,然後上台 2 分鐘快速簡報,很開心的是我是我們這組的壓軸上台XD

其中有個細節是我讓底下的聽眾,倒數 3 2 1 舉手,還稍微頓了一下,變成 3 2 3 2,福哥針對我這個部分提出未來可以改善的建議是,不要去玩學生,這句話讓我整個醍醐灌頂啊,隨後開始解釋說,雖然可能這樣很好玩,但學生不見得覺得,而且甚至你玩過他一次,那麼第二次之後就不會給你這樣玩了,有可能會下降參與度。

以前做補習班的時候只覺得這是一個常態,一個講師的技巧,結果福哥幫我整個講師系統做全面的升級,我才知道,原來一個厲害、令人欽佩的講師是要有這樣的元素,永遠站在學生的角度去設計課程。

我的簡報方式讓大家笑開了,卻也在最後收穫了如何把講課做的更好的知識,也很幸運的拿到獎品跟簽名書,是第一天的完美 Endding

實戰練習的精準分析

聽完第一天的課之後,福哥讓我們回去進行今天上課完整內容的實戰,要我們能夠訂定主題後,開始做內容跟簡報,設計整個講課細節,並在隔天早上每一組兩人的interview ,根本就沒在讓人睡的嘛

以往只有參加過寫程式的馬拉松兩天沒睡,所以稱為 hackathon 黑客松是理所當然的,但這次我真的沒有體會過什麼是「上課松」XDD

經歷一個晚上,我與我的組員 YY 一同設計了一份,如何在全棧營做直播的課程,其中也想了很多梗,做了很多排練,並且還請我在台灣的女朋友遠端支援幫忙修圖(超感謝,愛妳)

隔天一早福哥稍微看了一下簡報,就能精準的對我們提出建議

甚至建議我們怎麼修改原先的設計來達到更佳的效果,我覺得這個大腦 input output 的速度真的是神快啊,福哥說我們這些講師跟他真的沒有什麼太大的差別,都一樣是講簡報

差別只在於

「我多了你一千場簡報」福哥說

原本想說第二天不用去飯店上課了應該可以輕鬆一些吧?結果有超巨量的作業啊,從零設計課程、製作教具、排練、修正 PPT,這讓全棧營的夥伴都把體力發揮到極限了

深夜時段每一個夥伴都在積極為了第三天的正式簡報做準備啊啊啊啊

有紀錄才能進步

最後一天的訓練課程,每一組都要上台演講,畢竟這個課程是 TTT (Training The Trainer) 嘛

福哥會針對每一個組別的優缺點給予大量的建議,真的是大量,而不是講個兩句希望你進步,而這每一個建議都是他在你演講的當下逐條紀錄。

最讓我印象深刻的是,福哥雖然是超過一千場的神級講師,但這三天給予全棧營內訓的課程結束後,他都積極的撰寫課後紀錄,如何改善?檢討自己有什麼地方做的還不夠好?

這樣檢視自己的方式也希望我們課後能夠紀錄,畢竟這些知識都是能跟著我們的大腦帶走的。

超過一千場的講師,每一場都紀錄,他 show 給我們看的筆記有 2萬8 千字,從 2011年到2017年的任何一場簡報都有,這真的是魔鬼般的標準跟超強的習慣啊,讓我不禁檢討自己。

人家一千場都紀錄了,你還不記嗎?

成為王牌講師從來都不是與生俱來

一開始以為福哥是本來就念相關科技或是從事相關行業的,所以時至今日理所當然能夠當一個王牌講師。

但這些都並非與生俱來,福哥告訴我們當年他也曾經做過工地的工頭,也寫過程式,甚至希望能夠當個厲害的工程師,但這條路上他驗證了李笑來所說的「七年就是一輩子」

每一個七年,都有不同的經歷,都是一個跨領域的轉換,就像前文所提到的,我和福哥的差別在於「一千場簡報的經驗」,如果你想做,持之以恆的做,有一天,你也會是王牌講師。

小結

這堂課程,通常只教專業的講師,福哥說自己是「講師的講師」一點也不為過,很幸運的是,我一個一年工作經驗的開發工程師,竟然能上到這個在台灣場場秒殺的課程,真的要謝謝我老闆這個瘋狂的人啊!!

這是我活到二十五歲,第一次能夠把三天的連續課程給聽完,還沒有睡著,甚至學完是能夠立即發揮、立即評估學習成果的。

文字的敘述能力終究有限,如果你想要增進自己的簡報能力,上一堂王永福(福哥)的專業簡報力,相信你會完全的震憾,畢竟這種強大的經驗值還是需要臨場才能完全感受啊啊。

上完福哥的 簡報課 講師技巧訓練課,整個個人講課系統完全 upgrade 了!!

那種升級的感覺完全就是從 windows 95 直接換成 MAC OSX 10.12 啊啊啊啊

最後感謝全棧營的所有夥伴們還有瘋狂老闆,太過癮了 XD

 
about 2 years ago

一、系統管理方面

指令 說明 範例
adduser 建立使用者帳號 adduser user1 #新增一個 user1 帳號
userdel 刪除使用者帳號 userdel -r user1 #刪除 user1 帳號,並且將他的目錄一併刪除
groupadd 建立群組 groupadd student #新增一個 student 群組
groupdel 刪除群組 groupdel student #刪除 student 群組
passwd 更改密碼 passwd user1 #設定或更改使用者密碼
date 顯示或設定系統時間與日期 date 122012301999.20 #將系統時間設為1999年12月20日12時30分20秒
login 登入系統
logout 登出系統
reboot 重新開機
shutdown 系統關機 shutdown 14:30 #在14:30關閉
halt 關閉系統
su 轉換其他使用者身份 su user1 #轉成 user1 使用者身份
w 顯示目前登入系統的使用者資訊
crontab 設定排程 -e #編輯該使用者的計時器設定

二、檔案管理方面

指令 說明 範例
cd 切換目錄 cd .. #回到上層目錄
clear 消除螢幕畫面
ls 列出目錄內容 ls -la #列出目錄檔案名稱及詳細資料
mkdir 建立目錄 mkdir app #建立一個 app 目錄
rmdir 刪除空目錄 rmdir app #刪除空目錄 app
mount 掛入檔案系統 mount /mnt/cdrom #掛入光碟機
umount 卸除檔案系統 umount /mnt/cdrom #卸除光碟機
pwd 顯示目前工作目錄
cp 複製檔案或目錄 cp -p abc /home/123 #將 abc 複製到 /home 目錄,檔名改成 123,而且擁有者不變
mv 搬移或更名現有的目錄或檔案 mv app /home/ #將 app 檔案或目錄搬移到 /home 目錄下
rm 移除檔案或目錄 rm -r sheep #刪除 sheep 目錄及目錄裡的所有檔案
find 尋找檔案或目錄 find / -name pwd -print (尋找/下,檔名為pwd的檔案)
which 搜尋path下的檔案或目錄 (找系統執行檔的路徑有用) which ruby #尋找 ruby 指令
touch 更改檔案日期,不加參數時,可建立空檔案 touch file1 #建立一個 file1 空檔案
df 顯示檔案系統的利用度
 
about 2 years ago

Cheat Sheet

Rails 4

Method Uses Default Accessor Saved to Database Validations Callbacks Touches updated_at
update_attribute Yes Yes No Yes Yes
update_attributes Yes Yes Yes Yes Yes
update Yes Yes Yes Yes Yes
update_column No Yes No No No
update_columns No Yes No No No
User::update Yes Yes Yes Yes Yes
User::update_all No Yes No No No
update(id, attributes) public

以 Rails 最正規的用法來說,會觸發 validation 、 callback 、 也會同時更新欄位中的 updated_at

update_columns(attributes) public

相當於直接下 SQL 更新,會直接忽略 ActiveRecord 的 validation,也不會進行回呼 Callback,甚至該欄位的 updated_at 時間戳記也不會更新,只會單一更新你傳送進來的 Attribute。

update_column(name, value) public

如同 update_column,只是用法變成 update_columns(name => value)

update_attributes(attributes) public

會接收傳進來的 Hash 並且 save,如果 object 無效或是被 validation 擋下的話會回傳 false

Example:

Object.update_attribute(:only_one_field, "Some Value")
Object.update_attributes(:field1 => "value", :field2 => "value2", :field3 => "value3")
Object.update_attributes(params[:user])
update_attribute(name, value) public

與 update_attributes 不同的是(雖然只差一個s),是不會做 validation ,為了避免在對整個 model 不熟的情況下,不建議直接做 pass validation ,很有可能導致災難讓自己花上更多時間 Debug。

題外話

原本在 Rails 4 約2012年時期,將 update_attributes 取代 update_column 了,都已經 merged 到 master (參考 Rails4 Commit a7f4b0a1),結果後來在這個 issue,是有人不贊成這兩個 method 是可以直接等價交換的,因為 update_attributeupdate_attributes 之間最大的差異就是在於 validation 驗證,並且 update_attribute 是在 ActiveRecord 底下保有完整的 dirty tracking and callbacks,也因為 update_column 並沒有這項特性,所以被要求 re-added 了 XD

 
about 2 years ago

履歷寫完了,當然要來談一下面試需要注意的事項跟一些小技巧囉。

就我自己經過了中國以及台灣的面試,聽了前輩以及跌跌撞撞的經驗,整理出了一些資訊,想提供給需要的人,畢竟取之於網路回饋於網路。

當履歷都已經準備就緒,放上你的人力銀行或是透過 meetup 等等投遞後,要如何在面試這樣雙向交流的表現上更加分?

你應該準備幾個小項目來應對面試有可能被問到的問題

  1. 準備約兩分鐘的自我介紹
  2. 反問公司的三個問題
  3. 有趣的小故事
  4. 研究該公司的產品及發展

以我自己的經驗,來為這四個項目做個詳細說明。

自我介紹

其實每個人都應該學會推銷,尤其是推銷自己,通常透過履歷審閱後將你找來公司進行面談或考試,表示該公司對你起了一些興趣,算是第一步的成功,但他有可能同時對很多求職者也是如此,所以我們必須要學會表達我與他人不同之處,如同人人都有健保卡,那就不足以為奇,但當你有了 VIP 卡,就是不一樣的意思了 XD

依我的面試經驗,通常就算他看過你履歷寫的介紹、關於我等等,在面談的起手式多半都是「先來個自我介紹吧」、「可以三分鐘自我介紹一下嗎?」。

在準備自我介紹的時候,依照求職的職業類別,由淺入深來講,舉例來說可以嘗試

  • 我從某個時候發現寫程式的有趣之處,他讓我解決了生活的便利也…
  • 我很喜歡一句座右銘,他是由 xxxx 所講,我認為很符合我的行事作風及生活態度…
  • 自從拿到第一次繪畫比賽第一名,就開始嘗試了這方面的學習…

以上的範例,是要讓面試你的人,清楚明白的知道,你的這項專業技能或是對這行的好奇或衝勁,不是「昨天」才決定的,而是一個醞釀很久、執行很久的一件事,對你來說,這件事情非同小可,而不能敷衍的面對,在這裡就是由「淺」開始打造你的自我介紹。

那麼在中間的部分,可以嘗試說著你如何靠這項專業實際做過的事情或成績,他也可以是一個小小的想法或是曾經做過不起眼但你覺得值得回憶的,利用這個部分替面試的下一個話題鋪陳,通常我會在這個部分提到我曾經利用瑣碎時間,做出了某個簡單的小玩具,並且幫助了我身邊的人,有時面試官會從你剛所提出的事蹟進行下一階段的討論。

如果你是一個專業能力還很新手的程度,盡可能的講你會如何「自我學習」、「解決問題」,並且專注的放大自己的人格特質,因為每個人的人格特質不盡相同,有些公司會認為都是找一張白紙進來,我寧願要挖到人格特質「好」的求職者。

通常對公司而言,「好」的人格特質都會有以下特點

  • 有強烈的自我學習動機或能力
  • 有好奇心去探索新的事物
  • 解決問題的能力
  • 善於溝通及發表意見

盡可能的在自我介紹中掌握以上所提的部分,內容不需要講長篇大論,我認為兩至三分鐘就很足夠了,因為人的專注力有限啊!

反問公司的三個問題

依照台灣普遍的求職者而言,多半都是去「被問的」,似乎很少有發言的機會,甚至給你發言權,卻不知道要講些什麼,我認為求職者與求才者是公平的,並沒有因為對方要發給你薪水而比較偉大,這只是一種交易的形式,身為求職者的我們不需要在這個部分唯唯諾諾。

我依照自己的經驗及最喜歡使用的反問整理出了以下幾個問題,可以讓你去反問公司,同時這也可能是你需要知道的內容,畢竟都要去上班了,總不能開工了還對自身權益一竅不同吧?

  • 如果有幸進到貴公司,接下來的三個月我會碰到什麼部分?
  • 貴公司對於加班是一種常態嗎?
  • 關於貴公司想找的同事是哪一種?我有符合其資格嗎?
  • 貴公司的氛圍及做事習慣?(或是問 workflow)

再來 option 的部分,可問可不問(有可能面試官會先提到),但也很重要

  • 休假制度及特休狀況
  • 福利部分(加班費、餐費補助、員工宿舍、健康檢查、三節獎金、年終獎金等福利)
  • 上班的時間,如何算遲到及處置方式

自身的權益要自己掌握,就如同如果你今天要去外地住宿,是不是也會先得知住宿的環境、福利及價錢等等的訊息,如今找工作這等大事比住宿來的長久,勢必不能輕忽自己的權益,問清楚,一定要問清楚。

有趣的小故事

這個部分是我很喜歡用的一個面試技巧,我認為人的記憶雖有限,但總有些特別的事情會讓你印象深刻,如果他跟你的專業或面試行別有關,那就更應該在這個部分提出來。

我曾經在面試的過程中,聊到我在中學時期,除了是個愛打電動的孩子以外,同時也是某線上遊戲的外掛開發者,在當年開發一些簡單的腳本,運用了些現在回想起覺得粗淺的技巧,卻是我程式開發生涯的有趣部分,在當時也創造出一些小小的名氣在網路上。

又或是我高中曾經修改過一些木馬,利用社交工程的方式去植入併操控認識同學或陌生人的電腦,當時覺得很新鮮很好玩(長大才知道犯法XD),一些有趣的經驗,是我常常在面試裡提到的,這些都不是瞎掰,是真真切切的小故事。

那麼,有的人會問說,如果我不像你有這些經驗,可以在我面試的職業類裡提出,怎麼辦?

如果你是有經過準備的轉職、求職,我認為多多少少可以講一些心路歷程,除非你真的是「沒有經過任何準備」而求職的,那這篇文章對你的效益可能不大。

研究該公司的產品及發展

既然去面試了,在面試前勢必要做功課,當然排除你是去玩的。

如果該公司有產品、網站、App,都可以嘗試使用或者稍稍研究一下,這會對你面試很有幫助,你總不會想一昧的聽他在介紹自己公司多屌多厲害。

有時我會在面試前看一下該公司的產品,設想我如何能夠改善他,或是能夠替他做些什麼?

這呼應到前面所提到的「解決問題的能力」,任何產品、設計都不會是完美無瑕的,如果你能想到他所沒想到的,是不是就有可能成為眾多面試者的與眾不同?

現在科技發達,對於該公司的一切,一般都能透過網路來取得,你可以試著查查該公司的新聞,或是面試心得,也可能是他們的專欄專訪等等,這些都可以促進讓整個面試過程不無趣。

最後,可以依照自己的說話習慣,自我進行重點的練習,切記不要背稿,那只會讓你看起來很僵硬很沒生氣。

 
about 2 years ago

我們都知道,在編程寫代碼的時候,都會秉持一些 Best Practices,例如最常見的 DRY ,每一個開發者都希望自己的代碼能夠簡潔且易維護,這不外乎是一個成為更棒開發者的指標,我們在使用動態語言時,能夠輕易達到 Don't repeat yourself 這個模式。

而 Meta programming ,能夠讓程式自己寫出動態的代碼,豈不是令人稱羨的實踐,但真的這麼好嗎?我們利用短短的一個定義只要五行的代碼,取代原先三個定義而十五行的代碼,看似讓日後的維護工作更容易。

但我卻遇過前輩曾經對我提出的一個問題,如果新人在開發 feature 的時候找不到這個 method 呼叫的源頭,他有可能會對整個專案做全域搜尋,但他可能沒想過這是由動態產生的程式碼,那個時候,他是不是有可能增加了尋找的困難?

起初我認為這是一個說詞而已,阻止使用 Meta programming 的可笑說詞,明明我可以辦到讓程式碼更簡潔, why can't do it?

直到後來,我才逐漸明白,這樣的動態產生有時是一種雙面刃,他在某部分讓程式碼「看起來」更簡潔了,但可能對往後的每一次搜尋增加了十秒,程式碼永遠都是「讀」比「寫」還要多次,除非你能做到對一個團隊、或是一個專案,在動態產生已經是習慣的事情,例如 Ruby 世界裡最著名的 find_by , dynamic *_path URL path

莫過於更多的單元測試,最簡單的竟是 grep test,如果你不能夠對一個專案搜出其定義的呼叫函式、類別、模組、變數,那麼在重構這些程式碼的時候,會令你感到相當痛苦,這有可能是前人所實踐的 DRY ,但卻給後人留下更多的麻煩了。

 
over 2 years ago

撰寫要點

人資一天看的履歷可能超過你一天投遞的數量,那麼能真正被留下來認真看的都是少數,要如何抓住看履歷那個人的目光,排序以及內容相當的重要,想想看一個Youtube 廣告,是不是前幾秒就決定你要不要把它看完,履歷也是。

  1. 一至兩句話形容自己,並放上你陽光的照片
  2. 自我介紹,需提及專業技能以及最引以為傲的事蹟
  3. 戰功(作品集 / 事蹟 / 得獎)
  4. 聯絡方式

什麼?就這樣?會不會太短?

我認為不會,因為真正能夠精確表達你自己的賣點是不需要過多的篇幅來呈現,你可能會喜歡喝一杯好的茶,或許加些珍珠襯托,但通常不會喜歡一杯好茶同時加了珍珠、椰果、布丁、粉條在你的飲料裡,why? 因為它光用看的就像餿水,如同你的履歷寫了一堆五四三,只會讓人覺得像一團凌亂的毛線球。

履歷的內容必須重質不重量,一昧的追求篇幅及份量,容易讓人覺得沒有重點,你只需要寫出真正吸睛的內容,而比較不建議在履歷上虛胖。

接下來我們來分析撰寫要點以及實例分享

1. 一至兩句話形容自己,並放上你陽光的照片

用簡短的話形容自己,如果年紀較輕,可以形容自己有衝勁、熱情,反之年紀稍長可以形容自己沉穩、內斂。

就我而言,我會希望點開履歷的對方能夠用最少的時間對我有一個基本的認識,人類的視覺容易被圖像吸引,簡短的形容配上一張陽光的照片是掌握視覺的基本要素,我們能爭取多一秒停留在你的履歷上,都是提高一分機率面試。

  • 範例 Kurt

這個簡短的介紹可以讓人感受到他充滿活力,對新鮮事保持好奇,並且期待成為一個實質的開發者(原先為零經驗自學),為什麼保持好奇心會是一個很重要的點?因為一個好的團隊通常不會希望請到像機器人一樣上班下班的程式設計師,多數都希望你會不斷追隨新的技術,在這個技術高度發展的世道,不願或不樂意接受新技術意味著成長空間是有限的,並同時希望在工作之餘能夠對其他新鮮的技術保有好奇及熱忱,因為這樣對求職者或求才方都是長久之計。

照片部分我認為盡可能不要放呆板的學士照什麼的,比較建議放的是符合你形容自己的簡短句子所相呼應的形象,如果形容自己沉穩內斂,卻又放上自拍照背景還是海邊,豈不是有些自相矛盾嗎?

2. 自我介紹,需提及專業技能以及最引以為傲的事蹟

在這部份其實就是所謂的自傳,不過這邊希望你捨去一般傳統式的寫法,提及家裡及一些不必要的要素,就我的習慣而言,我不會在履歷上寫學歷

我認為如果不是特別出色的學歷,能夠讓人第一時間就知道你是高材生的學校,其實完全沒有寫的必要,甚至有的面試官有可能會仇私校,我一直都不認為學歷是拿來評斷一個人能力的唯一要素,我們不需要在這部份就先被貼上標籤,因為真正會問你學歷的時候,往往都是面試的時候透過雙向交流的溝通得知的。

為什麼履歷不要寫家庭背景或一些個人生日、婚姻等等?

我們直接拿最近的徵才例子來看

我認為符合當前時空的「正常」公司,是不需要這些無用的訊息,我們不是要販賣個人資料啊,所以完全「不需要」在自傳裡面硬要寫這些無關緊要的訊息來濫竽充數。

3. 戰功(作品集 / 事蹟 / 得獎)

正所謂數字會說話,鄉民最介意的 NPNT (no picture no truth!),建議在著墨這部份的時候,將任何與你要應徵的職位或專業技能相關的戰績,條列式逐條寫下,可以包裝自己,但不要再這部份寫虛假的紀錄(被抓到豈不是很糗?),以文字逐條紀錄後,在加以圖片或實際的展示作為證明,效果會更佳放大。

就撰寫步驟來說,以我自己的履歷為例,可以將作品集逐條整理。

STEP 1 逐條整理

初步整理戰功以及作品如下:

  • Hackathon點TAIPEI 第四名特別創意獎
  • Ruby深度學習開源套件貢獻
  • Travbe線上訂房網
  • DD53 訂餐系統
  • BadBoss 找壞老闆
STEP 2 加入證明

接著我們嘗試加入證明,作品的圖片

STEP 3 分類

把戰功與實際可以展示的作品分類

  • 戰功

在這部份我把標題命為「特殊經驗」並把他放在履歷的第一頁,也就是簡短的自我家紹及照片正下方,其原因是我認為這樣的標題能夠快速的吸引目光,同時證明實力。

不過要注意的是,既然都寫「特殊」經驗,勢必真的要能夠獨特,而獨特的要素是具備「與眾不同」或是「要辦到這事並不簡單」才能在這的部分為自己加分。

  • 作品

由於我是網站工程師的緣故,所以我放我曾經參與過的大型專案或是用到較多技術且好玩有趣的實作。

新鮮人不見得要放很猛的作品,可以放一些平常練習或臨摹教學所做的小作品,這可以證明你有自學能力,千萬切記不要覺得作品小,就不放,因為你認為的小,別人不見得。

STEP 4 加入敘述及可以展示的網址

既然是自己的作品,想必有很多心得或是心路歷程,作品裡的技術輕描淡寫即可,令人最好奇的往往是你「解決問題的能力」,建議可以在敘述裡說明「曾經遇到的困難」及你是如何解決這樣的困難,如此一來,除了介紹實作,也同時證明了自己有「解決問題」的能力。

我認為解決問題的能力,是無論任何時空都是一個「好的」人才所必須具備的能力在這部份的撰寫恰巧可以證明這樣的自己,試著寫寫看吧!

4. 聯絡方式

這是簡潔履歷的最後一部分了,通常聯絡方式我都建議放在最下方,這樣一來看完你上述的內容,是不是就可以看聯絡方式來找你面談了呢?

不過雖然是簡單的聯絡方式,我認為這裡還是有些眉角存在的,以格式來講我多半都撰寫如下:

聯絡資訊

將你所有在網路上的專業部分蹤跡留下吧,也許可以幫助人資或未來同事更快了解你。

特別提醒一點,方便聯絡時間竟可能不要寫的像便利商店一樣全年無休,好像時時刻刻都很閒一樣,可以寫正常的上班時段或是你真正方便接電話的時間,觀感也許會好一些,也可以放上自己覺得精神或狀況最佳的時段,來一場完美的面試邀約吧!

 
over 2 years ago

前言

直到工作前,我不曾有過任何履歷撰寫的經驗。

我是普通科大畢業的,國高中時沒有任何撰寫自傳&履歷的經驗,出社會後上了 xdite老師的課除了學習編程技巧外,也在其中琢磨了自己寫履歷的技巧,幸運的是還因此被當成履歷線上教材的範例,並且在一次次的面試不斷檢討與修改,嘗試整理出所謂「獨樹一格」的履歷,神奇的是,傳遞這些技巧後,卻讓我的朋友們提升面試機會且獲得更佳的工作邀約。

我是如何辦到在半年內,協助三個朋友錄取前端工程師?

這是緣起我在 2016 年年底創建一個小小成長群,不包含我在內也才五個人,其中的三個人經由我的履歷修改以及檢討面談技巧後,除了面試邀約機率提升以外,也大幅提升 Offer 獲取率,至今都在不錯的公司上班。

案例一 Kurt 富萊特國際有限公司 / 網站前端工程師

從8月12日正式離職,到11月7日正式拿到offer不過三個月不到的時間,我真的必須很感謝老友兼師父的Nic,從看到軟體這行,到買筆電,長達兩個多月學習過程,甚至履歷和面試一條龍都有他在指導我,說真的,我非常幸運,三個月真的算是超快,如果這條路只有我一個人的話我想可能花三倍時間以上不為過…

案例二 Jimmy 痞客邦 / 網站前端工程師

必須第一個感謝大神 Nic,指引我很多方向,別的不說光這種不求回報的時間相處、講解,這大神給的大腿讓我抱的感動萬分!
”成長環境、工作環境“,對現在的我來說,尤為重要,我得讓自己更精進,我得讓自己更多視野,我才能盡情打造自己滿意的介面,甚至提高自己的效益…

  • 未滿一年的前端&切版經驗 / 非本科系
  • 75%的 Get Offer 機率,面試八間有六間給予 Offer !
  • 部落格參考: 面試心得
案例三 Hydra (台南)阿卡ACA / 網站前端工程師

好在十月時藉由Kurt的關係,進了rookie的群組,並認識了Nic跟Jimmy,而Nic就像我們的老師,給了我們三個rookie很多的方向,包含面試心得與履歷的撰寫方式,讓我受益良多。拿到offer真的讓我累積已久的壓力得以釋放…

  • 從 0 自學
  • 無任何程式經驗或相關科系
  • 台南地區投遞履歷成功面試及錄取(以工程師來說較台北機會少)
  • 部落格參考:從零開始的前端生活

雖這並非我本業,但憑著一些面試闖當的經驗,竟也整理出心得能與別人共享,當聽到朋友因為我的建議或修改能得到一份自己期許的工作時,心裡的感動真是無法言喻。

為何寫履歷?

在台灣以一個畢業新鮮人而言,面臨的第一個問題往往是「我要寫履歷,我要找工作」,然而最多數的情況常常是胡亂來一波人力銀行海投戰術,卻不見幾家公司回應,甚至回應的都是一些較不入流的屎缺,why?

因為你沒有認真對待你的履歷,讓人看不見誠意,自然就會吸引沒有誠意的公司,就像錄音機總是轉到相同頻率才能聽見相同頻道。

新鮮人雖新鮮,但當大家的履歷都是學校教的、人力銀行推薦的寫法如此一成不變,紀錄流水帳家庭背景的自傳,是無法襯托與他人的相異之處,要能吸引賞識你的伯樂勢必得證明自己是千里馬,而「寫履歷」這件事情就變成了表現以及證明自己的第一要務。

而且透過不斷的履歷修正、更新,同時也是紀錄著自己的成長,從第一家公司懵懂無知累積的經驗,進入第二版修改邁向更好的職位,除了能證明自己,也紀錄自己,你說,寫履歷是不是很重要?

是誰在看我的履歷?

一般人第一直覺都是人資主管,或是老闆?但其實看你履歷的職級不見得侷限在所謂「高職位」,有可能是你將來的同事、你未來的部門主管、人資助理或秘書等等來先進行第一輪審視決定你的面試邀約,甚至新創公司的 co-founder 會直接看,既然有這麼多可能,我通常會建議秉持一個要點,將你履歷中提到的專業術語口語化

以工程師舉例來說

Before

這個專案我用figaro管理密碼,並且用aws去deploy我的rails project,同時也接了XX寶來結帳。

不要覺得蠢,真的會有人這樣寫。

這段敘述如果是同行可能還看得懂你在說什麼,但若是沒有相關背景的人資主管呢?他不但看不懂,也會知道你是一個表達能力欠佳的人,所以這段敘述對他而言看起來可能跟沒有寫一樣,我們來嘗試改成較為「口語化」的敘述,並優化包裝整個語句。

After

這個專案我利用套件設定環境變數管理密碼,並且也有雲端部屬的經驗,這裡我利用Amazon提供的雲端服務放置我的專案,同時也在專案上串接第三方金流實作購物車功能。

這樣一來你的這句話能從單體技變成範圍技了。

好的履歷需要不斷被 review

三個臭皮匠勝過一個諸葛亮,應該可以用在寫履歷這件事情上吧?通常一個人自己寫的時候看不到盲點,甚至覺得自己寫的句子很完美、排版天衣無縫,但好的履歷內容通常都是不斷修正出來的,透過朋友之間的互相檢視、或是請專業的業界人士檢討,甚至是直接請獵人頭公司幫忙撰寫都是可行的方法,我建議自己的履歷一定要找三個人以上看過,並且給予意見,朋友中盡可能篩選有在業界有一定經驗的人為首選。

 
over 2 years ago

Amazon 雖然有提供一年的免費試用,不過期滿之後就是收費的開始,收費除了流量以外最基本的計算就是以時間計算,畢竟一寸光陰一寸金啊,一個月平均 744 小時開下來的量,就以最低的 0.0016 USD/hr 計算也算是一筆開銷,不過當你的機器並不是需要 24 小時持續開機的,其實可以設定自動在某時段開啟你的機器提供服務,也可以自動關閉機器來節省資源的消耗。

方法一:將定時開關機程序部屬在其他機器或實例

可以用一台機器做為操控所有的 instance ,在這台機器裡面安裝 AWS CLI,來操控其他的子機器,對他們做 cron job 排程,指定某實例的開關時間,不過缺點就是這台機器需要二十四小時不間斷的開著,這樣的情況通常發生在擁有多數機器的情況。

方法二:AWS lambda + CloudWatch

使用 AWS lambda tigger / event source 設置為 CouldWatch - schedule ,再把啟動或關閉的函數放到 handler 裡面,這樣他就會定時觸發開或關 instance 了,另外 CouldWatch 也有提供後台可以查看執行的紀錄檔或是延遲,這個作法較好的原因是可以不用多開一台機器來燒錢,而且前一百萬次的 lambda 運算是免費的。

方法三:使用 AWS OpsWorks

定制chef的cookbook,或者使用aws提供的gui界面來實現。

方法四:使用第三方服務

好處是方便易使用,缺點是你必須暴露你的 secret key 給第三方。

 
over 2 years ago

關於自動化測試

在這個世代開發網站,少不了的就是「測試」,能把寫好的測試讓機器幫你做自動化測試,只有通過才可以Merge,這樣一來保障了程式碼品質,同時也不會在有新的變動時搞砸了原有的設計或架構,在共同協作上也能更保障不會在上Production的時候弄爛了整個程式。

專案程式碼放在Github上面,但是誰來幫我做測試?

  • 你必須要先寫好測試,在Ruby上面最常聽見的不外乎是Rspec
  • 你必須要有一台Server自動Run script

如果Github是免費的,那CI-server也會有免費的吧?

這裡推薦目前很好用的服務,Travis-CI,不過要注意的是如果要讓你的Private repository也使用這個服務必須是付費的。

CI-Server

在Travis的網站上面註冊新的帳號後,就可以連結到自己的Githib上,並且可以直接選擇你的公開專案,選完之後就是進行細部設定。

設定你的Repository

先在你的專案目錄下新增一隻檔案,可以直接下指令

touch .travis.yml

並將下面的內容填上(這裡適用Rails project)

language: ruby

rvm:

- 2.3.2

bundler_args: --jobs 1 --retry 3

script:

  - bin/rake db:migrate RAILS_ENV=test

  - bin/rake

cache: bundler

詳細設定在網站的Getting start都有說明文件可以按照不同的Project去做調整

Github調整參考測試結果

1 .在你的Github專案上進入該專案的setting -> branches 將 master加入 Protected branches

  1. 按下Edit進去之後就可以參考CI吐回的結果決定pull request是否可以 accept merge了