原创 C++:初學者的指南

0. “hello world”   向先驅致敬,我們首先學習C++版本的“hello world”程序。 需求:想控制檯輸出“hello world”字符串。 C++是基於對象的。從對象的觀點看,要有一個對象,用於打印該字符串。所以該

原创 資源管理:強魯棒性應用的基石 (1)

  0. 引子 在正式討論C++提供的資源管理技術之前,先簡略回顧一下傳統的C風格的資源管理技術。   本質上講,C是非常初級的語言。實際的編程中,C程序員往往面臨大量的機器相關的細節。諸多此類的細節中,最常見的,最令初學者迷惑的,

原创 工業語言評審:應運而生,應運而長的C++

當Stroustrup博士開始到貝爾實驗室開始他的第一份工作時,他並不知道自己應該做什麼。他跑去問頭兒,對方客氣地回答他說,既然把您請來了,您想幹什麼就自己看着辦吧。於是Stroustrup花了將近一年的時候找到了自己研究方向,但是他苦於

原创 資源管理:強魯棒性應用的基石 (2)

3. 所有權的控制與轉移 前一篇文章的資源封裝實現,通過禁用資源封裝類的拷貝和賦值,極大地簡化了這些類的最終代碼,然而同時也極大的限制了它們的使用範圍。目前他們只能用在局部的資源管理以及作用常引用在作用域之間傳遞,這無疑是不方便的。我們

原创 開始,就從今天,構建工業強度的實現!

按:作爲09年個人計劃的一部分,我將系統地討論如何使用合適的語言工具構建工業強度的軟件。這既是對個人經驗的總結昇華,也是對運行在千萬的服務器和桌面中的不良代碼的公開宣戰。   感謝技術的積累和進步,原先作爲科學家的工具的數字計算技術現在早

原创 what makes you different?

最近,由於一個協作海外研發團隊縮編,項目組需要招聘幾個具有大約7年以上的C++資深研發工程師來充實這邊的研發力量。我有幸和項目總監主持了一個筆試成績相當不錯的應聘者的技術面試。該應聘者有超過8年的研發經驗,曾經是做過項目組長,在個人的知識

原创 WMI via C++: 一個C++風格的複雜性處理實例

WMI簡介 按照wikipedia的解釋,WMI是Windows驅動模型的擴展集合,通過工具化的組件提供了操作系統的接口。WMI本身是基於Webm和CIM工業標準的管理架構Microsoft實現。相對於程序員,系統管理員可能更熟悉這些接口

原创 軟件爲什麼如此複雜?

每當我們受命維護或者擴充一個既存系統的時候,恰當地理解原有的系統成爲關鍵。毫無疑問,我們沒有足夠的時間完全理解它,但是我們一定要找到那個見鬼的合適地方以加入我們的修改。那麼是什麼阻礙了我們快速理解一個系統呢?一般想來,常見的原因可能包括:

原创 22度觀察-王志安和韓秀雲:中華文化拯救世界經濟?

今天偶爾看到了深圳衛視的一檔經濟類評論節目,是王志安先生主持的“22度觀察”。一般來說,我並不特別關注經濟類,政治類的評論節目,但是偶爾遇上,倒也看得津津有味。本期的主題是韓秀雲女士(一位清華的教授)似乎新近出版了一本評論世界金融海嘯的書

原创 編碼標準:紀律和人因工程的雙劍合璧

0. 引子 說 起編碼風格,每個人都有一些自己的見解。簡單牽狗一下,發現類似的資料層出不窮。除了不少開源項目使用的編碼規範以外,還有不少據說是從業界一流公司流傳 出來的,甚至更有專門的論述。wikipedia上也可以發現專門的對C++常

原创 錯誤管理:把錯誤控制剔除在業務流程之外[TBD]

傳統的錯誤管理評述 基於異常的錯誤管理 多線程環境中的異常 錯誤管理實踐

原创 C++基本功之 準確地理解術語

能有效地表達抽象的思想是人類和其他智能生物的根本區別。同樣,可以使用準確的術語進行溝通交流是專業人員的基本的素質。可以這樣說,一個人分析問題解決問題的能力正比於其熟練理解的概念的數量。《設計模式》是OO領域的抗鼎之作,其中一個重要的原因是

原创 C++基本功之 const關鍵字

能否正確地使用const是判斷一個C++程序員基本編程素質的有效手段。但是,能準確地理解該關鍵字的含義則是更高的要求。簡單地說,和其他所有的用於提升C++之生產力的手段一樣,它表徵的根本含義是使得代碼更具表達性,亦即,更能清楚地表明代碼的

原创 C++基本功之 對象序列化

稍微正式一點的應用都會用到對象的序列化/反序列化操作,常見的需求包括: 對象的持久存儲。比如把一個對象存儲到文件;在需要的時候,再把對象從文件中讀出來; 對象的傳遞。比如要把一個對象通過管道,socket等任何手段傳送到對端; 從數據構建

原创 Monads for the Curious Programmer, Part 2 (中英文對照版)

  Monads for the Curious Programmer: Part 2   In my previous post I talked about categories, functors, endofunctor