2013/03/26

談 Coding Style 與 Naming Convention

工作三年,回頭再來看看一些寫程式的基本 guideline,深深覺得小時候沒學好...

一個程式的週期不只有 key in 程式碼而已,包含了requirement、design、implementation、testing、maintenance。有一些好習慣從平常就要養成,習慣不好,程式寫得再快都沒有用,日後有可能在 maintenance 時就賠上了大半時間。

為了讓自己可以安穩的睡一覺,還是趁早把基礎打好吧。在網路上已經有很多現成的 rule 可以依循,不需要自己發明,除非用了以後發現有更適合自己的地方。



Coding Style

有句話是這麼說的:任何人都可以寫得出電腦看得懂的程式,但要讓『人』看得懂,不是一件容易的事情!
Run 比較久公司,可能內部自己就有一套 coding style,也可以在 google 搜尋一些 keyword: coding style, coding standard, programing guideline

自己就看得順眼的先找一套來使用吧,我自己寫 C 語言比較多,follow 的 style 比較偏向 K&R。

比較強的 IDE 都有內建排版,像是 Eclipse 預設就有 K&R、BSD、GNU...等方式,也可以根據樣板再去做修改,透過軟體排版會快很多。



Naming Convention (Naming Rule)

好的命名法對於程式可讀性是會大大加分的,其範疇包含了程式內部變數、檔案名稱、外部參數,其實命名法也沒有一個制式規定,但有一些約定成俗的法則。
最常聽到的應該是『匈牙利命名法』,有很清楚的規範,但如果完全照著走就會發現變數變得很冗長...
另外還有『駝峰式命名法』也是常見的


根據不同的語言、平台,都有自己的一套命名法,這些『約定成俗』的名稱,我還沒辦法整理出可以遵循的 rule,真的得靠臨摹別人的程式來習得,多看一些 open source project 吧。



Documentation

Programer 好像都蠻討厭寫文件的,但很抱歉,你可能需要開 API 給別人,日後需要轉交給同事,或是自己因為時間久了也會忘記,所以寫文件真的蠻必要的。
Software design document (SDD) 算是我有認為比較常用的一種,裡面包含了 data design、architecture design、interface design、procedural design。但真正常用的還是只有 data structure 與 API,這時候就要介紹一下 doxygen,也就是把文件跟 code 結合在一起,方便維護。按照 doxygen 的格式去寫註解,最後可以產生 html 或 pdf 的文件。
c - Tools to get a pictorial function call graph of code - Stack Overflow
另外,在這篇有提到蠻多工具可以把 function call 畫成圖片,也就是流程圖,這對於 trace code 有些幫助!但 function call 應該是在 design 階段就劃分好,否則輸出的流程太雜亂幫助也不大。



小結

Vgod曾說過:好的程式設計師跟普通的程式設計師,效率可以差上幾十倍甚至幾百倍。除了上述的 coding 習慣、使用工具、開發環境...種種細節都會影響到,在拼專案之餘,也花些時間注重這些東西吧,一起往神人的境界努力!如果還有其他關於基礎學習,我再更新上來。

2013/03/24

在 Mac OS X 建置 python 開發環境

Install gcc for command line

Open XCode, click menu Preferences -> Downloads
check Command-Line Tools


Install Python-2.7.3

$ tar zxvf Python-2.7.3.tgz
$ cd Python-2.7.3
$ ./configure --prefix=/opt/Python-2.7.3
$ make && make install
$ export PATH=/opt/Python-2.7.3/bin:$PATH


Install distribute-0.6.35

$ tar zxvf distribute-0.6.27.tar.gz
$ cd distribute-0.6.27
$ python setup.py build
$ python setup.py install


Install pip-1.3.1

$ tar zxvf pip-1.1.tar.gz
$ cd pip-1.1
$ python setup.py build
$ python setup.py install


Install virtual environment

$ pip install virtualenv
$ virtualenv --no-site-packages /opt/pyenv
$ export PATH=/opt/pyenv/bin:$PATH



Install eclipse IDE

Download Eclipse Classic 4.2.2

Install PyDev plug-in for eclipse

Click menu Help -> Install New Software
Add repository with location: http://pydev.org/updates, then check the PyDev


Configure the interpreter

Click menu Preferences -> PyDev -> Interpreter - Python
Add new...
 

Add a new project and run it.
The debug mode is powerful.

2013/03/16

極致工藝 MacBook Air

昨天把我吃飯的傢伙給升級了 - MacBook Air


從 2009 MacBook Pro (Core 2 Duo) 升級到 2012 MacBook Air (i7 + SSD) 真的超有感覺
我已經忘了什麼是等待

由於 CPU 跟 Ram 都是不能更換的 就一次升到頂規啦
CPU i5 跟 i7 只差 3000 多
Ram 的話由於要跑 VM 升到 8G 也是必要的
SSD 我用 256GB 倒是沒有更大的需求 (SSD可以自行更換)


港版的 MBA 鍵帽上沒有注音符號 相當乾淨
符合我的風格 真的超愛

這個薄度令人驚嘆
重量從 MBP 的 2.06kg 降到 MBA 的1.35kg
天天要帶來帶去 以後身體負擔也減少些

疊疊樂
我的 MBP 可以退役了
MBA 正式上線

2013/03/12

物品的價值在於用了它,而不是擁有它 - 斷捨離


最近看了『斷捨離』這本書,主要在講述『人』與『物品』間的關係,我覺得這是可以自己動手做,而且很快就會有效果的。

整理一些心得跟大家分享:

觀念

  1. 『物品的價值在於用了它,而不是擁有它』,放著不用反而是一種浪費,甚至還會腐蝕你的周遭 (生存空間、心情、打掃時間...)
  2. 物品跟人的生理、心理是相關聯的,影響的層面包括了健康、安全、心情、自信心…甚至是運氣
  3. 一個人的時間是有限的,單一時間能用的物品數量就是那麼多,大部分的時候都太貪心了
  4. 三種『捨不得丟』的人,性格與其表徵:
    1. 逃避現實:在外停留的時間居多,並非忙碌才不在家,而是不想在家而忙碌。不敢面對自己,因為害怕而為自己找藉口
    2. 執著過去:將情感寄托在物品上,任何物品都當作自己的珍藏。給人活在過去的感覺
    3. 擔憂未來:儘管生活上購買東西已經很方便了,但我們還是有「囤貨」的習慣,造成過度購買,何不等到真正需要的時候再來買。庸人自擾,擔憂自己未來可能會發生什麼事情,這是最多人的一種
  5. 人要活在『當下』,不要活在過去,也不要過度擔憂未來
  6. 『捨不得』跟『可惜』是你最大的敵人,捨不得用、捨不得送、捨不得丟,不要把太多情感賦予在物品上面,情感應該是對人付出才是
  7. 如果一件衣服穿在身上都會讓你覺得不自在、沒自信、不舒服,為何還留著?自以為塞在櫃子某個深處就不浪費了,心想著有一天我應該會再穿到它。
  8. 辛苦賺錢買了的東西,當下的價值是100% 卻捨不得用,等到某天要用的時候,它的價值可能只剩 60%,這才是真正的浪費(食物過期、衣服過季、當下快樂的感覺也褪去)
  9. 有個東西一直被我們忽略:生存的空間,東西堆太多就會佔據生存空間。別以為東西越多就是越富有,超過一定的程度就有反效果
  10. 東西變多的時候,不是去買櫃子/箱子來裝,應該檢視一下是不是有不需要的東西,重『質』不要重『量』
  11. 一個家的功能不不該只是安全庇護,待在裡面應該要有跟待在旅館一樣的舒適、放鬆,更進一步有溫暖與愛
  12. 整理是把東西擺整齊、收納起來、放到看不見的地方,但斷捨離的精神不是整理,是把不需要的捨棄掉,剩下的東西不多,自然也整齊了起來,連打掃時間都縮短了

做法

  1. 物品處理的 cycle:
    1. 自用:把最適合、最好的拿來用,並免除多餘的
    2. 送人:為物品找到適合的對象也是很開心的,也能增進彼此的情感
    3. 變賣:換取一些金錢,不無小補
    4. 回收:資源回收、舊衣回收、傢俱回收,都有對應的管道
    5. 丟棄:上述都不行的話,這物品的剩餘價值也不多了
  2. 把同樣的東西擺在一起,挑出最好了幾樣,並拿來用,剩下的淘汰
  3. 判斷是否購買/丟棄的依據:喜好程度、使用頻率、條件。(先跳脫價格)
  4. 分批丟棄,第一步先找出不能用的(壞掉的、發霉的),第二步找出可以用但用不到、不需要的… 最後留下來,就會是自己真正喜愛的、需要的
  5. 物品的收納要以方便拿取為主,否則漸漸的又會凌亂起來。但物品太多時,怎麼收納都不方便
  6. 『三』是我們的好朋友,是一個腦袋可以負荷的數字,分三類、分大中小三種、分三層、三格…
  7. 『七五一總量控制』,看不見的收納最多放七成(留物品通道),看得見的收納放五成(美觀),展示櫃只放一成(精品)
  8. 買東西寧可買貴也不要多買,大賣場的『單價便宜』只是一種銷售策略,往往『總價』還是買過頭了,要清楚知道這次買東西的目的是什麼,不要因為便宜就買
  9. 一個好的東西價值是有可能大過三個普通的東西,雖然貴了些,但如果是自己真的很喜愛的我會買,而且貴的東西大多會保值

結論

  1. 物品的價值是靠『人』來彰顯,用了才會發揮它的價值,而人也因為『物品』的裝飾,整體都提升了,彼此相輔相成
  2. 漸漸會培養出精準的眼光與果斷力,下次在逛街的時候,就會很清楚自己想要的是什麼,不會因為衝動而買了不必要的東西
  3. 東西少一點、簡單一點,生活也輕鬆一點,斷捨離能為你帶來長時間的快樂


2013/03/02

富足人生與圓夢計劃

兼顧把這八大類,打造一個富足的人生。
(註:畫 mind map 的免費工具:Mind42)


之前一直在思考,能否把人生歸納在幾個項目,好讓生活有個目標可以依循,又不至於漏掉些什麼,後來在雜誌上看到這張圖,取自于松村寧雄《曼陀羅九宮格思考術:達成目標成功圓夢》,我認為該有的都概括到,於是開始 follow。

也許有人會選擇把時間都投注在追求某一項,你可以成就一番事業、實現夢想,你的聲譽與財富可能羨煞許多人,但這對我來說都不是真正的成功,因為這成功得背後可能犧牲了自己的健康、陪伴家人、另一半的時間,或是當下的快樂。而且考慮到風險的存在,這個不平衡的狀態,在過程中可能會因失控的健康或家庭,讓你無法進行原本的計劃。

唯有一個均衡的人生,才能穩紥穩打的走下去,這彼此間是相輔相成的,千萬不要放棄任何一項,至少各項要達到60分及格,多餘的時間就看你想成就什麼,就把重心投注在那上面。這是一個保守的做法,要在維持均衡之下再去追求自己想要的目標,是有一定的難度,但真正夠想要的人一定能達到。



圓夢計劃

用紀律來圓夢,是我目前正在嘗試的方法,也是我覺得可行性挺高而且實行起來不會太困難(只要把習慣養成),但缺點就是很漫長,恩...我相信成功沒有一蹴可幾,端看你願意花多少時間與力量。

時間應該要花在真正需要思考的地方,我把 regular 的事情列在月曆上,以週為單位,好像小學生的功課表,什麼時間該做什麼事情都清清楚楚。

(註:Google Calendar 是你的好幫手)

  • 工作
    就是一到五的未標示的部分。自己要很清楚當下工作的『目的』是什麼?為謀生、為成就、為下一階段做準備、為興趣、交朋友...總之專心的把工作做好,才不會拖到下班時間。如果實行夢想與上班做的事情是重疊的,那就更棒了!例如我想在網路上創業,我白天從事的工作也是網路相關的研發。
  • 運動
    這太重要了,這是維持健康必要的條件,沒有健康別談論夢想,不要連累到家人就不錯了,如果你的人生是看長期的話,找一個沒有金錢、時間、地點、年齡、性別、人數限制的運動,游泳是個不錯的選擇,不會太劇烈,也可以運動到全身。健康這東西,平時身體好好的你不會知道它的存在,只有在病痛的時候才會凸顯它的重要。
  • 睡覺
    這也是在日曆裡未標示的。每個人的睡眠時間長短、起始不同,如何找到自己的黃金時間(最少睡眠最大體力),這要靠自己去 try,睡眠跟工作一樣,在於『質』不在於『量』。
  • 寫部落格
    我覺得這是一件很困難的事情,『自己懂了』跟『用文字表達讓別人懂』,這兩個層次真的差很多,進一步再追求排版容易閱讀、內容吸引人、持續更新。
    寫部落格真的對自己有幫助啦,好處有很多就不一一提了。
  • 便利商店看雜誌
    現在的便利商店有冷氣有桌椅,又有各類雜誌,趨勢、財經、自我學習、休閒...除了工作上的專業知識,上述人生八大類都可以在此補足,也培養廣泛快速閱讀的能力。了解一下世界發生了什麼事情,不至於跟社會脫鉤,也跟其他人有話題可以聊,挑幾個對自己有幫助的篇幅再去深究即可。
    我深深覺得這是世界上最划算的事情了,點杯咖啡就可以坐一整個早上,不過通常我都翻不到幾頁啦,大部份時間還是望著窗外思考,靈感也是從這邊兒來。
  • 喝咖啡
    喝咖啡只是舉例,要吃下午茶也可 :D 重點是跟你的朋友見面,你的朋友可能來自於各行各業、各職位,不需要有特別的事情才能見面,單純聯繫感情,關心彼此,也讓他們知道你在做什麼,不同的朋友會給你不同的看法。
  • 實現夢想
    有人說:一個人的成就不在朝9晚5,在於晚7到晚11。朝九晚五不過是每個人每天在做的事情罷了,想跟別人不同?好好利用下班時間吧。
  • 逛街
    每個人逛街的目的大不相同,治裝、看妹、看新奇的東西...總之放鬆就好,我最常做的就是逛新光三越跟誠品。這個目的在於走入人群,人畢竟是群體動物嘛!
  • 禮拜日 do anything you want
    這一天比較彈性,可以延續本週未做完的事情、一場電影、一趟旅程、回家鄉、辦聚會、休息聽音樂...重點在於做你『想』做的,滿足自己的慾望,讓自己快樂。由於一到六比較屬於既定的事情,禮拜日當然要跳脫一下啦,我會選擇去嘗試『之前沒做過的事情』。


計劃表僅供參考,時間要能自己安排,計劃一旦訂了就要去執行,改變 - 從小地方開始。

2013/03/01

北宜、翡翠水庫

我喜歡在上班時間出遊,因為不會人擠人,喜歡一個人幽靜、自在的感覺。

又是搬出 Evernote 啦,這真是好物!現在已經是晚上10點,隔天就要出發了,沒有太多時間做功課,找一下台北市周遭的好了,北宜公路還沒騎過。



參考一下網友都到哪邊去玩


整理如下,北宜公路(台九線)
  • 27K - 千島湖、八卦茶園
  • 26K - 海倫咖啡
  • 24.5K - 鷺鷥湖、潭腰
  • 24.5K - 雲海國小
  • 22K - 二格山賞雲瀑


悠悠哉哉大概半天的時間,另外北宜也是騎士的天堂,27K - 32K 可以看看重機壓車啦!
我是從汐止出發,路過石碇也順便走走吃個東西,


2013/02/24

Technical Party

在家辦過了火鍋趴、調酒趴,這次來點不一樣的 - Technical party
這個 party 以輕鬆為主,不限定於任何形式,重點是要一群人聚在一起開心啦!
辦 party 當然是離不開酒,想到電影 The Facebook,馬克在徵選人才時辦的比賽,一邊喝酒一邊寫程式就是過癮阿!



想了一些遊戲來助興,在快樂中也能學習呀~

Session 1

到 Smarterer 網站找自己拿手的主題,然後線上測試,rank 必需要在一定標準之前,否則就喝一杯酒。
Run1: 前 50%
Run2: 前 40%
第一輪失敗的人,必需要再玩一次,第二次還是失敗呢就再喝一杯。
Run3: 前 20%
這是個挑戰題,當參賽者有把握自己可以拿到前20%時,可以參加挑戰,一旦達到目標,其餘所有人都要喝一杯。

Session 2

我準備了常見的面試題目,輪流抽籤,以口述的方式或是在白板回答問題。一題10分鐘,台下每個人都是面試官,可以提問或是發表評論,時間到了由討論的方式決定台上的人是否通過考驗,若不通過就得喝酒。

Session 3

Lightning Talk 分享任何技術、工具、心得都可,自行準備 power point,或直接在白板上比劃。


哈~是不是很有趣!




放一些花絮照片



Lightning Talk 的部份,自己是發表了一些淺見啦 :P
  • RD的與眾不同
    • 獨立製作產品的能力
    • 自行決定生產工具/生產環境
    • 具有改變世界的原創力
  • 現階段可以做的事情
    • 善用 Evernote 讓生活更簡單
    • 寫 Blog - 用心過的東西就有價值
    • 寫 GitHub - Code reuse
  • 打造自己的品牌: Promote yourself
    • 維護 Facebook、Google+、Blog...
    • 參與社群: 技術的、創業的...
  • Open your mind: 學習->分享


每次辦 party 都可以讓賓客流露滿意的表情,真是開心呀:D