分類彙整:工作

David-Heinemeier-Hansson

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執行?哦,我需要在這裡加一個迴圈。哦,我需要在哪裡抓些資料庫的資料出來。

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

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

PeterThiel

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

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分配下來。不過因為我接著有事去拜訪上海幾個星期,所以申請成功之後我暫時把履歷關掉了。

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

interview

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)

OLYMPUS DIGITAL CAMERA

程式設計師的眼界。

學寫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 )

notes

我2月12號到5月8號學到了什麼?(軟體篇)

工作幾個月之後我開始想:

大家都希望工作經驗越久、薪水越高,憑什麼?

年紀越大,實力一定越強嗎?

所以我比上個月強?我比昨天強?

到底強在哪?難道只能空泛的回答:我經驗更豐富了。

於是我就開始筆記,明確的記下來,為什麼我每天都比前一天強。

寫到今天約莫三個月了,決定打成「軟體篇」、「管理篇」兩篇文章。

跟各位分享這本流水帳。

2月12號

* 第一次用別張table的id當主鍵,以前都是新建一個id欄位當主鍵

* 第一次使用CodeIgniter內建的Test library

* 應用了Jamie Rumbelow的MY_Model跟它的relationship功能

* 我終於知道怎麼寫單元測試了!

* 第一次應用Mock up的技巧

* 第一次把dependency injection應用在舊的model

2月13號

* 替每個web app在server上建一個帳號有好處。改root密碼時就不用全部shut down了。

* 單元測試真不錯。你替model加新功能,接著加新test,然後你可以確定全部功能運作正常

* 學會怎麼用JavaScript驗證input是整數來達到不錯的User Experience。

* 很流暢的完成的一段複雜的交易系統。

* 在需要同時開發新功能、修bug、更新美工的情況下,用git的branch做了良好的管理。

2月14號

* 操你媽的Bitbucket居然會掛站。所以我學會如何在windows上用AppServ, WINSCP, GitShell, Putty, LinuxReader達到類似Linux的開發環境了。

* 媽的PHP居然病毒般吃光我Linux資源。所以我學會recovery 模式、top還有kill指令了。

2月19號

* 在前一份php檔定義常數可以防止異常使用當前的php檔欸

* 知道php的singleton函式怎麼寫了

2月20號

* 實作一個簡易log系統

* 學會jeditable,還有一點小hack

* Restful的定義多理解了一些。

3月3號

* 原來瀏覽器在submit表單只支援GET跟POST

* 知道怎麼流暢處理exceptions或是errors了

* 自創一套方法,在model內應用validation library。(別人都在controller內用,我覺得醜死了。)

* 知道怎麼用salt跟hash更安全的處理密碼資料。

* 媽的用salt下去hash,丟失salt之後為什麼還是可以驗證?上一個工程師到底在寫殺小?

3月5號

* catch住exception,可以顯示錯誤訊息然後再丟出去。這樣不錯。

* 學到了第三方套件Mandrill還有它的設計架構。

3月6號

* 學會怎麼用phpmail透過gmail發信了

* 實作了「忘記密碼」的程序

3月8號

* 他媽的,mysql的float居然連1.3或1.4都存不好,幹。

* php有array_unique跟unset這兩個函式欸。糙,這語言真的沒什麼品味。

* 將simpletest導入CodeIgniter並且準備使用它了。

* 今天又碰了一次spark

3月10號

* 這輩子第一次去看Apache的server log來debug!

3月14號

* 理解到controller應該幾乎什麼都不做,但model也不能太大。所有class都應該要小!用library吧,不要出現God Pattern,不要出現mixin(商業邏輯與呈現混在一起)。每個class專注在一件事上!

3月17號

* 知道如何用table將email內容置中

3月21號

* 學會migration了

3月22號

* 會用simpletest了

* 更了解Test Driven Development 

4月3號

* 更懂abstract class是什麼了。(誰要是繼承我,就必須提供這些函式)

* 在Github上開了我生涯第一個issue

4月9號

* 客製化Exception有兩種:傳入code或直接繼承它

這樣理解它:

用code就是狂欠技術債(一堆沒整理的數字),但幾乎沒利息要還

用繼承的方式就是資產,但開發比較慢

4月10號

* 理解前輩的log library在寫什麼了

* 理解PHP set_error_handler跟set_exception_handler,還有CI如何組織它們了

4月18號

* 知道了CI, FuelPHP, Kohana, Laravel的歷史背景了 

4月23號

* 原來上傳檔案會被PHP暫存在tmp資料夾,程式跑完會自動刪掉。

* 而實作上傳功能只是把它從tmp移出去而已。

5月2號

* 第一次接觸Angular.js。酷斃了。但它好像很自成一套,而且跟jQuery不相容。

* 我發現我的JavaScript還是寫成procedural programming,並不是OOP或是functional programming!

 

 

(Photo via  Brady Withers, CC license)

Creative Company Conference 2011

我2月12號到5月8號學到了什麼?(管理篇)

工作幾個月之後我開始想:

大家都希望工作經驗越久、薪水越高,憑什麼?

年紀越大,實力一定越強嗎?

所以我比上個月強?我比昨天強?

到底強在哪?難道只能空泛的回答:我經驗更豐富了。

於是我就開始筆記,明確的記下來,為什麼我每天都比前一天強。

寫到今天約莫三個月了,決定打成「軟體篇」、「管理篇」兩篇文章。

跟各位分享這本流水帳。

2月13號

* 不要對自己的個性或人格太滿意而沾沾自喜。其他人可能根本不喜歡你。

2月20號

* 每天起床前有兩個選擇:繼續躺著做夢,或是起來完成你的夢。

3月5號

* 想要別人付出超乎標準的能力,你需要讓他「一點不爽的感覺」都沒有才行。

可以讓他有壓力,但不能讓他有一點不爽的感覺。要讓他在工作環境感到絕對的自在,這也是主管能對屬下付出的地方,也就是管理者該做的「託付」。

因為人是不可能在不自在的地方久待、全力付出的。

況且沒人是笨蛋、會在沒被託付的情況下,將自已託付給別人。

3月8號

* 別只想著找到能「做你喜歡的事」的工作。也許能「用你喜歡的方式做事」的工作也很棒。

3月10號

* 更了解消費者行為一些了

3月12號

* 37signals公司在暑假甚至一週工作4天。

* 37signals下面這個政策就叫做他媽的行銷。又有多少人能理解。

「公司出錢讓員工去學業餘興趣有一個條件:你必須跟所有人分享你學到了什麼。不只是跟其他同事,要跟所有37signals部落格的觀眾分享。」

3月13號

* 有限的時間會鼓勵人去有效率的運用時間。

* 生產力怎麼衡量?不是一天寫幾行程式碼吧?

「我能斷言,任何軟體開發的真正生產力,只能用它帶來的商業價值去衡量。」

3月21號

* 是否只能用「激勵他的內心」去增加生產力、很難用「限制他能做的事情」去增加生產力?

* 這樣去理解Jason Fried如何當一個老闆:他就像很保護其他人的一個老大哥。

* 沒什麼急事,就放人慢慢做。永遠都是「很急」,那叫壓榨。

3月22號

* 「被禁止上網閒逛的員工,因為必須消耗意志力去克制自己,所以生產力也下降了。」

* 「很多大企業會提供健身房、遊戲室、休息室給員工。這只解決一部分的問題。遠程工作(允許在家工作)是最佳解。但真正的問題是管理者需要去信任員工,別像管小孩一樣管人。理解有時候看著窗外發呆比較有生產力、有時候跟可愛女孩調情比較有生產力、有時候傳傳簡訊比較有生產力,而不是強迫他在電腦前面敲鍵盤。改變文化、擁抱新工作方式吧。」

4月10號

* 壓榨員工,公司比較賺錢?讓員工快樂、放任,公司比較賺錢?

公司已經「知道如何賺錢」、有方向,壓榨員工的確可以擠出生產力、也就是賺更多。

公司還「不知道如何賺錢」就讓員工準時下班、取悅他、期待他快樂的工作、期待他佛心去幫老闆找到方向、找到賺錢方法。壓榨他出來的東西,大概還是無法幫公司賺錢。

4月19號

* 來了幾個實習生,讓我想幾個步驟。不如這樣:

1. 凡事回答「都好都好、OKOKOKOKOK」

2. 表明你不會管他平常在幹嘛,一切看成果

3. 要求成果、要求成果,視情況協助安排進度

4. 檢討成效、協助下次能完成目標。

不可覺得手下沒做好、下次會更好,因為你這個廢物沒資格這樣想。你自己也沒做好,失敗你負一半以上責任。(你當人手下的時候,目標失敗不也覺得主管是廢物、老闆是廢物?)你帶的人fail,你就是廢物。只覺得問題出在他不夠強?是你不會用人吧。

為什麼中途沒發現會失敗?為什麼沒看出此人實力能放任到哪?目標導向、成果導向是否只是讓人無所適從?為什麼沒給人可以出力的方向?成就感、成長感沒人不喜歡,所以奮鬥是快樂的,結果他沒快樂奮鬥,問題會不在你身上?

把人當小孩子帶、出問題責任都推給別人,絕對不會有人用全力奮鬥去回報你。

4月24號

* 「信任是這樣的:我們一開始多少都會信任別人,當別人沒有善意回報,我們的信任便會少一些。」 

4月25號

* 看看這個創辦人如何以身作則:

—  他認為介面不夠自然,於是就自己寫了程式改善。此舉讓這名比利時藉的設計師嚇呆了。「像他這樣的行為真的很容易就像病毒一樣感染員工。」

5月8號

* 「你工作要主動一點」

不要這樣講話。像在指導小孩子。

他「怎麼做」不是重點。他厲害的話,一個人毫不溝通就默默全部搞定也可以。

直接點出「績效」是如何被判斷為「不佳」。讓他理解到「不主動好像真的做不出公司要的東西」

身為管理者,一定要嚴格看待自身言行。當你發現自己似乎在對小朋友講話的時候,小心了,你正在羞辱人。

* 他領日薪,你就每天跟他計較生產力。他領月薪,你就去在乎他每個月的績效,不要每天在那邊靠北靠目。

(Photo via   Sebastiaan ter Burg, CC license)