2010-07-30
中文汉字的正则字符编码范围
中文编码范围,中文汉字的正则也许用的着。
双字节字符编码范围:
1. GBK (GB2312/GB18030)
\x00-\xff GBK双字节编码范围
\x20-\x7f ASCII
\xa1-\xff 中文gb2312
\x80-\xff 中文 gbk
2. UTF-8 (Unicode)
\u4e00-\u9fa5 (中文)
\x3130-\x318F (韩文)
\xAC00-\xD7A3 (韩文)
\u0800-\u4e00 (日文)
汉字编码范围
GB2312
范围: 0xA1A1 - 0xFEFE
汉字范围: 0xB0A1 - 0xF7FE
GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集--基本集》,由国家标准总局发布,1981年5月 1日实施,通行于大陆。新加坡等地也使用此编码。 GB2312收录简化汉字及符号、字母、日文假名等共7445个图形字符,其中汉字占6763个。GB2312规 定"对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示",习惯上称第一个字节为"高字节",第二个字节为"低字节"。GB2312- 80包含了大部分常用的一、二级汉字,和9区的符号。该字符集是几乎所有的中文系统和国际化的软件都支持的中文字符集,这也是最基本的中文字 符集。其编码 范围是高位0xa1-0xfe,低位也是0xa1-0xfe;汉字从0xb0a1开始,结束于0xf7fe。
GBK
范围: 0×8140 - 0xFEFE
GB2312-80 仅收汉字 6763 个,这大大少于现有汉字,随着时间推移及汉字文化的不断延伸推广,有些原来很少用的字,现在变成了常用字,例如:朱�基的"�"字,未收入 GB2312-80,现在大陆的报业出刊只得使用(金+容)、(金容)、(左金右容)等来表示,形式不一而同,这使得表示、存储、输入、处理 都非常不方 便,对于搜索引擎等软件的构造来说也不是好消息,而且这种表示没有统一标准。从我们对人民日报 98 年数据的处理过程中,得出这样的经验:回填外字最困难的就是如何得到这种表示方法的集合。
为了解决这些问题,以及配合 UNICODE 的实施,全国信息技术化技术委员会于 1995 年 12 月 1 日《汉字内码扩展规范》。GBK 向下与 GB2312 完全兼容,向上支持 ISO-10646 国际标准,在前者向后者过渡过程中起到的承上启下的作用。
GBK是GB2312-80的扩展,是向上兼容的。它包含了20902个汉字,其编码范围是0×8140-0xfefe,剔除高位0×80的 字位。其所有字符都可以一对一映射到Unicode2.0。
字集
GBK 共收入21886个汉字和图形符号,包括:
GB2312 中的全部汉字、非汉字符号。
BIG5 中的全部汉字。
与 ISO-10646 相应的国家标准 GB13000 中的其它 CJK 汉字,以上合计 20902 个汉字。
其它汉字、部首、符号,共计 984 个。
GBK 编码区分三部分:
汉字区 包括
GBK/2:0xB0A1-F7FE, 收录 GB2312 汉字 6763 个,按原序排列;
GBK/3:0x8140-A0FE,收录 CJK 汉字 6080 个;
GBK/4:0xAA40-FEA0,收录 CJK 汉字和增补的汉字 8160 个。
图形符号区 包括
GBK/1:0xA1A1-A9FE,除 GB2312 的符号外,还增补了其它符号
GBK/5:0xA840-A9A0,扩除非汉字区。
用户自定义区
即 GBK 区域中的空白区,用户可以自己定义字符。
��
GBK 亦采用双字节表示,总体编码范围为 8140-FEFE 之间,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 XX7F 一条线。
微 软公司自 Windows 95 简体中文版开始支持 GBK 代码,��叫法是 Windows codepage 936,也叫做 GBK(���展),它也是 8-bit 的����。�我所知 GBK ���成��正式的�家��,只不�因� Windows 的普及,它已�成�事�上的��了。但目前的多数搜索引擎都不能很好地支持 GBK 汉字。
由前电子部科技质量司和国家技术监督局标准化司于1995年12月颁布的指导性规范。(GBK的 K是"扩展"的汉语拼音第一个字母)
GBK作为非 UCS ( ISO/IEC 10646 ) 体系的代码页,适用于中文信息的处理、交换、存储、传输、显现、输入和输出。
GBK 与国家标准 GB 2312-80 信息处理交换码所对应的、事实上的内码标准兼容;同时,在字汇一级支持 ISO/IEC 10646-1 和GB 13000-1 的全部中日韩 (CJK) 汉字(20902字)。GBK除了包含GB2312-80 和GB12345-90中包括的全部非汉字符号外,还涵盖我国台湾地区中文标准交换码TCA-CNS 11643 -92 ( 与其对应的内码为Big5;以下用Big5泛指二者。) 中的绝大多数符号。
从Windows95中文版起,Windows NT 3.51, 4.0, Windows2000, Windows CE, Linux已经全面支持GBK,起到了从GB 2312向Unicode过渡的承上启下的重要作用。
GBK尽管在字汇一级支持CJK,是目前最大的Code Page ;它在体系结构、代码空间上,仍然是完全不同于ISO/IEC 10646 和Unicode的。
BIG5
范围: 0xA140 - 0xF9FE, 0xA1A1 - 0xF9FE
Big5是台湾的IIIT1984年发明的,CNS 11643-1992( Chinese National Standard)
是扩展版本,主要大家用的还是big5
每个字由两个字节组 成,其第一字节编码范围为0xA1~0xF9,第二字节编码范围为0×40~0×7E与0xA1~0xFE,总计收入13868个字 (包括5401个常用字、7652 个次常用字、7个扩充字、以及808个各式符号)
GB18030:
GB18030-2000(GBK2K)在GBK的基础上进一步扩展了汉字,增加了藏、蒙等少数民族的字形。GBK2K从根本上解决了字位不 够,字形不足的问题。它有几个特点:
它并没有确定所有的字形,只是规定了编码范围,留待以后扩充。
编码是变长的,其二字节部分与GBK兼容;四字节部分是扩充的字形、字位,其编码范围是首字节0×81-0xfe、二字节 0×30-0×39、三字节0×81-0xfe、四字节0×30-0×39。
它的推广是分阶段的,首先要求实现的是能够完全映射到Unicode3.0标准的所有字形。
它是国家标准,是强制性的。
补充:
中文信息编码标准,常用的是GB2312-1980,GB12345,GB13000(GBK),
以及最新标准GB18030。
GB2312的汉字编码规则为:第一个字节的值在0xB0到0xF7之间,第
二个字节的值在0xA0到0xFE之间。
GB12345和GB13000是对GB2312-1980的扩充,所有已经包含在GB2312
中的汉字编码不变,另外增加更多的码位。其编码规则大致为:第一
个字节的值在0×81到0xFE之间,第二个字节的值在0×40到0xFE之间。
GB18030 是最新的汉字编码字符集国家标准, 向下兼容 GBK 和 GB2312 标准。
GB18030 编码是一二四字节变长编码。 一字节部分从 0×0~0×7F 与 ASCII
编码兼容。 二字节部分, 首字节从 0×81~0xFE, 尾字节从 0×40~0×7E 以及
0×80~0xFE, 与 GBK标准基本兼容。 四字节部分,
第一字节从 0×81~0xFE, 第二字节从 0×30~0×39, 第三和第四字节的范围和前
两个字节分别相同。 四字节部分覆盖了从 0×0080 开始, 除去二字节部分已经
覆盖的所有 Unicode 3.1 码位。也就是说, GB18030 编码在码位空间上做到
了与 Unicode 标准一一对应,这一点与 UTF-8 编码类似。
UTF_8字符集
UTF-8是UNICODE的一种变长字符编码,由Ken Thompson于1992年创建。现在已经标准化 为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节, 而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能太多了, 但很少会遇到 那样的UNICODE字符。
Hong Kong GCCS是香港政府为big5加的3049个字,(Government Chinese Character Set)
香港增补字符集(HKSCS)是后来的标准,包括了Big5和ISO10646的编码,所以HKSCS的big5
版是补充了GCCS的增强版,ISO10646是UCS(universal character set),ISO是政府组织
Unicode是电脑业界组织,不过UCS和Unicode的字库一样
编码字数统计:
GB2312 6763个汉字
GB12345 6866个汉字
GBK 21003个汉字
GB18030 27000个汉字
Big5 13053个汉字
CNS11643 48,027个汉字
2010-07-29
语句集合
2. 上流是鼻涕,X L才是精华
3. 不在放荡中变坏,就在沉默中憋坏!
4. 聪明的男人说一半,留一半,而聪明的女人睁一只眼,闭一只眼
5. 我这个人啊是猪肉的理想,白菜的命,永远只有被醋溜的份,我多想被红烧一次
6. 乘人之危固然是畜生,但扮矜持也不是什么好鸟
7. 这年头身体不是秘密,理想才是
8. 鉴别男人的标尺,是下半身的勃起的时间与地点:随时随地都能发情的,是超人;何时何地都不能发情的,伟(萎)人;借点酒发点情的,是男 人
9. 爱上一个人是幸福,同时爱上二个人就是烦恼了。当然如果爱上三个或者以上的,那个人不是畜生,就是耶稣。
10 宁可去杀人放火也不要得罪女人,杀人放火那也就是一颗子弹的事,得罪女人你就生不如死。
11. 感情就像**,每次结束后,你会发现和上次其实没有区别,可能还不如上次,可是你又还是会忍不住继续下去。
12. 恋爱如同喝酒一样,七分的时候最是幸福,过尤不及
13. 吃肥肉是一种积极的人生态度
14. 天堂禁酒,所以我回到凡间和你共饮这一杯
15. 爱情是一场高烧,烧傻的去结婚了,退烧了的分了手,那些痴痴缠缠的是正烧着的
16. 你真是五行缺"扁"
17. 人一有梦想就容易胡思乱想
18. 你以为我是刘翔,见人(栏)就夸(跨)
19. 85斤,我全身的重量(月儿告诉老拆她有多爱他)
20. 打他的理由竟然是,他可以侮辱我们,但他不能侮辱泡妞这门艺术
21. 美女也得讲道理
22. 爱你很痛苦,但是不去爱你更痛苦
23. 吊儿朗当只是包子的皮,大家要善于透过面皮,发现肉馅
24. 有一种爱,无论我再聪明也无法得到全部。
25. 正经的我全不知道,不正经的我就是活字典
26. 恋爱就象打麻将,不认真没乐趣,太认真易伤神
27. 感情往往不是因为甜,而是因为痛,才刻骨铭心的
28. 天下女人都安全?这个我保证不了,这么多人的安全期我哪算得过来。
29. 浪子并不是不会爱,也许只是不敢爱,因为他对爱比谁都没有安全感。
30. 你是酒缝知已千杯少,我是酒不醉人人自醉,一样的酒,不同的醉
31. 每个小妞你都是当做小小说来读,什么时候你能读上一本《红楼梦》啊?
32、在天愿作比翼鸟,在地愿作同圈猪!
33、以想念我为荣、以忽略我为耻;以关心我为荣、以冷待我为耻;
以赞美我为荣、以贬损我为耻;以联系我为荣、以忽悠我为耻.
希望你能自觉的以新一代的荣辱观严格要求自己,并对照执行!
34、一见钟情,再而衰,三而竭。
35、唱自己的歌,让他们呕吐去吧!
36、巧克力的麻烦是:你把它吃了,它就没了。
37、千万别等到人人都说你丑时才发现自己真的丑。
38、肚子大不可怕,可怕的是大而无料。
39、无所为而无所谓,无所谓而无所不为。
40、碰到一个猫扑达人的签名:说过的话可以不算,喜欢的人天天要换。
41、从地图形状上来看,日本就像美国的性玩具,时不时地要拿它来戳一戳这只东方的中国鸡……
42、某教授针对学校的男女生不得在11点后进入异性宿舍的规定感慨道:"难道人的生理需求只在夜里11点以后才发作?"
43、李广射虎,弓虽强,石更硬;兰姐拍片,心生性,口欠吹
44、所有装嫩行为在我面前统统成为嫩的证据!
45、我真TMD想做芭比娃娃,因为那个贱逼什么都有!
46、在通往厨房的道路上扬帆起航,在呵护老婆的征程上乘风破浪,在辅助老婆的幕墙后一帆风顺……呜呜呜~
47、当一个女人沾沾自喜地说如果男人没有她连内衣都找不到的时候,其实是两个人关系最危险的时候……
48、课堂上老师说:"在我的人生字典里没有'失败'这两个字!"刚说完,底下飞上30多本字典,数不清的声音喊道:"老师,我的借你!
2010-07-17
PowerDesigner 的常用方法
1.如果dbms是MsSql,则选定表后,database-> edit current dbms-> 出现DBMS properties对话框,选择General页,左侧的树选择SQL 2000-> Profile-> Column-> Extended Attributes 下面的ExtIdentityIncrement是步进值,ExtIdentitySeed是起始值,分别设定默认值,后返回。
2.在表的属性对话框里面,选择Clumns页,按Ctrl+U,在Idenitity前面打上钩。如有必要,也可以将
ExtIdentityIncrement和ExtIdentitySeed也打上勾,这样在设定Idenitity时也可以直接指定起始值 和步进值了。
btw:我用的是PD11,刚刚开始学PD,关于Identity的设定也是找了好久。
3.对于ql server ,在表的属性对话框里面,选择Clumns页,按Alt+enter进入列的属性页面,在右下角勾选Idenitity属性即可.
在使用PowerDesigner的过程中,经常遇到一些设置上面的问题,每次都去找老鸟帮忙解决,隔一段时间不用,下一次又忘掉了,不好意 思再去麻烦他们了,所以现在用博客园记录下来,以后上园子来找以前的东西.
1取消Name和Code关联的设置
在设计PDM文件的时候,设计一张表,在填写栏位的时候,如果我们输入Name,Code会跟着变化.这个完全是西方人的习惯,因为他们的Name和 Code都是E文,所以不会出现什么问题.但是,我们使用的时候,就会很不习惯,Name应该是中文名字,Code才是资料库的实际字段名.
下面记录修改设置的步骤:
Step 1:
菜单栏找到Tools,点开,找到General Options,点击
Step 2:打开Dialog将Operating modes中的 Name To Code mirroring �前面的勾去掉
OK!完成
sql语句中表名与字段名前的引号去除:
打开cdm的情况下,进入Tools-Model Options-Naming Convention,把Name和Code的标签的Charcter case选项设置成Uppercase或者Lowercase,只要不是Mixed Case就行!
或者选择Database->Edit current database->Script->Sql->Format,有一项CaseSensitivityUsingQuote,它的 comment为"Determines if the case sensitivity for identifiers is managed using double quotes",表示是否适用双引号来规定标识符的大小写, 可以看到右边的values默认值为"YES",改为"No"即可!
或者在打开pdm的情况下,进入Tools-Model Options-Naming Convention,把Name和Code的标签的Charcter case选项设置成Uppercase就可以!
在修改name的时候,code的值将跟着变动,很不方便
修改方法:PowerDesign中的选项菜单里修改,在[Tool]-->[General Options]->[Dialog]->[Operating modes]->[Name to Code mirroring],这里默认是让名称和代码同步,将前面的复选框去掉就行了。
由pdm生成建表脚本时,字段超过15字符就发生错误(oracle)
原因未知,解决办法是打开PDM后,会出现Database的菜单栏,进入Database - Edit Current DBMS -script-objects-column-maxlen,把value值调大(原为30),比如改成60。出现表或者其它对象的长度也有这种错误的 话都可以选择对应的objects照此种方法更改!
或者使用下面的这种方法:
生成建表脚本时会弹出Database generation提示框:把options - check model的小勾给去掉,就是不进行检查(不推荐)!
或者可以修改C:\Program Files\Sybase\PowerDesigner Trial 11\Resource Files\DBMS\oracl9i2.xdb文件
修改好后,再cdm转为pdm时,选择"Copy the DBMS definition in model"把把这个资源文件拷贝到模型中。
由CDM生成PDM时,自动生成的外键的重命名
PDM Generation Options->Detail->FK index names默认是%REFR%_FK,改为FK_%REFRCODE%,其中%REFRCODE%指的就是CDM中Relationship的code! 另外自动生成的父字段的规则是PDM Generation Options->Detail->FK column name template中设置的,默认是%.3:PARENT%_%COLUMN%,可以改为Par%COLUMN%表示是父字段!
建立一个表后,为何检测出现Existence of index的警告
A table should contain at least one column, one index, one key, and one reference.
可以不检查 Existence of index 这项,也就没有这个警告错误了!
意思是说没有给表建立索引,而一个表一般至少要有一个索引,这是一个警告,不用管也没有关系!
如何防止一对一的关系生成两个引用(外键)
要定义关系的支配方向,占支配地位的实体(有D标志)变为父表。
在cdm中双击一对一关系->Detail->Dominant role选择支配关系
修改报表模板中一些术语的定义
即文件:C:\Program Files\Sybase\PowerDesigner Trial 11\Resource Files\Report Languages\Chinese.xrl
Tools-Resources-Report Languages-选择Chinese-单击Properties或双击目标
修改某些对象的名称:Object Attributes\Physical Data Model\Column\
ForeignKey:外键
Mandatory:为空
Primary:主键
Table:表
用查找替换,把"表格"替换成"表"
修改显示的内容为别的:Values Mapping\Lists\Standard,添加TRUE的转化列为是,FALSE的转化列为空
另外Report-Title Page里可以设置标题信息
PowerDesigner11中批量根据对象的name生成comment的脚本
'******************************************************************************
'* File: name2comment.vbs
'* Purpose: Database generation cannot use object names anymore
' in version 7 and above.
' It always uses the object codes.
'
' In case the object codes are not aligned with your
' object names in your model, this script will copy
' the object Name onto the object comment for
' the Tables and Columns.
'
'* Title: 把对象name拷入comment属性中
'* Version: 1.0
'* Author:
'* 执行方法:PD11 -- Open PDM -- Tools -- Execute Commands -- Run Script
'******************************************************************************
Option Explicit
ValidationMode = True
InteractiveMode = im_Batch
Dim mdl ' the current model
' get the current active model
Set mdl = ActiveModel
If (mdl Is Nothing) Then
MsgBox "There is no current Model"
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then
MsgBox "The current model is not an Physical Data model."
Else
ProcessFolder mdl
End If
' This routine copy name into code for each table, each column and each view
' of the current folder
Private sub ProcessFolder(folder)
Dim Tab 'running table
for each Tab in folder.tables
if not tab.isShortcut then
tab.comment = tab.name
Dim col ' running column
for each col in tab.columns
col.comment= col.name
next
end if
next
Dim view 'running view
for each view in folder.Views
if not view.isShortcut then
view.comment = view.name
end if
next
' go into the sub-packages
Dim f ' running folder
For Each f In folder.Packages
if not f.IsShortcut then
ProcessFolder f
end if
Next
end sub
PowerDesigner 生成SQL的Existence of refernce错误问题
现象:用PowerDesigner生成SQL语句时,提示Existence of refernce错误。
原因:该表没有与其他表的关联(如外键等),而PowerDesigner需要存在一个refernce才能生成SQL.
解决方法:
在工具栏空白处右键打开Palette面板,选中Link/Extended Dependency 按钮,然后在提示出错的表上添加到自己的Dependency。
重新生成SQL,你将发现刚才提示的错误没有了,问题解决。
利用PowerDesigner批量生成测试数据
主要解决方法:
A:在PowerDesigner 建表
B:然后给每一个表的字段建立相应的摘要文件
步骤如下:
Model->Test Data Profiles配置每一个字段摘要文件General:输入Name、Code、
选择Class(数字、字符、时间)类型
选择Generation Source: Automatic、List、ODBC、File Detail:配置字段相关信息
所有字段摘要文件配置完成后双击该表->选择字段->Detail->选择Test Data Parameters 摘要文件如果字段值与其它字段有关系在: Computed Expression 中输入计算列--生成测试数据:
DataBase->Generation Test Data->
选择:Genration 类型(Sript、ODBC)
Selection(选择要生成的表)
Test Data Genration(Default number of rows 生成记录行数)
1.使用PD12时出现以下错误:
Reference constraint name maximum
length is limited to 30 characters
Key constraint name maximum length
is limited to 30 characters
Table code maximum length
Column code maximum length
……
导致生成建表SQL时通不过,细究原因原来是默认设置的问题,改下就可以了。
调整以下参数:
Database=>Edit current DBMS 数据库类型::Script\Objects\MaxConstLen value=>255
Database=>Edit current DBMS 数据库类型::Script\Objects\Table\Maxlen value=>255
Database=>Edit current DBMS 数据库类型::Script\Objects\Column\Maxlen value=>255
但是要注意的是,表名、列名、主键等不要超过30个字符,否则Oracle不认。
2.附:生成数据库脚本
Database=>Generate database
-----------------------------
-----------------------------
默认生成的SQL语句(表名、字段名等)都带双引号,导致用SQLPlus插入Oracle数据库时表名与表列都带""号,要解决这个问题, 在数据库中做如下设置:
Database-> Edit Current DBMS...-> Script-> Sql->
Format-> CaseSensitivityUsingQuote 改为No
3.如何在powerDesigner中给字段赋默认值
双击表,出现column列表,双击要设置的列的左边的灰色框,应该会弹出新的窗口,然后在新窗口上选择standard checks ,里面有default的
PowerDesign高级应用
编写相关的VBS脚本在PowerDesign里自定义一些命令与操作等,具体的可以参考C:\Program Files\Sybase\PowerDesigner 9\VB Scripts目录下的脚本示例。怎么运用这些脚本呢?
在Tools-》Execute Commands里可以进行操作。具体说明在帮助里写的很清楚。帮助的位置在 PowerDesigner General Features Guide-> PART 2. Modeling Guide->CHAPTER 8. Managing Objects->Accessing objects using VBScript->VBScript uses in PowerDesigner
PowerDesign的使用主要是DBMS的配置
1、修改建表脚本生成规则。如果每个表格都有相同的字段,可以如下修改:
Database -> Edit Current DBMS 展开 Script -> Object -> Table -> Create 见右下的Value值,可以直接修改如下:
/* tablename: %TNAME% */
create table [%QUALIFIER%]%TABLE% (
%TABLDEFN%
ts char(19) null default convert(char(19),getdate(),20),
dr smallint null default 0
)
[%OPTIONS%]
其中的 ts、dr 两列会在生成SQL脚本的时候自动的插入每个表格中,其中的%TNAME% 变量是给每个表格的SQL添加一个该表的Name值注释。
2、修改字段生成规则。要给每个字段都添加一个注释的话,同一窗口中展开 Script -> Object -> Column -> Add 的 Value修改为:
%20:COLUMN% [%COMPUTE%?AS (%COMPUTE%):%20:DATATYPE% [%IDENTITY%?%IDENTITY%:[%NULL%][%NOTNULL%]][ default %DEFAULT%]
[[constraint %CONSTNAME%] check (%CONSTRAINT%)]]/*%COLNNAME%*/
其中的%COLNNAME%就是列的Name值(可以是中文)
3、修改外键命名规则。选择Database―>Edit Current DBMS
选择Scripts-》Objects-》Reference-》ConstName
可以发现右侧的Value为:
FK_%.U8:CHILD%_%.U9:REFR%_%.U8:PARENT%
可见,该命名方法是:'FK_'+8位子表名+9位Reference名+8位父表名,你可以根据这中模式自定义为:
FK_%.U7:CHILD%_RELATIONS_%.U7:PARENT%,
可以使FK名称变为FK_TABLE_2_RELATIONS_TABLE_1
掌握这种方法后就可以按照自己的想法修改了
生成建库脚本SQL文件中的表头注释很讨厌,可以在 Databse -> Generate Database (Ctrl+G)窗口中,选择Options卡片,去掉Usage的Title钩选项即可。
4、添加外键
Model -> References新建一条外键后,双击进入外键属性,在"Joins"卡片中可以选择子表的外键字段
5、去掉生成的SQL脚本双引号的问题:ORACLE 8I2::Script\Sql\Format\CaseSensitivityUsingQuote改成No,默认是Yes所以会有双引号。
在修改name的时候,code的值将跟着变动,很不方便。修改方法:PowerDesign中的选项菜单里修改,在 [Tool]--> [General Options]->[Dialog]->[Operating modes]->[Name to Code mirroring],这里默认是让名称和代码同步,将前面的复选框去掉就行了。
2010-07-16
数据库设计的一般命名规则
数据库设计的一般命名规则
一、声明:关于缩写的规则,如果在字典或者词典中看到了一个词的缩写,就应该在命名变量的时候使用它,应该尽量避免潜在的歧义,如果不能避免的话,你可以 从每个单词删掉元音字母(除了每个单词的开头)和连续出现的字母,如Current=>Crnt, Error=>Err, Address=>Adr, Average=>Avg, Customer=>Ctm
二、对变量命名
变量标示符应该由两部分组成:
l 主内容,描述了变量的内容
l 前缀,描述了变量的数据类型
如:
数据类型 前缀 示例
Char chr @chrFirstName
Varchar chv @chvActivity
三、数据库对象
数据库对象的命名应该由两部分组成
l 主内容,描述了变量的内容
l 前缀,描述了变量的数据类型
数据库对象 前缀 示例
表 无 Activities
列 无 ActivityId
视图 v vActivities
存储过程 pr prCompleteOrder
触发器 tr trOrder_IU
默认值 df dfToday
规则 rul rulCheckZIP
索引 ix ix_LastName
主键 pk pk_ContactId
外键 fk fk_Order_OrderType
用户定义的数据类型 udt udtPhone
用户定义的函数 fn fnDueDates
四、触发器
触发器应该由三部分组成
l 前缀,表示数据库对象的类型
l 主内容,描述触发器所附接的表
l 后缀,代表修改语句(Insert, Update, Delete)
trOrder_IU
如果附接到每个表有多个触发器,则主内容还应该包括表名和触发器实现的对商业规则的引用,如:
trOrderCascadingDelete_D,trOrderItemTotal_D
五、存储过程
主内容名一般由一个动词跟一个名词组成,如prGetEquipment,prCloseLease
如果加sp_前缀,这个存储过程应该在master中,能够被其他数据库访问
尽量避免使用面向计算机的或有歧义的名称,如:prProcessData,prDoAction
数据库涉及字符规则
采用26个英文字母(区分大小写)和0 -9这十个自然数,加上下划线_组成,共63个字符。不能出现其他字符(注释除外)。
据库对象命名规则
数据库对象包括表、视图(查询)、存储过程(参数查询)、函数、约束。 对象名字由前缀和实际 名字组成,长度不超过30。前缀:使用小写字母。
例如:
表 tb
视图 vi
存储过程 sp
函数 fn
实际名字
实际名字尽量描述实体的内容,由单词或单词组合,每个单词的首字母大 写,其他字母小写,不以 数字和_开头。
例如:
表 User_Info
视图 UserList
存储过程 UserDelete
因此,合法的对象名字类似如下。
表 tbUser_Info、tbMessage_Detail
视图 vi_MessageList
存储过程 sp_MessageAdd
数据库表命名规则
字段由前缀和实际名字组成。实际名字中首单词一个系统尽量采取同一单 词。
前缀: 使用小写字母tb,表示表。
例如:tbMember
tbMember_Info
tbForum_Board
tbForum_Thread1
字段命名规则
数字、字符、日期/时间、lob(大对象)、杂项,字段由表的简称、下 划线,实际名字加后缀 组成。
后缀:使用小写字母,代表该字段的属性。
例如: User_Idint
User_Namestr
User_RegDatedtm
视图命名规则
字段由前缀和实际名字组成,中间用下划线连接。
前缀:使用小写字母 vi,表示视图。
例如:vi_User
vi_UserInfo
存储过程命名规则
字段由前缀和实际名字组成,中间用下划线连接。
前缀:使用小写字母 sp,表示存储过程。
例如:sp_User
数据库设计文档规则
所有数据库设计要写成文档,文档以模块化形式表达。大致格式如下:
'-------------------------------------------
' 表名: tbUser_Info
' 建立人:UAM_Richard
' 日期: 2004-12-17
' 版本: 1.0
' 描述: 保存用户资料
' 具体内容:
' UserId int,自动增量 用户代码
' UserName char(12) 用户名字
' ......
'--------------------------------------------
sql语句规则
所有sql关键词全部大写,比如 Select,Update,FROM,ORDER,BY 等。
2010-07-15
数据库命名规范小结
数据库命名规范
1 目的
规范数据库各种对象的命名规则。
2 数据库命名原则
2.1 数据文件
如果数据库采用文件系统,而不是裸设备,约定下列命名规则:
1)数据文件以表空间名为开始,以.dbf为结尾,全部采用小写英文字母加数字命名。如该表空间有多个数据文件,则从第 2个数据文件开始,在表空间名后加_。
例:对system表空间的数据文件:system.dbf,system_2.dbf
2)对oracle数据库的控制文件,用control.ctl来表示。如 control01.ctl,control02.ctl。
3)对oracle数据库的日志文件,在线日志文件用redo<组名><文件序列名>.dbf 来表示。其中组名和文件序列名均用2位数字来表示。如第一组的两个文件表示位redo0101.dbf和redo0102.dbf。归档日志用arch_ %t_%s.arc来表示。其中%t和%s均为oracle约定的变量。
2.2 表空间
2.2.1 数据库系统表空间
数据库系统表空间包括system表空间,临时表空间,回滚段的表空间。约定下列命名规则:
1)system表空间由数据库直接限定,不能进行修改。
2)临时表空间用temp来表示。如果有多个临时表空间,从第2个临时表空间开始,在temp后面加来表示。
3)回滚段表空间用undotbs来表示。如果有多个回滚段表空间,从第2个回滚段表空间开始,在undotbs后面加来表示。
2.2.2 数据库的用户表空间
数据库的用户表空间用ts_<表空间名>来表示。其中,表空间名分为:
1)数据空间:对于用户的缺省表空间,用default来表示。对于其他的表空间,根据存放在表空间上的表的类别来表示。如放代码的表,用 code来表示。放客户资料的表,用customer来表示。尽量用一个表空间来存放该类的表。如果某表特别大,可考虑单独使用一个表空间。
2)索引空间:在相应的数据表空间的名字前加ind_。如对用户缺省表空间的索引空间,用ts_ind_default 来表示。对代码表的索引表空间,用ts_ind_code来表示。
2.3 表
数据库表的命名采用如下规则:
1)表名用T_开头,表名长度不能超过30个字符,表名中含有单词全部采用单数形式,单词要大写。
2)多个单词间用下划线(_)进行连接。若库中有多个系统,表名采用系统名称+单词或多个单词,系统名是开发系统的缩写,如VNET。
3)表中含有的单词建议用完整的单词。如果导致表名长度超过30个字符,则从最后一个单词开始,依次向前采用该单词的缩写。(如果没有约定的 缩写,则采用该单词前4个字母来表示)。
数据库表的字段命名采用如下规则:
1)数据库字段名全部采用小写英文单词,单词之间用"_"隔开。字段长度不能超过30个字符。
2)如果该字段是代码,则在单词后加_id。
3)如果该字段表示的是时间,则使用_time为后缀。
2.4 视图
数据库视图的命名采用如下规则:
1)视图名用V_开头,视图名长度不能超过30个字符。视图名用大写的英文单词来表示。
2)视图由几个表产生就用下划线(_)连接几个表的名,如果表过多可以将表名适当简化,但一定要列出所有表名。
2.5 序列
数据库序列的命名采用如下规则:
序列名用seq_开头,后面跟使用该序列的字段名。如果有几个字段用同一个序列,用下划线(_)连接几个字段的名称。如果不同表中相同的字段 名需要使用不同的序列,则在字段名后加表的特征,用下划线(_)连接。序列名长度不能超过30个字符。序列名用小写的英文单词来表示。
2.6 存储过程
存储过程的命名采用如下规则:
存储过程名用Pr_开头,存储过程名长度不能超过30个字符。存储过程名用小写的英文单词来表示。
2.7 函数
函数的命名采用如下规则:
函数名用Fu_开头,函数名长度不能超过30个字符。函数名用小写的英文单词来表示。
2.8 触发器
触发器的命名采用如下规则:
触发器名用Tr_开头,触发器名长度不能超过30个字符。触发器名用小写的英文单词来表示。
2.9 主键
主键的命名采用如下规则:
主键名用pk_开头,后面跟该主键所在的表名。主键名长度不能超过30个字符。如果过长,可对表名进行缩写。缩写规则同表名的缩写规则。主键 名用小写的英文单词来表示。
2.10 外键
外键的命名采用如下规则:
外键名用fk_开头,后面跟该外键所在的表名和对应的主表名(不含t_)。子表名和父表名自己用下划线(_)分隔。外键名长度不能超过30个 字符。如果过长,可对表名进行缩写。缩写规则同表名的缩写规则。外键名用小写的英文单词来表示。
2.11 索引
索引的命名采用如下规则:
1)索引名用小写的英文字母和数字表示。索引名的长度不能超过30个字符。
2)主键对应的索引和主键同名。
3)每类索引都用_结束。
4)唯一性索引用uni_开头,后面跟表名。一般性索引用ind_开头,后面跟表名。
5)如果索引长度过长,可对表名进行缩写。缩写规则同表名的缩写规则。
详细出处参考:http://www.jb51.net/article/17534.htm
我的创业体会和大公司的做事比较
说得功利点吧,一个人的财富和其影响力是成正比的。影响力本质上就是对他人的价值。比如,郎_xian_评的出场费一天超过15万。作为技术人员,如果我 们只能影响周边几个人,那么我们凭什么拿那么高的报酬,除非我们做的事情影响了很多人,比如杨勃的豆瓣网。所以,我还是觉得,技术人员往高处发 展,逐渐应 该有管理意识、培养自己的管理能力。技术从书本上可以学到很多,管理还真得实践,书上看到的,你觉得很弱智的问题,比如盲目扩张,自己亲身经历 时,一样会 犯,也许是行为习惯在起作用,看书不足以改变行为。
回到正题上。
也许是自己曾经在较大公司或团队的做事习惯和视野,刚创业时,用在这种小团队的商业项目开发上,几乎惨败。
先说项目开发这块吧。
大家知道,项目管理和过程管理是两码事,前者关注目标和进度,成本和收益;后者关注做事流程、方法。
项目管理,体会最深的,就是目标和任务分解、进度控制,以及沟通。
项目管理软件
从大公司出来的人,我想最喜欢玩的,就是借助于项目管理软件(核心是甘特图)。市面上的大多数知名的项目管理软件,无论是桌面版还是网页版的,我都试过。 当然最后也选择了一款:ConceptDraw Project,用了一年多,也多少有些用。但最后还是发现,它其实对项目进度和质量关系并不大。也许,一个Excel表格更实用。
项目管理软件,本质上是解决一种沟通和职责分配的问题。比如,一个项目,折叠成一个三层树形结构,老板只关心第一层,也就是整体进度;中间是项目经理关注 的功能层,最后一层,也就是具体的任务,是开发人员关注的。想想,如果没有这玩意,你怎么告诉其它项目干系人进度?但又引出几个问题:
靠文档来沟通,还是靠信任? 太在乎文档,往往导致每天去关注文档如何漂亮、有说服力,并为此花大量时间,而不是项目如何漂亮。另外,是否有文档就可以防止扯皮、兑现承诺?我们是关于 项目目标,还是关注彼此的博弈?
进度偏差 创业型项目,往往都是以前没有接触过,其进度评估往往有很大误差,比如业务需求的挖掘和变化,技术难点,开发人员素质。我们是关注进度,还是关注项目本身 的质量?两者都要,但如何兼顾?虽然有方法学,比如砍掉优先级低的,但你怎么让老板相信某个核心功能就得四天时间。
在我们的进度设计不合理情况下,是否开发人员完成甘特图(WBS)下的任务就ok?远远不够,任务分得太细,往往限制了开发人员的创造性和自我评估能力, 如果提前两天完成呢?
我们现在是以项目管理软件为辅,任务的下达主要以邮件传达,每周一上午的周例会会白板宣布。我发现白板比投影仪PPT好用。
关于规范
这也是大公司特别喜欢玩的。
也许我们前期会制定一个的架构、设计文档,代码规范,这有一个规范建立的时间成本以及规范本书的合理性,再说如果一个开发人员,特别是高手,如果不认同你 的设计和规范,你要强推,他要么走人要么怠工。规范的本质是为了协作和后期可维护,如果只有两个人或一个人写某个模块,你觉得有这个必要吗?规范 整洁的代 码,在项目初期,对用户的价值关系很小,你会关心豆瓣网的js代码写得很漂亮吗?我们应该关注代码的健壮性而不是可维护性,我们不是在开发 Windows。
人适应项目,还是项目适应人
大公司,往往是来了一个项目,赶快招人,人来适应项目。小公司呢,我现在的看法是,项目适应人。小公司,往往一个项目做砸,公司就面临解散。所以,我认 为,最好还是按照开发人员的擅长,保证功能质量,最快的速度上线。另外,为了达成进度,可以在上线初期砍掉不太重要的栏目或功能。
我在这个上面栽过跟头的。比如开发人员的擅长,如果他擅长jsp开发模式,而不是Hibernate+Spring的分层开发,就让他按自己的意思做吧。 因为,创业型项目都不会太大;即使技术实现你感觉完美了,用户可能感觉不爽;再说,项目开发,涉及到业务调研、需求分析、原型界面、架构、开发、 部署、推 广。开发,也就是代码实现,占去项目时间,也许不到30%。项目如果证实有商业前景,代码重新实现一遍,花不了多少时间。
但我也深深地意识到我们项目管理的级别,就如同CMM1到CMM4。但我还是觉得目前是最好的选择。
如果最低层次的用户需求目标都达不到,直接考虑代码怎么有可扩展性、可维护性,对于小公司就是找死。
另外,尊重和信任、支持开发人员的技术选择,往往是一种激励、增强团队凝聚力的方式。万众一心,比什么目标、进度更有效、实际。
我们应该培养一种团队成员的内部创业心态,而不只是敬业。
在进度把控上,我现在更倾向于强调我们的项目目标和紧迫性,而不是他们的任务。因为我希望大家的关注点是项目,而不是他的上级,他应该对项目负责,而不只 是对上级负责。
说说沟通
项目管理中最难处理好的,就是沟通。以前,我比较关注于工具,如邮件、文档、ppt讲稿会议,逐渐我关注效率和效能,特别是态度。沟通最基础的就是态度。 如果网站上线后,订单提交出现一个核心bug,你是直接找开发人员问责;还是告诉他哪儿出了问题,这个问题的严重,并且自己反省,比如测试流程出 了问题。 出现这种事情,也许需要负责人举重若轻的气度。但更深层次的,如果负责人能够培养其员工质量意识,危机意识,才是治本。因为一个有强烈质量意识的 团队,他 自然会去对代码健壮性、功能易用性精益求精,自然会去配合测试流程。
刚才那个沟通问题,对开发人员的态度,前者是负面,后者是中立。那么前者,开发人员的反应是如何不让领导下次责怪自己,比如只做领导安排的事情;后者的反 应是怎么去改进,不让这样的事情发生。
如果你认可创新就可能出错,如果你认可开发人员都是想做好的。那么所有的事情,朝正向发展迈出了最决定性的第一步。
沟通:命令式还是征询式
在沟通,特别是下达任务或做决策这类事情上。应该说中国绝大多少管理者都是用命令式。我过去经常在用,但一直在试图改正,改用建议式和征询式。管理者最需 要、最难开口的一句话是:Do you think so?命令的方式,经常出现下级不能理解上级的意图,严重的出现抵触。每个人,其实都喜欢别人按自己的想法做事,但你怎么知道自己的想法或决策是对或不是 偏颇的,怎么让团队愿意去执行?去征询团队其他成员的意见,让他们参与,往往能够培养其主人翁意识、责任感、向心力,还能够完善自己的想法。但要 将员工参 与意识,转化为一种习惯,太难。
当大家都没有主见时,需要领导者的果断、魄力和强势,但这种机会并不多,而且这种情况,需要团队成员对领导者的信任。
遵守制度,还是建立信任
在大公司,往往是告诉你怎么去遵守公司制度。在小公司,我认为最基础、最核心的一件事,就是建立信任,让团队信任你的人品(说到做到),信任你的能力(能 够把大家带到一个新的高度)。建立了信任后,下一步的核心工作,怎么将你的个人目标,也就是团队目标,转化为每个成员的个人目标。
有了信任这个基础,才会有了团队建设的第二个核心:激励。
是激励,而不是约束、监督,让团队有战斗力。但大公司往往喜欢后者。也许,大公司都是职业经理人,反正是打工,太关注于事。如果说有个所谓的中国式领导, 我觉得就是以人为本,对人的尊重。人的关系处理好了,事情就好做。
加班、考勤、上网监控,这类对信任、激励极具破坏力的行为,也许是工业型社会对我们这个思考性创造性行业的侵蚀。知识型劳动者,需要一种与体力型劳动者完 全不同的管理模式,这种模式也许需要一个从萌芽、生长到成熟期。现在在目前的中国,还只是刚走出萌芽期。
以前完整看过余世维的11套视频,还看过几遍。他那种人本理念我还是很认同,只是,他在大公司、规范公司的做事情方法和风格,完全照搬拿到小公司,非常危 险。你能够拿幼儿园那种教育方法来教育成年人吗?小公司不具备大公司那种职业化的环境,也不具备大公司在行业中的市场地位及资金实力。
如果说大公司讲究做事方法、流程,如SWOT分析法、BCG矩阵,小公司更看重灵活性、市场适应性。小公司应该适当短视、急功近利,否则在你实施一个三年 计划时,第二年还不赚钱可能就撑不下去。
所以我觉得,在跨国大企业呆惯了,出来创业很危险。一个是做事方法不适应,另外一个就是没有平台。如果要出来创业,以前那种大企业的经历可能更是一种劣 势。 也许有一种情况,你是大公司的高官,拿到一笔很大的风险投资,然后出来创业。
人事招聘
薪水 如果公司给得起,并且应聘者能力差不多。 就不要太在乎那200、300。虽然说至少要不低于行业平均值(IT人员是IT行业平均值,而不是本公司所在的行业平均值),但最重要的,还是不要低于当 事人的期望值,因为最核心的是满意度,而满意度决定于期望值和实际值的差距。对于小公司,往往一个人技术人员的成本和收益,和其工资差距非常大, 有可能 10倍。所以,我们的关注点,应该是怎么一开始留住这位人才。然后,怎么让其充分发挥潜力。小公司往往不是因为节省那几千几万的工资成本死掉的, 而是充分 利用这位人才才活下去了。
另外,不要以为有多少人才选择的机会,小公司往往不受高级人才的青睐。太高级的人才,可能养不起,而且往往太有个性,很难合作愉快,除非在来公司前有很长 时间的了解。
招聘到合适人才后,应该让其忘掉薪水,专注于工作,寻找工作本身的乐趣。当然,要做到让其在薪水上有优越感,也许是项目很盈利的那一天,开始时很难。
人才标准 如果其能力和你预期相差不大的话,更应该考虑其态度、做事风格,甚至是价值观。因为其能力的发挥,和这个环境,特别是他的直接利益相关者,也就是上司,关 系太大。如果配合得好,一个人可以顶三个。否则,那种内耗导致的进度延期,由此引起的市场机会丧失,公司财力无法支撑,往往是致命的。因为一个几 人的IT 团队,每一个人的职责就如同那木桶的一块板,缺了那块都存不了水。
比如关于质量,更确切说是内容质量,我们目前做旅游电子商务,我认为内容质量很核心。但你招进来的同事,始终认为先要量,什么都可以抄,而我强调质,原 创、半原创,可以少而精,而不能多而乱。除开项目进度,怎么去沟通?最好两个人一开始都认同原创的力量。
提升一个人的技能不难,但改变一个人的态度比较难,改变一个人的价值观几乎不现实。所以先找志同道合的人吧。
别期望人才是可替代的。我们不是大公司,我们缺了谁,那一块就不转。
大家都知道,松耦合要付出代价,比如SOAP协议的低性能,AMF私有协议的高性能。创业期,不要太多考虑人才替换,而是关注怎么发挥人的潜力,留住人, 尽快高质量完成项目。人才替换的一个假设,可能是你对自己管理的不自信,因为你不相信自己能够留住人。
这次就写这么多吧。
我似乎有这种体会,考大学、四六级这类资格、证书类考试最好混,因为只要勤奋就可以,再加点方法就可以出类拔萃了。 上班也比较好混,说找工作吧,像我搞技术的,本身对技术很狂热,根本就不愁找不到工作,因为面试时我觉得那家伙应该比我牛,正好可以切磋切磋,没想太多所 以没啥怯场或不自信。工作吧,如果是技术类,特别是商业软件,技术难度都不大,按上司意思来,很容易搞定。创业呢,自己要做商业判断、业务决策, 还要协调 若干人的工作(协调的本质是协调利益)。做事和管事,完全是两码事,有些难。不过,创业还是很有意思,因为你可以按自己的意愿去工作去生活,当然 也是受限 环境的自由。
我将我的一个回复放在这个地方,特示警醒:
我的看法:
1、文档的多少和深度决定于项目环境。
如果是大项目,比如二三十开发人员,架构文档、需求文档、代码规范等都是必须,否则开发人员不能迅速了解项目技术和业务特点,从而无法快速开发,也即是规 范可以降低培训成本和团队沟通;另外,项目开发中后期可能根本不可控,谁都看不懂其它人的代码。部署时看到的一些bug无法及时修复,因为到 处都有地雷。 我以前经历过这样的项目,最后加班都没用。
如果是产品型,规范更重要。当然我说的产品可能是2.0版以后,因为这时候的产品基本得到了市场的认可。而在初版时,代码写得烂都没关系,因为你不不知道 用户会不会买单,也不知道能否按进度开发完成。而在后续版本,如果没有规范文档,维护的成本都不亚于重新开发。特别是处于一线的开发人员会怨 声载道:为什 么要我来收拾残局?那么,这样的士气,开发效率怎么会高,项目质量怎么会高?
2、成熟型大公司那套做事流程,可能高手受不了,但可能是最优的方案。因为,到项目后期维护,往往只是一些业务功能的删减改进,不需要技术高 手, 这个过程可能漫漫几年,项目维护成本会非常高,雇佣高手一来他不愿意干二来也不需要这种人,如果项目代码还维持在一种"秩序",初中级开发人 员就可以胜 任,有什么不好呢?
项目上线时,是为了追求利润。项目维护期,是为了省成本。
3、刚入道的朋友,最好是按规范来,就像学武术,先要学套路。否则,养成的编程坏习惯,比如文件名叫Aaa1.java,代码没有缩进。过几 年非 常难改。而好的编程习惯,可以提升开发效率,还能让自己思维清晰。
学技术阶段,一定要注意代码的可维护性、健壮性及灵活性,只有养成对代码精益求精的态度,你才可能成为技术高手。技术学好,做技术管理就有了基础,而且别 人也会服你。
1、代码可维护性 在我创业创业前的五六年,非常重视代码的可维护性和规范,可以说我写的代码非常漂亮、很易读。但现在,我们团队有一位技术高手,性格有些偏执。我提醒并纠 正过多次,几乎很难改他若干年养成的习惯(比如不用log而用System.out,不用testCase而用main,想想这些对开发速度的提 升也不过 百分之几),主要是他不想改,而且还打击他的热情。后来我想,我们项目要是尽快上线就不容易了,代码让我全部重写难度也不大。在代码可维护性和个 人做事愉 快两个方面,我最终选择了后者。商业成功永远是基础。另外,你不知道你写的漂亮代码,最后投入市场,在客人眼里,是否就是一堆垃圾。开发人员认可 的质量, 不等于用户认可的质量。
2、管理的境界 很赞同rrsy23的看法,最高的境界就是团队每个人的自我管理。我目前已经在实施了,效果还不错。以前五个人以我为中心,对我负责;现在是六个人形成网 状,我只是一个节点,比如开发人员要修改界面,不用找我,直接找设计师,当然我会在功能测试上把关。他们的关注点是项目目标,而不是我。可能是因 为我还要 和几位业务人员密切沟通,这算是在沟通压力下的一个创新。
3、领导 确实,在小公司还是靠领导者的人品和魅力。我也是技术出身,我不会让我几年经历中对公司或领导不爽的地方带到目前的团队,比如加班、催促。目前我坚持的原 则是尊重和信任,时刻反省自己的行为是否违背了它。我自认为大家还是很认可我的人品,虽然我不善表达。
4、敏捷 每日晨会、工作日志,这些东西用起来还是看环境,除非大家都认同,并且工作类型、开发者能力差不多。其实它们本质是解决沟通和风险控制。在沟通频率,比如 一天、两天、随时;沟通渠道,比如周会、邮件、当面等选择上,我更关注效率和效能,而以沟通方式为辅。
关于开发规范:
问题不在于具体某个规范,而在于一个开发团队必须有统一的规范。比如楼主说的jsp和ssh问题。如果一个团 队中,有人jsp有人ssh,那就杯具了。从过程改进的角度来说,这个规范不应该是一个人拍脑袋定下来然后强推给大家,而应该是一 个团队 (至少是核心骨干)在合作过程中形成的默契和共识。当然,这个过程可能是由某个人牵头来做的。
关于制度:同上。
至于沟通和信任,我想,在上面的前提下,这个不再是问题。
我有这样的感悟。当一个研发团队超过5个人时,必然会出现核心成员和非核心成员。不管多么大的团队,核心成员可能只有3、4个,包括了各个方面。 核心成员必须专注于自己的领域,利益一致,互相有共识和默契,互相开放,互相认同。至于具体的方式方法,我认 为一个健 康的团队,即使要经历弯路,但是会自己成长改进,找到最适合自己的方法。
这样的核心团队的要求其实是挺高的,现实中,招聘是很难得到这种团队的。如果你的核心团队人不具备这样的素质,ok,那么你要做的是,认清楚团队 能力的上限,不安排给其超越上限的任务。一般来说,搞搞企业应用这种劳苦命项目是没问题的(这也是大多数公司的现状)。但是,如果要创业,要成 功,那么, 就我的经验来看,大多会是杯具。
从更高层的管理角度来说,找到这样的团队成员,给他们必要的条件和资源,帮他们排除干扰,他们自然会达到最好的结果。如果你自己想成为核心成员, 那么,你要自问是否达到了以上要求。
软件发展到今天,虽然有很多方法论互相pk互相争论,但是大部分还是有主流认知的。比如过程,比如设计思想, 比如技术框架。但这些方法论都是有适应场景和前提条件,有不同的具体实践方式。大多数人学习这些方法论,都只是看到手段,而不知道背后隐藏的条件 和思想。 比如前面说的jsp和ssh,都有各自优缺点,各自适应的场景,没有绝对的优劣。所以,真正合格的人才凝聚成的团队,在信息平等的情况下,对于这 些问题是 很容易达成共识的。坚持主流认知之外的人,大多数要么是视野狭隘,要么是人品有问题。当然,很小概率下,也有可能是理念超前的天才。
我原来也是在管理非常规范的公司呆着的,后来来到北京来到一个创业的小公司发现很多东西都不灵了,小公司需要的是很强的执行力,需要快速的做 出成 果,所谓的流程、文档等等其他东西往往不是最重要的。
拿文档来说,你知道文档的目的是什么吗?大多数情况下文档是分析、沟通和取得共识承诺的载体。什么情况下可以省略文档呢?
1、项目复杂度够小,需求和设计都可以在脑海中思考清楚(也就是生命周期不超过一个迭代的项目复杂度,否则,没有文档你自己都没办法把问题考虑清 楚);
2、需求、设计、开发、测试等各方沟通非常紧密顺畅,不会出现误差(比如敏捷中对团队物理条件和客户参与的要求);
3、在沟通不会有误差的前提下,大家没有利益差别,互相信任(比如内部项目,除了问题,投资方不会责怪追究你);
4、在过程中通过不断确认来保证方向(持续集成,快速交付,否则交付时间稍微长一点,你自己都记不住当初的要求了)。
如果你的团队或项目环境(有时候后者是主要矛盾)没办法做到以上几点,那么所谓抛弃流程和文档,只是缺乏控制能力和偷懒的借口。成果必然不佳。
流程同理。
1、文档 我们最重原型,也许因为我们是旅游电子商务网站,与业务员、设计师、开发人员沟通都是它(看附 件)。
2、利益 管理的本质就是管理利益,只是没必要挂到嘴边,每个人的利益追求都不一样,薪水只是一种利益。团队成员是否开心,会有一种自然的流露。比如,我从不限制我 们团队上网,只是告诉他们,要是有很想下载的大片,建议限速到100k。我们团队始终是自觉在上班时间将QQ隐藏或是不开,多数时候还是我提 醒开一下 QQ。我从未看到有人专门去浏览娱乐资讯,有时我可能会发一些好文给他们。我也会告诉他们,要是哪天晚上没睡好,就迟些来,因为状态不好和怠 工没啥差别, 对自己和公司都不好。比如今天中午大楼停电,我告诉他们:等电来,还是现在回家,你们自己决定吧,我走了。因为我要去公司业务部门沟通。
总之,我的责任,就是挖掘他们的潜力,让他们热爱自己的工作。另外,他们进公司时,薪水都是他们告诉我一个期望值,然后我满足他们,并且还超出一点,没有 一次我砍过价。
告诫各位处于开发第一线的朋友,千万不要受本文的误导,把规范和设计文档不当回事。
我的看法:
1、文档的多少和深度决定于项目环境。
如果是大项目,比如二三十开发人员,架构文档、需求文档、代码规范等都是必须,否则开发人员不能迅速了解项目技术和业务特点,从而无法快速开发,也即是规 范可以降低培训成本和团队沟通;另外,项目开发中后期可能根本不可控,谁都看不懂其它人的代码。部署时看到的一些bug无法及时修复,因为到 处都有地雷。 我以前经历过这样的项目,最后加班都没用。
如果是产品型,规范更重要。当然我说的产品可能是2.0版以后,因为这时候的产品基本得到了市场的认可。而在初版时,代码写得烂都没关系,因为你不不知道 用户会不会买单,也不知道能否按进度开发完成。而在后续版本,如果没有规范文档,维护的成本都不亚于重新开发。特别是处于一线的开发人员会怨 声载道:为什 么要我来收拾残局?那么,这样的士气,开发效率怎么会高,项目质量怎么会高?
2、成熟型大公司那套做事流程,可能高手受不了,但可能是最优的方案。因为,到项目后期维护,往往只是一些业务功能的删减改进,不需要技术高 手, 这个过程可能漫漫几年,项目维护成本会非常高,雇佣高手一来他不愿意干二来也不需要这种人,如果项目代码还维持在一种"秩序",初中级开发人 员就可以胜 任,有什么不好呢?
项目上线时,是为了追求利润。项目维护期,是为了省成本。
3、刚入道的朋友,最好是按规范来,就像学武术,先要学套路。否则,养成的编程坏习惯,比如文件名叫Aaa1.java,代码没有缩进。过几 年非 常难改。而好的编程习惯,可以提升开发效率,还能让自己思维清晰。
学技术阶段,一定要注意代码的可维护性、健壮性及灵活性,只有养成对代码精益求精的态度,你才可能成为技术高手。技术学好,做技术管理就有了基础,而且别 人也会服你。
另外,人的替换成本很高,如果就三个人开发代码,走了一个,那么进度就可能延期一个月。
技术好的,一般会有些性格,让其做的开心,往往其责任感会强很多,效率也会高很多。再说,几个人开发的项目,复杂性又难到那里去?
小公司,如果没有很雄厚的资本,真的很难做到强势。再说,做到强势又能怎样?强势能够拉拢人心吗?我最关注员工内心是否对上级、对团队、对公司喜 欢、信任、有信心。有了这个基础,其它的就好推进了,这是一个阶段和层次问题。
1、在公司呆了几年后,感觉单纯搞技术,没啥出息。一辈子的积蓄可能只能买几套房子。另外,虽然公司有休假,一年才几天,请假像讨债似的,开不了 口。想想,一辈子那样,在笼子里,真没趣。
2、纯技术岗位,自身发展受限太大。我想带领一拨人,做一件我想做的事情。大家都很开心,有钱又有闲。我觉得,出来这两年,技术深度增长并不大, 但对商业和技术的看法、使用技术解决问题,如何做事、带团队,可以说,两年顶五年,成就感很强。
有上面这种感觉,可能是因为在我出来前,看了两年的《IT经理世界》和《财经文摘》,差不多每期都买,眼界开阔了。发现技术改变不了我的生活。当然,到现 在,我依然很喜欢技术。
3、可能是上任领导相处不融洽吧,彼此不信任。也许是因为我比较有个性,不喜欢条条框框,也特不喜欢这样的沟通:今天下午必须跟我搞出来,否则加 班。我特接受不了人命令我。
所以,以前自己感觉不爽的,绝不带到我目前的团队。即使做失败了,大不了再回去打工,我最在乎的,是一帮人在一起干得开心。
而且,即使回去打工,我也不会以打工的心态,而是职业经理人的心态。因为,人是为自己活着的。当然了,工作那几年,我还还是很喜欢我的工作,也总是尽职尽 责完成,反正也不是打工的心态。
也许,最根本的,是我这个人不喜欢被束缚,对未来还充满想象力,对自己的潜力还充满信心。
从组织结构上,我们团队已经很完备。公司虽然小,但我们每个人都很专,这样,大家可以专注于自己的兴趣,深度发展,而不是打杂。工作本来就应 该是 一件很开心的事情,创造性会带给人极大的成就快感。
我们提倡尊重、信任、自由、共享的团队文化,特别是后两者:自由和共享,我认为自己做得还不够,我会继续努力的。
我还是固执地认为,曾经,窒息的应试教育和野蛮的公司文化,让学习和工作,本应该很开心的事情,变成了一种无奈的选择。
生活应该是阳光的,在这儿,我们来一起打造这种阳光文化,因为工作就是生活。
我很欣赏罗 永浩这个人,因为他坚持自我,率真,因为追求公平和正义而对这个世界怀有一种罕见的善意和温柔。大家可以看看他的演讲:http://v.youku.com/v_show/id_XMTY5NTc2MzMy.html 。
在这个越来越恶劣的社会,我们没地方住(买不起房),也没地方说(政_府言论封锁),但我们不应该妥协,因为妥协会埋没我们的潜能,潜能是我 们最 大的一块宝藏。至少,在xxxx这个地方,我会和大家一起,去开发这块宝藏。
我的创业体会和大公司的做事比较
说得功利点吧,一个人的财富和其影响力是成正比的。影响力本质上就是对他人的价值。比如,郎_xian_评的出场费一天超过15万。作为技术人员,如果我 们只能影响周边几个人,那么我们凭什么拿那么高的报酬,除非我们做的事情影响了很多人,比如杨勃的豆瓣网。所以,我还是觉得,技术人员往高处发 展,逐渐应 该有管理意识、培养自己的管理能力。技术从书本上可以学到很多,管理还真得实践,书上看到的,你觉得很弱智的问题,比如盲目扩张,自己亲身经历 时,一样会 犯,也许是行为习惯在起作用,看书不足以改变行为。
回到正题上。
也许是自己曾经在较大公司或团队的做事习惯和视野,刚创业时,用在这种小团队的商业项目开发上,几乎惨败。
先说项目开发这块吧。
大家知道,项目管理和过程管理是两码事,前者关注目标和进度,成本和收益;后者关注做事流程、方法。
项目管理,体会最深的,就是目标和任务分解、进度控制,以及沟通。
项目管理软件
从大公司出来的人,我想最喜欢玩的,就是借助于项目管理软件(核心是甘特图)。市面上的大多数知名的项目管理软件,无论是桌面版还是网页版的,我都试过。 当然最后也选择了一款:ConceptDraw Project,用了一年多,也多少有些用。但最后还是发现,它其实对项目进度和质量关系并不大。也许,一个Excel表格更实用。
项目管理软件,本质上是解决一种沟通和职责分配的问题。比如,一个项目,折叠成一个三层树形结构,老板只关心第一层,也就是整体进度;中间是项目经理关注 的功能层,最后一层,也就是具体的任务,是开发人员关注的。想想,如果没有这玩意,你怎么告诉其它项目干系人进度?但又引出几个问题:
靠文档来沟通,还是靠信任? 太在乎文档,往往导致每天去关注文档如何漂亮、有说服力,并为此花大量时间,而不是项目如何漂亮。另外,是否有文档就可以防止扯皮、兑现承诺?我们是关于 项目目标,还是关注彼此的博弈?
进度偏差 创业型项目,往往都是以前没有接触过,其进度评估往往有很大误差,比如业务需求的挖掘和变化,技术难点,开发人员素质。我们是关注进度,还是关注项目本身 的质量?两者都要,但如何兼顾?虽然有方法学,比如砍掉优先级低的,但你怎么让老板相信某个核心功能就得四天时间。
在我们的进度设计不合理情况下,是否开发人员完成甘特图(WBS)下的任务就ok?远远不够,任务分得太细,往往限制了开发人员的创造性和自我评估能力, 如果提前两天完成呢?
我们现在是以项目管理软件为辅,任务的下达主要以邮件传达,每周一上午的周例会会白板宣布。我发现白板比投影仪PPT好用。
关于规范
这也是大公司特别喜欢玩的。
也许我们前期会制定一个的架构、设计文档,代码规范,这有一个规范建立的时间成本以及规范本书的合理性,再说如果一个开发人员,特别是高手,如果不认同你 的设计和规范,你要强推,他要么走人要么怠工。规范的本质是为了协作和后期可维护,如果只有两个人或一个人写某个模块,你觉得有这个必要吗?规范 整洁的代 码,在项目初期,对用户的价值关系很小,你会关心豆瓣网的js代码写得很漂亮吗?我们应该关注代码的健壮性而不是可维护性,我们不是在开发 Windows。
人适应项目,还是项目适应人
大公司,往往是来了一个项目,赶快招人,人来适应项目。小公司呢,我现在的看法是,项目适应人。小公司,往往一个项目做砸,公司就面临解散。所以,我认 为,最好还是按照开发人员的擅长,保证功能质量,最快的速度上线。另外,为了达成进度,可以在上线初期砍掉不太重要的栏目或功能。
我在这个上面栽过跟头的。比如开发人员的擅长,如果他擅长jsp开发模式,而不是Hibernate+Spring的分层开发,就让他按自己的意思做吧。 因为,创业型项目都不会太大;即使技术实现你感觉完美了,用户可能感觉不爽;再说,项目开发,涉及到业务调研、需求分析、原型界面、架构、开发、 部署、推 广。开发,也就是代码实现,占去项目时间,也许不到30%。项目如果证实有商业前景,代码重新实现一遍,花不了多少时间。
但我也深深地意识到我们项目管理的级别,就如同CMM1到CMM4。但我还是觉得目前是最好的选择。
如果最低层次的用户需求目标都达不到,直接考虑代码怎么有可扩展性、可维护性,对于小公司就是找死。
另外,尊重和信任、支持开发人员的技术选择,往往是一种激励、增强团队凝聚力的方式。万众一心,比什么目标、进度更有效、实际。
我们应该培养一种团队成员的内部创业心态,而不只是敬业。
在进度把控上,我现在更倾向于强调我们的项目目标和紧迫性,而不是他们的任务。因为我希望大家的关注点是项目,而不是他的上级,他应该对项目负责,而不只 是对上级负责。
说说沟通
项目管理中最难处理好的,就是沟通。以前,我比较关注于工具,如邮件、文档、ppt讲稿会议,逐渐我关注效率和效能,特别是态度。沟通最基础的就是态度。 如果网站上线后,订单提交出现一个核心bug,你是直接找开发人员问责;还是告诉他哪儿出了问题,这个问题的严重,并且自己反省,比如测试流程出 了问题。 出现这种事情,也许需要负责人举重若轻的气度。但更深层次的,如果负责人能够培养其员工质量意识,危机意识,才是治本。因为一个有强烈质量意识的 团队,他 自然会去对代码健壮性、功能易用性精益求精,自然会去配合测试流程。
刚才那个沟通问题,对开发人员的态度,前者是负面,后者是中立。那么前者,开发人员的反应是如何不让领导下次责怪自己,比如只做领导安排的事情;后者的反 应是怎么去改进,不让这样的事情发生。
如果你认可创新就可能出错,如果你认可开发人员都是想做好的。那么所有的事情,朝正向发展迈出了最决定性的第一步。
沟通:命令式还是征询式
在沟通,特别是下达任务或做决策这类事情上。应该说中国绝大多少管理者都是用命令式。我过去经常在用,但一直在试图改正,改用建议式和征询式。管理者最需 要、最难开口的一句话是:Do you think so?命令的方式,经常出现下级不能理解上级的意图,严重的出现抵触。每个人,其实都喜欢别人按自己的想法做事,但你怎么知道自己的想法或决策是对或不是 偏颇的,怎么让团队愿意去执行?去征询团队其他成员的意见,让他们参与,往往能够培养其主人翁意识、责任感、向心力,还能够完善自己的想法。但要 将员工参 与意识,转化为一种习惯,太难。
当大家都没有主见时,需要领导者的果断、魄力和强势,但这种机会并不多,而且这种情况,需要团队成员对领导者的信任。
遵守制度,还是建立信任
在大公司,往往是告诉你怎么去遵守公司制度。在小公司,我认为最基础、最核心的一件事,就是建立信任,让团队信任你的人品(说到做到),信任你的能力(能 够把大家带到一个新的高度)。建立了信任后,下一步的核心工作,怎么将你的个人目标,也就是团队目标,转化为每个成员的个人目标。
有了信任这个基础,才会有了团队建设的第二个核心:激励。
是激励,而不是约束、监督,让团队有战斗力。但大公司往往喜欢后者。也许,大公司都是职业经理人,反正是打工,太关注于事。如果说有个所谓的中国式领导, 我觉得就是以人为本,对人的尊重。人的关系处理好了,事情就好做。
加班、考勤、上网监控,这类对信任、激励极具破坏力的行为,也许是工业型社会对我们这个思考性创造性行业的侵蚀。知识型劳动者,需要一种与体力型劳动者完 全不同的管理模式,这种模式也许需要一个从萌芽、生长到成熟期。现在在目前的中国,还只是刚走出萌芽期。
以前完整看过余世维的11套视频,还看过几遍。他那种人本理念我还是很认同,只是,他在大公司、规范公司的做事情方法和风格,完全照搬拿到小公司,非常危 险。你能够拿幼儿园那种教育方法来教育成年人吗?小公司不具备大公司那种职业化的环境,也不具备大公司在行业中的市场地位及资金实力。
如果说大公司讲究做事方法、流程,如SWOT分析法、BCG矩阵,小公司更看重灵活性、市场适应性。小公司应该适当短视、急功近利,否则在你实施一个三年 计划时,第二年还不赚钱可能就撑不下去。
所以我觉得,在跨国大企业呆惯了,出来创业很危险。一个是做事方法不适应,另外一个就是没有平台。如果要出来创业,以前那种大企业的经历可能更是一种劣 势。 也许有一种情况,你是大公司的高官,拿到一笔很大的风险投资,然后出来创业。
人事招聘
薪水 如果公司给得起,并且应聘者能力差不多。 就不要太在乎那200、300。虽然说至少要不低于行业平均值(IT人员是IT行业平均值,而不是本公司所在的行业平均值),但最重要的,还是不要低于当 事人的期望值,因为最核心的是满意度,而满意度决定于期望值和实际值的差距。对于小公司,往往一个人技术人员的成本和收益,和其工资差距非常大, 有可能 10倍。所以,我们的关注点,应该是怎么一开始留住这位人才。然后,怎么让其充分发挥潜力。小公司往往不是因为节省那几千几万的工资成本死掉的, 而是充分 利用这位人才才活下去了。
另外,不要以为有多少人才选择的机会,小公司往往不受高级人才的青睐。太高级的人才,可能养不起,而且往往太有个性,很难合作愉快,除非在来公司前有很长 时间的了解。
招聘到合适人才后,应该让其忘掉薪水,专注于工作,寻找工作本身的乐趣。当然,要做到让其在薪水上有优越感,也许是项目很盈利的那一天,开始时很难。
人才标准 如果其能力和你预期相差不大的话,更应该考虑其态度、做事风格,甚至是价值观。因为其能力的发挥,和这个环境,特别是他的直接利益相关者,也就是上司,关 系太大。如果配合得好,一个人可以顶三个。否则,那种内耗导致的进度延期,由此引起的市场机会丧失,公司财力无法支撑,往往是致命的。因为一个几 人的IT 团队,每一个人的职责就如同那木桶的一块板,缺了那块都存不了水。
比如关于质量,更确切说是内容质量,我们目前做旅游电子商务,我认为内容质量很核心。但你招进来的同事,始终认为先要量,什么都可以抄,而我强调质,原 创、半原创,可以少而精,而不能多而乱。除开项目进度,怎么去沟通?最好两个人一开始都认同原创的力量。
提升一个人的技能不难,但改变一个人的态度比较难,改变一个人的价值观几乎不现实。所以先找志同道合的人吧。
别期望人才是可替代的。我们不是大公司,我们缺了谁,那一块就不转。
大家都知道,松耦合要付出代价,比如SOAP协议的低性能,AMF私有协议的高性能。创业期,不要太多考虑人才替换,而是关注怎么发挥人的潜力,留住人, 尽快高质量完成项目。人才替换的一个假设,可能是你对自己管理的不自信,因为你不相信自己能够留住人。
这次就写这么多吧。
我似乎有这种体会,考大学、四六级这类资格、证书类考试最好混,因为只要勤奋就可以,再加点方法就可以出类拔萃了。 上班也比较好混,说找工作吧,像我搞技术的,本身对技术很狂热,根本就不愁找不到工作,因为面试时我觉得那家伙应该比我牛,正好可以切磋切磋,没想太多所 以没啥怯场或不自信。工作吧,如果是技术类,特别是商业软件,技术难度都不大,按上司意思来,很容易搞定。创业呢,自己要做商业判断、业务决策, 还要协调 若干人的工作(协调的本质是协调利益)。做事和管事,完全是两码事,有些难。不过,创业还是很有意思,因为你可以按自己的意愿去工作去生活,当然 也是受限 环境的自由。
我将我的一个回复放在这个地方,特示警醒:
我的看法:
1、文档的多少和深度决定于项目环境。
如果是大项目,比如二三十开发人员,架构文档、需求文档、代码规范等都是必须,否则开发人员不能迅速了解项目技术和业务特点,从而无法快速开发,也即是规 范可以降低培训成本和团队沟通;另外,项目开发中后期可能根本不可控,谁都看不懂其它人的代码。部署时看到的一些bug无法及时修复,因为到 处都有地雷。 我以前经历过这样的项目,最后加班都没用。
如果是产品型,规范更重要。当然我说的产品可能是2.0版以后,因为这时候的产品基本得到了市场的认可。而在初版时,代码写得烂都没关系,因为你不不知道 用户会不会买单,也不知道能否按进度开发完成。而在后续版本,如果没有规范文档,维护的成本都不亚于重新开发。特别是处于一线的开发人员会怨 声载道:为什 么要我来收拾残局?那么,这样的士气,开发效率怎么会高,项目质量怎么会高?
2、成熟型大公司那套做事流程,可能高手受不了,但可能是最优的方案。因为,到项目后期维护,往往只是一些业务功能的删减改进,不需要技术高 手, 这个过程可能漫漫几年,项目维护成本会非常高,雇佣高手一来他不愿意干二来也不需要这种人,如果项目代码还维持在一种"秩序",初中级开发人 员就可以胜 任,有什么不好呢?
项目上线时,是为了追求利润。项目维护期,是为了省成本。
3、刚入道的朋友,最好是按规范来,就像学武术,先要学套路。否则,养成的编程坏习惯,比如文件名叫Aaa1.java,代码没有缩进。过几 年非 常难改。而好的编程习惯,可以提升开发效率,还能让自己思维清晰。
学技术阶段,一定要注意代码的可维护性、健壮性及灵活性,只有养成对代码精益求精的态度,你才可能成为技术高手。技术学好,做技术管理就有了基础,而且别 人也会服你。
1、代码可维护性 在我创业创业前的五六年,非常重视代码的可维护性和规范,可以说我写的代码非常漂亮、很易读。但现在,我们团队有一位技术高手,性格有些偏执。我提醒并纠 正过多次,几乎很难改他若干年养成的习惯(比如不用log而用System.out,不用testCase而用main,想想这些对开发速度的提 升也不过 百分之几),主要是他不想改,而且还打击他的热情。后来我想,我们项目要是尽快上线就不容易了,代码让我全部重写难度也不大。在代码可维护性和个 人做事愉 快两个方面,我最终选择了后者。商业成功永远是基础。另外,你不知道你写的漂亮代码,最后投入市场,在客人眼里,是否就是一堆垃圾。开发人员认可 的质量, 不等于用户认可的质量。
2、管理的境界 很赞同rrsy23的看法,最高的境界就是团队每个人的自我管理。我目前已经在实施了,效果还不错。以前五个人以我为中心,对我负责;现在是六个人形成网 状,我只是一个节点,比如开发人员要修改界面,不用找我,直接找设计师,当然我会在功能测试上把关。他们的关注点是项目目标,而不是我。可能是因 为我还要 和几位业务人员密切沟通,这算是在沟通压力下的一个创新。
3、领导 确实,在小公司还是靠领导者的人品和魅力。我也是技术出身,我不会让我几年经历中对公司或领导不爽的地方带到目前的团队,比如加班、催促。目前我坚持的原 则是尊重和信任,时刻反省自己的行为是否违背了它。我自认为大家还是很认可我的人品,虽然我不善表达。
4、敏捷 每日晨会、工作日志,这些东西用起来还是看环境,除非大家都认同,并且工作类型、开发者能力差不多。其实它们本质是解决沟通和风险控制。在沟通频率,比如 一天、两天、随时;沟通渠道,比如周会、邮件、当面等选择上,我更关注效率和效能,而以沟通方式为辅。
关于开发规范:
问题不在于具体某个规范,而在于一个开发团队必须有统一的规范。比如楼主说的jsp和ssh问题。如果一个团 队中,有人jsp有人ssh,那就杯具了。从过程改进的角度来说,这个规范不应该是一个人拍脑袋定下来然后强推给大家,而应该是一 个团队 (至少是核心骨干)在合作过程中形成的默契和共识。当然,这个过程可能是由某个人牵头来做的。
关于制度:同上。
至于沟通和信任,我想,在上面的前提下,这个不再是问题。
我有这样的感悟。当一个研发团队超过5个人时,必然会出现核心成员和非核心成员。不管多么大的团队,核心成员可能只有3、4个,包括了各个方面。 核心成员必须专注于自己的领域,利益一致,互相有共识和默契,互相开放,互相认同。至于具体的方式方法,我认 为一个健 康的团队,即使要经历弯路,但是会自己成长改进,找到最适合自己的方法。
这样的核心团队的要求其实是挺高的,现实中,招聘是很难得到这种团队的。如果你的核心团队人不具备这样的素质,ok,那么你要做的是,认清楚团队 能力的上限,不安排给其超越上限的任务。一般来说,搞搞企业应用这种劳苦命项目是没问题的(这也是大多数公司的现状)。但是,如果要创业,要成 功,那么, 就我的经验来看,大多会是杯具。
从更高层的管理角度来说,找到这样的团队成员,给他们必要的条件和资源,帮他们排除干扰,他们自然会达到最好的结果。如果你自己想成为核心成员, 那么,你要自问是否达到了以上要求。
软件发展到今天,虽然有很多方法论互相pk互相争论,但是大部分还是有主流认知的。比如过程,比如设计思想, 比如技术框架。但这些方法论都是有适应场景和前提条件,有不同的具体实践方式。大多数人学习这些方法论,都只是看到手段,而不知道背后隐藏的条件 和思想。 比如前面说的jsp和ssh,都有各自优缺点,各自适应的场景,没有绝对的优劣。所以,真正合格的人才凝聚成的团队,在信息平等的情况下,对于这 些问题是 很容易达成共识的。坚持主流认知之外的人,大多数要么是视野狭隘,要么是人品有问题。当然,很小概率下,也有可能是理念超前的天才。
我原来也是在管理非常规范的公司呆着的,后来来到北京来到一个创业的小公司发现很多东西都不灵了,小公司需要的是很强的执行力,需要快速的做 出成 果,所谓的流程、文档等等其他东西往往不是最重要的。
拿文档来说,你知道文档的目的是什么吗?大多数情况下文档是分析、沟通和取得共识承诺的载体。什么情况下可以省略文档呢?
1、项目复杂度够小,需求和设计都可以在脑海中思考清楚(也就是生命周期不超过一个迭代的项目复杂度,否则,没有文档你自己都没办法把问题考虑清 楚);
2、需求、设计、开发、测试等各方沟通非常紧密顺畅,不会出现误差(比如敏捷中对团队物理条件和客户参与的要求);
3、在沟通不会有误差的前提下,大家没有利益差别,互相信任(比如内部项目,除了问题,投资方不会责怪追究你);
4、在过程中通过不断确认来保证方向(持续集成,快速交付,否则交付时间稍微长一点,你自己都记不住当初的要求了)。
如果你的团队或项目环境(有时候后者是主要矛盾)没办法做到以上几点,那么所谓抛弃流程和文档,只是缺乏控制能力和偷懒的借口。成果必然不佳。
流程同理。
1、文档 我们最重原型,也许因为我们是旅游电子商务网站,与业务员、设计师、开发人员沟通都是它(看附 件)。
2、利益 管理的本质就是管理利益,只是没必要挂到嘴边,每个人的利益追求都不一样,薪水只是一种利益。团队成员是否开心,会有一种自然的流露。比如,我从不限制我 们团队上网,只是告诉他们,要是有很想下载的大片,建议限速到100k。我们团队始终是自觉在上班时间将QQ隐藏或是不开,多数时候还是我提 醒开一下 QQ。我从未看到有人专门去浏览娱乐资讯,有时我可能会发一些好文给他们。我也会告诉他们,要是哪天晚上没睡好,就迟些来,因为状态不好和怠 工没啥差别, 对自己和公司都不好。比如今天中午大楼停电,我告诉他们:等电来,还是现在回家,你们自己决定吧,我走了。因为我要去公司业务部门沟通。
总之,我的责任,就是挖掘他们的潜力,让他们热爱自己的工作。另外,他们进公司时,薪水都是他们告诉我一个期望值,然后我满足他们,并且还超出一点,没有 一次我砍过价。
告诫各位处于开发第一线的朋友,千万不要受本文的误导,把规范和设计文档不当回事。
我的看法:
1、文档的多少和深度决定于项目环境。
如果是大项目,比如二三十开发人员,架构文档、需求文档、代码规范等都是必须,否则开发人员不能迅速了解项目技术和业务特点,从而无法快速开发,也即是规 范可以降低培训成本和团队沟通;另外,项目开发中后期可能根本不可控,谁都看不懂其它人的代码。部署时看到的一些bug无法及时修复,因为到 处都有地雷。 我以前经历过这样的项目,最后加班都没用。
如果是产品型,规范更重要。当然我说的产品可能是2.0版以后,因为这时候的产品基本得到了市场的认可。而在初版时,代码写得烂都没关系,因为你不不知道 用户会不会买单,也不知道能否按进度开发完成。而在后续版本,如果没有规范文档,维护的成本都不亚于重新开发。特别是处于一线的开发人员会怨 声载道:为什 么要我来收拾残局?那么,这样的士气,开发效率怎么会高,项目质量怎么会高?
2、成熟型大公司那套做事流程,可能高手受不了,但可能是最优的方案。因为,到项目后期维护,往往只是一些业务功能的删减改进,不需要技术高 手, 这个过程可能漫漫几年,项目维护成本会非常高,雇佣高手一来他不愿意干二来也不需要这种人,如果项目代码还维持在一种"秩序",初中级开发人 员就可以胜 任,有什么不好呢?
项目上线时,是为了追求利润。项目维护期,是为了省成本。
3、刚入道的朋友,最好是按规范来,就像学武术,先要学套路。否则,养成的编程坏习惯,比如文件名叫Aaa1.java,代码没有缩进。过几 年非 常难改。而好的编程习惯,可以提升开发效率,还能让自己思维清晰。
学技术阶段,一定要注意代码的可维护性、健壮性及灵活性,只有养成对代码精益求精的态度,你才可能成为技术高手。技术学好,做技术管理就有了基础,而且别 人也会服你。
另外,人的替换成本很高,如果就三个人开发代码,走了一个,那么进度就可能延期一个月。
技术好的,一般会有些性格,让其做的开心,往往其责任感会强很多,效率也会高很多。再说,几个人开发的项目,复杂性又难到那里去?
小公司,如果没有很雄厚的资本,真的很难做到强势。再说,做到强势又能怎样?强势能够拉拢人心吗?我最关注员工内心是否对上级、对团队、对公司喜 欢、信任、有信心。有了这个基础,其它的就好推进了,这是一个阶段和层次问题。
1、在公司呆了几年后,感觉单纯搞技术,没啥出息。一辈子的积蓄可能只能买几套房子。另外,虽然公司有休假,一年才几天,请假像讨债似的,开不了 口。想想,一辈子那样,在笼子里,真没趣。
2、纯技术岗位,自身发展受限太大。我想带领一拨人,做一件我想做的事情。大家都很开心,有钱又有闲。我觉得,出来这两年,技术深度增长并不大, 但对商业和技术的看法、使用技术解决问题,如何做事、带团队,可以说,两年顶五年,成就感很强。
有上面这种感觉,可能是因为在我出来前,看了两年的《IT经理世界》和《财经文摘》,差不多每期都买,眼界开阔了。发现技术改变不了我的生活。当然,到现 在,我依然很喜欢技术。
3、可能是上任领导相处不融洽吧,彼此不信任。也许是因为我比较有个性,不喜欢条条框框,也特不喜欢这样的沟通:今天下午必须跟我搞出来,否则加 班。我特接受不了人命令我。
所以,以前自己感觉不爽的,绝不带到我目前的团队。即使做失败了,大不了再回去打工,我最在乎的,是一帮人在一起干得开心。
而且,即使回去打工,我也不会以打工的心态,而是职业经理人的心态。因为,人是为自己活着的。当然了,工作那几年,我还还是很喜欢我的工作,也总是尽职尽 责完成,反正也不是打工的心态。
也许,最根本的,是我这个人不喜欢被束缚,对未来还充满想象力,对自己的潜力还充满信心。
从组织结构上,我们团队已经很完备。公司虽然小,但我们每个人都很专,这样,大家可以专注于自己的兴趣,深度发展,而不是打杂。工作本来就应 该是 一件很开心的事情,创造性会带给人极大的成就快感。
我们提倡尊重、信任、自由、共享的团队文化,特别是后两者:自由和共享,我认为自己做得还不够,我会继续努力的。
我还是固执地认为,曾经,窒息的应试教育和野蛮的公司文化,让学习和工作,本应该很开心的事情,变成了一种无奈的选择。
生活应该是阳光的,在这儿,我们来一起打造这种阳光文化,因为工作就是生活。
我很欣赏罗 永浩这个人,因为他坚持自我,率真,因为追求公平和正义而对这个世界怀有一种罕见的善意和温柔。大家可以看看他的演讲:http://v.youku.com/v_show/id_XMTY5NTc2MzMy.html 。
在这个越来越恶劣的社会,我们没地方住(买不起房),也没地方说(政_府言论封锁),但我们不应该妥协,因为妥协会埋没我们的潜能,潜能是我 们最 大的一块宝藏。至少,在xxxx这个地方,我会和大家一起,去开发这块宝藏。