.NET和Web 3.0

2023-11-16

Professional Visual Studio Extensibility》的作者Keyvan Nayyeri 在他的博客里头发表了《 .NET and Web 3.0》,作为.NET社区的一个名人,他同时是《 Professional Community Server》的共同作者,因为文章讨论的不是目前有些过滥的Web 2.0,而是3.0,我不知道是否应该用3.0来指下一代的Web,或者说Web的未来。
关于Web 3.0的定义,目前还没有定论,Web之父 Tim Berners-Lee 认为下一代的Web应该是语义Web,这也是目前被广泛接受的论点,但还是存在诸多争论,有人认为是Web OS,有人认为是人工智能,也有人认为是一个“可执行”的Web抽象层,也有人认为是API组成的世界,更有甚者,认为Web 3.0是一个商业模式。我们姑且不去讨论具体应该如何定义Web 3.0,但是这些纷争之后我们可以看到一个更加清晰的Web未来所具有的属性——语义、数据、人工智能、网络计算、开放标准、分布式数据库。而具备这些属性越多的商业模式,我们姑且认为越加Web 3.0。
Keyvan Nayyeri的原文在这里 http://nayyeri.net/blog/net-and-web-3-0/ ,我无意做完整的翻译,为了阅读的方便,我简要地描述出原文的大致观点
.NET Web 2.0 的世界里是落后的
不知道是出于刻意还是偶然,.NET经过几年的发展,逐步成为一个成熟的企业级平台,但是在如火如荼的Web 2.0里头的表现却有些差强人意,不可否认,php和Ruby on Rails在这次角逐里头占据上风,keyvan认为主要是三个原因导致的
1..NET社区创造力的缺失。Keyvan抱怨当前.NET社区大多开发人员缺乏创意,都是采取尾随的策略。他也批评了微软在这个方面的保守及其对于开源的态度,对于开源项目扼杀的同时也扼杀了开发人员的激情和创造力,.NET社区的开源出于进退两难的境地。因为缺乏创新和无法领导Web潮流,也在情理之中了。
2..NET是一个后来者。虽然从2000年微软就抛出了.NET战略到2002年正式推出.NET平台,微软花费了三到四年的时间去说教,包括那些社区领袖也是如此,大多经历耗费在了去说什么是.NET和如何利用哪些功能去做好软件。这个问题到2005/2006年才有所改善。而反观PHP,则是稳步前进,至于RoR,keyvan则认为这是一个例外,但是他认为反倒可以不用太考虑它,因为出现了难以置信的增长,在这个期间很难产生更多新技术。
3.基于成本角度考虑。虽然微软在这个方面做了很多努力,包括免费提供开发工具,但是这个远远不够的,比如Facebook部署了300台MySql,如果部署了300台SQL Server和Biztalk,各位可以想象一下成本。免费的平台成本和微软收费的平台自然不能够相提并论,在可靠性不是第一位的Web 2.0里头,企业级并无法真正展现出其优势所在
Web 3.0 里,想法不是主要的,关键是方法,而这正是 .NET 的机会所在
既然Web的未来是语义的Web,换言之,也就是面向内容的网站,当然这里的内容和以前的内容是有区别的,它应该是更加易于使用人工智能,如果说Web 1.0和Web 2.0我们是创造了人可以读懂的内容,那么3.0则是机器可以读懂的内容。Keyvan认为Web 3.0需要想法,但是更加需要方法(尤其是人工智能),抛开技术层面的标准(RSS、REST、Web Services….),更多的工作是分析内容,诸如分析html/xhtml这样的工作在未来的Web就成为了家常便饭,而在今天,这个工作还是专属于搜索引擎专家的事情,那么未来呢,用人工智能的方法来分析Web内容是势不可挡的。Keyvan认为.NET社区应该在这块上有所作为。
既然关键的是方法,如分析内容的方法,也就意味着在未来更加需要一些能够“智能”分析Web内容的工具,也会更多需要图像处理、视频处理和音频处理的工作,而如何能够提供行之有效的工具,也正是一个语言对于一个技术时代的意义,也由此决定了一个语言的位置。如此看来,在Web 2.0里头,.NET不如PHP和RoR就不足为怪了。
也无意去讨论平台之间的分歧以及Web 3.0到底应该长什么样子,过去几年,一直有坚定的.NET拥护者批评和反思的情况,从.NET概念的推出到现在,也已经走了了八个年头,Visual Studio也演变到第四个主版本,.NET在Web 2.0市场方面的表现确实有些令人沮丧,作为有过多个平台工作经验的我来说,在受到keyvan的启发之后,也有一些自己的理解:
1. .NET 社区缺乏创新和微软一直以来的策略有关
作为最伟大的软件公司,虽然一直以来其商业风格遭人诟病,但是在软件领域是无可争议的霸主,可是微软似乎对互联网一直有些“感冒”,包括.NET战略中的互联网及其现在的Live战略,在这个领域里头,微软似乎很难做到无所不能。
或者真的对于互联网过敏,在开放源代码世界对于互联网应用诸多的思考和创新几乎是由Java,Php,Python来领导的,而.NET是永远的跟随者。另外可能是基于商业版权的考虑,对于.NET下如比较成功的开源项目如NUnit、NDoc、MVC框架(Castle Project)等等,微软无一例外地选择抛弃,然后令立门户。这样做带来的后果是微软浪费了不必要的资源(说实话我就觉得NUnit比微软的Unit Test好使,微软有点吃饱了撑着没事干),另外一个方面严重打击项目作者的积极性。
做开源的天生需要认同感,你选择.NET的时候,还需要去考虑这个东西以后微软会不会做,你只能够去做Visual Studio不愿意做的事情,结果无疑是沮丧的。
另外一个方面.NET Framework太过复杂,大而全,“2003都还没有搞定,就出2008了”,就连基本的类库和语法都还来不及学习,就出新版本了,小弟们忙着学习,社区的大佬们忙着布道,发现一个轮回还没有完,又出新版本了。所以也有很多开发人员抱怨跟着微软走,太累了,而我们看看Java和PHP,在语言级别的更新速度是缓慢许多,也正因为如此,他们有更多的精力去反思现有框架存在的问题,从而提出一些创新的改进。.NET开发人员就没有那么幸运了,大多时候在疲于应付,从.NET 1.1到.NET 2.0再到.NET 3.0到现在的.NET 3.5和Silverlight,我想没有多少人能够全部了解。
微软在框架上的快速更新一个方面表现为微软在此真的做了很多努力,但是反过来看了,也是框架本身不够成熟的标志,因为下层框架的推陈出新,也就限制了.NET开发人员在上层应用框架的思考深度。
我不知道这样是好事还是坏事,但是作为一个微软技术的开发人员,不管你是否愿意承认,你真的会被微软所左右,最终失却keyvan提到的“Ideas”。
2. Visual Studio ,成也萧何,败也萧何
微软的产品都有一个原则,那就是“模糊复杂性”。任何产品你都可以当着傻瓜一样使用,当然了,也有可能因此真的变成傻瓜。不夸张地说,微软的大多产品都复杂于竞争对手,可能这并不是完全出自微软的本意,但是基于“向下兼容”的需要,最终的产品过渡复杂化,这个问题在.NET Framework的设计上也依旧存在的。
诸位如果有通过反编译阅读过部分.NET Framework源代码的,就会发现.NET CLR并没有我们想象的如此纯洁,看看它对于安全的包装就可以略知一二,可能是受限于底层操作系统的缘故,一些东西还是能够明显看到粗糙的痕迹的。当然了如果有心,你比较Mono Project和.NET Framework的实现就知道了。
话说到这里,并不是刻意去批评.NET Framework设计上的“好大喜功”,所以难免华而不实,而是说.NET Framework设计不够精良的问题是存在的,但是我们再看看Visual Studio,这些问题我们可以看见嘛?答案是否定的,Visual Studio真的“很好很强大”,所以可以让我彻底忘记这些缺陷,通过拖拖拽拽,就可以写出一个应用,让我可以不用关心这些问题的存在。
我们再来举个例子,也许有些朋友使用过WebPart,这是ASP.NET 2.0一个非常重要的增强,如果你不用怎么动大脑,按照微软提供的帮助使用它,使用默认的provider,使用默认的aspnet用户数据库,使用默认的数据库存储方式,OK,一切万事大吉。但是作为一个web 2.0网站,你有可能真的希望所有的用户数据字段存储在二进制中嘛?答案是否定的。WebPart还是存在一些性能问题的,你希望有效地提供性能,所以你需要重新编写Provider,你觉得WebPart使用表格布局太老土了,而希望用DIV+CSS来实现WebPart。这个时候,你会发现有的忙了,从新编写WebPart或者Profile的Provider并没有你想象的如此简单,这个时候也许你真的需要花费更多的时间去阅读反编译的代码以帮助你解决问题,阅读之后呢,你会发现这真的是一个无底洞。
从功能层面来讲,ASP.NET提供的那些功能都是有诱惑力的,从可定制的角度来讲,你使用了这些框架可能会得不偿失,或者这就是微软文化。你按照他指引的方向去走,发现是康庄大道,一旦你想走的与众不同,发现并没有那么舒坦。
对于底端开发人员,Visual Studio将复杂的问题极大地简单化,对于有能力给社区做贡献的“领袖”开发人员,情况恰好反过来,简单背后的复杂会让你深陷泥潭。我们在看看对面的开源世界,简单也好,复杂也把,始终是表里如一的。
按照我的理解,微软强调“工具改变世界”,所以会给我们很多假象,而Java或者PHP更加强调“框架实现”,开发工具只是辅助实施的手段罢了。Visual Studio某种程度极大提高了开发效率,反过来也遏制了许多开发人员的创造力,这么去想.NET在Web 2.0上的尴尬就不足为怪了。
3. 开放是微软自我救赎的必要
过去的两年来,微软变得难以置信的开放,包括CodePlex的推出,Visual Studio Shell的发布等等。微软发现开放会赢得更多拥抱,毕竟在互联网领域,微软还是会有微微的失意,不可能找到软件时代的舍我其谁。
但是这种有限度地开放,并无法解决.NET在Web 2.0方面的尴尬程度,从各个方面来讲,.NET都是一个迟到者,花费了好多时间终于讲明白什么是.NET,发现对手已经跑远了许多。而要证明一个开发平台在Web 2.0中的地位,莫过于看有多少App,而app的普及程度也就决定了平台的普及程度。
基于微软产品策略的考虑,.NET平台的高度绑定也是其无法大力发展的一个原因,对于Mono的有限支持,也让跨平台更多的只是天才们的梦想。
4. 华丽的背后必须“纯洁”
上面也提到微软的很多工具和框架都提供了难以置信的方便,背后带来的是对于底层控制的乏力,总体来说,微软的产品底层架构是不够干净的,大多东西无法做到让你随心所欲地修改,反过来看PHP或者Java,各种框架之间的互集成都是相对容易的。
微软希望赢得更多的市场,就必须在这个方面多下功夫,完美、华丽的背后应该更加追求稳定、架构开放。从我个人的经验来说,写好.NET代码真的不容易的。也有人这么评价“同样一个烂的程序员写.NET、Java和PHP的Web 2.0程序,执行速度方面的排序是.NET、PHP然后Java,从稳定性的角度是Java、PHP然后.NET,从开发效率来看是PHP、.NET然后Java”,我们也可以看到.NET真正的软肋所在。
拥抱开放,自我纯洁,或许是.NET真正该做的吧。
5. .NET 在未来Web 的位置也就是微软在未来互联网的位置
如果说Web的未来在于数据和语义构建的人工智能,那么是否能够对此提供足够的支持,也就决定了在未来的平台之争是否占据优势。Google梦想将整个互联网变成一个他的操作系统,而微软更加擅长于利用开发人员来统治世界。
多年以前,比尔。盖茨希望全球的每一台电脑都安装微软的操作系统,也正是这样的一个梦想成就了今日的微软帝国,但是仅仅限于传统软件领域,在互联网,Google却是无可争议的霸主。过去微软为了实现“可连接性”,在不同时期推出了DDE、OLE、COM、DCOM、COM+等实现互操作的技术,而在.NET推出之后,又将互操作性更近一步。然后一切无一不是在Windows平台这个框架之内,Web的兴起终于将这个规则改变,人们更加乐于用Xml、Web Services这样跨平台的协议来实现互操作性,而且也正因为如此,实现了跨越语言、操作系统的互操作,微软平台不再成为唯一的选择。加上如keyvan评价的那般.NET的复杂性和社区的“不思进取”,再回首,发现已经落后许多。
在Web 3.0时代,微软应该更加专注于将自己的Web平台变成一个可编程的“操作系统”,然后在此基础之上,提供一个更加方便的工具。LINQ在这个方面做出了一些努力,也有人说这是来自RoR社区的创意,但是我们的确可以看到,.NET确实越来越好用,越来越简单。
各位朋友,在未来的Web,你是否使用.NET?我自己不知道,需要等待。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET和Web 3.0 的相关文章

  • 以编程方式设置 aspnet:MaxHttpCollectionKeys

    在特定网站的一些管理功能中 我正在做一篇特别可怕的帖子 需要一个large要发布的数据量 为了实现这一点 我必须添加 Web config appSetting https stackoverflow com questions 88324
  • PHP中的“@/path/to/a/file”是什么意思?

    我偶然发现以下代码示例 image file path code tmhOAuth gt request POST https upload twitter com 1 statuses update with media json arr
  • mysqldump创建空sql文件? [Windows 上的 php 和 mysql]

    我尝试转储数据库 我尝试了指定 mysqldump exe 的完整路径或仅使用 mysqldump 它仍然给我一个 0kb dumpfile sql 细节 编程语言 PHP 数据库 MySql 5 XX 操作系统 服务器 Windows S
  • Portable 和 win-x64 在部署时有什么区别?

    我将代码部署到 Windows Server 2016 上的 IIS 我试图了解选择之间的有效区别Portable vs win x64在发布 设置 目标运行时下拉列表中 由于 JIT 需要将代码编译到特定的体系结构 站点在 Portabl
  • K2_内容模块评级

    我一直在category item php 中重建标准K2 评级 以查看评级从显示为星星到显示为数字 我所做的是 我替换了这段代码 div div class itemRatingForm ul class itemRatingList l
  • 扩展 Codeigniter Exceptions 类以添加自定义方法

    我创建了一个新方法来处理 401 apache 错误 我的核心类扩展了 CI 核心类 但是当我调用方法名称时 我收到此消息 致命错误 调用未定义的函数show 401 in G Path application controllers lo
  • 本机线程异常会毫无例外地导致 .Net 应用程序崩溃

    我发现了一种情况 我的 Net 应用程序会意外崩溃 而不会引发任何异常 我希望 至少 AppDomain UnhandledException在这种情况下工作 以便至少使我能够记录错误并向用户提供一些信息 在这种情况下 我有一个 Net 程
  • 动态选择和更新 LINQ 结果集中的列值

    我有一个场景 其中存在 LINQ 结果集 我使用了以下查询 var stockDetails from d in db BloodBanks where d bbUserName Session username ToString sele
  • ASP.NET MVC区域命名空间问题

    我在我的 asp net mvc 3 解决方案中创建一个名为的新区域admin Visual Studio 自动分配名称空间 MyApp areas admin controllers 我将其更改为MyApp admin controlle
  • 如果图像包含特定颜色则

    是否有一种简单的方法来检查图像是否包含特定的 RGB 颜色 例如 Dim img As Image Image FromFile C image png If img contains color red toRGB then 我认为检查这
  • 比较 LINQ to SQL 中的两个日期

    我有一个数据库 其中有一个名为会议的表 会议日期使用以下格式存储在此表中 May 2nd 2011 例如 格式为5 2 2011 我的要求是获取两个日期 例如 2011 年 4 月 25 日和 2011 年 5 月 2 日 之间的会议 并编
  • 如何在Redis中正确存储图片?

    决定将图像存储在Redis中 如何正确执行 现在我这样做 redis gt set image path here is the base64 image code 我不确定这是否正常 将图片存储在Redis中是完全可以的 Redis 键和
  • 哪些控件触发了 Page.IsValid = false?

    两件事情 是否可以通过 Jquery 设置 Page IsValid Is Valid 属性 以便我不必使用 aspx 验证器 据我了解 IsValid 属性是只读的 当验证器进入时 是否可以通过 Jquery 当然 找出哪些控件导致验证失
  • 如何使用 ProtoGen 从 proto 文件生成结构

    我们一直在使用 protobuf net ProtoGen 从 proto 文件生成 C cs 文件 我们希望代替类来生成结构 例如 DataContract public struct Entity1 ProtoMember 1 publ
  • 将授权标头添加到 Web 参考

    我正在尝试向客户端的网络服务发出请求 我不知道客户端的底层平台 我使用 添加 Web 引用 在 Visual Studio 2010 中使用了客户端的 WSDL 并生成了我的代理类 称为 ContactService 我现在需要将如下所示的
  • javascript 中一次仅选中一个复选框

    I have 3复选框 我只想1一次选中的复选框 下面是我的 html 小提琴 JS小提琴 https jsfiddle net n03jLhqa 我想要这个工作在IE8还请建议如何做 这个怎么样 fiddle http jsfiddle
  • 删除 cookie php

    我正在尝试创建一个带有登录系统的平台 并将用户名和密码存储在cookie中 以使用户即使关闭浏览器然后再次输入也能保持登录状态 我设法保存了cookie 但我不知道如何制作注销按钮 这是代码 function logout body app
  • Control.FindForm 和 ContainerControl.ParentForm 有什么区别

    我想知道两者之间是否有任何功能 或其他 差异Control FindForm and ContainerControl ParentForm 我一直在使用 ParentForm创建我自己的用户控件时 但有什么原因吗 FindForm会是一个
  • 未找到“Twilio\Rest\Client”类

    我正在尝试使用 twilio php api 这是我的代码
  • 如何对“2-1”这样的字符串进行数学计算以产生“1”?

    我只是想知道 PHP 是否有一个函数可以接受像这样的字符串2 1并产生它的算术结果 或者我必须手动执行此操作explode 获取算术运算符左侧和右侧的值 我知道这个问题很老了 但我昨晚在寻找不太相关的东西时遇到了它 而且这里的每个答案都很糟

随机推荐

  • 电厂3D可视化_输变电站三维扫描建模

    电厂3D可视化 变电站数字孪生 输变电站三维扫描建模 三维激光扫描技术助力智能变电站 以数据库为中心 建成以网络为支撑 达到当前国内先进水平的智能变电站三维设计 把三维设计的方法真正贯穿于整个设计队伍 实现从二维设计思路向三维设计理念转变
  • 【二叉树】二叉树的深度优先遍历DFS(前中后序遍历)和广度优先遍历BFS(层序遍历)详解【力扣144,94,145,102】【超详细的保姆级别教学】

    二叉树 二叉树的深度优先遍历 前中后序遍历 和广度优先遍历 层序遍历 详解 超详细的保姆级别教学 先赞后看好习惯 打字不容易 这都是很用心做的 希望得到支持你 大家的点赞和支持对于我来说是一种非常重要的动力 看完之后别忘记关注我哦 这篇博客
  • python ssl socket_python ssl socket 的使用(服务器+客户端)

    首先 使用如下命令生成证书和key openssl req new x509 days 365 nodes out cert pem keyout key pem 接下来实现服务器 import socket ssl time contex
  • ResourceMgr 读取文件夹内容

    using System Collections using System Collections Generic using System IO using System using System Net using UnityEngin
  • 深度强化学习系列(6): DQN原理及实现

    利用神经网络近似值函数的方法表示为 V s w
  • Python @装饰器

    目录 目录 一 介绍 1 简单实现装饰器 普通调用 糖语法 2 进阶 普通调用 糖语法 3 装饰类 二 内置修饰器 一 介绍 装饰器 Decorators 是 Python 的一个重要部分 简单地说 他们是修改其他函数的功能的函数 与jav
  • 公司产品STM32 B错误排查分析

    近期原本好好的产品 突然上电不久MCU就卡住 调试发现跳到default handler错误 也就是B错误 根据网上获取的信息 有2个原因 1 没有相关中断 2 没清除标志 我看了下 串口2的中断函数USART2 IRQHandler已经有
  • 【MyBatis】进一步理解choose、when、otherwise标签

    choose when otherwise choose里面包含when otherwise两个标签 choose是父标签 when和otherwise必须都要写在它里面 当 when 中有条件满足的时候 就会跳出 choose 即所有的
  • 怎么修改csdn文本的字体样式

    示例 font face 仿宋 color FF0000 size 1 待修改语句 当前这句是字体大小为1的红色仿宋字体 font 以上的三个属性可选 其中 face 字体类型 如楷体 微软雅黑 仿宋等 color 字体颜色 十六进制的 s
  • IntelliJ IDEA的这个接口调试工具真是太好用了!

    你有一个思想 我有一个思想 我们交换后 一个人就有两个思想 If you can NOT explain it simply you do NOT understand it well enough 现陆续将Demo代码和技术文章整理在一起
  • mac虚拟摄像头插件_用于在macOS上从OBS的输出创建虚拟网络摄像头设备

    OBS macOS Virtual Camera Creates a virtual webcam device from the output of OBS Studio Especially useful for streaming s
  • HTML语言笔记(一)

    参考教程 HTML教程 1 简介 HTML是超文本标记语言 Hyper Text Markup Language 使用标记标签来描述网页 HTML 标签是由尖括号包围的关键词 比如 通常是成对出现的 Web的作用就是读取HTML文档 并以网
  • Pytorch/TensorFlow/Numpy常用函数汇总

    常用函数 一 Pytorch 1 枚举 enumerate 2 维度交换 permute 3 尺寸形状 size shape 4 数据填充 full fill 5 阻断反向梯度传播 detach 6 形状调整 view 7 维度扩张 减少
  • Windows 10 mvn不是内部或外部命令,也不是可运行的程序

    win10新装idea 使用mvn时提示mvn不是内部或外部命令 也不是可运行的程序 根据网上找到的方法如下设置 发现并没有什么用 可能是系统或则用户权限问题 直接删除了用户变量后在Path属性后面添加一条maven的地址 重启CMD后发现
  • 保留指定位数小数点的方法(五种)

    package feifan import java text DecimalFormat import java text NumberFormat public class YuoXiaoShuzi public static void
  • 从mpeg ts文件中提取I帧(5):I帧的解码

    找到含有I帧的pes后就可以对其进行解码 对I帧的解码我们使用ffmpeg 这里用到的版本是3 0 0 一 pes解码为yuv ffmpeg一般都是这个套路 直接上代码 int ffdecode pes uint8 t pes data i
  • 硬件十万个为什么

    1 电源类 1 1 电源基础 各种 地 各种 GND 板载电源设计规范 电源环路稳定性评价方法 深入芯片内部 理解去耦电容的作用 减小DC DC变换器中的接 地反弹 一些接地要点 开关电源中的小启示 电源相关的测试 去耦电容的选择 容值计算
  • 马上:纸币互动,智能笔数据点压缩

    马上 纸币互动 智能笔数据点压缩 对接一款智能笔 笔的数据是通过蓝牙传给app 但是笔的笔迹点数量很多 网络传输用json就不恰当 所以一番调研才起二进制压缩点 数字压缩基本原理 基本数据 class Dot implements Seri
  • Python-爬虫实现天气查询-有GUI界面

    Python用缩进来区分代码层次 代码的主体是爬虫与Tkinter 执行程序后会先出现一个选择城市的界面 这里需要输入城市名 点击确认即会出现城市天气状况 执行效果如下 完整代码如下 from tkinter import GUI设计 tk
  • .NET和Web 3.0

    Professional Visual Studio Extensibility 的作者Keyvan Nayyeri 在他的博客里头发表了 NET and Web 3 0 作为 NET社区的一个名人 他同时是 Professional Co