跳到主要內容

續-成員變數宣告為private

我贊同小麟的說法,最有彈性的作法並不一定是最好的作法,開發時程是很重要的考量,我提到這個建議,並不是說要把現在所有的class的成員變數改為private,而是建議,今後撰寫任何的class,其成員變數最好都宣告成private,甚至繼承一個沒有被其他類別繼承的類別,亦建議把原類別所有的成員變數改為private,再繼承,除了享有封裝的好處,也可以避免copy/paste的後遺症,改寫繼承的變數可以半強迫讓編寫者再仔細看一次抄過來的code,了解所有copy過來的code是不是真的都需要。實際上重點是,這並沒有花太多的時間,以我的經驗,500行的程式碼超過10個成員變數,利用輔助程式替換,含測試不會超過30分鐘。這還是半熟練運用工具的狀態下,相信熟練的話會更快。花一點小時間,為自己留一點後路不是很好嗎。

但是我覺得程式的彈性真的很重要,一個程式的壽命與成長性取決於程式的彈性,因此我建議在開發時,第一輪先把程式完成,完成後先做簡單的重構,更名、萃取函式、封裝變數這種不浪費時間的小工作(善用工具的話,這真的是小工作)。在單元測試完後或α中後期,探討相關可能變動,對相關的架構做適當的調整。這段時間做大步重構,有三個原因,

  • 第一、這時期功能已經開發完成,測試也進入中後期,經由多番測試大約了解變動的因子,再進行code review,知道程式何處無法因應將來可能的變化,也可避免所謂的過度設計。
  • 第二、這時也對相關功能,可能需做的測試案例,已經相當的完備了,利用完整的測試案例,重構的品質更有保證。
  • 第三、這是我認為進行重構最好的時刻,開發者這段時間對程式最熟練,經過一個專案週期後,會幾乎忘記上次為啥寫這樣的程式碼,將來要變動程式時,所花費的成本將逐漸遞增。開發者熟練重構的話,可以完全不改變功能,將架構改的更好。且此時進行重構已經不影響時程。

當然這些假設都是,開發時間來得及,解bug夠快以不影響時程來規劃。所以第二階段重構其實也是非必要做的,只是有做會比較好,但是我建議簡單的重構一定要做,我覺得一個容易理解的程式碼比完整的文件更重要,尤其當你面對一個函式,竟然要拉動三頁才能看完,或者一個神秘的判斷式,完全不能了解他在判斷什麼時,就更能體會了。

ps.蘇哥用他的防毒軟體測我新抓的蕃茄有毒,可是我已經用五種以上的防毒軟體測過了,都沒掃到,norton最新的病毒定義碼也裝了,就是沒毒啊!真是奇怪?可能我的電腦天生對此病毒免疫,所以新版蕃茄還是不要散發出去好了,還是有勇者願意嘗試。

我真的是瘋了,又打那麼多。

留言

這個網誌中的熱門文章

勝券在握

其實這本書,感覺上寫的有點雜,比上一本講巴非特的書更難懂,兩個講的東西其實是一致的。投資原則便是先選產業,再選公司,慎選時機進場。只買了解的企業是價值投資一貫的原則。價值投資的書大概就先看到這裡了,彼得林區不知道是屬於那一類的,接下來大概會看這部份的書。暫時的目標是把杜金龍介紹的書單看完,真的還不少。接下來的投資會以巴菲特的方法來做,感覺上這比較適合我,練習把漲跌不當一回事,對我而言真的很重要。期權大概不會再玩了,買了以後一直在看漲跌,令人受不了。工作時都不能專心。 就價值投資人而言,真的不需要我們的產品,因為第一點就把我們程式特性打死,不理會股票市場的漲跌,這樣報價功能就沒什麼意義了,價值投資根本不需要技術分析,除非我們能提供相關價值投資的資訊,但我們基本分析真的很爛,看不到什麼資料。有機會我來思考一下價值投資到底要什麼資料,能不能把他寫成一個可運用的程式。 以下是我認為重要的書摘,其實這也只包含最後一章,我認為也只有這章值得做書摘。 巴非特相信使用短期價格來判斷一家公司的成功與否是愚蠢的。取而代之的是,他要公司向他報告因經濟實力成長所獲得的價值,一年一次,他固定檢查幾個變數: 初始的股東權益報酬率。 營運毛利、負債水準與資本支出需求的變化。 該公司的現金產生能力。 如果這些經濟指標正在進展,他知道長期下來,結果會反應在股價上。短期之內,股價所發生的是是不合常理的。 投資策略 不理會股票市場每日的漲跌 不擔心經濟情勢。 買下一家公司,而不是股票 管理企業的投資組合 巴非特原則 企業原則 這家企業是簡單且可以了解的 了解一家企業如何產生利潤的相關經濟活動。 這家企業的營運歷史是否穩定 他必須經得起時間的考驗。 這家企業的長期發展前景是否看好 市場特許權,五力分析 經營原則 經營者是否理性 理性的經營者將只會把多餘的現金,投資在那些產生較資本成本報酬率為高的計畫裡。 經營者對他的股東是誠實坦白的 報告時能知道營業部門如何營業,坦承失敗,了解公司的目的是使股東權益報酬率達到最大。 經營者是會盲從其他法人機構的行為 當心『其他公司也這麼做,一定沒問題』為自己行為辯護的經營者。衡量經營者競爭力的一個方法是,看他們如何運用自己的思考能力以避免依附群眾心理。 財務原則 把重點集中...

10/17部會心得

其實部會一開完,我就想寫了,只是最近沉迷於小說,直到今天才有開始動工的心情。 業務的報告部份就不要講了,一點都不感興趣,講的好像會大賣的樣子,薪水有增加再說啦! 技術方面, DQ 做的功能好像挺有意思的,不過感覺上沒人看出他的價值,不過我覺得最佳的 UI 還是 vs 2005 為主,如果要研發基底的 UI 我覺得要以類 VS 為目標。金融網的東西也令人興奮,我本來就覺得網頁的東西潛力無窮,雖然是抄的,不過覺得還不錯,網頁互抄比 AP 互抄容易多了,很多 AP 的功能要模擬出來,真的比想像中難太多了。雖然金融網聽到最後我睡著了,但我非常期待他下一版能帶來什麼。好吧!說一下我們這邊技術心得,看起來炫,但是我一點都不心動,因為我想不到這東西能增加我們產品的價值嗎? 這場部會最棒的是最後副總的報告,這是第一次瞭解整個產業環境與我們的應對方法,這樣我才清楚為什麼要成立那麼多非資訊本業部門,金融網成立的原因何在,產業鏈垂直整合的價值在哪裡。但是會像如規劃中的成功嗎?其實從旁觀察規劃與現在實際的運作,我抱的期望沒那麼大,不過這是有意思的夢,就看能不能實現囉! 不過在會中,我就想到一個我覺得可以配合上我們的產業架構,而且還不錯的商業模式,這也是我想寫這篇心得的原因。 在副總的報告中,提到金融網是為了提供一個入門的金融資訊,接觸最底層不付費的又想看金融資訊的民眾,其實我想到更進階的是接觸所有上網的人。而這功能結合 43thing 與財務規劃(參考 到底要賺多少錢才能退休呢? )你要作這些你想要做的事情(如遊學、旅遊)或退休,你到底要賺多少錢,然後開始洗腦光靠上班的死薪水是達不成這些目的的,所以要開始投資,投資如何規劃,就是要買我們的金融產品,一步一步引君入彀。這功能主要的對象就不只是想投資的人,而是所有的人,只要你心中有任何的夢想,而這夢想需要錢來達成,就需要這個工具。這就是把基底做的更大,個體經濟學常用的互補效應。所以這功能包含紀錄你要達成的夢想,財務管理包含薪資增加目標、稅務、相關的投資規劃與風險等。目標就是吸引所有人來理財、投資。 另一方面,我想倒也有一些人就是他沒有時間也沒有能力去學如何投資或操作股票,他們只想跟老師聽名牌,那這個就可以結合 blog 的功能來作,吸引一些老師來 blog 建立個人投資說明,開發一個跟單工具,這跟單工具可以比較所...

Web2.0在促銷產品的應用

我想說明一下我在星期五上所提得話題是有背後的理由的,我提到Rss一直無法突破成為一般大眾接受的技術,討論這話題的主要原因是想提醒大家如果你面對的是一般使用者不是進階使用者,這技術可有可無,不會特別增加你的網站流量和黏度。不要跟我講有總比沒有好,請把精力花在重要的地方,這是我的想法,有太多東西該做,不怎麼重要的東西留到最後。第二個我最後提到的問題,研究這個是要幹嘛,要做個2.0網站做啥。原來是要推銷我們的產品,這倒有點意思了,一般我在Mr6上看到介紹有關新型態的網站很少推銷單一產品的,大部分被人稱作Web2.0的網站,通常都當自己為媒體平台來賺錢,如部落格利用Google AdSence賺錢、各相簿與部落格網站也利用版面廣告賺錢、Dig類型或書籤分享類型,也是利用內容特性插入版面廣告賺錢。對單一產品做行銷,好像是所謂Web1.0的特色。行銷單一產品在Web2.0我是沒看過,但是我到是看過一兩則介紹利用blog提昇企業形象,毛寶的企業 blog ,以及我上一篇打的 經商利器部落格 ,或許這適合我們情況。 因此我的想法是架一個部落格,專門探討財經的議題,譬如如何選股,選股該看哪些資訊,這個時段有哪些飆股可選,帶入我們的程式來展現,就像pre sale開課一樣。但是就如那篇經商利器提到的不是介紹我們商品多好、多與眾不同。而是提供一個分析、一些觀念,是有血有肉的內容。從建立關係再來賣產品。企業部落格重點在於溝通,讓客戶了解我們產品的理念,我們聽到他們的需求、意見與批評,有好的也有可能有壞的。並且從這邊或許我們會得到一些反饋,作為開發新產品的基礎。至於怎麼宣傳,這倒容易可以學有名的個人財經部落格 楚狂人 ,每有一篇新著作就到國內最大社群網站ptt po文,只要有內容,人數保證衝的很快,持續不斷的更新,一定會有黏度的。但是可能的缺點是,ptt鄉民一般對商業性宣傳有潛在性的反感,如何改善或隱藏這缺點或許是個重點。總而言之,如果是用blog形式宣傳,最重要是內容與持續不斷的更新,但這不會馬上看到效果,朝這方向做心理要有個底,會有一段毫無績效而令人氣餒的時期。 就技術而言,blog的架設,建議使用wordpress,這架站軟體,不用浪費時間自己一個一個功能寫出來。 其實如果不是以行銷我們產品為目的,我的想法跟仲甫不謀而合,叫做digstock,讓大家去推或噓特定股票,從基本面、技術面...