分類彙整:工作

在新創公司,我的軟體開發習慣。

在startup工作,經常是在經歷會員數從0到1000、軟體從無到有的過程。

我在這個過程寫code的習慣是這樣的:

  1. 聽完需求,動手隨便寫、能跑就好、有成就感就好、什麼原則都不管、不花時間討論什麼偉大的架構或是未來
  2. 開始覺得不對勁、不整理code之後會死很慘,重構一部份code、補幾個測試
  3. 覺得繼續改善code只是在浪費時間,繼續往下快樂亂寫
  4. 重複以上這個過程

一個網站的beta版,我通常可以在2-4週內讓它上線。
在這個過程中寫出的某些code,老師看到了會很生氣。

其實,不是真的不理會任何原則。我奉行的核心是這兩條:

* 過早最佳化是萬惡的根源。

(Premature optimization is the root of all evil)

* 軟體開發真正的生產力,只能用它帶來的商業價值去衡量。

(Any true measure of software development productivity must be based on delivered business value)

至於怎麼定義「premature optimization」?
如果沒有前輩指引的話,這件事當然就是憑直覺了,所以想怎麼寫就怎麼寫。

這個循環進行幾次之後,會變得更有經驗,下一次開始專案時,在(1. )的所謂「憑直覺亂寫」,實際上會直接寫出更有經驗、更成熟的架構。

就商業上來說,跟現在流行的Lean Startup精神也搭配得很好。

沒經驗就是沒經驗、還不確定的需求沒有辦法針對它去優化、沒碰到問題不會知道如何處理。
不要花太多時間去處理你根本不太確定的事情。

最後附上Jason Fried與DHH所合著Getting Real中的一段話


最棒的設計師跟軟體工程師,並不是技術最好、手指最靈巧的那些人,也不是把Photoshop跟vim用得出神入化的人。他們是能夠判斷哪些事情根本不重要的人。真正的生產力是從這裡來的。

你大部份的時間都花在根本不重要的事情上。如果你能停止這些工作、思考哪些事情根本不重要,你馬上會發揮你從來沒想過的生產力。只要別把精力用在不重要的事情上就行了。

(Photo via Sharon, CC licensed)

Laravel之父:學習出色的design patterns!

Laravel之父Taylor Otwell在2012年接受採訪時談論了自己寫程式的習慣、並表示他最想給軟體工程師的建議就是「學習出色的design patterns」。
採訪原文在:
PHP Interview With Taylor Otwell The Creator Of Laravel PHP 5.3 Framework – Learn Good Design Patterns

Taylor Otwell最讓人驚豔之處在於:他本來是 .NET 工程師、一本PHP書都沒讀過就把Laravel創造出來了!

原文總共有30個採訪問題,後19個牽扯到技術細節。
本文節錄翻譯前11個問題與各位分享,讓大家更瞭解Laravel之父是怎麼樣的人。


跟我們談談你自己

我的名字是Taylor Otwell,我是住在美國的一位26歲工程師。

你如何開始PHP的

一開始,我是為了快速測試一些產品構想才在晚上寫PHP。我幾乎一直在思考新的產品構想,PHP能讓我非常快速地實作並且測試它們。

你能給PHP初學者的最好建議

見下文。

如果有人想成為更棒的PHP工程師,你會怎麼建議?

學習出色的design patterns。這不只適用在PHP。你可以在任何程式語言使用這些pattern。尤其是S.O.L.I.D. patterns 。把這五個徹底學好。這五個patterns會把你帶到新的境界,我每次寫code幾乎都在想這五個。

你讀過最棒的PHP書籍

我沒有讀過任何一本PHP的書。

你最推崇的PHP部落格或是學習資源

我沒有在看特定的PHP部落格。但是我會每天逛Hacker News,看看現在趨勢何在。

你用什麼IDE

我現在用Sublime Text 2的 “dev” 版本。我愛它!我不能想像沒有Sublime Text要怎麼寫code。

你怎麼debug你的PHP code?

我試著徹底對我寫的所有PHP code做單元測試,特別是像Laravel這樣的函式庫。這在之後會省下很多時間,因為我不用在改變某些地方之後重新測試其他部份。沒辦法寫測試的地方,我會從寫「echo」開始。我的測試工具有PHPUnit跟Mockery。

你最欽佩的PHP工程師?為什麼?

在PHP界,我最欽佩Fabien Potencier。這傢伙是寫code機器、永遠用銳利的眼光去追求扎實的架構、同時維護許多大型PHP專案(Symfony與其元件、Swift Mailer、Twig、Silex等等)、經營Sensio實驗室。雖然Symfony跟Laravel非常不同,我還是欽佩Fabien更勝於其他PHP工程師。

你是任何PHP社團的成員嗎?有的話,能談一談嗎?

我目前沒有加入任何PHP社團。不過我正在準備搬去市中心,也許我可以開一個新社團!

你之前是 .NET工程師,為什麼你選擇用PHP而不是別的語言來建造框架

我選PHP因為它幾乎在所有 shared web hosts都能用,而且他的官網說明文件很棒。雖然跟別的語言相比,PHP有點缺陷,但是它的易用以及完整的文件讓它非常適合用來快速開發應用程式。

Rails之父:我怎麼學會寫程式的?

DHH,本名David Heinemeier Hansson,Basecamp合夥人、Google 2005年度駭客、業餘賽車手,他最知名的身份是網路開發框架Ruby on Rails的發明者。

DHH曾在部落格發表他學寫程式的心得:

https://signalvnoise.com/posts/2582-how-do-i-learn-to-program

看過之後覺得獲益良多,特此翻譯出來和大家分享。


我怎麼學會寫程式的?

我花了二十幾年才真的學會怎麼寫程式。不是因為我嘗試的不夠,而是因為我一直用錯誤的方法。我以前都看著那些教材、範本照做,寫出一些我根本沒興趣繼續往下寫的東西。這是為了學習而學習。

我知道這方法對有些人管用,這些人就是很樂意學習新東西。我真羨慕你們。但這對我不管用,而且我知道很多人也沒辦法用這種方式學習。

為了解決鳥事而寫程式———對我來說這才管用。寫程式是因為非這麼做不可。寫程式是因為我他媽的在乎自己所寫的東西,而且我希望它越快完成越好。

這就是我學寫Ruby的方法。我把目標定為,用Ruby把Basecamp寫出來。當你因為一個目標而去學習,每件事的先後順序就變得非常清楚。我到底該做什麼才能讓這幾個訊息順利在Ruby執行?哦,我需要在這裡加一個迴圈。哦,我需要在哪裡抓些資料庫的資料出來。

決定目標的當下,你的點子就完成一半了、而且你還知道了該怎麼做。

簡單來說,就是從一些確實的東西開始做起,接著讓時鐘發出「滴」聲,然後讓它發出「答」聲。

CS183第一課:創業–關於未來的挑戰

Paypal共同創辦人、Facebook第一個外部投資者Peter Thiel,2012年在Stanford大學開課分享他創業的心得,課名為「CS183: Startup」。

美國作家Blake Masters將19堂上課內容摘錄成筆記並放在網路上:

http://blakemasters.com/peter-thiels-cs183-startup

這些筆記最後整理成書「Zero to One」,並在Amazon販售:

http://www.amazon.com/gp/product/0804139296

本文譯自於Blake Masters在部落格上的原始筆記。


CS183:創業–關於未來的挑戰

目的與前言

我們好像覺得這世界的零售業都抓狂了、批發業都發瘋了。理由很簡單:我們一直沒搞懂這個世界。最基本的挑戰就是–在商業世界或是人生都一樣–如何整合微觀與巨觀的事物去理解每件事。

人類學已經大致理解了這個世界。但是他們並不從研究中直接學到職涯發展的技巧。工程學則恰好相反,會學到許多技術細節。但是他們大概沒學到「為何」、「如何」、「在哪裡」應用他們的技術。最棒的學生、工作者、思想家會將這些問題整理成一個有力的論述。這門課就是要促進這個過程。

I.          科技的歷史

對於大部分的人類近代史來說–從17世紀晚期的蒸汽機發明一直到1960年代晚期左右–技術的變革非常巨大,幾乎可以用無情來形容。在更早之前的人類社會,人們幾乎都是以掠奪別人來賺取財富。工業革命導致的產業變化使得人們不再掠奪、而是透過貿易賺錢。

這個變化的重要性難以言喻。大概有1000億人曾經在地球上生存過。絕大多數都生活在一個停滯的社會中:成功不是藉著創造價值,而是索取而來。過去幾百年的科技進步真的是奇蹟。

對於未來最樂觀的預期發生在1960年代。人們相信著未來。他們思索著未來。許多人有極度的自信,認為之後的五十年將有史無前例的技術革新。

結果除了電腦產業之外,什麼都沒發生。人均收入持續在增加,但是成長速度大幅下滑。薪資的中位數從1973年就開始停滯。人們發現自己處在「愛麗絲夢遊仙境」式的困境中、必須更加費力的奔跑–也就是工作更長的時間–只求能待在同樣的地方。這個衰退的原因很複雜,光靠薪資數據無法解釋。但這些數據的確說明了過去200年的高速成長正在急劇減速。

II.         電腦科學發生的事情

電腦是近代科技發展減速的一個例外。Moore’s/Kryder’s/Wirth’s 定律始終靈驗,產業前景持續看漲。電腦科技隨著不斷改善的硬體以及敏捷的開發方式,成為了其他產業的某種標竿。它很明顯是矽谷生態圈的核心、驅動了現代科技的變革。也因此電腦科學成為了讓科技再次發展的起點。

III.       未來發展

A.        全球化與科技: 水平 vs. 垂直發展

發展有兩種:水平/廣泛,以及垂直/密集。水平或是廣泛發展,基本上就是複製行得通的那些東西。用一個單字來說,就是「全球化」。想想看中國50年後會是什麼樣子。保守猜測就是會很像美國現在的樣子。城市會被複製、車子會被複製、鐵路系統會被複製。某些步驟也許會省略。但總之就是在複製。

相反地,垂直或是密集發展,則代表做一些新的事情。用一個單字來說,就是「科技」。密集發展涉及了從0到1(而不像全球化是從1到n)。我們在加州之類的地方看到很多垂直發展,特別是矽谷。但我們要不斷質疑每件事。確實,很多人似乎完全只專注在全球化而非科技;譬如「已開發國家/開發中國家」這個名詞就很藐視科技,因為它暗示了現代是「已開發」、現代已到了極限。以一個社會來說,我們似乎總是會覺得科技在歷史上有某種極限存在。

值得一提的是,全球化與科技確實存在某些相互影響。不應該錯誤的用二分法區別他們。想想看從1到n得面對的資源限制問題。大概不能讓每個人都擁有汽車,那會導致生態浩劫。如果從1到n不可行,那就只有從0到1的解法了。正因如此,科技發展才極其重要,即使我們的重點是全球化。

B.         從0到1的問題

我們如此專注於從1到n大概是因為它比較容易。大家應該都承認,從0到1跟複製某個東西n次有本質上的不同,而且幾乎總是比較困難。就算嘗試走垂直路線,從0到1的過程還是得面對例外主義的挑戰;每個新東西的創辦人、投資者一定會擔心:我真的知道自己在做什麼嗎?我是不是瘋了?

舉一個政治上的例子。美國常常被認為是一個「例外」的國家。至少很多美國人堅信不疑。所以美國知道自己在做什麼嗎?還是它瘋了?每個美國人都擁有槍枝、沒人相信氣候變遷、大部分的人體重超過600磅。例外主義當然有別的一面。美國是一個充滿機會的大地。它是一個開拓新疆土的國家。它提供了新的出發點,保證有才華的人會獲得財富。每年有自認獨具天賦的大概20000人前往洛杉磯,想變成知名演員。其中當然只有很少一部分能真的如願。創業領域大概比較不像好萊塢那樣被例外主義帶來的挑戰所折磨。但它大概也無法完全避免。

C.        教育與敘事的挑戰

教垂直發展或是創新,就某方面來講本身幾乎就是個矛盾。教育本身基本上就是從1到n,我們觀察、模仿、然後重複。嬰兒並不會發明新的語言,他們學習現有的。從最一開始,我們就以複製行得通的東西來學習。

那樣沒辦法創業的。做別人在做的事大概能幫助你走30%的路。(譬如說,一定要把公司弄得很好看才行。然後才可以向創投竭力推銷。)但在某些時刻你必須從0到1–你要做些重要的事而且一定要做好–這可無從教起。想想托爾斯泰在《安娜·卡列尼娜》寫的前言,所有成功的公司都是與眾不同的;他們在不同方面理解了從0到1的問題。但是所有失敗的公司都一樣;他們搞砸了從0到1的問題。

所以研究成功企業的案例幫助很有限。PayPal跟Facebook是做起來了。但是很難得知過程中哪些不可或缺。下一個偉大企業大概不會是線上支付公司或社群網站。絕不能對同一個故事著墨太多。所以商學院的案例研究方法比較像個神話,幫助不大。

D.        決定論 vs. 非決定論

有關發展的一個困難問題就是如何評估一個冒險的成功機率。在從1到n的範疇下,那只是統計問題。可以分析然後預測它。但在從0到1的範疇下,那就不是統計問題了;樣本數為1的標準差是無限大。沒辦法做統計分析;統計上來說,我們一無所知。

我們很常用統計的方式去思考未來。統計學告訴我們那是隨機的。我們無法預測未來;我們只能用機率的角度去想。如果市場用一種隨機步伐在走,那就沒什麼道理去算出它。

但是有另一種數學式象徵可以用:微積分。微積分式象徵想知道能否、如何去搞懂接下來會發生什麼。舉NASA跟Apollo任務為例。必須非常確定月球到底會在哪。必須替火箭規劃出足夠的燃料。諸如此類。重點就是沒人會想搭乘一個在統計上只根據機率去飛的太空船。

創業在這個程度上就像是太空計畫。從0到1必須讓決定論壓過非決定論。但有一個很實際的問題。有個詞用來描述那些宣稱能看到未來的人:先知。在我們的社會裡面,沒有真的先知。Steve Jobs很巧妙的處理了決定論與非決定論之間的分界;人們都認為他有遠見,但他沒有太貪心去猜更遠。他應該是抓了個不會太遠的距離(也因此成功了)。

運氣跟實力的問題也很重要。要區分兩者非常困難,幾乎不可能。試著這麼做很可能產生錯誤的推論。我們現在最該做的也許是點出這個問題,然後建議企業家、可能的企業家,應該要注意這個事情。

E.         密集成長的未來

關於密集成長的未來有四種理論。第一種是收斂理論;從產業革新開始,會先有一個高速成長過程,但科技會減速、成長速度會趨緩。

第二種稱之為循環理論。科技發展呈現循環;有進展,然後接著緊縮。週而復始。在過去的人類歷史這大概一直成立。但之後會不會繼續成立就很難說了;很難想像我們會以某種方式失去所有累積下來的資訊跟知識、然後必須重新探索一次。

第三種是崩壞/毀滅理論。某些科技發明將導致我們如此。

第四種是特異點理論。某些科技發展將產生人工智慧或是到達新的知識水平。

人們很容易高估收斂理論以及循環理論的可能性以及解釋能力。相對地,他們可能會低估崩壞/毀滅理論以及特異點理論。

IV.         為甚麼是公司?

如果我們希望科技發展,為什麼是公司去做這件事?畢竟,也許有可能讓整個社會的人都替政府部門工作。或是相反,所有人都是獨立承包商。為甚麼是這種介於中間的版本、包含至少兩個人、而不是地球上所有人都做一樣的事?

答案可以用Coase定理說明。公司之所以存在是因為他們最佳化了內部以及外部的協調成本。大致來說,隨著組織單位成長,它的內部協調成本也會成長。但它的外部協調成本會下降。極權政府很明顯的太大了;外部協調很容易,根本沒有成本。但是內部成本則如同Hayek以及Austrians所說的,困難又代價高昂;中央統一分配行不通。

另一方面,獨立承包商則是毫無內部協調成本,但是外部協調成本代價高昂(需要跟所有需要打交道的對象獨立簽約),幾乎累到癱瘓了。理想狀態–公司大小–就是如何找到適當比例。

V.        為甚麼是新創公司?

A.        成本的影響

大小與內部/外部協調的成本影響很大。設想遠方有個100人的公司,員工彼此都不認識。公司政策會變得很重要、員工動機全都變質。讓工作看起來做完變得比實際上有沒有做還要重要、這些成本幾乎一直被低估。如果公司有一個以上的辦公室,專業投資人要不要投資就該再想想了。嚴重的協調問題常常是從擁有多層樓辦公室這樣乍看之下微小、無害的事情開始的。聘請顧問並且試著將關鍵專案外包也是一個嚴重警訊,理由類似。儘管過去40年的確減少了協調成本–這也說明了為什麼企業似乎比以前更小了–整體來說依然太過低估了。這些成本始終很高,值得我們努力去思考。

Path限制使用者只能擁有最多150個「朋友」就闡述了這種觀點。古代部落總有很明顯的大小上限,幾乎不太會超過。新創公司重要之處就在於他們很小;如果一間企業的大小與複雜度就像企業內人數的平方值,那新創公司就處於一個獨特的位置,可以減少人際、內部成本並因此能把東西做完。

大家熟知的Austrian批評也與此吻合。就算一台電腦能夠很嚴密的把一間公司面對的所有經濟問題都考慮進去(說明白點,根本沒辦法),那還是不夠。想考慮所有成本,還必須把人類的不理性、情緒、感受、以及互動算進去。電腦幫得上忙,但資訊還是不夠。如果我們真有全部資訊,也不知道怎麼利用這些資訊。所以在實務上,公司終究是有個固定大小。

B.         為什麼要創業?

這個問題最簡單的答案有點負面:因為你無法在現存的組織裡面發展新科技。在大公司、政府、或是非營利組織裡會遇到一些問題。他們可能無法理解財務需求:被官僚體系癱瘓的政府會付某些人太多的薪水、同時又付給某些人太少的薪水。不然就是這些組織無法處理個人的需求:你在大官僚體系很難得到尊重、名譽、鑑別度。有使命感的人容易想從0到1。你只有在被一群想從0到1的人環繞時,才有可能真的從0到1。這只會發生在新創公司,大公司或是政府都辦不到。

為了金錢而去創業不是一個好主意。研究顯示更多錢會讓人們更快樂,但在每年$70000到達極限。超過之後,更高收入帶來的邊際效應或多或少會被其他因素抵銷(壓力,高工時,等等。就算不考慮這些,金錢的邊際效應也很自然會遞減。)

也許想被紀念、出名會是比較好的動機。也許不呢。成名與否是不是真的如同人們以為的那樣重要,十分有待商榷。想要改變世界應該是比較好的動機。1776-79的美國就是某種形式的新創。開創者的動機是什麼?動機很大一部份也被文化影響。在日本,創業被視為輕率的冒險。在某處當終身員工則會倍受尊敬。這種觀點背後的字面解釋就是「所有財富背後都隱藏著嚴重犯罪」。Founding Fathers是犯罪集團嗎?所有開創者都是某種形式的罪犯嗎?

C.        失敗的代價
新創公司付的薪水比大公司少。所以創辦或是加入一間新創公司代表了某種程度的財務損失。這些損失常被覺得很多。其實,並沒有那麼多。

非財務的成本其實更高。如果你參與了一間失敗的新創公司,你可能沒學到任何有用的東西。你可能只學到了怎麼再失敗一次。你可能會變得更討厭冒險。你不是在買彩券,所以你不應該認為失敗只是n次裡面1次的機率問題。股份代表的不只那樣。

從0到1的創業不只財務成本低,連非財務成本都低。你至少會學到很多,而且你大概會因為你的努力而變得更好。從1到n的創業代表了很低的財務成本,但是滿高的非財務成本。如果你試著在馬達加斯加創辦Groupon然後失敗,沒人確定會怎樣。但是那樣不好。

VI.       從何開始?

我們可以在從0到1的這個過程上問三個問題。第一,什麼東西有價值?第二,我能做什麼?第三,什麼東西還沒人做?

問題本身很直觀。第一個問題闡述了業界與學界的區別;在學界,抄襲是萬惡之首,微不足道則不是。所以很多發明晦澀難懂,而且完全沒用。沒人會在乎一間奇怪又做不出好產品的公司。第二個問題在確保你能著手解決問題;不然,也就只是嘴上說說。最後一點,也是最常被忽略的,就是原創到底重不重要。忘了它吧,我們只是在複製而已。

用一個比較智慧的說法來闡述這幾個問題:你深信什麼沒人相信的真理?

比較商業的版本則是:哪種有價值的公司還沒被人建立出來?

這些是很棘手的問題。不過你可以驗證你的答案;就像許多人正在做的,如果有人聲稱像是「我們的教育系統崩壞了,現在就得設法修復」這樣的事,你知道那不是真的(那也許是真的,但很多人並不認為)。這多少解釋了為什麼現在有這麼多非營利教育機構、教育相關的創業公司。不過,要對他們是處在科技模式還是全球化模式保持懷疑。當你的答案符合下列形式,你就做對了:

「大部分的人都相信X。然而X不是真的。」

別誤會了;這非常困難的。很少人真的弄懂從0到1的艱難之處,所以它非常罕見、獨特、微妙。但這個過程中,就算沒有成果,也能帶給你豐厚的回報。

Toptal申請經驗(下)

最後一關的project interview我花了大約2週時間做出來,戰戰兢兢的準備面對面試官的各種刁難。

面試當天,同樣是用Skype分享畫面給對方看,操作一下各個feature,再用工具直接丟request給REST layer、確認ajax來回的內容,然後測試一下html injection的問題,最後再問我有沒有寫test?我用QUnit寫了幾個test去測REST layer而已,對方也表示沒問題。

整個過程10多分鐘就結束了,比我想像的輕鬆很多。

之後面試官丟給我幾個連結,讓我確認一下幾個工作的期待標準、跟工作方式、跟我確認了時薪。

最後他幫我開通了一個帳號,讓我有登入Toptal的權限。當天的面試就結束了。

登入Toptal要填寫一份完整的履歷,填寫完畢會有專人協助修改文法。大概一星期之後,履歷就正式上線了!

幾天後會收到一封email的電子合約,大概有4頁的法律內容要看一下、線上簽名。

注意合約關於隱私權、以及你與客戶互動的義務與限制,這部份有點嚴格,要看清楚再簽名。曾經有申請者跟Toptal的CEO因為這個在網路上吵架過:

http://yuriybabenko.com/blog/my-experience-joining-toptal

全部搞定之後應該是等著case分配下來。不過因為我接著有事去拜訪上海幾個星期,所以申請成功之後我暫時把履歷關掉了。

實際上接案順不順利,之後再分享。

Toptal申請經驗(上)

前陣子在網路上看到國外一間公司,專門經營接案的社群:

http://www.toptal.com/

網站標語是:’Toptal is a marketplace for top developers and top companies.’

看起來是會篩選工程師的社群。心想case的價錢會很不錯,就抱著試試看的心情去申請了。目前通過了3關,下禮拜要進行最後一次面試。

分享一下前三關的經驗,希望對之後想申請的人有幫助。

申請

在網站上按下申請之後,需要填一些個人資料、履歷等等的東西。

最後需要填Skype帳號,填完之後就等待他們通知。

記得我填完之後,好像過了很久(幾個禮拜吧),才收到email問我是否還有興趣要繼續進行面試。信中附上他的Skype帳號跟Google行事曆。在行事曆中預約對方的時段就可以了。

第一關

因為時差的關係,我在想Google行事曆顯示的「早上10點」到底是不是我的時區。

因為是姑且一試的心態,所以也沒仔細確認。

結果當天早上10點,對方準時在Skype上敲我,聯絡人資訊顯示對方是美國人。寒暄之後,首先問我是否知道Toptal在幹嘛,接著問我為何想要申請,然後再跟我簡介一次Toptal,最後問我希望的時薪。整個過程大約10分鐘。

這邊要注意的是,全程是英語對話,並且對方講話速度很快

第一關測驗應該是在確認英語對話能力(因為Toptal有向案主保證工程師的英語溝通沒問題)。

最後的時薪對方也只是紀錄做參考,他有說那不是最後的offer,之後會再確認。

第二關

第一關結束之後我收到一封email,裡面附上一個Codility的連結。

Codility是專門提供coding題目給公司線上測驗工程師的網站(公司需要付費給Codility)。

Toptal要求我3天內完成那份測驗(有事情可以要求延展)。

是一份90分鐘內寫3題的測驗。

對我來說滿難的,我只解出第一題、第二題只寫一點點、第三題留白。

心想我應該出局了。結果兩天後通知我得到140分(滿分應該300)、並且告知我通過這關了。

我猜只要解出一題就算過關。

第三關

通知我140分的那封信同時告知我進入下一階段,一樣是加入下一位面試官Skype並且在Google行事曆預約時間。面試我的是義大利資深女工程師Anna。我預約到3週後的時段,我想申請者應該很多。

這關需要用Skype分享畫面給面試官(我到當下才知道Skype有這個功能),對方現場出兩題給你解。她看著你寫code的過程,一題限時20分鐘、可以使用google,但不能直接找問題的答案。

解題完面試官會跟你討論一下。我兩題都在時間內解決了。

過完第三關,面試官把我丟給下一個工程師。一樣是加Skype並且預約時段,要求我在面試之前完成指定的小型但完整的web application:必須是single page application、全部實作RESTful API介面。(規格細節不便透漏)

test project的規格應該是根據你申請時填寫的自身技能而定。我因為填了JavaScript與PHP才收到這樣的題目。

目前我正在準備這個project interview。有後續心得再跟各位分享了。

插曲

分享一個小插曲,希望不要有人跟我犯一樣的錯。

第三關面試我以為是準備好webcam,穿著得體的跟Anna面試。結果是要現場寫code!我的Windows桌電根本沒有裝開發環境,怎麼寫code?

第一題只是考演算法,沒有file input/output,所以我就問Anna可否用php online interpreter在瀏覽器上解題?她同意了。

第二題需要讀取一份文字檔案,然後分析內容。我問Anna能否使用我的Ubuntu筆電?她說但她需要看我解題過程。於是我就在桌電上開了一份Google文件,在筆電上每寫2分鐘就把code全部貼到Google文件上…。好在Anna非常有耐心並且包容我。有申請的人記得在這關準備好開發環境。

2014-09-16更新:

我通過了最後一關的project interview,相關的文章請見

TOPTAL申請經驗(下)

(Photo via bpsusf, CC licensed)

程式設計師的眼界。

學寫code最重要的,我認為是眼界。

自己的能力不需要非常強、也不需要短期內進步神速,但要意識到自己的不足,理解到自己還需要學很多東西才行。

以Web Developer來說,即使找到工作、有份穩定薪水、能解決工作上的問題,還是要保持警惕。

要避免以管窺天、避免成為井底之蛙,我習慣在某些社群閒晃,看看別人都討論些什麼。

以PHP developer來說,最容易逛的就是台灣PTT的PHP版、Facebook的PHP台灣社團。

不過這遠遠不夠,這些地方的討論風氣並沒有非常熱烈。

最近發現討論風氣很好的是Reddit的php版:

http://www.reddit.com/r/php

把他當BBS或是臉書閒逛,會獲益良多,非常推薦各位在Reddit找到自己相關的版面逛逛。

中文社群的話,中國有兩個社群不錯:

開源中國

PHP100中文網

其實做什麼都是這樣吧,要把自己泡在趨勢裡面。關起來做自己的,很容易就跟趨勢脫節。

台灣怎麼沒有指標性的討論程式設計的網站呢?有點可惜。

(Photo via  Meyer Felix, CC licensed )