[讀書心得] 鳳凰專案-看IT部門如何讓公司從谷底翻身的傳奇故事

FullSizeRender-2

醜話說在前這本書的翻譯品質並不好,一來可能是譯者的翻譯問題二來可能是本書原文作者用字方式較特別。我本人並沒有看過原文,但看過原文的朋友曾表示這本書的英文並不好理解。

撇開翻譯品質的問題,這本書是以小說方式解譯devops,故當成小說來閱讀應該不會有太大問題。因為我只有在硬體系統廠工作的經驗,閱讀時對於這本書常碰到的「deploy」問題較沒有概念,一些專有名詞如ITIL, ITSM也就略過不研究。

這本書以「第一人稱」來描寫比爾這個中階經理在CIO被FIRE後被拉上公司技術總管理人,負責理管全公司約100名工程師。書中的公司雖為一家汽車零件公司,但有許多複雜的IT系統負責生產管理、庫存、零售、薪資、財務等功能。 繼續閱讀 “[讀書心得] 鳳凰專案-看IT部門如何讓公司從谷底翻身的傳奇故事”

[Python][C++] static method and inheritance

#include <iostream>

using namespace std;

class Parent {
public:
    void foo() {
        cout << "foo of parent" << endl;
    }
    static void static_foo() {
        cout << "static_foo of parent" << endl;
    }
};

class Child : public Parent {
public:
    void foo() {
        cout << "foo of child" << endl;
    }
    static void static_foo() {
        cout << "static_foo of child" << endl;
    }
};

class DummyChild : public Parent {};

void demo() {
    Parent parent;
    Child child;
    DummyChild dummyChild;

    parent.foo();               //foo of parent
    Parent::static_foo();       //static_foo of parent

    child.foo();                //foo of child
    Child::static_foo();        //static_foo of child

    dummyChild.foo();           //foo of parent
    DummyChild::static_foo();   //static_foo of parent

    Parent *parentPtr;
    Child *childPtr;

    parentPtr = &child;
    parentPtr->foo();           //foo of parent
    //在一般的情況下 因為cpp是靜態語言 預設只會去找這個pointer class所屬的member function

    childPtr = &child;
    childPtr->foo();            //foo of child
}
class VirtualParent {
public:
    //member function前面加個virtual就變成virtual function
    //後面再加上 = 0;就是pure virtual function
    virtual void foo() = 0;
    virtual void foo2() {} //實作virtual function不是良好設計 但仍可編譯
};

class NonVirtualChild : public VirtualParent {
public:
    //child必須實作pure virtual function
    void foo() {
        cout << "non virtual child" << endl;
    }
    //若parental有實作virtual function, child建議要overwrite
    //但非強制overwrite
    void foo2() {}
};

void demo1() {
    //含有pure vitual function的class無法生成instance
    //此class又稱abstract class(c++術語)或是interface(抽象講法)
    //VirtualParent p;

    NonVirtualChild c;
    c.foo(); //non virtual child
}

class ConcreteParent {
public:
    virtual void foo() {
        cout << "concrete parent" << endl;
    }
};

class ConcreteChild : public ConcreteParent {
public:
    virtual void foo() {
        cout << "concrete child" << endl;
    }
};

void demo2() {
    ConcreteParent* p = new ConcreteChild();
    p->foo(); //concreate child;
    //若呼叫的是virtual function, pointer會去table找出真正的member function
    delete p;
}

int main() {
    demo();
    demo1();
    demo2();
}

#Python
class Parent:
	variable_foo = "variable_foo" #也是class variable
	class_variable_foo = "class_variable_foo"

	def __init__(self):
		self.variable_foo = "init_foo" #object variable

	def foo(self):
		print("foo of parent, variable = {}, {}".format(self.variable_foo, self.class_variable_foo))

	@staticmethod
	def static_foo(*arg):
		print("static_foo of parent: arg = {}".format(arg))

	@classmethod
	def class_foo(cls):
		print("class_foo of parent, variable = {}, {}".format(cls.variable_foo, cls.class_variable_foo))

class Child(Parent):
	variable_foo = "child_variable_foo" #也是class variable

	def __init__(self):
		self.variable_foo = "init_child_foo" #object variable

	def foo(self):
		print("foo of child, variable = {}, {}".format(self.variable_foo, self.class_variable_foo))

	@staticmethod
	def static_foo(*arg):
		print("static_foo of child: arg = {}".format(arg))

	@classmethod
	def class_foo(cls):
		print("class_foo of child, variable = {}, {}".format(cls.variable_foo, cls.class_variable_foo))

	class DummyChild(Parent):
		pass

parent = Parent()
parent.foo() # foo of parent, variable = init_foo, class_variable_foo
#Python會先去找object的variable 找不到時才會去找class的variable

Parent.class_foo() # class_foo of parent, variable = variable_foo, class_variable_foo
Parent.variable_foo = "changeable"
Parent.class_foo() # class_foo of parent, variable = changeable, class_variable_foo
#在Python裡面 class也是一個object 故在執行期改變class變數是OK的
#在C++ class不是object而是一個namespace 故呼叫class static function要用"::" 而非"."

Parent.static_foo() # static_foo of parent: arg = ()
Parent.static_foo("argument1", "arguments2") # static_foo of parent: arg = ('argument1', 'arguments2')
#在Python裡面 static method是沒辦法access class的attribute
#故可了解 Python的class method其實比較像C++的class static method

child = Child()
child.foo() # foo of child, variable = init_child_foo, class_variable_foo
child.class_foo() # class_foo of child, variable = child_variable_foo, class_variable_foo
child.static_foo() # static_foo of child: arg = ()

dummy = DummyChild()
dummy.foo() # foo of parent, variable = init_foo, class_variable_foo
DummyChild.class_foo() # class_foo of parent, variable = changeable, class_variable_foo
DummyChild.static_foo() # static_foo of parent: arg = ()

[讀書心得] 原來有錢人都這麼做 – The Millionaire Next Door

FullSizeRender-1

書名:原來有錢人都這麼做

作者:湯瑪斯.史丹利(Thomas J. Stanley) 威廉.丹柯(William D. Danko)

譯者:凌瑋

ISBM:978-986-93764-1-9

這本書的中心思想很簡單,就是「儲蓄」。作者認為美國許多高收入份子都過度消費,造成資產不足。作者統計了許多有錢人—-依照他定義是資產在100萬美元以上的家庭,發現大部份有錢人都很節儉。前半本書作者舉出了許多統計資料來幫讀者描繪出大部份有錢人消費方式。後半本書則是講述富二代問題,什麼樣父母容易養出敗家子—-那些愛花錢、且會拿錢資助子女的父母。

作者舉了一個有趣的公式來分別高收入的窮人(作者稱超遜理財族)與真正的有錢人(超優理財族)

淨資產 = 資產-負債 > 年齡÷10×年收入

    但我覺得這個公式非常差,假設一個30歲年收入50萬剛工作三年的年輕人,他要有150萬才能稱為超優理財族,必須工作三年都不吃不喝才能達到。而一個60歲年收100萬的屆退人士只要600萬就可算是有錢人,但這個錢買一棟自住的房子就沒剩多少,不夠退休使用。故我提出一個新公式來改進:

淨資產 > 年齡×工作年數÷100×年收入

     也就是說上述的年輕人只要有45萬淨資產就能算是超優理財族,雖然看起來不多但他得先把收入的30%存下來才能辦到,而那位屆退人士則需要1800萬淨資產才算是有錢人。 繼續閱讀 “[讀書心得] 原來有錢人都這麼做 – The Millionaire Next Door”

婦產科筆記

2012 Hans Chang 於國泰醫院婦產科

曾被考過兩次以上之題目: TOA, ovary cancer, breech, endometrial cancer, ovarian tumor良惡判斷, GBS, cancer分期, tumor marker, prolong labor.

  Site 別名 內含物 備註
Board ligament 子宮附近片狀 其實就是前後peritoneum
Round ligament 子宮到大陰唇 Ligamentum teres Sampson’s artery在其內 TAH要打斷此ligament
Cardinal ligament

(主韌帶)

子宮下(uterine cercix vagina)往pelvic wall Transverse ligament uterine artery 通過, broke造成Uterocele 最重要支持子宮的ligament
Infundibular pelvic ligament 輸卵管往上吊 Suspensory ligament Contain ovarian artery Salpingo oophorectomy打斷
Ovarian ligament 子宮到卵巢 Proper ligament ATH+BSO切
Vesicouterine ligament 子宮到膀胱 支持子宮重要的ligament
Uterosacral ligament: 子宮到sacrum Uterocele broke之ligment 在cervix與cardinal ligament相連
Vesicouterine pouch 子宮與膀胱間
Rectouterine pouch Uterus和rectum間 Cul-de-sac of Douglas

繼續閱讀 “婦產科筆記”

工作與退休時的資產配置建議

 

在退休前的資產配置應該依固定比例分配,我建議上班族將儲蓄以股票70%、台幣定存20%、不動產10%的方式做為退休準備金,在股票存滿500萬後後開始增加台幣定存的金額,最終目標為股票、定存、不動產各達500萬即可退休(夫妻兩人就是各1000萬,共3000萬)。

許多被動投資人受綠角影響而走上這條路,但關於資產配置每個人看法不同。與綠角差異之處是我認為不應持有太多外幣計價債券,因為這會帶來不必要的匯率風險。計劃在台灣退休的投資人應以台幣債券為基礎建立穩定的投資組合,一般情況債券配置應有50%以上新台幣計價的固定收入,為了簡化投資組合100%持有新台幣定存亦不失合理。 繼續閱讀 “工作與退休時的資產配置建議”

複委託與美國券商比較

最近有許多朋友學習綠角的被動投資(passive investment),對於開戶要選擇複委託美國券商感到困擾。我以目前使用的永豐複委託與TD Ameritrade這家美國劵商整理了下面比較表:

 複委託美國券商
費用平手平手
股息再投入
退稅
開戶難易度
安心感

結論

       目前(2017/8)選擇複委託或是美國券商差異並不大,各位投資人只要了解兩者費用差異後可依自己喜好選擇,不需執著細微差異。

       相對綠角只推薦美國券商的說法,我抱持反面態度。我看法是每年投資金額達80萬以上的投資人選擇複委託是較佳選擇,若每年金額在40萬以下選擇美國券商較佳,40萬至80萬的區間內差異不大,建議可依自己喜好調整。 繼續閱讀 “複委託與美國券商比較”

PEOPELWARE 腦力密集產業的人才管理之道管理 – 人力資源 & 辦公室環境

第一部 管理人力資源

這本書初版於1987年,但所談的話題至今依舊是各公司還未能順利排除的問題。作者認為科技業所有管理者面臨的最重要問題不是「技術」而是「社會性」的問題。照理說管理者應該把「技術」問題交給真正專業的部屬,自己應該只需要「管理」與處理「人」的問題,但實務上管理者卻總是感覺非親自去做不可。造問題部份原因是在於管理者所受的訓練大多是如何做好工作,而非如何管理工作。

開發工作本質與產品製造不同,但經理人總是忽略這個問題。他們把員工視為可替換的零件,信奉一個簡單的公式—工作時間 x 投入人力 = 產出,在此一命題下提高產出最好的方式就是減少員工打混摸魚的時間。 繼續閱讀 “PEOPELWARE 腦力密集產業的人才管理之道管理 – 人力資源 & 辦公室環境”

從人到人工智慧,破解AI革命的68個核心概念

ISBN9789862355657

這是一本典型日本式書籍,用一到兩頁介紹一個topic並輔以一頁漫畫,目標就是讓讀者透過快速閱讀來吸收新知。

因為之前有學過資料探勘與機器學習,這本書裡68個題目一半以上算是我學過的東西。原本沒有打算要特別記錄這本書,但最終章討論「人工智慧辦得到與辦不到的事」讓我非常有感觸。

「人工智慧會讓工作消失嗎?」這類的話題最近頻繁出現在各類新聞媒體中,造成不小的恐慌。

但這本書的回答是「不會」,作者認為世上只有少數工作是僅靠單一作業就能完成,而這種單一作業的工作,也已經被機器人取代了。我同意這種說法,在工業革命以前大部人類都是以務農為生,現在各種農用機械發展下還是有不少務農為生的人。並不是說工業革命後十年所有的農夫都被機器取代,工業發展對農業的衝擊是必然只是影響總是漸漸發生。 繼續閱讀 “從人到人工智慧,破解AI革命的68個核心概念”