Nov 30, 2008

Code Complete PART 6

System Considerations

chapter 27: How program size affects construction
随着项目的增大交流需要加以支持
放大轻量级的方法要好过缩小重量级的方法,最好使用适量级的方法

1. Commmnication and size

2. Range of project size
3. Effect of project size on errors
4. Effect of project size on productitivity
5. Effect of project size on development activite

交流、计划、管理、需求分析、设计、架构、集成、测试、文档的非线性增长
程序 -- 产品 -- 系统 -- 系统产品
Methodology and size 方法论和规模

Chapter 28: Managing construction
一般管理 > 软件管理 > 构件管理
贯彻标准,使用更为灵活的方法 --> 好的编程实践
程序员和管理人员都是人
1. Encouraging good coding
Techniques for encouraging good coding
逐行检查、要求代码签名、安排好的代码示例、代码是公有财产、奖励好的代码
2. Configuration management
SCM: Software configuration manangement
Requirements and design changes
遵循某种系统化的变更控制程序
成组地处理变更请求
评估变更成本
提防大量的变更请求
变更控制委员会
Tools:
cvs, svn, Machine configurations, Backup plan
降低程序员的额外负担;避免对项目的过度控制
3. Estimating a construction schedule
Estimation approaches
评估软件;算法方法:Cocomo 2
建立目标
为评估留出时间并做出计划
清楚说明软件需求
在底层细节层面进行评估
使用不同的评估方法并进行比较
定期做重新评估
Estimation vs. Control
what to do if you are behind:
项目并不能在后期把时间补回来,只会越拖越坏
扩充团队?缩减项目范围。
4. Measurement
留心度量的副作用
反对度量就是认为最好不要知道真实
5. Treating programmers as people
程序员并非只是与硅芯片打交道的有机物。
How do programmers spend their time
Variation in performance and quality
Individual variation
Team variation
Religious issues 信仰问题
编程语言、缩进风格、大括号、IDE、注释风格、效率 vs. 可读性、方法的选择、编程工具、命名习惯、goto、全局变量
6. Managing your manager
人性的弱点

Chapter 29: Integration
1. Importance of the integration approach
结果也许正确,但错误的过程依然会导致失败
2. Integration fraquency -- phased or incremental
Phased integration
测试、编码、测试、调试。单元开发
将这些类组合成系统(system integration)
测试调试(system dis-integration)
Incremental integration
开发模块,测试调试模块,集成到系统
Benefits of incremental integration
易于定位错误
及早在项目中取得系统级的成果
改善对进度的监控
改善客户关系
更充分地测试系统的各个单元
能在更短的开发进度计划内建造出整个系统
3. Incremental integration strategies
Top-down Integration
能较早地测试系统的控制逻辑
Bottom-Up Integration
容易定位错误
要求在开始前,已经完成整个系统的设计工作
Sandwich integration
Bottom-UP + Top-down
Risk-Oriented integration
困难部件优先集成法
鉴别风险级别
Feature-Oriented Integration
以一组构成一项可确认功能的类为单位进行集成
T-Shaped Integration
选中特定的竖直块,及早地进行测试和集成
4. Daily build and smoke test
使一些工作及早地浮出水面
每日构建(daily build)
检查失败的build
每天进行冒烟测试
编译自动化
但有意义时,才将修订加入到build
代码添加到系统前进行冒烟测试
为即将添加的代码准备暂存区

Note of Excel Function

以前一直没有系统学过Excel,可最近发现Excel和VBA编程在财务的各个方面都是非常重要的。正好最近要做财务报表分析的大作业,趁此机会先学习下Excel的函数,以后有时间再看下VBA。
教材是张迎新的《Excel 2003 函数应用完全手册》,很简洁,很手册的一个东西。下面的笔记是书的一些摘录:

函数和公式
Excel 函数可以分为内置函数和扩展函数两大类。前者只要启动了Excel,用户就可以使用它们;而后者必须通过单击“工具→加载宏”菜单命令加载,然后才能像内置函数那样使用。
函数的参数
数组:
Excel 中有常量区域两类数组。
前者放在“{}”(按下Ctrl+Shift+Enter 组合键自动生成)内部,而且内部各列的数值要用逗号“,”隔开,各行的数值要用分号“;”隔开。{56,78,89;90,76,80}
区域数组是一个矩形的单元格区域,该区域中的单元格共用一个公式。“B1:B3,A1:A3”
错误值:
ERROR.TYPE(error_val)
单元格引用:
相对引用:=SUM(A2:E2)
绝对引用:=SUM($A $3:$E $3)
混合引用:混合引用有“绝对列和相对行”,或是“绝对行和相对列”两种形式。前者如“=SUM($A3:$E3)”,后者如“=SUM(A$3:E$3)”
三维引用:=SUM(Sheet2!A1:A6,Sheet3!B2:B9)
=SUM([Book2]Sheet1! SA S1: SA S8,[Book2]Sheet2! SB S1:SB S9)
三维引用的要受到较多的限制,例如不能使用数组公式等。
名称和标志:
=AVERAGE(B2:B46) --> =AVERAGE(物理分数)
创建好的名称可以被所有工作表引用,而且引用时不需要在名称前面添加工作表名(这就是使用名称的主要优点),因此名称引用实际上是一种绝对引用。但是公式引用“列标志”时的限制较多,它只能在当前数据列的下方引用,不能跨越工作表引用,但是引用“列标志”的公式在一定条件下可以复制。

Code Complete PART 4

Statements
Chapter 14. Organizing Straight-line code
主要原则:按照依赖关系进行排列
1. Statements that must be in a sepcific order
设法组织代码,使依赖性变得非常明显
利用子程序名、子程序参数显示依赖性
用注释对不清晰的依赖关系进行说明
2. Statements whose order doesn't matter
making code read from top to buttom
localized --> short live time
grouping related statements
不应该交叠,但可能嵌套

Chapter 15: Using conditionals
1. if statements
plain if-then statements
先处理正常情况,然后其它
确保对于“==”是正确的
把正常的情况处理放在“if”后面
让if语句后跟随一个有意义的子句
chains of if-then-else statements
用布尔函数简化复杂的检测
最常见的放最前
2. case statements
choosing the most efficitve ordering of cases
字母序、正常放最前、频率序
tips for using case statements
简化每种情况对应的操作
不要为使用case刻意制造一个变量
default子句只用于检查真正的默认情况
避免代码执行跨越一条case子句的末尾

Chapter 16. Controlling Loops
1. selecting the kind of loop
counted loop; coutinously evaluated loop; endless loop; iterator loop
when to use while loop
预先不知道迭代的次数
with test at the beginning & end
when to use a loop-with-exit loop
终止条件出现在循环的中部
break; goto
把所有的退出条件放在一处,用注释阐明意图
when to use a for loop
执行固定次数的循环,不需要循环内部控制
when to use a foreach loop
消除了循环内务处理
2. Controlling the loop
减少影响循环的因素数量,把循环内部当作子程序
entering the loop
只从头部进入
初始化代码紧反正循环前
用while表示无限循环
在while适用的时候,不使用for
processing the middle of the loop
避免空循环
循环的内务操作反正循环的开始或结尾
一个循环只做一件事
exiting the loop
终止确认条件
避免依赖循环下标的最终取值
考虑使用循环计数器
小心break&continue
带标号的break
checking endpoints
using loop variables
使用有意义的名字:提高可读性,避免下标串话
把循环下标的作用域限制在本循环内
how long should a loop be
尽可能短,嵌套在三层以内
把长循环的内容移到子程序内
3. Creating loops easily - from the inside out
inside out; 使用字面量
4. Correspondence between loops and arrays
密切联系但不是必然的

Chapter 17: Unusual contorl structures
1. Multiple returns from a routine
如果能增强可读性,就使用return
用guard clause(早返回或退出)来简化错误处理
2. Resursion
tips for using recursion
确认递归能够停止
使用安全计数器防止无穷递归
限制在一个子程序内
递归 or 循环 -- 阶乘
3. goto
万不得已才使用goto
goto导致的效率的提升需可以估量
尽量在每个子程序中最多使用一个goto
尽量让goto先前跳转而不是向后
goto标号
确认goto不会产生执行不到的代码

Chapter 18: Table-driven methods
Table-driven is a scheme -- 从表里查找信息而不是用if or case
复杂逻辑和复杂继承结构的替代方案
1. General considerations of using Table-Driven methods
查询记录的方法:
Direct access
Indexed access
Stair-step access
2. Direct access tables
Date-in-Month example
Flexible-Message-Format Example
Logic basied vs. Object-Oriented vs. Table-Driven
Fudging lookup keys
复制信息从而能直接使用键值
转换键值使之能直接使用
把键值转换提取成独立的子程序
3. Indexed Access tables
4. Stair-step Access tables
把每一区间的上限写入表中,使用循环按照各区间的上限检查分数
留心端点
二分法查找,索引访问?
最好是去选择一个好的方案同时避免灾难,而不是试图寻找最佳的方案。
5. Other Examples of Table loopups

Chapter 19: General Control Issues
1. Boolean expressions
Using the true and false for boolean tests
Making complicated expressions simple
拆分复杂的判断并引入新的布尔变量
将复杂的表达式做出布尔函数
用决策表代替复杂的条件
Forming boolean expressions positively
I ann't not no undummy. 我并非不是一个不傻的人。
用狄摩根简化
Using parantheses to clarify boolean expressions
Knowng how boolean expressions are evaluated
Writing numeric expressions in Number-line 2order
Guildines for comparisions to 0
隐形地比较逻辑变量
和数值表达式相比使用显示写法
指针 -- NULL
Common problems with boolean expressions
C家族中,应该把常量反正比较的左端

2. Compound Statements(Blocks)

3. Null statements

4. Taming Dangerously deep nesting

重复检查条件中的某一部分来简化嵌套的if

使用break来简化

if --> if-then-else

if --> case

抽取并放入子程序

对象和多态派分

5. A programming foundation: Structured Programming

structured goofing off 结构化混日子

The three components of structured programming

sequence; selection; iteration

6. Control structures and complexity

应用程序的复杂度是由它的控制流来定义的

General guidelines for reducting complexity

How to measure: decision point

if; while; repert; for; and; or; case

0-5: good; 6-10; 10+

Nov 29, 2008

冬日

今天朋友过生日,下午三点出发,到晚上快十一点才回了宿舍。四个刚工作的女孩子和四个IT男,80、82、85的加上最小的86的我。四个女人吵的不闲累,我听着都心力憔悴。。原本以为去了就吃,结果被叫去了买菜。。辛辛苦苦做好了难吃的又都成了我做的。。这世道。

路上无聊的公交时间拍了一些照,冬天真的来了,可正因为冬天来了,有了冷也就有了暖。大千世界滚滚红尘真是很神奇的一个东西。让人时而逃避时而依赖。平凡的人们一日又一日地或忙碌或闲适,游戏着生活,也被生活游戏。

四个IT人,一个比一个冷,无聊间又说起了水瓶的坏话,我同意。某些角度看,我的确是个自由自私同时无趣的人。过去、现在和将来,我都会努力做个个自信、事实求是而又卑微的工程师。呵呵,努力!

Nov 27, 2008

WALL.E


WALL•E 全名叫Waste Allocation Load Lifter-Earth Class, 700年来日日尽忠职守的留在地球清理垃圾,唯一伴侣就是一只生命力超强的小强。每天做着同样的事情,寂寞无奈却又乐在其中。
这周一直在看UNIX,基本无序但每天都学到很多,大学时如果选择C和UNIX这方向的话,对计算机应该能有更好的理解。可惜我过早选择了Java。
晚上在china-pub上买了《编程珠玑》的两册,打算好好拜读。然后,差不多要考试了,继续浑浑噩噩地努力吧。

Nov 23, 2008

课程论文的LATEX模板

上午费了些劲李果正(Edward G.J. Lee)的《由TEX/LATEX 制作中文PDF文档》中的样式和清华毕业论文的样式结合,做了一个适合一般课程论文的Latex模板。比较简单清爽。

源码如下:
\documentclass[dvipdfm,11pt]{article}
\usepackage[paper=a4paper,dvips,top=2.5cm,left=2.8cm,right=2.8cm,foot=1cm,bottom=3.2cm]{geometry}
\usepackage{CJK}

% 控制标题的宏包
\usepackage[sf]{titlesec}
% 控制目录的宏包
\usepackage{titletoc}

%引用上标
\makeatletter
\def\@cite#1#2{\textsuperscript{[{#1\if@tempswa , #2\fi}]}}
\makeatother

\newcommand{\song}{\CJKfamily{song}} % 宋体 (Windows自带simsun.ttf)
\newcommand{\fs}{\CJKfamily{fs}} % 仿宋体 (Windows自带simfs.ttf)
\newcommand{\kai}{\CJKfamily{kai}} % 楷体 (Windows自带simkai.ttf)
\newcommand{\hei}{\CJKfamily{hei}} % 黑体 (Windows自带simhei.ttf)
\newcommand{\li}{\CJKfamily{li}} % 隶书 (Windows自带simli.ttf)

\newcommand{\yihao}{\fontsize{26pt}{36pt}\selectfont} % 一号, 1.4倍行距
\newcommand{\erhao}{\fontsize{22pt}{28pt}\selectfont} % 二号, 1.25倍行距
\newcommand{\xiaoer}{\fontsize{18pt}{18pt}\selectfont} % 小二, 单倍行距
\newcommand{\sanhao}{\fontsize{16pt}{24pt}\selectfont} % 三号, 1.5倍行距
\newcommand{\xiaosan}{\fontsize{15pt}{22pt}\selectfont} % 小三, 1.5倍行距
\newcommand{\sihao}{\fontsize{14pt}{21pt}\selectfont} % 四号, 1.5倍行距
\newcommand{\banxiaosi}{\fontsize{13pt}{19.5pt}\selectfont} % 半小四, 1.5倍行距
\newcommand{\xiaosi}{\fontsize{12pt}{18pt}\selectfont} % 小四, 1.5倍行距
\newcommand{\dawuhao}{\fontsize{11pt}{11pt}\selectfont} % 大五号, 单倍行距
\newcommand{\wuhao}{\fontsize{10.5pt}{10.5pt}\selectfont} % 五号, 单倍行距

\newlength \CJKtwospaces \CJKtilde

\titleformat{\section}[hang]{\sf \hei \sihao}
{\sihao \thesection}{0.5em}{}{}
\titlespacing{\section}{0pt}{-0.2em}{0.8em}

\titleformat{\subsection}[hang]{\hei \sf \banxiaosi}
{\banxiaosi \thesubsection}{0.5em}{}{}
% {\banxiaosi \thesubsection}{0pt}{}{}
%\titlespacing{\subsection}{0pt}{1.5ex plus .1ex minus .2ex}{\wordsep}
\titlespacing{\subsection}{0pt}{-0.25em}{1em}

\titleformat{\subsubsection}[hang]{\hei \sf}
{\thesubsubsection }{0.5em}{}{}
%\titlespacing{\subsubsection}{0pt}{1.2ex plus .1ex minus .2ex}{\wordsep}
\titlespacing{\subsubsection}{0pt}{0.25em}{0pt}

% 缩小目录中各级标题之间的缩进
\dottedcontents{chapter}[0.0em]{\hei\vspace{0.5em}}{0.0em}{5pt}
\dottedcontents{section}[1.16cm]{}{1.8em}{5pt}
\dottedcontents{subsection}[2.00cm]{}{2.7em}{5pt}
\dottedcontents{subsubsection}[2.86cm]{}{3.4em}{5pt}

% 颜色的设定要引进 color package。
\usepackage[dvips]{color}
\definecolor{webbrown}{rgb}{.6,0,0}
\usepackage{times}
\linespread{1.4}

% 由于把行距加大,要把脚注的行距缩成预设的,这个设定采自吴聪敏教授的
% 《cwTeX 排版系统》修订二版一书,页 143。
\let\oldfootnote\footnote
\renewcommand\footnote[1]{\oldfootnote{\renewcommand\baselinestretch{1.0}%
\large\footnotesize\ignorespaces#1}}
\addtolength{\footnotesep}{1pt}
\begin{document}
\begin{CJK*}{GBK}{song}
\newcommand{\bigfive}{\textrm{Big-5}~码}
\renewcommand{\figurename}{图~}
\renewcommand{\tablename}{表~}
\renewcommand{\contentsname}{目~录~}
\renewcommand{\appendixname}{附~录~}
\renewcommand\refname{参~考~文~献}
\newcommand\prechaptername{第}
\newcommand\postchaptername{章}
\renewcommand\indexname{索~引}
\renewcommand\abstractname{摘~要}
\renewcommand{\today}{\small \number\year~年~\number\month~月~\number\day~日}
\title{\textcolor{webbrown}{\Huge \sf \kai 质疑的质疑}\\{\Large 对~ What's Happening to China's GDP Statistics? 的分析}}
\author{\small Sunix.Xu~~~~Email:xuyizun@gmail.com\\ \small SHUFE Statistics~~~~NO:XXXXXXXXX}
\maketitle
\tableofcontents
\newpage
% 调整段落间距离
\parskip=0.2cm

\section{前言}
\label{sec:introduction}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

\begin{thebibliography}{99}
\bibitem{thomas} Thomas G. Rawski:
《What's Happening to China's GDP Statistics?》,
China Economic Review
2001.12
\end{thebibliography}
\end{CJK*}
\end{document}

质疑的质疑

下文是国民经济核算的案例论文,对Thomas G. Rawski的文What’s Happening to China’s GDP Statistics? 所做的分析。

质疑的质疑
--对What’s Happening to China’s GDP Statistics? 的分析

1 前言
美国匹兹堡大学经济学教授Thomas G. Rawski在2001年12月在《中国经济评论》发表了著名的《What’s Happening to China’s GDP Statistics?》[1]一文。他通过研究中国各省市的经济统计资料,发现这些资料与中国国家统计局发表的数字有不相符合之处,因而提出了对中国统计数据的质疑,他根据中国经济增长与能源消费相反的变动趋势并对比亚洲其它国家后认为,中国自1998年以来的经济增长速度是不真实的。
而在这同时,国外和国内的很多经济学家对Rawski的质疑提出了反质疑,从GDP统计、能源统计、中国经济结构转型等多个方面回答了GDP数据和能耗数据间的矛盾。
本文将本着客观的立场,首先概述Rawski教授的质疑,之后简述国内外学者对此问题的观点,然后进行对比分析并给出我的见解,最后将对GDP统计存在的问题作出总结。
需要说明的是Rawski只是从客观的角度对问题进行了描述和分析,并不带有政治色彩,他的分析对于我国发现并分析发展中遇到的种种问题有着很大的帮助。

2 Thomas教授的质疑

Thomas G. Rawski教授通过以下三个方面对中国GDP统计的真实性提出质疑[1][4]:
2.1 数据之间的不一致性
经济增长率数据与能源消耗、就业和消费价格数据之间的不一致性
中国经济增长与能源消费变动趋势相反,这不符合人们的常识,1997年到2001年间,官方公布的GDP增长了24.7%而能源消耗却降低了12.8%,同时,一些数据表明,中国在97/98年的能源利用率依旧停留在83/84年水平。
对比亚洲其它国家及中国在97年以前10年的数据,能源消耗和GDP一般存在着同向运动的规律。而中国在97年到2001年间的数据却明显违背了这一规律。
生产数据之间以及生产数据与投资数据之间的不一致性
1998 年,水灾是20 世纪中国十大自然灾害之一,但除一个省之外,所有省的农业产出
都是增加的;94 种主要工业产品中只有14 种产品获得两位数增长,工业生产却上升
了10. 75%;钢材消耗和水泥产出增长不到5% ,投资却猛增13. 9%。
消费数据之间的不一致性
除2000 年外,全国社会消费品零售额增长比人均消费支出增长快得多。
消费数据与收入数据之间的不一致性
社会消费品零售额的增长比住户收入的增长快得多,这意味着平均消费倾向在上升。
然而,最近的研究发现,消费支出占收入的比率呈下降的趋势。
2.2 来自中文评论文章的信息
Rawski在文章中摘引了几篇评论中国官方统计数据的中文文章的观点,并声称,大量的中文评论文章表明在整个商业社会和各级政府,经济发展指标的虚报浮夸成为一种普遍现象。
文中指出,从1998 年开始,国家统计局抛弃了省级经济增长数据;虽然国家统计局近些年努力创造跨越地方和省级政府的统计网络,但它不具备在正常的信息渠道以外搜集数据的能力。
2.3 经济增长率的上限
中国航空客运业的客户主要是国内收人最高的阶层,而他们的收入增长水平应超过平均增长水平。因此,航空客运的增长应该高于居民可支配收人的增长,而后者是的计算基础。但罗斯基却计算出在97、98年间乘客里程的增长只有2.2%,而同期GDP的增长率却分别为8.8%和7.8%。
基于以上几点,Rawski认为地方官员迫于政绩的压力,或因为编造数据的收益超过了因编造数据带来的风险从而欺骗中央,所以最终的统计数据是不真实的;然而统计资料中有些数据却反映了经济的实质,比如能源消耗和民航业的发展。97年到01年,GDP增长了,而能源消耗却在下降,Thomas认为能源利用效率的提高不足以解释这巨大的反差。

3 对质疑的反质疑

对于Rawski的质疑,国内外的专家学者纷纷给出了自己的见解,对他的质疑提出了各自的观点。主要集中在以下几个方面:
GDP和能耗并不一定存在严格的规律
经济增长模式的转变导致了数据的不一致性
3.1 GDP和能耗的非一致性
任若恩教授认为,经济增长率与能源消耗增长率应该大致相等,这一假设要求满足一个国家在经济发展过程中是同质的,能源消耗的产业结构和使用能源的技术不变。针对罗斯基依据经济增长率与能源消耗数据之间的不一致性对中国经济增长率数据的质疑,任若恩考察了德国、英国、美国、日本和韩国的经济增长与能源增长数据之间的关系。他发现,这些国家都曾经出现过经济增长与能源增长数据不同步的现象:从经济发展历史看,在不同国家的经济发展中,如日本、德国、英国等,能源增长低于经济增长的数据出现频率不在少数。美国大概两次,日本一次,都出现过GDP增长而能源下降的历史的差距[3][5]。
如果因为能源增长率低于经济增长率,因此就认为经济增长率数据可能出现高估,那么,当能源增长率高于经济增长率时,就可以怀疑经济增长率数据出现低估,而这显然是没有依据的。
能源总产和总消费与中国经济增长之间从来不存在十分密切的关系,在1978–2000年间,有13年能源的消费弹性(消费增长率与GDP增长率的比例)是低于+0.5的,而在1978–2001年间也有14年能源的生产弹性(产量增长率与GDP增长率之比)低于+0.5。最关键的是, 并不是只有以往几年才是如此,连公认的中国经济过热的1992–1994年间,能源增长和消费均跟GDP没有什么关联。此期间同步伴随中国大规模的能源供给结构调整,煤炭供给受限严格,而电力消费有所上升,煤炭严格限制可能是导致统计内能源消费萎缩的主要原因[6]。
3.2 经济增长模式的转变导致了数据的不一致性
张新和蒋殿春在《中国经济的增长――数据的可信度以及增长的微观基础》[6]中对近年来中国经济增长速度及其与企业微观绩效之间的关系进行了理论和实证性的分析研究,结果表明:首先,我国近年来的经济增长数据墓本可靠;再者,我国宏观和徽观经济之间并不存在本质性的背离。
我国目前仍然处于粗放式经济增长阶段,主要是依靠物质资源、人力资源的大投入和规模的快速扩张来推动经济的高速增长;但只要以后中国整个经济体系的效率是逐步上升,单位能耗逐渐降低,那么电力等生产资料产量的增长速度在一个很长的时间内将慢于整个经济的增长速度。正是能源效率的改进导致能源消耗持续下降。

4 统计数据存在的问题
事实上,中国经济增长率的统计的确存有问题,在计算水平、方法与范围等方面有待进一步改进提高。一些省份有多报的动机,同时也有一些省份有瞒报的动机。统计数据,尤其是GDP数据,没有一成不变的,随着时间的推移,基础资料和统计方法会不断完善,为了保持客观性和可比性,历史数据需要不断进行调整。美国就曾经对它的GDP历史数据作过11次调整。
在《南方周末》对国家统计局国民经济核算司司长许宪春的访谈中,许宪春揭示了统计数据存在的一些问题[10]:
4.1 统计数据来源及其对比
数据来源
– 国家统计局独立调查的数据
内容:全国的粮食产量、棉花产量、主要畜禽产品产量;规模以下的非国有工业企业、小型商业企业、个体工商户的产值和增加值;农村固定资产投资、城乡居民住户收入和支出、商品和服务的价格。
– 地方汇总的数据
内容:全部国有企业和年产品销售收入500万元以上的非国有企业。
数据源对比
地方汇总数据统计方法以全面报表为主,基层单位向地方政府统计部门报送报表,然后层层汇总到国家统计局。一般来说,这种调查方法由于涉及的单位多,需要的人员多,因而难以保证基层统计资料的准确性。抽样数据抽样调查涉及的单位少,需要的人手相对少,因此有可能对统计人员进行较全面的业务培训,从而能够提高基层统计资料的质量。
综合统计数据来源及其对比,我们可以发现国家统计局可以控制质量的数据仅占到国民经济的很少部分,全部国有企业和规模以上的非国有企业的数据要靠地方汇总,这部分的数据质量难以得到十分的保证。
4.2 数据质量评估及数据调整
在数据评估方面,由国家统计局评估省一级的数据,省统计局评估地市一级数据。但由于《统计法》是一种行政法规,加之统计局在行政机构中的地位,对于一些地方官员并没有很强的约束力。
目前各省公布的GDP加总后都要高于国家统计局公布的全国GDP,国家统计局需要挤出其中的“水分”,主要采用以下的方法:
² 采取抽样调查的方法
² 实行超级汇总方法排除中间层次的干扰
² 加大执法力度,查处统计违法现象
² 建立数据质量评估制度
从中,我们可以看到国家统计局对于挤出“水分”并没有真正强有力的方法。从以上内容我们可以分析得出,国家统计局对于数据的质量没有十分可靠的保障,地方政府官员可能出于自身利益的考虑多报或少报数据。东部沿海的省分由于以民营经济为主,可能会低报经济增长数据以减少上缴中央税收。[3]。

5 中国崩溃论?
自20世纪90年代以来,国际上关于中国问题的较大争论有过四次。第一次是1994年,美国世界经济研究所布朗提出“谁来养活中国人”,引发了一场大争论;第二次是1992年以来,国际上泛起一股“中国威胁论”,已经直接影响西方大国的对华政策的重新制定;第三次是去年开始出现的“中国崩溃论”,无限放大中国目前经济社会中存在的一些问题,并得出草率的结论;第四次则是这次的“中国统计水分论”[9]。
这些争论,有的纯属学术范畴,有的则带有国际政治角力的背景,但无论从哪个角度、用哪种眼光来审视中国的发展,有一个基本事实不容忽视,这就是在近年来世界上发生的各种危机面前,在中国自身宏观经济运行面临诸多深层次困难的情况下,中国不但没有衰退和崩溃,反而保持连续多年的经济高速增长。即使GDP数据存在着一些问题,这也不能代表中国经济仅有数字上的辉煌,而实质上已经走到了崩溃的边缘。
GDP是考察经济的实际运行情况的一个重要的指标,但不是唯一的指标。任何一个国家的经济增长都是由多种因素决定的,没有一种单独的经济活动能够解释像现代经济这么复杂的情况,尤其像中国这样大规模的经济。下面将引述Klein和Lardy关于中国经济的评论[4]。
5.1 Lawrence R. Klein对中国经济的评论
为了从一个新的视角研究中国的GDP ,并利用独立的信息检验中国GDP 估计的一致性,论文收集了以下15 个变量:电力(千瓦时) ;煤炭(吨) ;原油(吨) ;钢产量(吨) ;货运(吨公里) ;民航运输(吨公里) ;第三产业就业比重( %) ;粮食产量(吨) ;出口(美元不变价) ;进口(美元不变价) ;政府支出(经过价格缩减) ;实际工资;长途电话(次数) ;通货膨胀率(消费价格指数) ;畜产品(吨) 。这些变量概括了能源、交通、通讯、劳动力、农业、公共部门、工资、通货膨胀情况。利用1980~2000 年年度数据,论文对这15 个指标进行了主成分估计[7]。
论文指出,概括地说,主成分反映了从不同资料来源相当独立地收集的15 个指标的变动,对中国经济来说有广泛代表性。这些指标的变动与中国官方估计的实际GDP 的变动是一致的。
5.2 Nicholas R.Lardy对中国经济的评论
Lardy列举了两个经济指标,一个是进口额,另一个是财政收入。中国官方数据表明,1997~2001 年,进口额增长了70 % ,财政收入增长了90 %。Lardy认为,进口额不可能被夸大,因为负责贸易统计的海关必须向财政部缴纳进口关税。财政收入也不可能被夸大,因为政府处于日益增加的社会资金需求的巨大压力之下,包括失业补贴、国企下岗工人退职金、缓解环境恶化和为军事现代化提供资金,等等。Lardy说,对所有国家来说,在经济增长率明显下降的情况下,由于企业利润减少,个人收入和消费停滞,税收的增长几乎不可避免地会更加放慢。中国经济增长在过去的四年里严重衰退与税收如此强劲增长是难以吻合的[8]。
虽然能源消耗降低、失业率上升等因素来说明中国经济并没有获得快速增长的观点一时还很难被完全驳倒。但事实证明了中国经济的确在强劲增长。同时也表明,单凭一两个指标来判断复杂的经济形势是没有任何科学依据的,也是和事实相违背的。

6 对Thomas Rawski观点的综合评述
综合以上的信息,我认为Thomas G. Rawski的质疑是有理由的,能源消耗和增长之间的不对应的原因缺乏进一步的分析;但他质疑中国统计数据造假的观点是站不住脚的;他得出的结论过于轻率,具体说体现在一些方面:
1. Rawski对于GDP数据的质疑是有的一定道理的
虽然说经济增长率与能源消耗、就业和消费价格数据之间存在着不一致性,且中国正在进行着较大的产业结构调整,但30%的差距依然很难被解释。一方面,能耗的统计存在着一些问题。由于非国有煤炭发展较快,因此20世纪90年代中期以后中国的能源统计一直存在一些问题[2];另一方面,由于统计制度等多方面的原因,GDP数据的确可能存在着一些误差,而事实上,国家统计局也的确对某些年份的GDP进行了修正。
2. Rawski对于中国官方统计数据来源的质疑较为片面
对于数据来源的质疑,许宪春在《中外经济学家对中国经济增长率的评论》中指出:“中国自从1985 年开始计算国内生产总值时起,就采取国家统计局统一制定方法制度,地区与国家分级核算的方式,即国家统计局计算全国国内生产总值,省、自治区、直辖市统计局计算本地区国内生产总值。全国国内生产总值从来就不是省级国内生产总值数据的汇总。”“所以不存在国家统计局抛弃省级经济增长数据的问题”[4]
这说明了Thomas对数据来源的质疑是片面的,但从《许宪春详谈中国GDP统计数字来源》[10]我们可以看出,省级汇总的数据的确存在着一些问题,比如1995年第三次全国工业普查发现乡镇企业的工业总产值数据高报了40%[10]。
3. Thomas对于真实GDP的估计是没有依据的
Thomas认为四年累积经济增长率不会超过官方公布数据的1/ 3 , 甚至可能更低。Rawski以国内航线的民航客运周转量的增长率为依据,确定中国1998 年经济增长率的上限为2 % ,但是,2000 年国内航线的民航客运周转量的增长率为13. 2 % ,他却认为中国2000 年的经济增长率在2 % ―3 %之间,从而上限仅为3 % ,这显然是自相矛盾的[4]。
中国GDP统计数据确实存在着许多问题,但在一些地区多报的同时,也有一些地区少报了产值,因而认为中国GDP增产率被整体严重高估是没有道理的。东部沿海的省分由于以民营经济为主, 可能会低报经济增长数据以减少上缴中央税收。同时,由于这些省分市场经济发展较快, 数据统计是比较完善和可信的[3]。

7 总结

本文首先简述了Thomas G. Rawski对中国GDP数据的质疑,之后描述了其它学者对其观点的反质疑;然后,结合《南方周末》对许宪春司长的访谈,揭示了我国在GDP核算上存在的种种问题;同时,本文结合了Klein和Lardy的观点,说明了GDP并不是衡量经济现状的唯一的指标,复杂的经济形势也不是光靠几个指数就能说明的;最后,我综合上述的观点给出对Thomas观点的评述。我们只有综合各方面的信息进行全面的考虑,才能做出准确的判断。

参考文献
[1] Thomas G. Rawski: 《What’s Happening to China’s GDP Statistics?》, China Economic Review 2001.12
[2] Jonathan E. Sinton, 《Aeeuraey and Reliability of China’s EnergyStatistie》, China EconomieReview, 2001, (12)
[3] 姜辉: 《崩溃与威胁—简析近年来国际上对中国经济的若干观点》, p49-p52, 2003
[4] 许宪春(国家统计局国民经济核算司司长): 《中外经济学家对中国经济增长率的评论》,《财贸经济》, 2002 年第二期
[5] 任若恩, 《中国GDP 统计水分有多大――评两个估计中国GDP 数据研究的若干方法问题》, 《经济学季刊》, 2002 年第2 卷第1期
[6] 张新蒋殿春, 《中国经济的增长――数据的可信度以及增长的微观基础》, 《经济学季刊》, Vol 2, No. 1, Oct., 2002
[7] Klein L. R. and Ozmucur S. 《The estimation of China’s economic growth rate》, 2002
[8] Lardy , N. R. , 《China will keep on growing》, 《Asian Wall Street Journal》, June 14. 2002
[9] 《中国GDP增长统计存在水分》, home.xjtu.edu.cn/teacher/yandw/macro/reference/65.doc Mar 6. 2003
[10] 《许宪春详谈中国GDP统计数字来源》, 《南方周末》, 2002.08.01

Nov 19, 2008

Note of SAS coding style

Guidelines for Coding of SAS® Programs
--by Thomas J. Winn Jr., Texas State Auditor’s Office, Austin, TX

SAS language is like a script but with more flexiblility and less limitation. Sometimes it is useful but as a programmer, I always confused by program writen by SAS, though sometimes the problem is not complex.

Luckily, I found a paper by Thomas, provide some idea which is practical and beautiful, Though most of them is just a basic law in normal programming. And Law is Freedom.

And the following material is just copy from the paper.

“This paper presents a set of guidelines that could be used for writing SAS code that is clear, efficient, and easy to maintain.”
you can write SAS code in a particular way does not mean that you should do so.

Name
• In naming, avoid cuteness, single-letter names, and names that too closely resemble one another.
• Names should be unique, short, and descriptive – in that order of importance.
• If longer names are needed, underscores may be used to separate words, in order to enhance readability.
• If a user-defined format applies to only one variable, then name the format with a readily-recognizable form of the variable-name plus the suffix FMT .

READABILITY & APPEARANCE
♦ Insert a blank line between SAS program steps; that is, before each DATA or PROC step.
♦ Be consistent with your indentation increments.
♦ Indent all statements in a logical grouping by the same amount.
♦ Left-justify all OPTIONS, DATA, PROC, and RUN statements. Indent all of the statements within a DATA or PROC step.
♦ Indent conditional blocks and DO groups, and do it consistently, The logic will be easier to follow.
♦ Align each END statement with its corresponding DO statement. This will make it easier to verify that they match.
♦ Remember to preface major blocks of code with explanatory comments.
♦ Consider inserting PAGE statements to force the SAS Log to begin tracing the execution of new modules on a new page.

REUSABILITY
Since most of the operations of the SAS macro facility are carried out in the background, sometimes debugging them can be fairly mysterious.
• Write code that can be re-used, with different parameters. Keyword parameters are preferable to positional parameters, because they are less likely to be specified incorrectly.
• Write the code you use repeatedly as a macro, and then, instead of repeating your code, invoke the macro.
• Avoid using global macro variables.
• If a macro is used by more than one program, put it into an AUTOCALL macro library.

EFFICIENCY
Avoid jumping to statement labels by GO TO, or LINK statements and RETURN statements,
♦ If possible, replace logic which jumps between subroutines with DO ...END and IF ... THEN ... ELSE ...-logic,
♦ End every DATA and PROC (except PROC SQL) step with a RUN statement,
♦ End every PROC SQL step with a QUIT statement.

Place most of the non-executable statements in a DATA step before all of the executable statements.
In particular, place variable attribute and other declarative statements near to the top of the DATA step, and ahead of the executable statements.

• In a DATA step, place most of the non-executable statements before the executable statements – exceptions include the DROP or KEEP statements, which may be placed after the executable statements.
• Define INPUT and PUT variables one per line, using @ pointer control.
• Screen data for unusual circumstances.

reduce the number of times the data are read:

♦ Minimize the number of passes through the data,
♦ Minimize the number of DATA steps,
♦ Read and store only the data that are needed,
♦ Sort the data only when it is absolutely necessary.

When you read in an external file, use pointer controls, informats, or column specifications in the INPUT statement, to read only those fields you actually need.
• Store only the variables you need by using DROP or KEEP statements, DROP= or KEEP= options (eliminate variables from the output data set which are needed only during DATA step execution, and not afterward).
• When only one condition can be true for a given observation, use IF ... THEN ...ELSE ... statements (or a SELECT group), instead of a series of IF ... THEN ... statements without ELSE statements (In a sequence of IF-THEN statements without the ELSE, the SAS System will check each condition for every observation).
• When using a series of IF ... THEN ... ELSE ... statements, list the conditions in descending order of probability. This will save CPU time.,
• Use the LENGTH statement to reduce the storage space for variables in SAS data sets.
• Minimize workspace usage by using the DELETE statement in a PROC DATASETS step, to eliminate temporary data sets that are no longer needed by the program.
• Use the IN operator instead of a series of multiple logical OR operators.

Nov 17, 2008

Code Complete PART 3

Variables
chapter 10. General issues in using variables
1. Data Literacy
2. Making variable declarations easy
3. Guidelines for initializing variables
在声明变量时初始化
靠近变量第一次使用时初始化
理想情况下,靠近第一次使用的位置声明和初始化
final & const
counter & accumulator  --- i, j, k, sum, total
在constructor中初始化类的数据成员
检查是否需要重新初始化
一次性初始化具名常m量--使用可执行代码
使用编译器设置
利用编译器警告
检查输入参数合法性
初始化工作内存。 0xCC & 0xDFADBEEF
4. Scope
visibility -- 可见性 作用域
Localize references to variables
span -- 跨度
生存时间
General guidelines for minimizing scope
在循环开始之前再初始化循环中使用的变量
直到变量使用时才为其赋值
把相关语句放到一起
提取子程序
开始时采用最严格的可见性,之后再扩充
Comments on minimizing scope
intellectual manageablility -- 智力可管理性
5. Persistence
数据的生命期
6. Binding time
绑定时间:
编码时 -- 神秘数值
编译时 -- 具名常量
加载时 -- 外部数据源读取
对象实例化时
即时
绑定时间越早灵活性越差,但复杂度越低。
7. Relationship between data types and control structures
Jackson.
Sequential data
selective data
interative data
8. Using each variable for exactly one purpose
每个变量仅有单一用途
避免让变量有隐含意义
确保使用了所有已申明的变量

Chapter 11. The power of variable names
1. Considerations of choosing good names
完全 && 准确
problem orientation
what, not how
length: 10 - 16
限定词放在变量名的最后:
Total, sum, average, max, min, record, string, pointer...
NumXXX: a total number
XXXNum: 下标
begin/end
first/last
locked/unlocked
min/max
next/previous
old/new
opened/closed
visible/invisible
source/target
source/destination
up/down
2. Naming specific types of data
Naming loop indexes
i, j, k
XXXindex, XXXCount
to avoid index cross-talk
Naming status variables
'flag' is not good
Naming temporary variables
警惕临时变量,弄清其实际用途
Naming boolean variables
典型的boolean名:
done, error, found, success or OK.
Naming enumerated types
使用前缀
3. The power of naming conventions
why:
when:
degrees of formality:
4. Informal naming comventions
Guidelines for a language-independent conventions
区分变量名和子程序名
区分类和对象
标识全局变量
标识成员函数
标识类型申明
标识具名常量
枚举类型的元素
格式化命名
Guidelines for language-specific conventions
5. Standardized perfixes
User-defined type abbreviations
UDT: user defined type
ch, doc, pa, scr, sel, wn
Semantic perfixs
c: count
first & last
g: global var
i: index
lim: limitation -- first <> last <> lim : llim = last + 1
m: class var
max && min
p: pointer

Chapter 12: Fundamental data types
1. Numbers in genaral
avoid Magic number.
avoid mixed compare
be careful of warning
2. Integers
检查整数除法。地板除,真实除
检查整数溢出
检查中间结果溢出
3. Floating-point Numbers
避免数量级相差巨大的数之间的加减
避免等量判断
处理舍入误差问题 --使用更高的精度,使用BCD
4. Characters and strings
避免使用神秘字符及神秘字符串
Unicode
在程序生命期中尽早决定国际化/本地化策略
ISO 8859 or Unicode
采用某种一致的字符串转换策略
5. Boolean variables
用布尔变量来简化复杂的判断
需要的话创建自己的布尔类型
---typedef int BOOLEAN;
6. Enumerated Types
提高可读性,可靠性,可修改性。作为布尔变量的修改方案。
7. Named constants
single-point control
在数据申明中使用具名常量
避免使用文字量
用具有适当作用域的变量或类来模拟具名常量
统一地使用
8. Arrays
考虑用容器来代替数组,或将数组当作顺序化的容器来处理
检查数组的边界点
提防下标串话
9. Creating your own types

千与千寻

这个周末窝宿舍看了6部电影:辛德勒的名单,战争之王,千与千寻,马克思佩恩,我是传奇和风云诀。辛德勒的名单和千与千寻原先就看过,不过都是很多年前了;战争之王也是部优秀的电影;其它三部就很soso了。很久很久没这么看电影了,有时是因为没时间,有时是因为没心境。

一些优秀的东西不管在哪个时代,那个年龄段的人看来都是优秀的。人性、关爱和对心灵的探求让人在并不温暖的初冬感到丝丝暖意。

人在成长的过程中必然会丢失一些东西,有些时候甚至很难说这种成长值不值得,长大了,就很难再听见心灵里的某种声音了,那是种至真至诚的感动,明静而通澈。

不得已,人长大了总要负担些什么了,可以说是上进,可以说是责任感,也可以说是欲望。又有什么差别呢。不过有时候是要静下来听听自己心灵的声音,不要被自己彻底地蒙蔽。就像乔布斯说的,把每天当成最后一天来过,这样,自然会听从心底最本真的声音。

Nov 16, 2008

上外的猫

阴错阳差到了上外,一个比上财还小的学校。不过有趣的是发现了黑猫白猫和它们的仔儿。女生多的学校就是猫多,而且都有两个特点——肥,胆大。

人走过去,它不动;有吃的,立马哈过来;没吃的,扭过头不看你;你吓它吧,有时象征性地跑两步,有时干脆就不跑。简单的说,就是嚣张、厚颜无耻,彻底丧失了作为一只猫的优良传统。
#ReadMore#
 

Nov 15, 2008

The Zen of python

PEP is short for Python Enhancement Proposals, and PEP0 is the index of these files.
http://www.python.org/dev/peps/pep-0000/

The Zen of python -- May be simple, but practical. It is in PEP20.

    Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

And I think Simple is beautiful.

I like python, for its liquid, simple and prowerful.

Debian note, installation

Today, I installed debian in my virtual machine. To learn more about development in Linux environment. And from now on, I will try my best to write blog in English, it is a good practice for my write skill. :)

First, download a ISO file form http://www.debian.com/;
the path of the ISO file is http://cdimage.debian.org/debian-cd/4.0_r5/i386/iso-cd/debian-40r4a-etchnhalf-i386-netinst.iso, It is a image for net installation.

Finished installation, edit /etc/apt/sources.list, add an update source in the following form:
deb http://host/debian distribution section1 section2 section3 deb-src http://host/debian distribution section1 section2 section3
for example:
deb http://http.us.debian.org/debian stable main contrib non-free

I select a mirror in Taiwan to do the installation. Use the command like: apt-get install package.

Install R language. It is a free statistical programming language.
apt-get install r-base

Install mySQL:
#apt-get install mysql-server mysql-client libmysqlclient15-dev

And Vim should also be reinstalled to get full version.

Nov 14, 2008

一年中最好的时节

冬至,凉爽而清澈的天气,阳光艳丽慵懒。一年中最好的时节。
从一点睡到八点,阳光正照到我的床上,醒来,穿衣,刷牙。咖啡加蜂蜜面包,懒洋洋地开机,下载。
编程。所有东西都有它内在的优美,特别是当它无序的时候。从无序到有序,从混杂到简洁。然后Simple && beautiful。
自然,自在,自由。一些东西就由着它生长吧。

Nov 8, 2008

数据挖掘——技术 or 艺术?

今天在MYDB2.CN上发现了IBM讲师张英做的slide,《数据挖掘——技术 or 艺术?》。觉得最好的隐喻相当地恰当,copy如下:

1 取景(寻找业务问题-寻找业务增长空间)
2 构建画面的背景(定义业务问题)
4 根据天气和光线的情况调整曝光程度等(调整建模方法和参数)
5 冲洗选择一张最佳的照片(选择一个最佳的模型)
6 后期美化处理(业务含义解释和建议)
7 装裱起来,挂在该挂的位置例如床边,书桌或者客厅什么的(模型部署,用于改善实际的业务)

会找:发现问题,以及解决问题的数据挖掘方法
会用:处理数据,操作软件
会说:对挖掘结果给出解释分析
会试:需要不断的调优,改进挖掘效果

希望能成为一个信息管理和商务智能方面的专家,愿意为之付出持续而谦卑地努力,因为professional && free往往是相互依存的。

Nov 2, 2008

Rubik's Cube

Rubik's Cube也就是魔方,昨天晚上在地摊上买了一个,魔方不是一个好的玩具,特别是对于我这样的笨小孩来说,很能打击自尊心。现在长这么大了再次上手魔方,看看是不是长大聪明了还是继续印证“痴长白大”这句家乡的古话。

在地铁上玩了一把小时,还是没个头绪,我也意识到了中心块、棱块和角块的特殊,可还是没发现什么。我知道我笨,只是一次又一次地验证这个事实还是蛮让人沮丧的。

今天google了一下,发现了下面的入门教程http://www.rubik.com.cn/beginner.htm,另外百度百科上也有魔方的详细介绍:http://baike.baidu.com/view/35837.html?wtp=tt。真不知道,原来魔方还有这么多的故事。解魔方也有系统的方法,就是一些特定的步骤和所谓的魔方算法,一路看下来,即使是最简单的7步法也有一些东西要记,虽然跟着教程很快就完成了魔方的复原,可要我自己重新操作也是搞不来的。人老了的最大的缺点就是懒的思考。

rubik.com.cn的站长还分享苹果CEO Steve Jobs在斯坦福的演讲:“听从自己心灵的指示;把每天当做最后一天”。这样的人无疑是快乐的,而且是强大的。

RA3

终于出了RA3了,从RA2到现在,十多年了吧,可惜的是红警依旧,西屋不再,让人不得不感叹沧海桑田,世事难料。。^_^红警是个蛮好的发泄游戏,没什么技巧,不用动脑,只要疯狂造兵,一下扔过去就是了。
RA3里面原来的特色兵种大都还在,只是好像少了火箭飞行兵和尤里。不过多出来个日本,邪门得很。上午下有些,然后玩了下战略,下午拿美俄日一个个和日本打了下,玩得腻了,删!
红警兵种都加了技能,这么着有点不像红警了,模仿的结局就是沦落。