博文

第一章 传统经理人的迷思[1](2008-08-10 12:45:00)

摘要:美国的企管顾问师威廉•葛诗礼,于十几年前,在亚洲基金会与全国职业训练金监理会的赞助之下,完成了一本名叫《为中国经理把脉》的研究报告。    在该篇报告中,葛诗礼毫不客气地指出台湾经理人常犯的三十六项错误,这些错误是: 一、    授权不够二、    权责不明三、    多头马车四、    踢皮球——推卸责任五、    死爱面子六、    不能容忍部属的错误七、    把建议当作是批判八、    自认样样都比部属行九、    喜欢制造派系的斗争十、    喜欢用听话而无主见的人十一、    用人重视忠心忽视能力十二、    霸占部属的创见十三、    墨守成规、拒绝改变十四、    把部属看成是低一等的人十五、    没给部属宣泄情绪的机会十六、    对部属的好坏绝口不提十七、    缺乏合理的绩效评估制度十八、    想法与观念既陈旧又保守十九、    对事务的看法失之主观二十、    以假平等对待卓越的部属二十一、    只会采用专制方式的领导二十二、    把人当做机器二十三、    误认金钱与地位是万能二十四、    把失败归之于制度的限制二十五、......

阅读全文(1050) | 评论:0

怎样成为优秀软件模型设计者(2008-08-10 12:33:00)

摘要:我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢?  将下列原则应用到你的软件工程中,你会获得立杆见影的成果。1. 人远比技术重要  你开发软件是为了供别人使用,没有人使用的软件只是没有意义的数据的集合而已。许多在软件方面很有成就的行家在他们事业的初期却表现平平,因为他们那时侯将主要精力都集中在技术上。显然,构件(components),EJB(Enterprise Java Beans)和代理(agent)是很有趣的东西。但是对于用户来说,如果你设计的软件很难使用或者不能满足他们的需求,后台用再好的技术也于事无补。多花点时间到软件需求和设计一个使用户能很容易理解的界面上。2. 理解你要实现的东西  好的软件设计人员把大多数时间花费在建立系统模型上,偶尔写一些源代码,但那只不过是为了验证设计过程中所遇到的问题。这将使他们的设计方案更加可行。3. 谦虚是必须的品格  你不可能知道一切,你甚至要很努力才能获得足够用的知识。软件开发是一项复杂而艰巨的工作,因为软件开发所用到的工具和技术是在不断更新的。而且,一个人也不可能了解软件开发的所有过程。在日常生活中你每天接触到的新鲜事物可能不会太多。但是对于从事软件开发的人来说,每天可以学习很多新东西(如果愿意的话)。4. 需求就是需求  如果你没有任何需求,你就不要动手开发任何软件。成功的软件取决于时间(在用户要求的时间内完成)、预算和是否满足用户的需求。如果你不能确切知道用户需要的是什么,或者软件的需求定义,那么你的工程注定会失败。5. 需求其实很少改变,改变的是你对需求的理解  Object ToolSmiths公司(www.objecttoolsmiths.com)的Doug Smith常喜欢说:“分析是一门科学,设计是一门艺术”。他的意思是说在众多的“正确”分析模型中只存在一个最“正确”分析模型可以完全满足解决某个具体问题的需要(我理解的意思是需求分析需要一丝不苟、精确的完成,而设计的时候反而可以发挥创造力和想象力 - 译者注)。  如果需求经常改动,很可能是你没有作好需求分析,并不是需求真的改变了。  你可以抱怨用户不能告诉你他们想得到什么,但是不要忘记,收集需求信息是你工作。  你可以说是新来的开发人员把事情搞得一团糟,但是,你应该确定在工程的第一天就告诉他们应该做什么和怎样去做。  如果你觉......

阅读全文(1709) | 评论:0

五子棋算法(2008-08-09 22:00:00)

摘要:任何一种棋类游戏其关键是对当前棋局是否有正确的评分,评分越准确则电脑的AI越高。五子棋游戏也是如此,但在打分之前,我们先扫描整个棋盘,把每个空位从八个方向上的棋型填入数组gStyle(2, 15, 15, 8, 2),其中第一个下标为1时表示黑棋,为2时表示白棋,第二和第三个下标表示(x,y)第四个下标表示8个方向,最后一个下标为1时表示棋子数,为2时表示空格数,如: gStyle(1,2,2,1,1)=3表示与坐标(2,2)在第1个方向上相邻的黑棋棋子数为3gstyle(1,2,2,1,2)=4表示与坐标(2,2)在第1个方向上的最近的空格数为4在定义方向时,也应该注意一定的技巧,表示两个相反的方向的数应该差4,在程序中我是这样定义的:Const DIR_UP = 1Const DIR_UPRIGHT = 2Const DIR_RIGHT = 3Const DIR_RIGHTDOWN = 4Const DIR_DOWN = 5Const DIR_DOWNLEFT = 6Const DIR_LEFT = 7Const DIR_LEFTUP = 8这样我们前四个方向可以通过加四得到另一个方向的值。如果你还是不太明白,请看下面的图:---------------------oo-----ox*xx---------------------图中的*点从标为(4,4),(打*的位置是空位),则:gStyle(2,4,4,1,1)=1在(4,4)点相邻的上方白棋数为1gStyle(2,4,4,1,2)=2在(4,4)点的上方距上方白棋最近的空格数为2gStyle(1,4,4,3,1)=2在(4,4)点相邻的右方黑棋数为2gStyle(1,4,4,3,2)=1在(4,4)点的右方距右方黑棋最近的空格数为3... 一旦把所有空点的棋型值填完,我们很容易地得出黑棋水平方向上点(4,4)的价值,由一个冲1(我把有界的棋称为冲)和活2(两边无界的棋称为活)组成的。对于而白棋在垂直方向上点(4,4)的价值是一个活1,而在/方向也是活1所以,只要我们把该点的对于黑棋和白棋的价值算出来,然后我们就取棋盘上各个空点的这两个值的和的最大一点作为下棋的点。 然而,对各种棋型应该取什么值呢?我们可以先作如下假设:Fn 表示先手n个棋子的活棋型,如:F4表示先手活四Fn'表示先手n个棋子的冲棋......

阅读全文(2653) | 评论:0

排序算法五例(2008-08-09 21:59:00)

摘要:   一、插入排序(Insertion Sort)1. 基本思想:  每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。2. 排序过程:   【示例】:[初始关键字] [49] 38 65 97 76 13 27 49    J=2(38) [38 49] 65 97 76 13 27 49    J=3(65) [38 49 65] 97 76 13 27 49    J=4(97) [38 49 65 97] 76 13 27 49    J=5(76) [38 49 65 76 97] 13 27 49    J=6(13) [13 38 49 65 76 97] 27 49    J=7(27) [13 27 38 49 65 76 97] 49    J=8(49) [13 27 38 49 49 65 76 97]  Procedure InsertSort(Var R : FileType);//对R[1..N]按递增序进行......

阅读全文(1396) | 评论:0

用递归中序遍历二叉树(2008-08-09 21:51:00)

摘要:     #include<stdlib.h> struct tree                //声明树的结构{     struct tree *left;     int data;     struct tree *right;}; typedef struct tree treenode;type treenode *b_tree;             //声明二叉树链表 //插入二叉树的节点b_tree insert_node(b_tree root,int node){     b_tree newnode;     b_tree currentnode;     b_tree parentnode;          newnode=(b_tree)malloc(sizeof(treenode));     //建立新节点的内存空间     newnode->data=node;     newnode->right=NULL;    ......

阅读全文(2525) | 评论:0

JavaScript[对象.属性]集锦之三(2008-08-09 01:56:00)

摘要:string对象 string对象为操作字符串的内容提供了很多方法. 属性 length 字符串的长度,即字符串中字符的个数. 方法 big(),blink(),bold(),fixed(),italics(),small(),sub(),strike(),sup(),fontColor(color),fontSize(size) 以上方法为字符串增加相应的HTML标记. charAt(index) 返回字符串中index处的字符. indexOf(searchValue,[fromIndex]) 该方法在字符串中寻找第一次出现的searchValue.如果给定了fromIndex,则从 字符串内该位置开始搜索,当searchValue找到后,返回该串第一个字符的位置. lastIndexOf(searchValue,[fromIndex]) 从字符串的尾部向前搜索searchValue,并报告找到的第一个实例. substring(indexA,indexB) 获取自indexA到indexB的子串. toLowerCase(),toUpperCase() 将字符串中所有字符全部转换成大写,小写. Date对象 要使用Date对象,必须先生成一个Date实例: 变量名=new Date(); 方法 getDay(),getDate(),getHours(),getMinutes(),getMonth(),getSeconds(),getTime(), getTimeZoneOffset(),getYear() 还有setDay... ... toGMTString() 用GMT格式返回当前时间. (Sun,12 Feb 1999 14:19:22 GMT) toLocaleString 用locale格式返回当前时间. (03/11/99 14:19:22) parse(date) 将普通date字符串转换成豪秒形式,从而给setTime()做参数. Math对象 属性 LN10 (10的自然对数) PI (3.1415926...) SQRT1_2 (1/2的平方根) 方法 abs(x) 返回x的绝对值 acos(x) 返回x的arc cosin......

阅读全文(1264) | 评论:0

JavaScript[对象.属性]集锦之二(2008-08-09 01:55:00)

摘要:复选框(checkbox)对象 属性 name NAME属性的字符串值. value 复选框内容的字符串值.如果设置了,则为"on",否则为"off". checked 复选框内容的布尔值.如果设置了,则为true,否则为false . defaultChecked 反映(CHECKED)属性的布尔值(缺省状态). 方法 click() 选定复选框,并使之状态为"on". 事件处理器 onClick 当用户单击Checkbox时执行. 单选按钮(radio)对象 属性 name NAME属性的字符串值. length radio对象中单选按钮的个数. value VALUE属性的字符串值. checked 布尔值,按下为true,否则为false . defaultChecked 反映CHECKED属性值的布尔值. 方法 click() 选定单选按钮. 事件处理器 onClick 当单选按钮被选定时执行. select对象 属性 length select对象中对象的个数. name 由NAME=属性定义的select对象的内部名. selectedIndex select对象中当前被选option的下标. options 该属性对应于在HTML中定义select对象时标记中的内容,它有如下属性: text 标记后的文本串. value VALUE属性的值,当Submit按钮被按下时,该值被提交. defaultSelected 反映标记的SELECTED属性的布尔值. selected 反映option的当前选择状态的布尔值. 事件处理器 onFocus 当输入焦点进入域时执行. onBlur 当域失去输入焦点时执行. onChange 当域失去焦点且如果域的值相对于onFocus执行时有所改变,则执行onChange. Button对象 表格中有三种类型按钮,由标记中的TYPE属性定义: .submit (type="SUBMIT") .reset (type="RESET") .custom (type="BUTTON") 所有按钮对象都有如下成分: 属性 value VALUE属性的字符串值. ......

阅读全文(1448) | 评论:0

JavaScript[对象.属性]集锦之一(2008-08-09 01:54:00)

摘要:SCRIPT 标记     用于包含JavaScript代码. 语法 属性 LANGUAGE 定义脚本语言 SRC 定义一个URL用以指定以.JS结尾的文件 Windows对象 每个HTML文档的顶层对象. 属性 frames[] 子桢数组.每个子桢数组按源文档中定义的顺序存放. feames.length 子桢个数. self 当前窗口. parent 父窗口(当前窗口是中一个子窗口). top 顶层窗口(是所有可见窗口的父窗口). status 浏览器状态窗口上的消息. defaultStatus 当status无效时,出现在浏览器状态窗口上的缺省消息. name 内部名,为由window.open()方法打开的窗口定义的名字. 方法 alert("message") 显示含有给定消息的"JavaScript Alert"对话框. confirm("message") 显示含有给定消息的"Confirm"对话框(有一个OK按钮和一个Cancel按钮).如果用户单击OK返回true,否则返回false. prompt("message") 显示一个"prompt"对话框,要求用户根据显示消息给予相应输入. open("URL","name") 打开一个新窗口,给予一个指定的名字. close() 关闭当前窗口. frame对象 它是整个浏览器窗口的子窗口,除了status,defaultStatus,name属性外,它拥有window对象的全部属性. location对象 含有当前URL的信息. 属性 href 整个URL字符串. protocol 含有URL第一部分的字符串,如http: host 包含有URL中主机名:端口号部分的字符串.如//www.cenpok.net/server/ hostname 包含URL中主机名的字符串.如http://www.cenpok.net port 包含URL中可能存在的端口号字符串. pathname URL中"/"以后的部分.如~list/index.htm hash "#"号(CGI参数)之后的字符串. search "?"号(CGI参数)之......

阅读全文(1450) | 评论:0

C语言学习方法(2008-08-08 01:12:00)

摘要:C语言学习方法 特别注明:本文来自转载  谈谈偶的学习方法,抛砖引玉!:)       学习不论讲不讲方法,最终都能学会。但是别人1个月学会了,而你却100年才学会,这不就晚了么?:)所以说,学习还是要讲究方法的。学习方法正确,事半功倍;学习方法不正确,事倍而功半。       什么才是学习C语言的捷径?我的答案是看书。书中所写,是前人数十年经验所写,看十本书,就相当于汲取了前人数十年的功力,那么你的内功也会迅速上升1甲子。:)书当然要看好书,只有好书才营养丰富。假如你花了1天时间看了一本破书,而该书介绍的知识虽然对于你来说是全新的知识,但是由于书中组织不当、或者深度不够,使你获取的营养很少,还不如自己研究一天来的快,这种书就不值当看了。学习C语言要看那些好书?我认为首先要把基础书给看扎实了,比如拙著《C语言之四书五经》中介绍的4本。(虽然这些书很多已经绝版了,但我相信电子版也是很有益处。况且,如果你真的想看,我相信你一定有办法搞的到。)这些书你会在很短的时间内看完(比如一两个月),这取决于你的基础和悟性。之后要看那些书呢?我不妨再列几本。Bjarne Stroustrup的《C++程序设计语言》(The C++ Programming Language)一定要看,这本书里面对于C的一些基础概念的定义,比我见过的其他任何C语言书都要全,都要仔细;Bjarne Stroustrup的《C++语言的设计与演化》(The Design and Evolution of C++)和David R.Hanson 的《C语言接口与实现 创建可重用软件的技术》(C Interfaces and Implaementations Techniques for Creating Reusable Software)一定要看,这两本书讲述了如何用C来实现异常处理、实现类型的封装和扩展等一些大的项目中经常用到的高级技术。其他的书,操作系统的要看,编译原理的要看,算法的要看,模式的也要看。读书破万卷,coding如有神。总而言之,就如《传》中云:“生而知之者,上也;学而知之者,次也;困而学之又其次也。”我们不能总是因困而学之,而要做到兵马未动,粮草先行。&n......

阅读全文(2395) | 评论:3

泛型的详细解释与示例(2008-08-08 00:56:00)

摘要:using System;using System.Collections.Generic;using System.Text; namespace Generic{    /// <summary>    /// 泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其字段的类型和其方法的参数类型出现。泛型方法可以将其类型参数用作其返回值的类型或者其形参的类型之一。    /// </summary>    /// <typeparam name="T"></typeparam>       ///在创建泛型类的实例时,会指定实际类型来替换类型参数。这会建立一个新的泛型类,称为构造泛型类,选定的类型将替换所有出现的类型参数。最后得到按照您选择的类型定制的类型安全的类,如下面的代码所示。    /*     Generic<string> g = new Generic<string>();    g.Field = "A string";      */     /*“泛型类型定义”是用作模板的类、结构或接口声明,其中具有该类、结构或接口声明可以包含或使用的类型的占位符。例如,Dictionary 类可以包含两种类型:键和值。因为它只是一个模板,您不能创建作为泛型类型定义的类、结构或接口的实例。 “泛型类型参数”或称“类型参数”是泛型类型或方法定义中的占位符。Dictionary 泛型类型具有两个类型参数:TKey 和 TValue,分别表示其键和值的类型。 “构造泛型类型”或称“构造类型”是为泛型类型定义的泛型类型参数指定类型得到的结果。 “泛型类型参数”是替换泛型类型参数的任何类型。 一般术......

阅读全文(1771) | 评论:0