Tuesday, October 28th, 2008
現今的主流市場裡,CPU 單一核心的處理速度增加有限,而硬體大廠則致力於多核處理器的開發。多核處理器的強項在於平行處理,但它必須靠軟體的配合才能有效發揮效能。微軟在 Visual Studio 2010 中推出了不少東西來協助師程工們寫作多緒的程式,在 PDC 中自然要拿出來秀一下啦。
微軟建議的 best practice 非常值得借鏡。若要改進程式的執行效率,應該依循以下的步驟:
建立效能調校的目標,找出量測的方法。儘量使用真實的資料和直實的環境,平行處理並不是萬靈丹,真實世界中許多其他的因素才是效能的殺手 (如 I/O、memory latency)
量測現有的效能,找出執行熱點
想辦法調校現有的程式
若調校無效,找看看是否有平行處理的機會: CPU intensive,或是可以讓 UI 反應變快增加 perceptual performance
若可平行處理,則利用程式技巧去最佳化熱點
Visual Studio 的目標是想辦法讓寫作平行處理的程式變得容易一些,它提供許多基礎設施和函式庫 (如 Concurrent runtime, Parallel Pattern Library, PLINQ 等等),也提供許多 profiling 和 debugging 的工具 (我個人的偏見是這些工具和 VTune 好像!)。因此,師程工就可以集中精力在設計 synchronization 上,而不必到處尋尋覓覓好用的程式庫,或是花許多資源開發自己的程式庫。
微軟的 concurrent runtime 和 PPL 在某種程度上和 OpenMP 有重疊性,不過微軟上從 VP 下到師程工一律口風緊閉,不願意討論和 OpenMP 的未來有關的任何問題。此外,PPL 大量利用 C++0x 的 lambda expression,並刻意地將所有的東西做成 [...]
C++/C#, 技術文章, 會議相關 |
Tuesday, October 28th, 2008
微軟打算在 .Net CLR 4.0 中改進它的型別系統 (type system)。這個改進的主要動機有兩個,一是現行的 .Net 程式若是用到了 interop assembly,在安裝的時候,這些 interop assembly 的體積通常要比你寫的程式大很多。比方說,在程式中用到了 Excel 2007 interop 的話,就必須加裝 6.7MB 的 Office 2007 PIA redist,除了安裝用的 package 變大之外,程式執行時浪費的 working set 也變多 (你總不會用到 interop assembly 中的每一樣功能吧?)。此外,對於 managed to managed assembly,目前的做法是進行非常嚴格的版本檢查,若版本不合就直接踢掉。這雖然解決了 DLL hell 的問題,但卻造成更多問題: multi-target complexity 以及 deployment complexity。
multi-target 這個問題被唾棄很久,連微軟自己的師程工也很不爽,因此 CLR 4.0 就推出兩個重大的改進: type embedding 與 type equivalance。Type embedding [...]
C++/C#, 技術文章, 會議相關 |
Monday, October 27th, 2008
今天是 PDC 第一天,洛杉磯風和日麗交通混亂一如往常。早上第一場就是 key note 重頭戲,Ray Ozzie 發表了微軟的雲端運算平台 Windows Azure。你可能會覺得奇怪,微軟不是已經有 Windows Live 之類的東西了嗎? 看了 Windows Azure 之後就不覺得奇怪了,這東西才是微軟進軍雲端運算市場的主打,它的 business model 是這樣的:微軟提供一個雲端平台,賣你 subscription,而你則可以將你的 service (當然是在這平台上開發的) 透過微軟的 Azure cloud 發布到網路上運作,service 賺到的錢則是歸你。換句話說,資料中心和基礎建設由微軟包辦,但程式的部份則由你自己處理。這有點像百貨公司的模式,它賣你攤位和基礎設施,而你則可利用它來開自己的店面賺錢。這種營運模式是最近軟體業界最夯的,基本上就是綑綁策略 (stickiness),把客人綁在自家的服務上,有錢客人賺,我分一杯羹是也 …
當然照慣例,微軟的東西必然有的幾個特色,一是和它自己目前的程式或架構 (如 Active Directory) 可以相通,另一個則是可以和它現有的開發系統 (Visual Studio) 相整合。Azure 目前提供的基礎服務包括了.Net、 identity (與 AD 的整合)、CRM、SQL 以及 SharePoint,很明顯地它的目標是替代目前在各企業服役中的商用系統,把這些企業自行建置的系統移植到微軟的雲端運算平台。Key note 中也提供了幾個系統的 demo,不過根據我以前學到的教訓來看,現在來評論這些東西何時會 take off 還言之過早 但可以肯定的是,這東西並不是很簡單地把 word excel 之類的東西弄到網路上就算了。微軟想做的事情是,在網路平台上複製 [...]
Windows, 技術文章, 會議相關, 無責任評論 |
Monday, October 27th, 2008
今天是 preconference,早上一來當然是先報到啦,但是讓我非常驚訝的是,連微軟都開始度小月了。我參加這麼多年的 conference,第一次看到用購物袋當 conference bag 的
precon 最大的好處是可以先拿到 badge,這樣明天早上就不需要去經驗一次恐怖的 registration 長龍。今天主要是參加 advanced windows debugging 的 session,早上講基礎的部份比較無聊,但下午講 security debugging 和 heap corruption 的部份就很清楚易懂。現場是有攝影機,但沒看到 staff 在操作,據說 PDC 會將所有 session 的錄影內容放在網上供人下載,就不知道 precon 有沒有包含在內了。
Windows, 技術文章, 會議相關 |
Tuesday, October 21st, 2008
今年終於有大拜拜可以去逛了,10/26 起一共五天,地點照舊是在洛杉磯國際會議中心。
是的沒錯就是 PDC 啦 … 目前看起來好玩的 session 沒有很多,不過照慣例有意思的 session 都是前幾天才會公布的,如果 session 後還有力氣的話,盡量早點把老人碎碎念 po 上來好了
PS. 蛤? 10/26? 是的你沒看錯,今年有拗到經費去好野人專屬的 pre-conference … 有報 Windows Advanced Debugging 的朋友可以來交換一下名片哇哈哈 …
會議相關, 隨筆雜文 |
Friday, August 8th, 2008
線上遇到學弟,他現在正為要選哪種方案來做他的專案很苦惱。其實這問題說難也不難,因為答案很清楚,出來賺錢嘛,選擇獲利最高 (通常也等同於成本最低) 的開發方式就對了,真正麻煩的是怎麼去算獲利。
以我學弟的例子而言,他的狀況是客戶開預算案,他們公司承包,這種最好算:
獲利 = 工程款 - 開發成本 - 維護成本 - 固定成本
算這種東西的時候,工時是最多專案經理拿來算成本的工具,不過呢,它只代表小小的一部份成本而已。如果今天做的東西驗收不過的話,工時少只代表虧的少,所以選擇的第一要件就是要確保你可以用它做出你想要的東西。以他的情況來講,大部份的 team member 只會 Java 和 PHP,所以在程式語言上,他沒什麼選擇,若是 Java 加上 PHP 都做不出他要的東西,那最好的選擇就是閃人先。
接下來是平台,平台直接影響固定成本,所以很多老闆看見你用微軟的方案會直接否決,因為帳面上這些是要付錢的。不過呢,若這個平台可以幫助你減少開發成本和維護成本,那最好還是精算一下再決定比較好。以我學弟的情形,他的客戶的 SA 熟 Windows 和 Solaris,不過他的團隊除了他之外沒人碰過 Solaris,這種情形下很容易可以算出來用 Windows 的成本會比較低些,因為可以買比較便宜一點的 x86 伺服器,而且不必付出讓團隊去熟悉 Solaris 的工時成本。兩個最主要的東西決定下來,CM (Configuration Management) 的主軸也就定了,接下來就是用需求訪談得來的情報去擬定整個 project 的 execution plan,那就是他自己的事了哇哈哈 …
對了,為什麼不用 Linux 呢? Linux 和 Solaris 的差異不至於大到太誇張啊? 這是好問題,去問你客戶的 SA 要不要幫 Linux 掛保證,如果他不要,那就是你要掛保證了,客戶給的錢足不足以讓你去兼做維護 OS 的事,那就是你自己要衡量了。你老闆愛出嘴炮反微軟挺 Linux,那叫他自己去和對方的 [...]
技術文章, 無責任評論, 軟體工程 |
Thursday, July 31st, 2008
今天剛好被問到這個問題,覺得還頗有趣的,不過我還是秉持一貫的壞習慣反問回去: 那你學過哪些程式語言? 為什麼? 這位年輕小伙子回答的也蠻誠實的,他回答說學校教什麼就學什麼了,騙學分咩,只是他很迷惘以後要學什麼程式語言可以在工作上幫助他。
我想這個問題其實很多人都有,但很可惜的是,並沒有什麼標準答案。程式設計經過數十年的發展,現在已經分工很細,每樣工作有每樣工作的專業,這是理由之一。另一個我想的到的理由是: 每個人想做的工作不一樣,而使用什麼程式語言來開發軟體,大部份是由上司決定好了,所以對資淺的工程師來講,你會什麼語言就大概確定你可以找哪些工作。若你很清楚你想做哪些工作,那咕狗或 104 大神應該很快可以幫你決定你要會哪些語言。
對於一般還搞不清楚自己想要什麼的同學們來講,那就比較麻煩些了 把一種語言/平台練到爐火純青是絕對必要的,至於這個語言是 C++、C# 還是 Java,這個平台是某個 OS 還是 WWW,那就見仁見智了。這裡要先釐清一個觀念: 程式語言和平台無關,但能不能用程式語言做出有商業價值的東西,那就和平台有關了。例如你可以說你 C++ 觀念很強,virtual inheritance 什麼的都弄的很清楚,但這並不表示老闆要的東西你一定可以做的出來,你做的東西必然和你所在的平台有關。繞了一圈回到原點: 程式設計經過數十年的發展,現在已經分工很細,每樣工作有每樣工作的專業,所以決定自己想要做什麼東西是很重要的。
當然時間夠的話,精擅多個領域/語言/平台也不是沒可能,至少我看過不少這樣的怪物,但他們投入的精力和偏執也是遠超常人 所以說,要學什麼程式語言呢? 找一個可以餵飽你的好好學好是基本,能精通多少種其他的語言就是為你自己的職場生涯買幾份額外的保險。我個人的建議是吃飯會用到的語言 (如 C++/C#/Java) 拿來精通,和 scripting 有關的語言 (如 perl 或 python) 學一點防身,剩下的精力拿去學平台,這樣會比較有效率一點。
技術文章, 無責任評論 |