05月 17, 2005

因为刚刚在说自我批评与反省,现在就来写这篇关于自我批评与忏悔的文章。

其实一直想写的,但一直也只是存留在脑袋里的只言片语和思维片断,觉得行文不太好。不过,我暂且当这里真的是我牛比的草稿本,即使只有一句话,也可以写下来!

党内民主生活会,肯定是会要有自我批评的。我不知道这一招是谁创造性发明的,是不是和西方基督教里的忏悔相应。以前,我们支部一学期还有一两次批评与自我批评的,十来个人相互扯淡,越扯越淡……

-嗯,我的缺点就是成绩不好……当这话是从班上第三名口中传来时,是不是想打人呢?

-嗯,我的缺点是大学好堕落,自我批评一下……FT,这样的批评好像几乎每个人都有

-嗯,我的缺点是太懒了,经常迟到……共性!

-嗯,我的缺点是我有时候会逃课……分明是一个逃得很少的人,一节不逃可能吗?

……

诸如此类,有价值的一点不谈,偶尔谈几个可能有价值的,也是如下……

-嗯,XXX同学的缺点就是他对同学太好了,原则性不强……

-嗯,XXX同学工作方法有点不当……

……

这样的民主生活会,每次都听得我想把这些人的嘴巴撕开。当然,有时候我也会这样的讲,我讲得很诚恳,我也迟到早退,我也逃课,我的成绩不好这倒是公认无所谓,不过,我说,说了也没用。年年如是说,年年如是做。到后来,人越来越多,不认识的人越来越多,批评起来就更没什么意义了。

这样的民主生活会,每次都听得我想把这些人的嘴巴撕开。当然,有时候我也会这样的讲,我讲得很诚恳,我也迟到早退,我也逃课,我的成绩不好这倒是公认无所谓,不过,我说,说了也没用。年年如是说,年年如是做。到后来,人越来越多,不认识的人越来越多,批评起来就更没什么意义了。

有几次,我说了自己的观点:

1.这样的批评毫无意义,从来没见哪个改正过……而且对于我来说,迟到逃课这样的事情也没有真正要改的必要!

2. 就是我想到了忏悔,西方的忏悔是建立在一种信仰和绝对信任的基础上的,因为神父是一位德高望重的人物,所以,有信仰的人们愿意把自己的倚托放在这位自称代表了神的人物那。即使没有获得帮助,倾诉也是有快乐的。

而我们的党内有这样的氛围吗?如果说最开始十多人,同志般的情感与神圣的使命感让他们有那种信仰的,宗教般的热忱,这点就无以为疑了。那个年代里,每个人都是仇大苦深的样子,有一个神圣耀眼的目标和一种奋斗的激情。想想看,改造一个世界的激情,现在还可能有吗?

我还是倾向于认为每个人其实都是有剖析自己和忏悔的欲望的。老憋在心里也难受得慌……所以,在那种的激情澎湃的岁月里,面对着生死兄弟,大家可能会愿意真正自我批评的。

但现在呢?一个支部的支部书记不足以承载足够的信任。而其他成员,没有战争时期的“革命的友谊”,很难有真正的互信!XXX做事很没章法,XXX为人很圆滑,XXX有点投机,甚至XXXRP很差。这样的话,谁也不会说,要么憋在心里,要么背后说说闲话。当面倒是一团和气了,批评啊,自我批评啊,一切都显得无足轻重的。学习啦,成绩啦,工作啦,一切都是表面的。

不信任是造成整个团体沟通与交流的障碍。也许彼此可以嬉闹玩笑,却不一定愿意把自己的真实暴露给对方,甚至有时候自己都不愿意面对,当然,也有可能自己从来不想这些的。所以,即便是性格上的弱点,有时候也不愿意分说,更不用说内心深处的忏悔与自剖了。

西方的忏悔我不知道现在还有没有,但我很记得小时候看的一本书《牛虻》,最初的主人公是被神父出卖的。自己的信任最终成为敌人利用的弱点,这点不得不说是种悲哀。而以前的我,曾经做过的最蠢的事情也是深刻的剖析自己,把自己的某一个不光采的一面写在了自我批评的纸上,却被班主任拿去和家长沟通,让我深感郁闷。因为他们不了解,我把有些东西写在纸上,并不是为了他们用他们的方式来教育我,而是希望他们能够了解这些。不说排解苦闷,至少也别给我添堵啊!:)

所以有时候,自我剖析的时候有点谨慎的,生怕自己得意忘形,拿着自我批评的旗职,满世界的挥洒自己的信任了!

自我批评一下。

昨天连续两个人说我懒,我必须要反省一下自己了。:)当然,其实我的反省一般都带有自我辩解的味道,同党内的自我批评一样。这是我的性格弱点^^!

最近算是三座大山压头,三座其实都不是很繁重,但又都是很麻烦和费时间。一是我们的毕设,现在进入不太想做的阶段,而老师要我天天待在实验室里面,早起,晚回……实在是极不爽。即使待在实验室里,有时候也没心情做,呆坐而己。一页一页的翻那些技术文档,郁闷到死。二是那个精准的项目,这个项目可谓是牛比,峰回路转,百转千回。本来可以在一个月内搞定的项目,却是从上学期末谈需求开始,从3月25日交付,拖到4月25日交付,又在4月底发生了一些其他事物,把搞技术路线的我们卷入一场商业战,把项目三方拖得精疲不堪……最后重签合同到这个月的25号测试验收。三是这个周末的毕业晚会……昨天说这个的时候被高文所B4……哎呀,其实工作量最大的就是这个,因为我大概要做十段左右的视频来串场,现在照片还没扫描,视频还没思路,还有点无从下手的感觉……

先写这么多,待会再发文到牛比的草稿本里去。其实一直还是想写点东西的,也想想一些事情。只是最近发现都头脑迟钝了,上学期考研的时候都还经常在纸上大发感言的,最近却啥也不想想,啥也不想说。

累啊。思考快乐,思考也特累。要思考出东西来的话,更是累上加累。

最近的确很懒,我的衣服已经一堆没洗了,今天看来要洗衣服了……

05月 16, 2005


 
—————————————————————  
 
1.>抽象类与接口在设计时各有什么好处?  
接口不能执行任何的方法,而抽象类可以。    
类可以执行许多接口,但只有一个父类。  这个也有人说用接口可以实现多重继承。  
接口不是类分级结构的一部分。而没有联系的类可以执行相同的接口。  
 
具体说说:  
   接口是对象属性和方法的描述(但不包括他们具体实现),比如Int32类型实现了IConvertible接口,就说明Int32具有IConvertible接口所描述的ToDouble()方法。但IConvertible并没有给出实现ToDouble()的内容,需要由Int32类型自己实现。    
接口用于实现多态。比如Int32,Int64和Single类型都实现了IConvertible借口,那么就说明他们一定都具有ToDouble()方法。所以,定义一个变量是IConvertible类型:    
IConvertible  c;    
然后,无论是给c赋任何实现IConvertible类型的变量,我都能够保证,c至少有一个ToDouble()方法可用,而不用关心c具体是什么类型的变量。如    
int  i  =  3;        //Int32    
long  j  =  6L;    //Int64    
float  k  =  4F;  //Single    
 
则    
c  =  i;    
c.ToDouble();    
 
c  =  j;    
c.ToDouble();    
 
c  =  k;    
c.ToDouble();    
都不会发生错误。    
 
实现接口的类可以显式实现该接口的成员。当显式实现某成员时,不能通过类实例访问该成员,而只能通过该接口的实例访问该成员。  
接口的应用大多数是在Design  Pattern时才用到。    
 
 
抽象类,从多个对象中抽出来的“共性”,而他的后代,既有共性、又有特性。例如:“图形”是抽象的,没有形状,由点线组成;正方形、圆形是他的派生,可以是对象。  
 
 
2.静态方法与实例方法的区别  
静态方法方法是属于类的方法,实例方法是属于由类的对象的方法。  
 
比如:  
class  A  
{  
   public  static  void  F1()  {};  
   public  void  F2()  {};  
}  
 
你可以这样用F1    A.F1();  但是A.F2()就会出错。  
可以这样用F2,    
A  a  =  new  A();    a.F2();    但是a.F1()也会出错。  
 
(over)  
 
—————————————————————  
 
个人认为,抽象类与接口的作用从本质上讲是一样的,就是规定一些共同的方法。只要某个类是继承自某个抽象类的或实现了某个接口,则其必须完全实现该抽象类或接口中的所有方法。  
之所有有两者共存,是因为只支持单一类继承,但可以实现多个接口来实现类似于多重继承的功能。  
—————————————————————  
 
mark,study  
—————————————————————  
 
收藏  
—————————————————————  
 
最基本的区别是:  
 
接口是一种协议,一种约定,一旦发布,就不能更改,只能通过定义新接口来增加功能。而且接口内定义的成员不能在接口中实现。接口中的成员都是“抽象”的。  
 
抽象类可以部分实现成员。而且随意增加新成员,这在一个发布的已被使用  
接口中是不能的。  
 
当然,如果你想把项目从头再来一遍,什么都可改变。可微软发布的  .Net  中的大量接口估计永远也不会改了。这就是接口。而  .Net  的新版本可以对某些类包括抽象类进行一些增强,却不会影响你原来的代码在新版本上的运行。而接口的更改将可能你导致重新编写代码。  
—————————————————————  
 
欢迎高手。  
http://expert.csdn.net/Expert/topic/1146/1146709.xml?temp=.4294245  
 
—————————————————————  
 
为什么静态的方法不能调用本类里面的非静态方法呢???  
—————————————————————  
 
1。抽象类更侧重于归纳同一父类的子类的共同特征,如果属性,方法;接口更侧重于定义任意的类有没有相同语义的方法。  
2。实例的方法可以看作是某个对象的方法,而这个对象是属于你的应用程序的;静态方法你可以看作是你的应用程序的一个方法,再把镜头拉远一点,把你的应用程序看作是一个对象的话,那么静态方法就是应用程序这个实例的一个方法。至于为什么要有静态方法,我想,当一个类的方法在执行时如果不涉及到某些具体需要实例化的数据时,都可以归为静态方法。  
—————————————————————  
 
哈哈哈  
这个帖子值得收藏  
我得好好想想  
—————————————————————  
 
班兄的才能和热情是C#版各兄弟有目共睹的,不是一两个人的话就可以颠倒视听的!我相信群众的眼睛都十分雪亮。  
再说我觉得abiao也是对事不对人吧,“疑义相与析”时难免有言语的摩擦,最后能把问题搞清楚才是我们C#版兄弟们所追求的真谛,不是吗?  
绝对赞成"C#版只有我们自已才能珍惜。努力吧!兄弟们!"!  
—————————————————————  
 
人民群众的眼睛是雪亮的!  
呵呵…  
收藏  
—————————————————————  
 
studying~~  
—————————————————————  
 
这个贴子是我进C#以来认为比较有价值的贴子中的一篇,前段时间那个"必败"的家伙惹的我心烦,现在总算是看到本版有了很好的讨论问题的气氛了:)  
 
本贴虽然楼主认为有点幼稚,不过我觉得,有时候看似简单的问题,却很值得深入研究,希望以后多出这种贴子…  
 
另外建议置顶…  
—————————————————————  
 
gz  
—————————————————————  
 
呵呵,文人相轻  
—————————————————————  
 
为什么总是有人,想吵架呢,奇怪啊  
—————————————————————  
 
不错,值得收藏。  
—————————————————————  
 
接口可以有静态成员、嵌套类型、抽象、虚拟成员、属性和事件。实现接口的任何类都必须提供接口中所声明的抽象成员的定义。接口可以要求任何实现类必须实现一个或多个其他接口。  
 
对接口有以下限制:    
 
接口可以用任何可访问性来声明,但接口成员必须全都具有公共可访问性。    
不能向成员或接口自身附加安全性权限。    
接口可以定义类构造函数,但不能定义实例构造函数。    
每种语言都必须为需要成员的接口映射一个实现提供规则,因为不只一个接口可以用相同的签名声明成员,且这些成员可以有单独的实现。  
 
—————————————————————  
 
楼上好好听高手讲课~~!  
—————————————————————  
 
为什么会有接口和抽象类?

05月 14, 2005

利用微软网格控件进行编辑输入
(作者:王莉梅 2001年01月18日 16:51)

  Visual Basic中提供了许多标准控件和定制控件,每一个控件都可以提供一组特殊的用户界面和编程能力。充分利用每一个控件的特性和方法,可以使编程工作更加容易、简单。

微软网格控件MSFlexGrid是个定制控件。使用微软网格控件,可以按行列顺序显示正文、数字和图片,就象电子表格一样。网格的高度、宽度和其它特性都可以进行调整,而且网格的行和列可以单个地或成组地进行操作。MSFlexGrid控件对包含在内的单元内容可进行分类、合并以及格式化,并且可以与数据库控件相绑定。MSFlexGrid控件具有50多种属性,比其它网格控件功能更强大,灵活性更强。

  但是MSFlexGrid控件同其它Grid网格控件一样,用户不能编辑网格单元中的内容,在要求对其内容进行修改时,这可能是一个缺陷。虽然可以对DBGrid控件进行编程完成编辑的功能,但其功能不如MSFlexGrid强大。当在录入工作量比较大时,如果利用MSFlexGrid进行输入,代替Text或其它控件,从而避免了界面的反复刷新和不断地操作按钮,录入速度和效率会得以大大提高。

  在应用程序中使用 MSFlexGrid 之前,应先将 MSFlxGrd.ocx 文件添加到工程中。

实现编辑网格单元的方案
  为了仅仅要求实现能够对网格单元进行输入,可以在MSFlexGrid的KeyPress事件中加入以下代码,但是修改编辑输入后的内容还十分困难。

  Sub MSFLexGrid1_KeyPress(KeyAscii As Integer)

  MSFlexGrid1.Text=MSFlexGrid1.Text & Chr$(KeyAscii)

  End Sub

  另外一种方法是文本框和网格相结合,用户编辑操作文本框中的内容,操作完后移至网格单元中。在这个过程中,应该实现以下几个功能:

  (1)文本框能准确定位,与待编辑网格单元相重合(2)平时文本框不显示,当进行编辑操作时显示(3)在输入完一行后能自动判断并加一新行(4)按回车键确认并自动到下一列(5)双击网格单元可显示文本框进行编辑(6)文本框消失后,把文本框内容移到网格单元中。

编辑网格单元的具体实现
  建立一个新工程,在Form1上添加控件 Text1和MSFlexGrid1,根据表1设置其属性。

  首先要实现文本框显示的时候,能与网格单元准确重合。ShowTextBox子例程便可以实现此功能。在此考虑网格本身的Top和Left值、网格单元的高度和宽度、分隔网格单元的边框的宽度。

  Sub ShowTextBox()

    With MSFlexGrid1

     ‘隐藏文本框,设置高度和宽度

     Text1.Visible = False

     Text1.Height = .RowHeight(.Row) – (Screen.TwipsPerPixelY) * 2

     Text1.Width = .ColWidth(.Col)

    ’ 计算文本框左坐标

     Text1.Left = .CellLeft + .Left

     Text1.Top = .CellTop + .Top

     Text1.Visible = True

     Text1.SetFocus

   End With

  End Sub

  当有按键触发网格单元时,则把单元中的内容保存到文本框中,然后显示文本框等待编辑。

  Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)

  Dim char As String

  If KeyAscii = 13 Then

   Text1.Text = MSFlexGrid1.Text

     Text1.SelStart = Len(Text1.Text)

     Else

      char = Chr$(KeyAscii)

      Text1.Text = char

      Text1.SelStart = 1

     End If

     ShowTextBox

     KeyAscii = 0

  End Sub

  当焦点离开一个网格单元时,先保存文本框中的内容到网格单元,然后检测离开单元是否在最大行第一列(可自己设第几列),如果是自动加一行。

  Private Sub MSFlexGrid1_LeaveCell()

    MSFlexGrid1.Text = Text1.Text

  If MSFlexGrid1.Col = 0 And MSFlexGrid1.Row <> 0 And _

   MSFlexGrid1.Row = MSFlexGrid1.Rows – 1 And MSFlexGrid1.Text <> "" Then

     MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1

   End If

  End Sub

    为了响应鼠标动作,添加以下代码。

  Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, _

                   x As Single, y As Single)

   Text1.Visible = False

  End Sub

    当网格单元发生变化时,取网格单元内容到文本框,等待编辑,从而保证文本框中的内容最新。

  Private Sub MSFlexGrid1_RowColChange()

   Text1.Text = MSFlexGrid1.Text

  End Sub

  双击网格单元可以对网格单元中内容进行编辑。

  Private Sub MSFlexGrid1_DblClick()

   If MSFlexGrid1.Row > 0 And MSFlexGrid1.Col = 0 Then MSFlexGrid1_KeyPress 13

  End Sub

  文本框起输入编辑框的作用,模拟网格单元,输入到文本框的内容,经过处理送到网格中,当输入完后按回车键可以自动到下一列,若为最后一列,跳转到下一行的第一列等待输入。

  Private Sub Text1_KeyPress(KeyAscii As Integer)

    If KeyAscii = 13 Then

      MSFlexGrid1.Text = Text1.Text

      Text1.Visible = False

      MSFlexGrid1.SetFocus

      If MSFlexGrid1.Col < (MSFlexGrid1.Cols – 1) Then

       MSFlexGrid1.Col = MSFlexGrid1.Col + 1

      ElseIf MSFlexGrid1.Row < MSFlexGrid1.Rows – 1 Then

         MSFlexGrid1.Row = MSFlexGrid1.Row + 1

         MSFlexGrid1.Col = 0

      End If

      KeyAscii = 0

     End If

  End Sub

以上程序在VB6.0 (中文企业版)下运行通过,实现了对MSFlexGrid网格单元的输入编辑。当然还可以添加一些代码完成对一些击键的响应,如按Tab自动到下一列,按Ese键取消输入等,这都很容易做到,在此不再叙述。如果您使用VB6.0 (中文企业版),还可以用MSHFlexGrid控件来完成编辑输入的功能。您可以在此下载程序清单。

作者Blog:http://blog.csdn.net/coolstar/
05月 13, 2005

嗯,传说中的人物

我只跟她聊过一次,就是考研后问导师的情况。伊利说是她们屋的一个女博士,准确的讲,是直博生。唉呀,这么小年纪就注定了以后灭绝师太的命运,其实我还挺替她惋惜的。不过,伊利说“所有的人都变态了,她都不会变态的”……呵呵……

不过,不变态就加入不了我们变态帮了

后来听HL说,才知道原来她就是传说中 “蔡依林”,以前几次老乡聚会,都想一见真容的,结果都没过来……

今天总算看到了,她和伊利一起去帮我们执行一次特工任务……任务的惊险,意义和影响,稍后再述。不过今天的收获在于看到了蔡依林,而且带着可爱的湖南妹子的味道^^一说话就觉得像快乐小精灵!

中午去食堂吃饭,把钥匙放椅上就去打饭了……

前面那个女生JJYY的打了三份盒饭,左挑右选的,在后面,我都看烦了……好不容易轮到我,打到饭菜……回去座位时……发现我又找不到我占的座了……

我头有点晕,我想我是不是有点间歇性失忆症了啊……这是这学期第三次我把钥匙放椅子上回来不记得了……我转了两圈,然后随便找了个座,忍住心中的烦闷,想想我为啥会间歇性失忆的事,然后打算回去写点东西灌灌水……打算吃完饭等人少时再去找找我的钥匙,可能是丢在哪个座位上我忘了……

吃完饭,我再回去转了三圈,一张一张座的看……直到我转了整个食堂

我觉得我的记忆不会失忆到这种地步,我分明记得就放在南边的两排座上的某张上的,应该没错。

我再仔细搜寻,耐着性子和烦躁。昨天刚好把抽屉给锁了,要找不到钥匙,回去还得撬抽屉呢。真是郁闷……

等到最后,我觉得我的钥匙很有可能是丢了的时候,我决定最后一次搜寻……没找到就放弃

我觉得有可能是某个人坐了我的座,把我的钥匙给挪了位置。于是我再仔细看看……直到发现我的钥匙不仅被挪了位置,还被某个人坐在屁股后……

我拿起钥匙,对那同学说,同学,你难道没发现这儿有钥匙占座吗?……

这同学头都不抬,没

靠,看他穿着03级的校服,一付无关己事的样子。我就气上来了,我说,你知道这样很可耻!害我在食堂里找了半天!

他自顾自的吃饭……完全视我不存在!

我当时气蒙了,就像打他一顿。嗯,看起来瘦弱的样子,应该可以把他提起来……

不过,想了想,还是理智战胜了愤怒。然后我就走了……

走在回去的路上,越想越气愤,觉得居然就说了一句“可耻”实在是难以平而心头之愤……而且他还一副无谓的样子更是嚣张!我觉得应该回去再骂几句……

不过,最后还是想想算了……本来想中午发帖的,中午没时间。到现在发帖时,气已经消了!!

想起我以前发的一篇帖,好像和那个对应上了……
05月 11, 2005

 

MSDN 访谈录(MSDN Show)
 
 C#编程

C#是一种令人耳目一新且为之一振的编程语言,它设计给C++程序员带来快速的开发能力,而又不牺牲C和 C++所特有的功能和控制。
    在今天的这一期里,我们将要和Anders Hejlsberg交谈,他是微软一位资深的工程师,一直帮助设计、开发和实现该语言,并发挥其在未来.NET平台中的作用。我们还要和Jeffrey Richter(著名的编程作家和咨询专家)交谈,他从事C#的工作已经一年有余了。

 

 

介绍



Robert Hess,微软产品经理和“Show”节目主持人。

ROBERT HESS: 让我们继续关注理解.NET体系(Architecture)。我们今天将关注新的C#(念“C Sharp”而不是“C Pound”!)编程语言。首先看看MSDN 消息更新栏目。

 

 

MSDN 消息更新



由技术编辑Erica Wiechers主持
(略去与C#无关的谈话)

 


技术闲聊(TECHNO BABBLE )



Robert Hess和资深工程师Anders Hejlsberg会面,要讨论…???

 


ROBERT HESS: 欢迎回到这个栏目。好了,就象任何一个要在其上面开发软件的平台,为了使这些应用软件能真正地运行起来,所需要的一个主要东西就是一种编程语言。目前,.NET已经拥有了一种专门为此开发的专用语言,我们称之为C#。今天和我们在一起的是Anders Hejlsberg,他是微软一位资深的工程师,在C#语言以及.NET平台领域都扮演了一个关键的角色,在以前的“show”节目里大家都见过他。所以我邀请他到这里来,和大家一起谈论C#,谈谈它是什么,有了它程序员就可以从中得到什么好处,以及它是怎样真正地影响到应用程序的开发的。

那么,您究竟从事C#哪方面的研究工作,是从什么时候开始的?


ANDERS HEJLSBERG: 在最近大概两年半的时间里,我们一直在从事C#的研究工作。设计小组由4人组成,而且在这段时间里,我把主要的精力都放在了这上面。要知道,对于一种新的编程语言,我们有许多事情要去做。我想首先也许就是为程序员提供方便,使程序员开发出更多的产品就是最终目标。如今,虽然在产品的收益方面仅仅只是初具规模,但可以说,我们的目标,在某种意义上,不但要使C#具有C++强大的功能和出色的表现,而且还要使其具备简单易用以及RAD(Rapid Application Development,快速的应用程序开发)语言的生产率。

我们已经做了一些工作,例如,涉及到程序员如何利用更好的工具编写组件的范畴。如果你看看我们是怎样写应用程序的,应该是曾经怎样写应用程序的,如果回顾过去,也就是说5年或10年以前,应用程序就是这样铁板一块地被创建的,它和操作系统的唯一交互,你知道,就是进行文件的i/o操作,而且无论如何操作系统都会载入应用程序,接着用户就与其交互,最后退出。看看现在我们是如何创建internet应用程序的,相比起来简直是天壤之别。应用程序不再是铁板一块了,而是由一系列更小的组件构成,它们分别栖息于不同的环境。例如,你可能拥有类似存储过程(stored procedures)和SQL Server那样的组件,也可能拥有栖息于浏览器中的控件,或者是存在于ASP网页中的代码。商业对象生存于中间层,调用整个集合的组件就等于调用该应用程序。于是为了使……


ROBERT HESS: 而当时您明白其中的每一个组件都比5或10年前的一个应用程序更加复杂。


ANDERS HEJLSBERG: 噢,绝对,绝对。同样,为了减少创建组件的复杂性,不象那种大块头程序,每当必须创建其中的一个组件时,就不必另起炉灶,而应该尽量继承一些早已存在于这些专门的栖息环境(hosting environment)中的东西。如果要写浏览器中的一个控件,就要继承一个基控件;如果要写中间层的一个商业对象,就要继承某些商业对象类;而要想公开属性、方法和事件等等,就要说明它们是如何通过把属性与组件联系一起,以便与栖息环境相结合。而且还要能够为这些组件撰写随组件一起发布的文档。


ROBERT HESS: 所有的这些只是标准的面向对象的编程,Smalltalk 拥有此特性的时间似乎已经不短了,并且……

 

ANDERS HEJLSBERG: 嗯,绝对如此,现在并不是不能做这样的事。但如果注意一下这种今天已经得到了广泛应用的编程语言,它们实际上并不真正支持面向组件的概念。如果你当初同意我们什么时候谈论组件,那么认为它们具有属性、方法和事件在当今是极其平常的。但如果注意一下C++,就会发现它仅仅提到“方法”这个概念,没有属性,也没有事件。现在,你可以利用命名模式来仿真它们,也就是说,对于一个属性,可以用一个get color和一个set color的方法来取代一个color属性;而要代替类中作为第一个类成员的事件,你拥有的用于接收事件的接口就应该被实现,为了这样,你就必须处理一些琐碎的事……

 

ROBERT HESS:嗯,部分原因是由于C++是基于C的,它只是象预处理程那样,又由于C本来就不支持,C++也不支持……

 

ANDERS HEJLSBERG: 是的,实际上我多少认为,你所看到的就是从C到C++再到C#的发展过程。从C到C++,面向对象编程的概念被加进去了。如果你经历了从C++到C#,那么我会说,面向组件编程的概念也已经被加进去了,而它们之间真的存在着某些相似的地方。就象可以用C代替C++进行面向对象的编程,你也可以用C++代替C#进行面向组件的编程,只不过是更困难而已。用C来进行面向对象的编程是极其困难的,你必须手工地布置V表(虚拟函数表),并且还要处理所有琐碎的事情。用C++写组件也确实可行,但必须要为属性手工地设置命名模式(naming patterns),必须实现事件同步(event syncs),必须具有外部的IDL文件,在文件中可以对栖息属性(hosting attributes)进行描述,必须具有外部的文档文件,等等。我们只真正采纳了其次一个合理的步骤,它反映了人们是如何编写应用程序并把其整合到语言中的


ROBERT HESS: 那么,最初的一些目标是什么?仅出自内心的看法,当您第一次着手这个项目时,您要解决的问题和要确定的这种新语言的方向是什么?


ANDERS HEJLSBERG: 嗯,我认为正如您所说,面向组件只是一方面。我想另一个关键的因素就是简单化。使编写应用程序更加简单化,不让程序员做一些琐碎的事,机器可以代你做。大量的简化取决于.NET runtime本身,但也取决于语言。基本上,最终我们所做的,就是让你把更多的时间、更多的精力放在算法上,而让系统去做一些琐碎的事。我认为,许多其它非常关键的事情比较现实,我总不能吩咐人们把他们现有的代码通通扔掉吧。我们必须找到权衡的方法,并不仅仅是你的编程技巧,而且还包括你以前编写的、早已存在的代码。因此在C#里,以权衡你技巧的名义,我们努力坚持在与C++的基础语法最接近、最真实的地方。所以用了C#,C++程序员会立即觉得很眼熟、很亲切。


ROBERT HESS: 您的所做的一切应当以C语言为基础,是否就是当初的思路之一?或者您是否原来就认为,让我们应与过去彻底决裂,再开始设计一种全新的语言?

 

ANDERS HEJLSBERG: 嗯,我想这种语言应该以一种崭新的面貌出现,可是我们明白,必须让C和C++程序员熟悉这种语言。当然那就意味着在某种程度上,我们必须把语句结构从弯曲的大括号变换成其它一些东西。我们已经打下了一些基础,但仍然存在着其它某些关键的规则,譬如允许写健壮的软件,这就意味着象垃圾回收(garbage collection)、异常处理、类型安全这样的功能,根本地改变了设计该语言的思路,非常难于上手,以后也不容易扩展。我的意思是说,在C++中,C++语言拥有的一个强大功能之一,但有时也同样是难点之一,事实上您知道,就是没有类型安全。如果你了解清楚自己要做什么,就会从中获取巨大的力量,否则,只是自找苦吃。在C++中,获得一个虚悬指针(dangling pointer)易如反掌。同样,覆盖掉一个数组的尾部,或者拥有一个未初始化的变量等等,也是极其容易事情。而我们需要解决这些难题。我认为,我们不能只从 C++着手并扩展它。而真的必须以退为进,以C++的灵魂设计出新的方案,而这些我们已经差不多完成了。

 

ROBERT HESS: 那么其它语言呢?您注意到这些语言在做了什么吗?是否它们就是Pascal 或 Modular 2 或 FORTH,您从中得到什么借鉴?


 ANDERS HEJLSBERG: 绝对!噢,我们考虑到,嗯,我的意思是说,我本人出身于深厚的Pascal背景,所以,自然要考虑到Pascal, Modula, Oberon, 要考虑到Smalltalk,Java,C++以及所有的语言。要知道,今天它们能生存下来并得到了应用,且或多或少地传播开了。

 

ROBERT HESS: 您觉得这些语言的哪些功能比C和C++表现得更出色?而您就可在新的语言中引进这些功能?

 

ANDERS HEJLSBERG: 嗯,我认为有一件事可以说明,我总是喜欢Smalltalk,就是因为在该语言中,任何东西都是对象。这使程序得到了大大的简化,因为无论拥有什么样的数据片,都可以把它当作一个对象从A点搬到B点。一般来说,任何东西都可以对其进行操作。可以把它当作对象类型,放在容器中。在Smalltalk实际的实现过程中,如果这样做的话,程序性能的额外负担(overhead)就会大大加重。例如,在Smalltalk中,当运算float数字时,每生成一个新的数字,如当1.0和2.0加到一起时,就要分配一个含有3.0值的新对象。而这样做,代价当然是非常昂贵的。如今在C#中,我们已经进行了一些革新工作,使你获得了同一样的利益,而却没有额外负担。只要把float当成float,或者是double就把它当成double使用,就没有什么代价。但如果把它们视为对象(也仅当这样做时),就得给它们分配堆(heap)。因此,就形成了样相当完美的统一体,既能给您大量的好处,而又没有程序性能的额外负担。


ROBERT HESS:C#生成的最终结果的某些结构到底如何?您得到了一个C#程序的文本文件并且编译它,那么编译器本身存在着些什么问题,如何设计这些方案以便在使用时更具效率,而这种优化其它语言有可能已经做过,而甚至最终还要生成二进可执行文件吗?


ANDERS HEJLSBERG:嗯,我们已经做了一些涉及到如何编码的工作。假如你是一个C++程序员,当然熟悉怎么做,在C++中声明和实现是分开的。所以所有声明都放在H文件里,接着在另一些模块中把它包含进去(# include),然后再在CPP文件中写出实现程序。在C#中,把它们都写在同一个地方。这样,可在那里写出声明接着又立即写出实现代码。


ROBERT HESS:假如您必须在另外一些文件中采用在main文件中声明的某些值,那又怎么办?

 

ANDERS HEJLSBERG:那么会出现什么情况呢?当编译时,实际生成的代码或重新生成的输出文件都含有两种代码:元数据(metadata),符号表(symbol tables)或其它相关的符号信息(symbolic information),而不是仅生成只含有可执行代码的X86机器码。在某种意义上,这些代码变成了自我描述。所以当想从一个代码片使用另一代码片时,只要引用它们便可,而这些代码的自我描述足以让人们知道在那里有什么类,类拥有什么成员,可以调用什么方法,属性是什么以及类型名是什么,等等。


ROBERT HESS:那么,是不是象您所指的.OBJ文件或.EXE文件,抑或……


ANDERS HEJLSBERG:嗯,您说的很对,我们在.NET中使用的格式就是PE格式,故可以指向另外的EXE或DLL。我们现在调用这些汇编程序,并基本上用这种语言大量地描述这些高级DLL,它们不仅含有代码,也含有这样的信息:说明什么在代码中,以及这些代码真正地引用了其它什么样的汇编程序。


ROBERT HESS:您所说的代码是指二进制代码或可执行代码。


ANDERS HEJLSBERG:嗯,实际上,我们并不直接生成可执行的X86机器码,而是生成MSIL,也就是中间语言,它由.NET定义,并由JIT(实时编译器)编译。

 

ROBERT HESS: Ok,这样看来,您拥有了一个可执行文件,其本身与中间语言以及元数据相关联,而如果我想要在其中一个应用程序里使用它,我只要指向它并说道,嘿,我要借用这些类,借用这些对象,并在这样的程序中使用它。这使我想起了许多人曾经提过的一个问题,涉及到中间语言存在着潜在的漏洞,有些人可能会攫取这种文件并对其进行反编译,然后再恢复成当初的源代码。因此,并非所有的智能特性(intellectual property)都有利于开发者。这方面还有什么问题?


ANDERS HEJLSBERG:嗯,首先,您现在实际上可以用DLL进行处理。这可能有点难,但您可以采用包含X86码的一个DLL,然后至少把它反编译成汇编程序。您可做同样的……


ROBERT HESS:在我的Apple II上,我一直都是这样做的。

 

ANDERS HEJLSBERG: 确实如此,我对此感到惭愧。但是运用.NET DLL并把其反编译成MSIL,也可以做相同的工作。它们并不能直接地被反编译成C#,尽管您也有可能蒙对,但太难了。不同的地方在于,有着非常多的符号信息(symbolic information)关联到由C#生成的代码,以及MSIL,对不起,是.NET汇编程序。例如,你可以从代码中得知,什么类在这里,它们的成员是什么,等等。这是一个需要解决的棘手问题,因为让代码自我描述(self describing)的好处多多,但事实上代码对自己进行的描述,也同样使反编译工具所处理的代码变得似乎容易理解了。如果我们认识到这个问题,基本上我们要做的,就是创建一个称作搅拌机(obfuscator)的东西,它会加入并搞乱代码,使代码变得几乎难于看懂,可仍然保留着原来相同的公共接口。


ROBERT HESS:是的,因为您遇到这样的难题:当采用、编写这些编译器程序时,就想让编译器理解代码(或类似的过程等),但却不想让人们在同一层次上看懂它们。


ANDERS HEJLSBERG:确实如此,确实如此。我确实想指出,对于一个小程序,实际上可以对其进行反编译,给出足够的时间和资源,你甚至可理解它在干什么。然而对于真实世界中的一个应用程序,这却是一项艰巨的任务。在现实中你最好运行这个应用程序,理解它在干什么,然后写出它的一个copy。你会很快达到这个水平的。


ROBERT HESS:或许写出一个更牛的程序,因为您是一个更牛的程序员,对吗?为了断定我们的观众是否想要着手实现下一个C#项目,他们需要去理解有关C#的一些什么问题?


ANDERS HEJLSBERG:嗯,我想首先你必须考虑到自己的基础。如果你有现成的代码体,让我们假定它是用C++写成的吧,也许把这些代码移植到.NET framework的最佳途径就是使用Managed C++,该C++编译器随.NET一起发布。然而,如果你着眼于编写新的代码,也就是写新模块、更大的模块,加入到一个应用程序或一个完全了解的应用程序中,而且你精通C++,那么我建议考虑C#。


ROBERT HESS:因此,我们没有必要说,每个人都必须用C#重写他们的应用程序。我们在说,人们必须了解他们目前所从事的工程的类型,是否是一个现成的项目、陈旧代码,并且有时还要用C#写一些组件,莫非您可以交替地使用C#和C++?


ANDERS HEJLSBERG:噢,绝对。首先,如果你拥有现成的代码,假定这些代码是由Windows平台所支持的任何一种语言写成的,则把它们编译成COM组件或DLL,就会获得与这些代码很强的交互操作能力(interoperability)。如果要写专门用于.NET framework的代码,用于.NET framework的新代码,当然要用.NET framework所支持的任何语言写。我们计划在Visual Studio .NET中发布四种语言:C#、 C++、 Visual Basic 和 Jscript。可是为了与产业界和学术界合作,我认为,最新的统计可能不是很准确,但我想总共大约17种不同的语言现在都瞄向了这一个平台,其范围一直从APL到Cobol。


ROBERT HESS:那么象Fortran又怎么样呢?


ANDERS HEJLSBERG:我相信相关的工作正在进行中,可我不能准确地知道到底谁正在设计Fortran编译器。但关键的是,实际上我们已经做了多次示范了,你可以在C#中写一个基类,并在C++中继承它,然后再用VB程序创建它的一个实体。在不同的语言之间进行的互用操作是无缝的。我想正是这些性能,使.NET framework甩开产业界中其它竞争对手的产品。(有兴趣的读者可以到http://www.lahey.com/net_down.htm去下载
Lahey/Fujitsu Fortran for .NET Technology Preview 1,译注)


ROBERT HESS:而且它采用并允许在基础层次上进行多语言的互用操作。


ANDERS HEJLSBERG:是的,很准确。不过是位于一个很高的层次。您可能会争辩:现在的语言可以进行互用操作,但只能位于很低的层次,例如,DLL的入口点、具有指针在其中的结构,等等。而我们正在谈论到更高的语义层次,是位于面向对象的层次,具有类和接口等等。


ROBERT HESS:C#被认为是微软的私有语言吗?


ANDERS HEJLSBERG:其实并非如此。我们与产业伙伴特别是HP和Intel合作,今年年初,我们向一个叫做ECMA(欧洲计算机制造商协会)的欧洲标准化组织提交了建议,以便标准化C#和CLI。 CLI代表通用语言基层体系(Common Language Infrastructure)。


ROBERT HESS:而这是不是有点类似于C Runtime 和VB Runtime?

 

ANDERS HEJLSBERG:嗯,实际上CLI是.NET framework的一个大的子集。在某种意义上,它是.NET可以移植到其它平台的那部分。这意味着,例如,它不包括任何Windows专门的UI库,因为其它平台对此并没有多大的兴趣。


ROBERT HESS:就象内存管理,而且……

 

ANDERS HEJLSBERG:嗯,绝对如此,内存管理,大部份的类库被包含在CLI中。我们于9月份向ECMA提交了这个建议,并在一次ECMA会议上得到了采用,制订这两个标准的工作正在进行中。其中一个是C#标准,而另一个是CLI标准。


ROBERT HESS:那么,C#具有ECMA标准又意味着什么?


ANDERS HEJLSBERG:嗯,这意味着其它产业伙伴们可以也最有可能在不同的平台上实现该语言。


ROBERT HESS:如果我是类似波音这样的公司,且拥有一些老式的PDP 11/70计算机,我想让C#在其上面运行,可能会考虑利用ECMA标准给这些老掉牙的家伙设计编译器,如果没有什么人已经做了类似工作的话。

 

ANDERS HEJLSBERG:绝对正确。现在这两个标准实际上已相继被提交,而目前C#本身并没有规定一个runtime库,而是依赖于.NET framework,或者,当我们正在谈论到标准提议时,C#依赖于通用语言基层体系为其提供的runtime基层体系和类库。我们目前正在与标准化组织以及我们的产业伙伴们共同研究,以确定最低的门槛。很明显,CLI将被分成几个层次,事实上我们向ECMA提交的方案被分为几个层次,这些层次开始于很低的核心层,而你真正地拥有了这些核心数据类型,一些象数组那样十分简单的东西,以及在那里的所有原子变量(atoms),但是分子(molecules)就不必要了。它们被构建在更高层的栈上,因此对于嵌入设备也是这样,实际上可以把其应用于一个非常轻量级的环境(lightweight environment),而这种轻量级环境可以移植到不同的平台。

 

ROBERT HESS:因而我可以让C#的一个版本在我的手表中或某些类似的设备中运行。

 

ANDERS HEJLSBERG:是的,理论上是这样,或在您的冰箱中,或任何需要的地方。

ROBERT HESS:在某种程度上,这就是.NET framework的全部目标,也就是允许编程的基层体系存在于多种不同类型的设备中,通过网络或蓝牙等类似连接,一个设备就可以和另一个设备通讯,并且借用服务,提供相互支持,

 

ANDERS HEJLSBERG:对,那是其中的一部分。我想,现在我们应当牢记于心,尽管您谈论到了分布式应用程序或者设备之间的相互通讯,但安置在.NET framework甚至是在CLI中的基层体系,实际上并不要求在网络的两端都有.NET存在。而且,我们所推荐的体系结构确实具有引导作用,何时利用类库来设计程序完全基于XML和SOAP这样的产业标准,并且也可以在Linux box(比方说Java和Apache web server)中实现它,然后利用其它工具在另一端开发相应的程序,如果你乐意的话。

 

ROBERT HESS:因此在我的C#应用程序里,假如我正在编写它与一个外部服务连接,就可以视其为标准的C#调用,而运行于不同的机器上的一个外部服务可能是Amazon.com,或者类似于其它一些既不运行Windows也不运行C#的系统……

ANDERS HEJLSBERG:这正是所有web服务的梦想……

ROBERT HESS:而所有要做的事情就只有实现SOAP了。

 

ANDERS HEJLSBERG:是的,嗯,基本上我们所要做的是利用现有的internet的基层体系,意思是,传输协议是http,有效承载(payload)是以XML格式封装的SOAP(SOAP formatted XML),并且实际上在网络的另一端可以是任何东西。当从C#中访问XML和SOAP的调用时,我们事实上有能力使它们看起来象具有方法的对象,但是我们给你提供了所有的基层体系,通过在.NET framework中所具有的所有连续的基层体系,你便可以把方法调用转换进XML SOAP包中,这样的包可以穿越网络并回传然后再解包。

ROBERT HESS:好了,您说您从事C#的工作至今已经几年了,而XML的生命期也恰好与此相同。这就意味着当它们开始时,彼此之间是毫无了解的。

ANDERS HEJLSBERG:嗯,XML的历史可能要长一点。SOAP却相当新,它与C#还有.NET framework是齐头并进的,并且我们也非常积极地从W3C引进这些标准化主体,我们一直在跟踪它的发展,并把这些技术追加到最新的标准中。

ROBERT HESS:那么SOAP和XML之间在这一层次上的相互连接性(interconnectivity)是否当初就是C#一个方面的内容,或者是随着该语言的发展而发展的?

ANDERS HEJLSBERG:嗯,我认为这里确实存在着一些距离。大部分需要处理XML和SOAP的基层体系是由.NET framework而不是C#提供的。C#语言建立在.NET framework的顶层,并使您具有访问这些东西的权力,例如,通过我们在C#中称之为属性(attribute)的东西,在代码中就可以直接表达什么东西正由这个类的实体映射(mapping)成为穿越internet的XML格式。所以我可以说,例如对于成员(field),我想使这个成员变成具有同样名字的XML元素,让这个类名变成XML里的标签(tag)名,等等。而且属性可以直接地集成到代码里,这就是使XML 和 C#变得更易于使用的措施之一。

ROBERT HESS:那么它们真的很合适在一起?

ANDERS HEJLSBERG: 是的,确实如此。

ROBERT HESS:当考虑一个应用程序的设计时,为了更好地运用C#,我想要有条有理地建立应用程序,有没有什么不同的办法?或者还是与正常地开发一个C应用程序具有相同的思路?

 

ANDERS HEJLSBERG:嗯,我认为关其中的一个关键原则就是,您是以一种很深的面向对象的方式进行编程的,甚至当您在使用C#时,是以一种面向组件的方式进行的。所以会趋向于认为您的应用程序设计有点区别。好,如果您正在使用C++,就可能会想到写对象等等。当您用C#写程序时,例如您可能会想到,哎呀,我正在写一个组件吗?嗯,这个组件必须能加入到Visual Studios的工具栏,以便我可以把它拖到表单,或拖到一个商业对象,或拖到一个网页,然后它是不是会被属性检查器(property inspector)显示出来,哎呀,那么在那里我到底应该拥有什么属性,我怎么控制下拉单里的东西,我能不能拥有那样的编辑器?现在,我们把基层体系的所有东西都呈现给您,它使您认识到您的设计不同于C++传统的设计。

 

ROBERT HESS:因此很多时候,您仍然在编写应用程序,通过装点修饰应用程序,您正好有更多的性能要展示。

ANDERS HEJLSBERG:是的,您可以这么说。

ROBERT HESS: 有关更多此类面向服务的完整概念是什么呢?因此我正在编写一个几乎无GUI的应用程序并且运行在一台服务器上,并计划用一个web客户程序对其进行攻击。客户程序请求首先到达服务器并要求回应以便跟踪包(package)等类似的东西。这是否从根本上改变了思路,或者仍然是同样的服务方向?

ANDERS HEJLSBERG:嗯,我认为在某种意义上,它让您多一点地考虑应用程序中的抽象。您应更加注意认识到,我是怎样把应用程序安置到商业逻辑层(business logic tier)和表示层(presentation tier),是怎样把API放到商业逻辑层,以便它既可以被表示逻辑用来表示HTML或基于UI的客户,甚至也为遍布网上的Web服务指明入口点(entry points)。因此,您应注意一点,再也不能编写那些铁板一块的程序了。

 

ROBERT HESS:您是否想象这本身有助于人们利用他人的组件比过去更容易?我记得在波音公司工作时,我们老是遇到有关代码重用这个关键问题。我们必须确保所编写的任何应用程序、任何代码都是专为代码重用而设计的,虽然这听起来在理论上确实是一个伟大的主意,但在实践中,却由于从来没有得到好好的利用而寿终正寝了,因为重用别人的代码简直是难上加难。您认为这样居然能使代码重用更容易吗?

 

ANDERS HEJLSBERG:我认为会的,这里起关键作用的实际上就是.NET framework。事实我们已经定义了这样一个底层(substrate),在其之上可以生成组件。而说到许多关于如何把它们装入类中,如何使它们成为组件,我们给您明确的指导,而事实上整个framework都当作其中一个范例,但关键是组件一律要能被各种各样的语言所访问,因此这里您已经谈论过这个问题,例如,如果某些家伙在用Cobol编写一些语言或库而您却想从C++中利用它们,您知道,这会特别困难。实际上我们提供给您一个substrate,让您进行上述交互性操作。所以您大有希望使组件交互操作。因为事实上令人感到困惑的是,组件是以不同的设计观点或在不同的抽象层上编写而成的,这正是使人们糊涂之处。他们并不习惯于这种风格的API,因此迷失在基层体系之中,只见树木不见森林,您应该明白我的意思。因此通过说明许多关于如何写组件,并且提供了用于写组件的永久有效的API和基层体系,您就极其有希望获得更好的重用性

ROBERT HESS:嗯,我认为解释恰到好处。为了能抓住C#语言体系的重点,您认为最后还有什么重要的概念要让观众去理解?

 

ANDERS HEJLSBERG:我想最好的方法就是您应亲自摆弄它。所以我会催促人们从我的站点下载,而我也相信您会给他们地址的。下载它,摆弄摆弄,写出一些例子,参加我们的用户组或新闻组,和其他用过它的人交谈,看看他们有什么经验。我想你会过得很舒心的。

ROBERT HESS:我肯定会在本记录稿的后面建立一个链接,以让他们下载当前版本的C# runtime以及我们在PDC上公开的.NET材料,我猜我们会有另一个版本的……

ANDERS HEJLSBERG:我们的beta 1.0版要发布了……

ROBERT HESS: Beta 1.0版很快就要发布了,因此您提到的新闻组里也要建立一个连接到beta 1.0的链接。因此您应保证寄给我的email里要含有这些新闻组,以便我能建立。

ANDERS HEJLSBERG: 好的。

ROBERT HESS:谢谢Anders,感谢您的谈话,而且我希望观众感谢这位真正帮助过设计C#语言的专家,感谢他有关开发应用程序的心得。

    在短暂的休息之后,我们会继续与一位程序员交谈,至今他用C#开发应用程序已经有些时日了,我们会了解到他对这种语言的想法,以及任何有助于我们用C#开发自己应用程序的线索。所以请不要走开哦。


作者Blog:http://blog.csdn.net/rainbow/

 下面是卡卡的原文……

 

本来没想回家的,昨晚也就是说说气话
半夜却实在是心烦,胖子的电脑比胖子还不听话,没情绪再弄
3点半左右出去跑步,天亮跑到北京西站了,觉得要不买张票,还真对不起这双腿

告别几天先。如果有什么事需要我,随时call我知道我脾气不如胖子好。胖子也知道,老大可能不太知道。但我更清楚的是,脾气好是不能当饭吃的。我更清楚的是,卡卡不需要一个脾气好的人做哥们,卡卡需要的是能够解决问题的。朋友是可以头天晚上出手大打一架,而第二天醒来觉得自己最信赖的人都仍然是对方。一个团队不可能没有摩擦。一群人在一起只会吃吃喝喝说说笑笑任何时候都你好我好大家好那只能叫猪朋狗友。

前几天老向我抱怨“人心散了”的可不是我。

都他妈上班的人了,都他妈月薪三千多的人了,做事情还这么拖拖沓沓,但就算要拖半个小时,先给老子找出拖半个小时的理由再敷衍我。理由都不想去找一个的自己识相点。

妈的,还没要你给我解决啥问题,只是要你别碍手碍脚就行。不要搞得老子哪天非得到处跑去一台一台机器的把魔兽世界强行删掉。

如果你是不懂该怎么办,let me tell you:你应该主动承担这个任务,我给你传过来的文件你马上配置好,有啥问题问我,我去查资料想办法,或者问别人,然后我用键盘,你用鼠标,一步一步来研究到底怎么解决。

从以前给你讲概率试题,到后来帮你看代码,老子什么时候敷衍过了?老子就是什么都懂的大牛么?老子甚至连熟练程序员都算不上。但我即使不说也该明白,我只是想表示一个意思,就是不管有什么困难,不管我或者其他人会还是不会,我们都不要让谁一个人一筹莫展的坐在那发愁,有什么问题我们可以一起想办法解决。因为我们是团队。partnership means coordination and cooperation,这他妈是嘴巴上说说就可以的?

合同不是最重要的。最重要的是人。我希望一年之后咱们的每个人都能和现在大不一样。我相信肯定会,with our cooperation and persistence。但是你丫给我点信心好不好。

不是都在抱怨人心散了么,不是都在抱怨没有点挫折来刺激么,现在挫折倒是没有,刺激来了。看你们怎么应付。

内部问题,如何协调老大说了算。但要我道歉的话,我得先回家酝酿几天。

情绪不太好。困了,休息了。

 老大的回复

 
唔。。。
本来想等大家稍微冷静一点再处理这件事情,不过我一直以为你会相对冷静一些,所以昨天才先跟你说。

呵呵,没想到你的脾气这么火爆,开始的时候还以为你也只是说说呢。
其实我以前也是急脾气,也会向你这样冲动的做一些事情,可是我慢慢的发现,再火爆的脾气,也会在成长中慢慢消磨的,因为这只能制造问题,而不能解决问题。而解决问题的途径,只能靠理智。

都是搞理工科的人,所以凡是都喜欢追究一个孰是孰非。不过凡事都是双方面的,没有绝对的正确和错误。所以卡卡你也是有错的地方的,问题不大,有点冲动而已。我昨天说让你道歉也是就这个事情来说的,毕竟影响的不是只有自己人。

另外,最近这一个月我情绪不佳,所以没有处理好团队内部的沟通和气氛,我的问题是最多的,向大家道歉。


卡卡是个好同志,一直以来都是最认真,最努力的人,也是主动性最高的人,对于“团队”的含义的理解,也是所有人里面理解的最深刻的,而这些恐怕是现在所有人都欠缺的。

以前经常在一起讨论所谓的团队,但是是否每个人都能理解这两个字的含义呢?一个团队,第一就是要有共同的愿景和目标,第二是信任,第三是协调和沟通,第四才是具体的事情。如果非要有具体的事情才能够让每个人进入状态,那这算不上什么团队,顶多算一个项目组。

每个人都自己问一问,是否每个人的目标都是一致的?还是说,到现在根本还没有目标?是否信任你身边的人?是否愿意为了大家共同的目标牺牲自己?如果不是,趁早滚蛋,别给大家添乱!

我们做事情一定要有信心,但是这个信心来自于什么地方?来自于共同的目标,来自于对同伴的信任。什么是信任?就是你觉得他有问题的时候,直接告诉他,而不是自己在那郁闷。

兄弟们,人是要在感情的波折中成长起来的,个人也好,团队也好,大家都很珍惜这段感情,那么我们如何能让它更上一层楼,做真正的交心朋友,彼此坦诚相待呢?

我开始还不知道是怎么一回事。

后来在QQ上碰到老大才知道,是昨天本来要把服务器配置到小胖的机器上的,但他在玩魔兽,12点卡卡过去的时候,他一直在拖,说12点半再弄,到了12点半卡卡就不停的来催,后来就把他们屋的电闸拉了。

这也就是老大说的“毕竟影响到的不是只有自己人”……

然后今天早上卡卡买火车票回家了。上午给他短信时他还说在图书馆,本来想去找找他来着……结果后来手机关机了。

卡卡走了……现在应该已经在火车上

之前知道他是个极有个性的人,但没想到这么有个性,一下子脾气火爆到这种程度。

但是我也知道这种事情也是非一日之寒的,就像我跟老大说的一样,我们这个团队是建立在朋友的基础上的,大家一起干活,首先大家也是想学点东西,二来一群朋友一起做事也的确感觉很好。然而,内部很多的问题,一直就存在。

我们是朋友,所以有时候有些事情,合作中难免的摩擦与矛盾,大家都不摊开在台面上讲,因为大家珍视彼此的感情,怕一讲会影响团结。而另一方面,也说明大家的感情还没有好到坦城和交心的地步,可以互相提出对方的不是,而不是担心一觉醒来,朋友远去。这样,大家就只有憋在心里心烦气躁了。合作如斯,并不是我想的样子。

有什么就讲什么,坦城相交,今天把你骂一顿,第二天还能心无荠蒂的握手言和,这大概也算是朋友的最高层次吧。

我的第一篇BLOG是写在CSDN上的,那儿是个技术型BLOG,而我第一篇就灌水,显得很不正式。

今天要去那个BLOG时,服务器却发现了错误,无法登陆,但来是神要我在另外一个地方,找一个草稿本,来记下我的所有。