2015年6月28日 星期日
「創新是一種態度」讀後感
追蹤翟神Facebook已經好一陣子了,已經忘記什麼契機讓我開始關注,但每每看到他與兔兔互動的對話都會心一笑,看到他對於時事的針貶就覺得又學到了一課。總之就是一個集幽默、知識及邏輯思辨的一個好地方。看到翟神要出書,當然第一時間預購並且拿到了預購簽名版:D
「創新是一種態度」這是一本鼓勵創新思想的書,本書的風格跟作者本人在Facebook上的風格如出一轍,輕鬆好讀又幽默,從點出日常生活我們常常不自覺自我限制的框架,到說明創新有哪些、創新是一種態度不是制度,最後鼓勵讀者把這些思想帶進生活中。(要像張無忌學太極一樣,無招勝有招...很高深的境界啊)。
「網路,不只是一個媒體!」
書籍的第一章就提到去總統府為馬英九上課說明整個網路社會是怎麼一回事,很重要的一點提到「網路,不只是一個媒體!」,而是人民真正生活互動的媒介。作者用馬路比擬網路,馬路一鋪下去,馬路周遭人民的生活方式、商業活動、社會結構,全部都會受到影響,這就跟「網路」現在為整個台灣、全球帶來的影響,如果只是繼續把網路當作一個媒體、一個傳播資訊的管道看待,會錯估了網路的力量以及整個網路社會。//這個跟最近開始上的Marketing in a digital world 課程相呼應,希望後續有機會分享
「三思而後不行---真的不行嗎?真的不行嗎?真的不行嗎?當你有一個新的想法,遇到阻礙時,至少找出三個真正不可行的理由,然後才能放棄,不要一個理由就把你打垮」
要有好的理由才能維持現狀,要不然每天都要想著如何去改變!可以是改良既有模式的改變、漸進式的改變、跳躍性的改變,不知道什麼時候做得到,但是...常常練習一定會越來越好的!!
2015年4月11日 星期六
C++ 學習小筆記 Smart Pointer
基本上就是參考這篇StackOverflowSmart Pointer 省掉了自己delete c++ object的麻煩
如果用原本C++的pointer:
MyObject* ptr = new MyObject();
ptr->DoSomething();
delete ptr;
但是如果用的是Smart PointerSomeSmartPtr<MyObject> ptr(new MyObject());
ptr->DoSomething();
不用 delete ptr 超方便der但是事情當然不會這麼簡單
要看你用的是哪一種smart pointer
(目前覺得)常用的有幾種
- unique_ptr (只會活在scope裡面)
- shared_ptr (會幫你做reference counting)
大概就是這樣 小心使用囉~
2015年4月9日 星期四
與Kindle Voyage電子書閱讀器相處的30天
提到電子書就會馬上想到Amazon鼎鼎大名的Kindle e-reader,在澳洲交換學生的時候,常常在通勤的路上,都會看到至少一人手上拿著一台輕薄Kindle享受閱讀,由於中文電子書在Kindle上的數量還是非常的少,所以當時對於Kindle的唯一印象就只有「電子墨水模擬文字在紙張上的呈現,比起一般螢幕對眼睛比較好」。前陣子實際入手一台Kindle Voyage後,發現Kindle真的是愛閱讀者最佳的好朋友,因為:
Kindle好棒理由No.1: 上網緩慢的不方便,讓使用者完全專注于閱讀
雖然Kindle有wifi/3G連網功能,但是使用上的不便,你絕對不會想要用Kindle瀏覽網頁,但這也讓使用者可以真正專注於閱讀的內容,而不會像使用平板或手機閱讀時,容易分心滑去其他app或者是看一下別人的動態。
Kindle好棒理由No.2: Amazon提供“Send sample to Kindle”試讀服務
中文電子書的數量在Kindle的確還是很少,但是英文電子書資源完全不用擔心,Amazon上除了許多讀者用心撰寫的書評可以參考當作選書的依據,最棒的是只要一鍵就可以讓Amazon把電子書試讀本免費傳送到你的Kindle裝置,完整一章讓你可以先看一下書籍合不合你胃口,再決定是否購買(Amazon的設計讓你在試讀後,可以輕鬆從Kindle再一鍵快速完成購買,這點深深地向Bezos致敬!)
Kindle好棒理由No.3:Chrome Extension“Send to Kindle”收藏
在網站上看到喜歡的文章,可以透過這個extension傳送到Kindle上,雖然電子墨水對於眼睛是否真的比較健康還是個未知數,但是Kindle裝置單純的閱讀環境,讓我自己挺喜歡在Kindle上面閱讀的,有了這個Extension讓我除了電子書,更增加了在Kindle上可以閱讀的資料,讓Kindle成了我最愛的“Read it later”神器也是知識寶庫!
最後附上我在Kindle上看到的廣告,這系列如果出海報我應該也願意掏錢出來買!
“Children exposed to reading may become CURIOUS, INDEPENDENT or even develop an IMAGINATION full of wonder”
祝大家Happy reading囉!
2015年3月27日 星期五
C++ 學習小筆記-std::map vs std::unodered_map
顧名思義map 跟 unordered_map的差別在於"ordered"也就是 map是有order unordered_map則沒有,
差別(應該是)在於底下的實作方式
map 是用類似 Binary tree 之類的方式來實作,所以也支援從 find()的結果開始繼續iterate
還有lower_bound() 之類的功能
而 unordered_map推測應該是用 hash_table 來實作
因此:
unordered_map所花費的記憶體空間比較大,但一般情況下會比較快
然而worst case底下 map 會有O(logN)的時間複查度 unordered_map 卻有可能用到 O(N)
所以 ... 自己看個伴吧 :P
2014年12月26日 星期五
沒有大學學歷卻能進入Google的四個步驟
前言: 作者是寫 Always Be Coding 這篇文章的同一個人,第一次翻譯請多多包涵。原文請參考Four Steps to Google Without a Degree
自從我寫了
ABC: Always Be Coding - How to Land an Engineering Job
之後,許多人問我:”你沒有大學學歷是怎麼進Google工作的?“。以下是我的故事,但請記住每個人的狀況可能會些不同。
一直以來我都超想要進UCLA唸書,但是我高中的GPA實在太囧了(2.45),而且我自己那時候也還沒有搞清楚我想念什麼。不過後來在普渡大學的分校唸書時我有修一些computer science的課,希望有朝一日能夠轉行當工程師。大約兩個學期後,我得到了一個很不錯的的offer,開啟了我接下來的旅程。
自從我寫了
ABC: Always Be Coding - How to Land an Engineering Job
之後,許多人問我:”你沒有大學學歷是怎麼進Google工作的?“。以下是我的故事,但請記住每個人的狀況可能會些不同。
一直以來我都超想要進UCLA唸書,但是我高中的GPA實在太囧了(2.45),而且我自己那時候也還沒有搞清楚我想念什麼。不過後來在普渡大學的分校唸書時我有修一些computer science的課,希望有朝一日能夠轉行當工程師。大約兩個學期後,我得到了一個很不錯的的offer,開啟了我接下來的旅程。
第一個步驟:沒那個本事之前,就先假裝自己有那個本事吧!(Fake it till you make it)
我大學的時後有在Indiana一家小公司打工寫網站(12鎂/小時),這份工作雖然不算太糟,但是也不是我夢想中的工作。不過我還是認命(也很認真)的完成了了幾個專案,算是一個CP值很高的員工。同時我在我剩下的一點點空閒時間開發一個遊戲,所以我決定跟老闆商量,請他給我三個月的時間來完成這個遊戲並放到他網站上賣。我做了精美的簡報來說服他們這個 shareware model 是怎麼運作然後要如何賺錢,最後老闆同意花錢請我來做這個專案。大概是我投影片做得很美吧...大約兩個月後,Demo版本上線了,一間加州的新創公司CodeFire發現我正在跟他們做一樣的遊戲(類似SubSpace但是是3D的)後寫信給我叫我別再做了否則要告我,我回他們說"想要我停,除非你們雇用我"。結果我就拿到Offer了!在三個禮拜的交接之後,我就打包去加州了。
第二個步驟:跟高手當好朋友(Befrined a master)
這大概是最重要的一個步驟了,公司裡誰最厲害就找他當你師父吧,千萬不要停止學習。我在Double Helix 工作的時候我師父Nathan Hunt大概是我看過少數幾個又聰明又謙虛的人。就算我問他一些很基本的問題,他總是很有耐心的回答我。我那時候應該跑去他辦公室問過幾千個問題吧,例如"要怎麼一個旋轉矩陣插入另外一個?","要怎麼寫一個圓柱體的碰撞偵測?"。幾年後他也加入了Google(比我晚了一個月)。我的每一位師父都改變了一些我解決問題,觀察問題很重要的方法。
第三個步驟:填補你不足的地方(Fill in the gaps)
因為我不是CS科系畢業的,我知道我有很多基礎知識上的不足。例如我知道要怎麼寫一個物理引擎但是我不知道怎麼解決DP(dynamic programming)的問題。為了填補這些缺空,我幾乎把所有我聽過的的資料結構/演算法都實際的實作一遍。其實需要的資訊書上或網路上都有,但是實作之後透過觀察來了解為什麼要如此設計跟看出還是有一段差距。長時間來說,要做培養下面這些能力
- 在C, C++, Objective-C, Java, PHP, Python 或 Ruby中至少成為其中一項的高手,然後熟悉另外一兩個語言,另外對於Scala, Haskell 或 Lisp也可以瞭解一下。
- 學習資料結構,最好要親自實作,然後了解其中時間複雜度。
- 學習解決程式問題,熟讀Top Coder 的演算法教學,然後練習SRM的題目
- 建立你自己做(過)完的專案集(寫過的framework, 誒批批,小遊戲...等
第四個步驟:建立你的自信心!(Find confidence)
離開印第安納州後六年,我已經完成了六個不同平台的遊戲,一樣的工作對我來說已經沒有挑戰性了,因此我投履歷給Google,心裡想說如果我上了,我就是一個"真正"的工程師了!(因為我一直沒有大學CS的文憑),但不意外的Google並沒有回應我...一年後我又再次寄出了履歷,但這一次我直接把"學歷"的部分拿掉了!諷刺的是,我接到了人資打來的電話,我們約了兩個禮拜後的電話-螢幕面試。在這兩個禮拜我拼命的死背所有演算法/資料結構,不斷的練習,直到我的所有對於Google面試的恐懼變成了自信與興奮。當時的每一個面試題目到現在我都記憶猶新。面試官都是很健談的人,我相信他們一定也感受到了我的熱情!其中有幾個題目是:1) 給你一堆二維的座標,請算出天際線(請參考skyline problem)這題滿簡單的,我用max heap解決了這個問題,這題其實有很多解法2) 請你設計一個"小畫家"的程式這題是目前我看過最有趣的題目,一開始我畫了一些interface,還有class diagram 接著我也提到了填滿顏色的功能,面試官就要我實作這個功能,剛好因為我有在TopCoder上練習,所以我閉著眼睛也可以把BFS寫出來。3) 說說看你有什麼寫程式的好習慣?這是一個沒有標準答案的問題,我回答了一些關於不同的測試類型分別是用在什麼情況(Unit/Integration/Acceptance),我也聊了一些關於程式碼一致性與維護性...可以參考Code Complete 或是 Effective Java.我很享受每一場面試解決問題的過程,如果我沒有做好前述的準備,我想結果應該會非常的不同。面試結束後我感覺滿有希望的,但聽說就算面試官同意錄取我Larry Page他會還是會自己審查我的資料,我心裡面滿擔心他會不滿意我的學歷。但事實證明我的擔心並沒有成真,有一天當我在吃壽司的時候接到了錄取的電話,然後我就開心的接受了Offer,從這一刻起我知道,我再也不需要那張我缺少的文憑了!
一個成功打勝仗的戰士會先贏了戰爭才走上戰場,
一個戰敗的戰士則是上了戰場才想辦法要打贏
在Google這間不可思議的公司學習成長了五年之後,我離開了Google
網誌存檔
技術提供:Blogger.