[理论]世界第一张互联网虚拟大脑结构图

mikel阅读(876)

前 言:经过近一年的努力,我们详细探讨了互联网进化规律,并最终绘制了世界第一张互联网虚拟大脑结构图,我们相信这一推论将对预测互联网下一步的发展动向以 及研究人类大脑的组织结构都会起到重要作用。从威客理论到互联网进化论再到互联网虚拟大脑理论,它们将成为真正属于中国的互联网理论。
 
作者:刘锋,彭庚,刘颖  原创
转载或引用请标明作者
 
   在互联网繁杂混乱的现象背后,有两个问题始终摆在人们的面前,第一,互联网的发展有没有规律可循?第二,互联网的最终结局是什么?从2005 年开始,网络经济领域陆续涌现出的web2.0、长尾理论、维基经济学、海星组织等概念和理论,这从不同方面探讨和描述了互联网的一些发展规律。总体上 看,它们是对网络经济的表象和特征的描述,并不能有效地回答这两个问题:互联网发展的规律是什么?互联网发展的最终结果是什么?本文将围绕这两个核心问题 进行展开阐述
一,   互联网发展的规律是什么?
         从人类的发展史看,人类的进步就是器官不断延长和连接的历史。棍棒延伸了双臂,石头延伸了拳头,汽车延伸了双腿,望远镜延伸了眼睛,电话线延伸了耳朵,公 路、铁路使人类四肢最终实现联网。从1837年英国人库克获得了电报机专利到20世纪50年代数据通信的产生,从互联网的诞生到博客,威客,搜索引擎的出 现。历史表明人类大脑的延伸和联结一刻也没有停止。
       为了实现人类大脑的充分联网,科技的进步不断延长人的大脑与互联网接驳的时间。互联网早期,人们使用台式机登陆互联网,随后人们可以携带笔记本随时寻找联网接口,无线通信技术的广泛应用和手机的电脑化进程使人们可以随时随地与互联网进行接驳。
         互联网进化的终极目标是使人类的大脑充分联网,但是目前互联网不可能通过物理手段直接将线路和信号接驳到人的大脑中。互联网进化到这一阶段产生的解决办法 是用大脑映射(brain mapping)作为缓冲[3],即将人脑的功能映射到互联网中,图一就反映出这种映射关系。
            
图一 人脑功能在互联网中的映射
                如果我们将电子邮件的通讯功能和博客中的用户访问记录功能也描绘出来,可得到图二左图的形状,而这一图形与人类大脑神经元具有很强的相似性。因此我们将大脑映射定义为互联网虚拟神经元[4][5],
 
               
图二 互联网虚拟神经元与人类大脑神经元
 
           如果这些互联网虚拟神经元相互连接在一起,将形成互联网虚拟神经网状结构,如图三所示。这一结构目前在互联网中已经出现,如www.yahoo.com.cn的站长天下系统,www.witkey.com的 威客地图系统,一方面这些系统给用户提供个人空间,具备撰写博客,发布个人智力作品,发送电子邮件的功能。另一方面网站用搜索引擎的方式连接这些个人空 间。  通过对互联网虚拟神经元的深入研究。我们提出互联网进化的最终结果是成为一个与人类大脑结构非常类似的组织结构,我们称其为互联网虚拟大脑。
图三 互联网虚拟神经网状结构
 
二,互联网发展的最终结果是什么?
     我们提到互联网发展最终结果是形成一个与人类大脑结构非常类似的组织结构。为了证明这一点,我们将从互联网虚拟运动神经系统,互联网虚拟视觉神经系统,互联网虚拟躯体感觉神经系统,互联网虚拟听觉神经系统,互联网虚拟记忆系统等五个方面进行介绍。
 
                                                     图四 互联网虚拟大脑
            人体的躯体感觉又包括触觉,痛觉,温度决,体位觉,运动觉,和震动觉。躯体感觉是从感受器开始的,感受器指的的是分布 在机体上的用来接收机体外刺激的专门机构。下面我们看一下互联网虚拟躯体感觉系统的发展情况,目前已有些机构在河流,土地,空气中安放传感器,通过网络进 行汇总,实时监控温度,湿度,风速,气压等等。这是互联网虚拟躯体感觉系统的萌芽,随着互联网的发展,我们认为这些传感器将会安放在城市,海洋,太空,沙 漠,森林等世界每一个角落,他们将源源不断的向互联网虚拟大脑传送地球各个方面的感觉信息,供互联网虚拟大脑神经元进行处理,参见图四。
            互联网虚拟视觉系统和虚拟听觉系统都起源于安放在家庭、工厂、旅游区、交通路口的监视器和视频录制系统,它们将收集到时视频信号,音频信号通过互联网进行 汇聚。这一应用已经相当普及和发达,这些视频音频录制系统将发展为互联网虚拟视觉系统和虚拟听觉系统,收集来自城市、海洋、太空、沙漠、森林等世界每一个 角落的图像和声波(包括无线电波)。这些信息也会传送给互联网虚拟大脑供互联网虚拟大脑神经元进行处理,参见图四。
         互联网虚拟运动系统起源于机械设备的远程控制,目前人们已经可以通过局域网和互联网远程控制打印机、小家电、手术刀。随着互联网的发展这些远程设备将更加 灵敏和强大,互联网用户将通过各自的互联网虚拟大脑神经元经过互联网的虚拟神经系统远程操控挖掘机、潜水器、收割机、家用电器、工厂生产设备和仪器,参见 图四。
            
    从神经生物学角度看,大脑皮层是种系发生学上最新的部分,并管理一系列庞大的识别和认知过程,该过程与情感行为、运动功能、躯体感觉的感知、整合以及记忆功能有关[7]。神经生物学按功能将人类大脑皮层分为如下功能区,如图五:
 
                                  图五 人类大脑皮层的功能分区
         通过前面的介绍,我们注意到互联网虚拟神经元将处理虚拟感觉系统、虚拟视觉系统、虚拟听觉系统、虚拟运动系统的信息。根据处理信息的不同领域,这些虚拟神 经元可以划分和聚合成不同的区域。除此之外,互联网用户也会因为不同的兴趣聚合在一起,如新闻社区、学习社区、游戏社区的等等。这些区域同自然界人类大脑 皮层的功能性划分是一至的。目前互联网用户以博客为单位正在进行以兴趣和爱好进行聚合的社区化演变。人们在这些社区内认识朋友,交换个人信息,对共同感兴 趣的信息进行讨论。以互联网虚拟大脑神经元为单位的互联网区域就形成了互联网虚拟大脑皮层。随着互联网虚拟大脑神经元(互联网用户)的增多和互联网社区的 不断涌现,互联网虚拟大脑皮层将不断发育和增厚,如图六。

 
                                 图六 互联网虚拟大脑皮层
     有证据表明,人类记忆的巩固需要海马到大脑皮层的输入重复达一到三年之久[6],大脑皮层的记忆编码在三年后变得相当可靠而无须来自海马输入的进一步强化(海马是人类大脑结构中的一个组成部分)。
     当互联网虚拟视觉系统,互联网虚拟听觉系统和虚拟躯体感觉系统出现并逐渐完善后,他们收集的数据将首先存放在互联网信息处理中心服务器中进行筛选和整理。 这些服务器将担当互联网虚拟大脑的海马区功能。互联网用户通过各自的互联网虚拟大脑神经元从这个中央信息处理中心获得需要的信息,并转移到自己的虚拟神经 元以及所在的互联网社区和兴趣小组里,这个过程就实现了记忆信息从互联网虚拟海马区向互联网虚拟大脑皮层的扩散和转移,参见图四。
 
3,结论
           互联网的起源和进化的最终目标是为了实现人类大脑的充分联网,这一目标产生了强大的拉动力,不断引导互联网向前发展,这就是互联网发展的规律。互联网进化 的最终结果是,第一,实现人类大脑的充分联网。第二,形成一个与人类大脑高度相似的互联网虚拟大脑。
 
4。互联网目前仍处在发展的初级阶段
从互联网的进化论中我们可以推断出互联网最终将进化成一个非常类似于人类大脑的组织,那么当前互联网处在一个什么样的发展阶段。纵观目前世界互 联网发展状况。我们注意到互联网虚拟神经元还仅仅进化到可共享知识区(博客)繁荣的阶段,可交易知识区,问题区,即时通讯软件还没有大范围的与博客进行结 合。因此互联网虚拟神经元还处在进化的初级阶段。
互联网的虚拟视觉系统和听觉系统随着互联网视频和音频的兴起已经开始发育,人们已经可以把拍摄录制现实世界的景象和声音上传到互联网中,监控器直接把图像和声应传到互联网中供所有互联网用户查看的应用还没有普及,因此互联网的虚拟视觉系统和听觉系统也处在进化的初级阶段。
安放在世界各地的传感器把来自现实世界的温度,湿度,风力等参数传入到互联网中的应用还没有出现,这种现象目前还主要存在于国家相关部门和科技机构的局域网里。因此互联网的虚拟躯体感觉系统也处在萌芽阶段。
目前人们可以通过互联网远程操控打印机,计算机,医疗设备,但大规模的操控工作设备的情况还没有出现,因此互联网的虚拟运动神经系统也没有发育成熟。
目前分散在世界各地的互联网服务器接受和储存大量的数据,应该说互联网虚拟记忆神经系统已经存在,但这个系统十分分散,前文提到互联网虚拟海马区和互联网虚拟大脑皮层还十分分散和不成熟,因此互联网的虚拟记忆神经系统处在进化的萌芽阶段。
总体上看目前互联网还处在进化的初级阶段,离完整的互联网虚拟大脑结构还有相当远的距离。
 
5 ,互联网进化论进一步的研究方向
 
5. 1研究互联网进化论还需要解决的问题
1. 推动互联网进化的背后机理是什么?
2. 互联网进化过程中,哪些技术是过渡性产品,通过互联网进化规律,可以预见到哪些还未出现的技术和产品?
3. 通过对目前人类大脑研究成果的了解,我们可以预见到互联网还将会发生哪些变化?
 
5. 2研究互联网虚拟大脑对医学研究人类大脑的启示
1.  人类大脑神经元中是否同样具备共享信息区,问题区,隐私区的分区功能?
2. 人类大脑的是否拥有和互联网中一样的地址编码系统。即每个大脑神经元和功能区是否具有唯一的编码地址。
3. 人类大脑的是否拥有和互联网中一样的信息索引系统,一个类似于google或百度一样的信息搜索引擎?
4. 通过对互联网虚拟大脑组织结构的研究,我们还将发现人类大脑的哪些未知区域。
 
参考文献:
 
1.Dave Kristula[美],The history of the Internet,1997
2.Ben greenstein,Adam greenstein[英 ]原著,师蔚王芳茹主译, 神经科学彩色图谱,世界图书出版公司,2003,p254,p32
3. John.C,Eccles[澳大利亚]著,潘泓译, 脑的进化, 上海世纪出版集团,2007,p134,p194
4.徐科主编, 神经生物学纲要,科学出版社 ,2000,p16, p17,p209,p270
5..尹文刚著,神经心理学,科学出版社,2007,P92-
6.钱学森、于景元,戴汝为,综合集成的重要性,1990
7.顾基发,综合集成的重要性,2007
8.王众托著, 知识系统工程, 北京:科学出版社,2004
9.刘锋,张玲玲,顾基发,The Application of Knowledge Management in the Internet— Witkey Mode in China,International Journal of Knowledge and Systems Sciences,2008
10.刘锋,威客地图(witmap)的发明与定义,新浪科技频道,2007
11.刘锋,互联网的分裂与统一,互联网周刊,2008,2
12, 刘锋,互联网进化断代史,互联网周刊,2008,3

[教程]ASP.net中Master页面的子页面的标题设置

mikel阅读(899)

母版页共有三个文件 Master,Master.cs,Master.designer.cs
在Master中打开html源代码部分将其中的Untitled Page改成你想要的母版名称
另外在你引用的页面里应该有这样一段
<%@ Page Language="C#" MasterPageFile="~/引用的母板页" AutoEventWireup="true" CodeFile="当前页面.aspx.cs" Inherits="当前页面" Title="Untitled Page" %>
将这个位置的Untitled Page改成你想要的名称就好了

[代码]C#上传文件代码

mikel阅读(859)

注意一定要加runat=“Server”,否则无法执行服务器端代码
页面代码:

<form id="form1" runat="server">
<input id="uploadfile" type="file" size="9" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
<asp:Label ID="Label1" runat="server" Text="Label">文件:</asp:Label>
</form>

Button1_Click代码:

protected void Button1_Click(object sender, EventArgs e)
{
DateTime now = System.DateTime.Now;
string strBaseLocation = "d:\\up\\";
string filename = now.DayOfYear.ToString() + uploadfile.PostedFile.ContentLength.ToString() + uploadfile.PostedFile.FileName;
//上传文件名
uploadfile.PostedFile.SaveAs(strBaseLocation+filename);
Label1.Text = "上传成功,文件名为:" + filename;
}

[教程]ASP.Net MVC中操作Cookie

mikel阅读(967)

网站免不了要保存用户状态,ASP.NET MVC 框架的Controller提供了对Cookie的操作
代码如下:

HttpCookie cookies = new HttpCookie("UserName", user.UserName);
//设置为永久Cookie 去掉则为临时cookie 用户关闭后自动清除,类似session
cookies.Expires = DateTime.Parse("03/24/2009");
this.Response.SetCookie(cookies);
RenderView("UserPanel", user);

页面Page_onload

Response.Write("Cookie:" + Request.Cookies["UserName"].Value);

[教程]神经网络教程

mikel阅读(746)

如果您有疑问,可以先参考 FAQ
如果您未找到满意的答案,可以在下面留言:)
首先向大家道歉,很长时间没有来更新文章了。最近杂事太多,不好意思。

1 介绍

上一篇文章中,我们已经看到了一个简单的关于ANN实际应用程序,这篇文章中,我将简单地介绍一下ANN的最最基础的知识以及上一篇文章中的程序原理的说明。

2 ANN的最最基础的知识

ANN算法起源于生物体的神经系统,相信大家对生物神经系统的工作方式都非常了解,这里我也就不详细介绍了,不过,为了后续说明的方便,给大家上一个截图:
 

 

 

图1

根据生物神经系统的工作过程,我们可以大概理解以下这个图所要表达的含义:

 

 

图2

大家可以想象这样一种情形:寒冷的冬天,我们伸手到火炉边烤火,慢慢地,你觉得自己快要睡着了,这个时候,突然发现自己伸在火炉边的手特别烫得疼, 然后马上将手缩回去。这就是一个神经网络的工作实例,火对手产生的温度就是图2的输入层(Input),而缩手或不缩手就是图2的输出层 (Output)。但是缩手只有在手的温度达到一定的程度才发生的,比如说40度。

用图2来表示上面所说的情形:

X1 = 火对手产生的温度

w1 =火对手产生的温度的权值(对火对手产生的温度的放大或是缩小,我们让这个值为1)

激活函数(Active Function)= 如果 x1 * w1 > 40 激活(缩手),否则抑制(不缩手)

这是单输入的情况,如果有多个输入,则输出为 f(x1 * w1 + x2 * w2 + x3 * w3 …)

其中,f(x)为激活函数。

下面,我们来看2个多输入的神经网络结构图:

AND运算

 

其中f(x) =

If (x >= 2) return 1;

Else return 0;

阀值为2

我们可以利用这个结构图来检验一下是否正确:

X1 = 0, x2 = 0, x = x1*w1 + x2*w2 = 0 f(x) = 0;正确

X1 = 0, x2 = 1, x = x1*w1 + x2*w2 = 1 f(x) = 0;正确

X1 = 1, x2 = 0, x = x1*w1 + x2*w2 = 1 f(x) = 0;正确

X1 = 1, x2 = 1, x = x1*w1 + x2*w2 = 2 f(x) = 0;正确

OR运算

 

其中f(x) =

If (x >= 1) return 1;

Else return 0;

阀值为1

我们可以利用这个结构图来检验一下是否正确:

X1 = 0, x2 = 0, x = x1*w1 + x2*w2 = 0 f(x) = 0;正确

X1 = 0, x2 = 1, x = x1*w1 + x2*w2 = 1 f(x) = 1;正确

X1 = 1, x2 = 0, x = x1*w1 + x2*w2 = 1 f(x) = 1;正确

X1 = 1, x2 = 1, x = x1*w1 + x2*w2 = 2 f(x) = 1;正确

上面2个实例,就是我上篇文章中所需要建立的一个神经网络模型。

但是我们如何确定w1,w2和阀值呢?

这就需要通过神经网络来学习,从而确定w1,w2和阀值。

2 学习

拿计算AND运算的模型来说,需要2个输入1个输出是肯定的。关键就是如何确定2个输入的权值和激活函数的阀值。

为了计算激活函数的阀值,我们可以增加一个输入层,变成这个样子

 

这样,我们只需让激活函数f(x)=

If (x >= 1) return 1;

Else return 0;

即可。至于阀值究竟是多少,可以让w3的值去确定。这样,原先的问题就转化成了求解w1, w2 ,w3的大小的问题了。

接下来,我们制定这样的学习规律:

W(i) =     W(i)    + (正确值-实际计算的值)*x(i).

通过一定次数的训练,我们就可以让    (正确值-实际计算的值)变得相当下,这样最后的结果也就稳定了,同时求出了我们需要的w1, w2 ,w3的近似值。

3实际执行过程

  • 得到训练集合(合理的输入和期望的输出(如:输入x1=1,x2=1输出1))
  • 随机给w1, w2,w3赋值
  • 执行一定次数的训练

4 预告
在下一篇文章中,我将介绍和一个多层的神经网络,用于计算XOR(异或)操作。

5 总结
在本文中,咱们介绍了神经网络的简单最最基本的原理和上一篇文章的实例原理。

[教程]log4net教程

mikel阅读(836)

一.概述

使用可靠地第三方类库,比自己重新编写好得多。Log4net是由Apache开发的.Net.日志类库。并且已经很稳定。网址是:。本文基于1.2.10版。
作为Apache的著名开源项目,它有.Net,Java,C++等多个版本.
但是一般来说它只适合作调试是的单行日志,大量的那种.不太适合作正规的,带有调用堆栈的详细日志.

二.第一次使用log4net

1.添加引用:Log4net.dll和using log4net;
2.在需要作日志的类中加入变量
private ILog log = LogManager.GetLogger(typeof(类名));
3.在程序的启动方法中加入这条语句
XmlConfigurator.Configure(new System.IO.FileInfo("配置文件名"));
4.将配置文件写在启动项目的/bin/Debug目录下.
5.配置文件的缺省内容如下所示:

<log4net>
 
<appender name="A1" type="log4net.Appender.ConsoleAppender">
  
<layout type="log4net.Layout.PatternLayout">
   
<conversionPattern value="%-4timestamp %level %logger – %message%newline" />
  
</layout>
 
</appender>
 
 
<root>
  
<level value="Debug" />
  
<appender-ref ref="A1" />
 
</root>
</log4net>

这个配置文件将日志输出到控制台上.
6.在需要将调试信息写入日志的地方,可以使用类似下面的语句:
log.Debug(String.Format("background at={0} last={1}", 变量一, 变量二));

三.功能设定

1.log4将日志功能划分为如下几个层次:
logger:日志信息的来源,缺省为root.可以设定为命名空间加类名的形式.
appender:日志的输出媒介,可以是控制台或者文件.
layout:日志的输出格式.常用的是log4net.Layout.PatternLayout.
Filter:把某些行日志从输出中过滤掉.

2.如果希望只在某个特定类中输出调试信息的话,可以加入特定的logger:

 <root>
  
<level value="Info" />
  
<appender-ref ref="A1" />
 
</root>
 
<logger name="StringGrid.CanvasView">
  
<level value="Debug" />
  
<appender-ref ref="A1" />
 
</logger>

3.如果想将日志写入文件,可以在配置文件中加入如下内容:

 <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
  
<file value="example.log" />
  
<appendToFile value="true" />
  
<maximumFileSize value="100KB" />
  
<maxSizeRollBackups value="2" />
  
<layout type="log4net.Layout.PatternLayout">
   
<conversionPattern value="%level %thread %logger – %message%newline" />
  
</layout>
 
</appender>

4.也可以让一个源输出到多个记录中:

 <root>
  
<level value="Info" />
  
<appender-ref ref="A1" />
  
<appender-ref ref="RollingFile" />
 
</root>

5.如果想将日志写入windows的EventLog,可以使用EventLogAppender.

[代码]Asp.net MVC HtmlHelper类应用实例

mikel阅读(774)

尽管MVC framework已经出来几个月了,不过这方面的资料却很少,大部分都是抄来抄去,特别是更细节的对于MVC封装的HtmlHlper类的介绍更是少之又少,有也只是简单的例子,没有涉及到数据库层的实例,实际应用中往往数据都是从数据库中读取出来的,因此,没办法只能啃源码啦,不容易啊,下面是我应用过程中整理的组件绑定数据组件的代码,随着应用会陆续增加。
Html.Select 应用实例:
Conroller

namespace Tang.Controllers
{
public class ChannelController : Controller
{
public void Index()
{
RenderView("Index");
}
public void Manage()
{
RenderView("Index");
}
public void Up&#100;ate()
{
//RenderView();
}
public void New()
{
//读取数据库
SysConst sysConst = SysConst.Instance();
//返回数据集给页面
ViewData["ds"]=sysConst.ChannelSet;
RenderView("Cr&#101;ate");
}
}
}

页面:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Admin.Master" AutoEventWireup="true" CodeBehind="Cr&#101;ate.aspx.cs" Inherits="Tang.Views.Channel.Cr&#101;ate" %>
<%@ Import Namespace="Tang.Models.Communion" %>
<%@ Import Namespace="Tang.Controllers" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<style type="text/css">
#description {
height: 136px;
width: 494px;
}
</style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<%
string &#91;&#93; states =new string&#91;&#93;{"开放", "关闭","删除"};
//读取数据集,给sel&#101;ct组件赋初值
System.Data.DataSet ds = (System.Data.DataSet)ViewData&#91;"ds"&#93;;
//设置默认选择值
ArrayList sel&#101;ctvalues = new ArrayList();
sel&#101;ctvalues.Add(1);
%>
<form id="Sel&#101;ct" method="post" action="<%=Url.Action(new{}); %>">
<div>
<label>上级频道:</label><%=Html.Sel&#101;ct("parentChannelId", ds, "ChannelName", "Identifier",sel&#101;ctvalues)%>
<label>频道名称:</label><%=Html.TextBox("Channel.ChannelName") %>
<label>频道状态:</label><%=Html.Sel&#101;ct("state", states)%>
<lable>描述:</lable>
<%=Html.TextArea("Channel.Description",null) %>
<div><%=Html.SubmitButton("保存") %></div>
</div>
</form>
</asp:Content>

转载老外的例子:

<%
//Sample Data
string &#91;&#93; songs=new string&#91;&#93;{"Robot Rock (Daft Punk)","Stairway to Heaven (Zeppeling)",
"New Slang (Shins)"};
string &#91;&#93; movies=new string&#91;&#93;{"Tron","Big Trouble In Little China",
"Say Anything"};
string &#91;&#93; zodiac =new string&#91;&#93;{"Aries", "Taurus","Gemini","Cancer","Leo",
"Virgo","Libra","Scorpio","Sag","Capricorn","Aquarius","Haack"};
%>
Sign:
<%=Html.Sel&#101;ct("myZodiac",zodiac) %>
Sign (sel&#101;ct Haacked):
<%=Html.Sel&#101;ct("myZodiac",zodiac,"Haacked") %>
Favorite Movie:
<%=Html.CheckBoxList("favMovie",movies).ToFormattedList("<li>{0}</li>") %>
Favorite Movie, List :
<%=Html.ListBox("favMovie",movies,new string&#91;&#93;{"Say Anything"}) %>
Favorite Movie, List, Long, Mult (sel&#101;ct "Say Anything" and "Tron")i:
<%=Html.ListBox("favMovie",movies,20,true,new string&#91;&#93;{"Say Anything", "Tron"}) %>
Favorite Songs (Sel&#101;ct Shins):
<%=Html.CheckBoxList("favSongs",songs,new string&#91;&#93;{"New Slang (Shins)"})
.ToFormattedList("<li>{0}</li>") %>
Favorite Songs:
<%=Html.CheckBoxList("favSongs", songs).ToFormattedList("<li>{0}</li>")%>
Favorite Songs, Radio:
<%=Html.RadioButtonList("favSongs", songs,"Robot Rock (Daft Punk)")
.ToFormattedList("<li>{0}</li>")%>

[文字]封装简化了开发同时也扼杀了我们的创意

mikel阅读(695)

最近一直在.net的开发资料中查阅,大部分都是在讲控件的应用,似乎.net除了组件以外的应用什么都没有内容,拖拽组件的确让我简化了开发应用的过程,但是无形中让这些人变得很懒,我指的是思维上的懒惰,因为我曾经用过Delphi快速开发项目,完全的组件拖拽,添加事件代码,然后就等着它在我们不知其所以然的情况下运行,尽管一切都那么理所当然的正确,可底层的原理是我们不所知的,于是开始懒得思考,懒得设计,反正一切都封装好了,拿过来用就ok了,于是一直停留在拖拽、设置属性、事件代码的层次,而苦苦无法晋升到设计的层次,java不同,它就像个博学的智者,给你一个理念思想,然后告诉你可以为你提供怎样的支持,剩下的就仁者见仁智者见智,你甚至可以完全的实现一个framework而仅仅使用java的核心类库,这是创造,不过.net毕竟是做了件好事,让程序开发不必那么复杂,让开发的门槛降低,不过我更加担心门槛降低所引领入门的那些人今后如何继续发展,不由得又是矛盾的问题出现了!算了,就像黑客帝国中有人愿意活在虚拟的世界中尽管他知道周围的一切都是虚幻的,而有些人却喜欢活在真实中一样。那就让上帝的归上帝,凯撒的归凯撒吧!