IE 是所有網頁設計師的惡夢,這應該不用多說,但網站若不支援到 IE7,仍是會引起眾怒…
而 IETester 可以同時建立不同的 IE 環境,方便開發者們檢視,介紹給大家。(甚至到 IE 5.5 都可以,是要逼死誰…)
IE 是所有網頁設計師的惡夢,這應該不用多說,但網站若不支援到 IE7,仍是會引起眾怒…
而 IETester 可以同時建立不同的 IE 環境,方便開發者們檢視,介紹給大家。(甚至到 IE 5.5 都可以,是要逼死誰…)
(本篇談的主要是寫伺服器端的軟體工程師)
不敢說自己當面試官的經歷真的很豐富,詳細數字我不清楚,但應該有近百位,節錄一下自己的心得。
每間公司都缺人才,要怎麼找到好的軟體工程師便是一個課題。當然每間公司也都有其預算限制,但這不在本文的討論範圍內,本文主要是探討怎麼「找到好的」,而非怎麼成交。
最近剛好自己也成了求職者,因此更有所體悟。
關於筆試
我同意筆試,但筆試內容應該盡可能是原理題或是觀念題之類的,而非語法題。大部分的情況,程式語言只是完成任務的工具,而若語法只是翻翻書本便可以查到的,那麼這不應該成為試題的一部份,你必須考慮 Google 威能。
筆試要考的,是那些非一時半刻可以查到的,甚至要查都不知道如何下手的問題,有沒有辦法順利作答,必須取決於經驗值,應掌握此原則出題。
了解原理並能用於解答題目,勢必得經過一段時間的磨練,才能較容易找出問題的癥結點,或是用較為理想的方式進行,而非只會土法煉鋼。(當然,某些情況下,土法煉鋼不見得一定是壞事)
而觀念題可以知道一個人有沒有思考自己曾經做過的事情,如果僅談教科書上的那些,或是對此沒有什麼想法,那麼此人肯定無法自己成長,任何事情都要有自己的見解,才有辦法修正與成長,也才有辦法言之有物,言之有理。通常在觀念題我會較著重於如何整理程式碼。
關於上機
我題目主要測驗三種能力。事前需詢問求職者熟悉的語言(多種也無妨),並準備好執行環境:
已經是上機考了,是否靠自己想出,完成並不重要,畢竟實際工作環境下,沒人不讓你 Google 的。與其你很天才的,在30分鐘內想了一個80分的解法,不如你花10分鐘,Google 個 99分的解法給我。
不要重新發明輪子,這在業界是非常出名的一句話,但許多有點料的工程師偏偏就是喜歡靠自己,魔鬼永遠藏在細節裡,你再聰明都比不上過去前人所累積的智慧結晶。
如果用80/20定律來解釋,80分的解法其實只需要20%的時間,剩下的20分得花你80%的時間,相信有經驗的工程師都知道這並不誇張…甚至還低估了它…
關於面試
面試也能判斷出一個人的專業能力,我也會嘗試在這關探出個所以然(雖然面試最容易嘴砲),畢竟你準備的筆試與上機,不一定完全等於一個人的實力。
當然面試主要是了解個人特質,更進一步的透過互動,了解每個人對工作的認知,對公司文化的認同,對責任的觀念…等,這就不多提。
如果這次的找人任務,主要是找出可以訓練的工程師,而非即戰力,那麼我會只面試就好,前兩項只是浪費彼此時間而已…
結語
廣義來說「人才」,指的是解決事情的能力優於常人,犯錯的頻率低於常人…等,如果能掌握這些原則,並思考「實際工作環境」下的狀況,便會知道該如何找到你期望的,不管你要找哪方面的人才。
當然,怎麼成交,怎麼留住人才,又是另一門藝術了。
一開始,我以為找到 Android barcode generator 的 library 是一件簡單的事情。
的確,如果用 Android barcode generator 作為關鍵字 google,馬上就可以看到 onbarcode 這個支援多平台的 barcode generator。整合起來也很簡單,花不到 10分鐘就完成了搜尋加上整合的動作。
問題是,仔細回頭看 onbarcode 官網的授權費用,高得嚇人!
要用這個當 solution,至少也得是夠大的案子才划算...
好了,如果不用 onbarcode,那麼這個搜尋任務,變得十分困難,你會發現大半是在談 online generator。
我第二個找到的是 IDAUTOMATION [Android 下載連結],同樣要收費不說,他的 Android Sample build 起來後,隨便點一個 Item 還會 crash!
於是,我只好把腦筋動在 html/javascript 上(在開發 APP 的世界裡,無論是 iOS 還是 Android,這招都是萬靈丹呀!)
果然馬上找到一狗票的資源可用。
接著只是挑選適合的套件以及授權方式的問題,在 Android 端應用 Local WebView 即可,這就不多做說明了。
public class Human {
public double weight = 0;
public double getPower() {
return this.weight;
}
public Boolean isEqualToPower(Human h) {
// 只要是人,都有取得自己威力的 method,叫做 getPower。
// 但是骨子裡,不同人種 getPower 的方式卻不一定相同。
// 這就是多型的應用。
return this.getPower() == h.getPower();
}
}
public class Black extends Human {
public double getPower() {
return this.weight * 1.5;
}
public void black_method() {
// only for black
}
}
public class White extends Human {
public double getPower() {
return this.weight * 1.2;
}
public void white_method() {
// only for white
}
}
public class Yellow extends Human {
public void yellow_method() {
// only for yellow
}
}
public class PolymorphismExample {
public static void main(String[] args) {
Human y = new Yellow();
Human b = new Black();
Human w = new White();
y.weight = 12;
b.weight = 10;
w.weight = 10;
System.out.println(y.isEqualToPower(w));
System.out.println(b.isEqualToPower(w));
}
}
會寫這篇,有感而發。
現在的網路資訊太過發達,什麼東西只要 Google 一下,就可以找到了。因此,要成為一個會開發各種功能的程式設計師,早已不是什麼難事。
這件事情在 APP 程式設計師上,更是屢見不鮮,即便開發過數十款 Android APP 的程式設計師,可能仍是不懂 JAVA 中的 Interface 的好處。
這件事情,已成常態,所以要成為一個「比較」厲害的程式設計師,你只要比別人多了解一點各種程式語言精妙之處即可。
先試著重構吧?整理一下你的程式碼,當你整理上遇到困難時,再回頭看看軟體工程的文章,看看大師們的 Design pattern,一定會有一些不同的體悟的。