2008年12月20日

時間管理

筆記 Randy Pausch 生前關於時間管理的演講

這場演講包含的內容頗廣泛,從各式輔助工具到如何分派作業給別人,並分享一些教授自身的經驗。將近 90 分鐘的影片,值得一看。

「30 天後重新檢視時間日誌,並問問自己:『我改變了什麼?』如果我沒有改變任何事物,那至少我們共同渡過愉快的一小時。如果你改變了事物,你會有更多時間陪伴心愛的人。」

  • Remember that time is money. --Ben Franklin
  • 許多人都善於管理金錢,但卻忽略了如何管理時間。僅記金錢可以再賺,但時間一去便不復返。把時間當成錢來管理,並問問自己:我的一小時值多少錢?
  • 人生苦短,做自己覺得有樂趣的事。
  • Being successful doesn't make you manage your time well. Managing your time well makes you successful.
  • 時間規劃應該做長遠、系統的改變。
  • Do the right thing > Doing things right
  • 問問自己:為啥我要做這個?目標是啥?如果我不去做呢?
  • 將事情依照重要與否、急迫與否做出四個組合,則重要的事總是優先於不重要的事,即便期限未至也是。挪出時間提早將「重要但不急迫的事」做好,可以避免它晉級成「重要且急迫」。
  • Doing it at the last minute is very expansive.
  • 訂出 fake deadline
  • Scheduling: You don't find time for important things, you make it!
  • Make time by electing not to do something else. ( Opportunity cost )
  • 捨棄沒有價值的事。值得就是值得,不值得就是不值得。要懂得說「」!
  • 列出「100 things to do in my life!」。然後當我在做清單上沒列出的事時,我會覺得......
  • Failing to plan is planning to fail.
  • 無論計劃會如何改變,總是得先有一個計劃
  • 訂出短 / 中 / 長期目標。
  • 列出 To do list,並依優先順序排列。將事項細分成更小的事並逐項完成。總是先做最困難的事。
  • If you can dream it, you can do it. --Walt Disney
  • 善用狀態最好、最有創造力的時段做重要的事,並用低潮做瑣事。
  • 迴避、限制干擾的頻率和長度。( 這點在 Peopleware 講了不少 )
  • 做事應注重效益:也許不是最高效率,但有最好的結果。Work fewer hours, get more done.
  • 迴避 Parkinson's Law ( Work expands so as to fill the time available for its completion. )
  • 做好 Time Journal,並時常更新它。用它來紀錄時間到底花到哪裡去了,並且改善。
  • 經驗是無價的。錯誤的決策讓我們得到經驗,因而在未來做出正確的決策。
  • 用 fake class 填補空堂,在圖書館與書獨處。
  • Kill your TV.
  • 會議開始前必先給出 agenda。結束後花個一分鐘紀錄所得到的結論與結果。
  • 單身會浪費時間,因為行為無需對其他人負責。如果揮霍會影響其他人的生活,就會更加注意克制自身。
  • 可能的話,把金錢換成時間,因為時間永遠不夠。
  • 最重要的事:睡、吃、運動。尤其是:如果沒睡好,啥事都做不好。You always have time to sleep.
  • 如果沒時間把事情做好,也沒時間把事情做壞。
  • 尋求 Work-Life Balance
  • Time is all we have.

單身會浪費時間,嗯。

題外話,教授在投影片中放了一張南瓜燈的照片,圖案很是眼熟。後來終於想到這頗類似 amaroK 的 icon......

有空再修「人生的最後一堂課」......

2008年12月3日

[讀書筆記] Python 核心編程 (Ch13~14)

第 13 章物件導向程式設計 / 第 14 章執行環境 ( 講如何調用 & 終止程序 )

本書的 Part I: Core Python 就到此為止了;接下來的 Chapter 15 ~ 23 被歸為 Part II: Advanced Topics,不一定會繼續寫筆記 =3=

Chapter 13: Object-Oriented Programming

  • types 和 classes 被統一了。
  • object 是 mother of all classes。宣告時至少繼承自 object 的為 new-style class,否則為 classic class。
  • class 的宣告與定義沒有區別。
  • 對 instance 做 assignment 會增加 reference count
  • class method 定義時需要的 self 參數,同 C++ 的 this,是為了識別呼叫的 instance。
  • __init__() 為 constructor,應回傳 None。__del__() 為通常無需去碰它的 destructor
  • 子類重寫 __init__() 後就不會自動調用父類的了。需顯式調用 parent.__init__(self,...) 並顯式傳遞 self 參數 ( 因為不是透過 instance 調用,interpreter 無法自動給出 method 所需的 self )。__del__() 亦同。
  • 基本上,class attribute 都是 public
  • class 定義中出現的 variable assignment 產生 class attribute (static variable)
  • 可為個別 instance 添加 attribute,尤以 __init__() 中設定 self.attribute 最為常見。
  • 同名時會優先存取 instance attribute,然後才是 class attribute
  • dir(obj) 傳回 list,列出 obj 的所有 attribute 及 method。help(obj) 也可列出這些資料。
  • 特殊的 class attribute:__name__ class name string、__doc__ documentation string、__bases__ 列出 tuple of direct parents、__dict__ 屬性的 {name:value}、__module__ 定義所在處。instance attribute:__class__ type,避免顯式給出名稱。
  • documentation string 不會被繼承。
  • 繼承時以 DFS 搜尋 indirect base classes 的集合。
  • 管理 instance count 的好方法是用 static member
  • binding:bound method 需有 class instance 才能被呼叫。想呼叫 unbound method 必需言明 class name 並手動傳入 self
  • class 中定義的 function 若不帶 self 參數,即為 static method 或 class method。用 @staticmethod 修飾為 static method;用 @classmethod 並傳入標示 class 的變數 ( 通常為 cls ),為 class method。
  • 可由多個 parent classes 繼承 attribute 和 method
  • 若 C 繼承 P,super(C, self).foo() 等同於 P.foo(self),可避免顯式給出 parent name
  • 繼承後,__init__() 若沒被覆寫就會自動調用 parent class 的;覆寫後則不會。
  • 想從 built-in immutable type 繼承時,constructor 用 class method __new__(cls,...)
  • Table 13.4 列出一大票可供自訂的 special methods
  • 多重繼承時的 method resolution order:由左至右 BFS。class attribute __mro__ 給出這個次序。
  • BIFs:issubclass(sub, sup)、isinstance(inst, cls)、has/get/set/delattr(inst, string)、dir()、super()、vars()
  • 可在定義時用 __repr__ = __str__ 這樣設定 reference alias
  • 相較於 addition operation 傳回新的物件,像 += 這樣的 in-place operation 需傳回 self。
  • attribute 加前綴 _ 可防止 from module import * 這樣導入屬性。前綴 __ 可防止繼承階層中的名稱衝突。
  • Delegation:增刪修改原有物件的功能。藉由覆寫 __getattr()__ 實現。
  • Section 13.16: Advanced Features of New-Style Classes。嗯,真的很 advanced。
  • class attribute __slots__ 限制了 instances 能存取的屬性,主要目的是節約記憶體。
  • Descriptors 有 3 個 special method 做為 descriptor protocol:__get__()、__set__()、__delete__()。激晦澀,讀不通...... =3=
  • 還有啥 metaclass 的,一樣難懂......

Chapter 14: Execution Environment

  • BIFUDFBIM 都有許多內建的 attribute。
  • 定義 class 時若實作了 __call__(),就可以對 instance 做 () 呼叫。
  • compile(str, file, type) 將 str 以 type 類型編譯。編譯後的 object 可用 exec 或 eval() 跑。先 compile 可避免重覆解讀字串。
  • exec obj、eval(obj) 以 Python interpreter 的角度對待 obj。另有 execfile(filename)
  • input(str) 等價於 eval(raw_input(str))
  • Section 14.5 講述 os module 中一大票用來跑程序的函式。
  • sys.exit(status=0) 丟出 SystemExit 這個 ( 唯一不被當成錯誤的 ) 異常,表明退出 python 的意願。