.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 的相关文章

  • C#:询问用户密码,然后将其存储在 SecureString 中

    在我目前为客户开发的小型应用程序中 我需要询问用户他的 Windows 登录用户名 密码和域 然后使用这些信息系统 诊断 进程 启动启动一个应用程序 我有一个带有 UseSystemPasswordChar 的文本框来屏蔽输入的密码 我需要
  • DataGridView 中的 C# FormatException

    我创建了一个带有一些列的 DataGridView 订单列仅允许用户输入 int 数字 当我输入 j 例如 时 它会抛出 FormatException 并且我尝试添加 try catch 来解决问题 但它看起来不起作用 private v
  • 从 .phar 存档中提取文件

    对于 Phar 文件 我完全错过了一些东西 我正在安装一个需要 phpunit pdepend 和其他依赖项的项目 我将它们作为 phar 文件获取 但是 我无法使用命令行工具 php 命令 从中提取文件 我用谷歌搜索了这个问题 但没有发现
  • “使用未定义常量”注意,但该常量应该被定义

    共有三个文件 common php controller php 和 user php 文件 common php 如下所示 文件controller php看起来像 文件 user php 如下所示 执行脚本时 会给出通知 注意 使用未定
  • 交换关联数组中的两个项目

    Example arr array apple gt sweet grapefruit gt bitter pear gt tasty banana gt yellow 我想调换一下柚子和梨的位置 这样数组就变成了 arr array ap
  • PHP 在输入流中使用 fwrite 和 fread

    我正在寻找将 PHP 输入流的内容写入磁盘的最有效方法 而不使用授予 PHP 脚本的大量内存 例如 如果可以上传的最大文件大小为 1 GB 但 PHP 只有 32 MB 内存 define MAX FILE LEN 1073741824 1
  • 如何获取可用系统内存的大小?

    C NET 中是否可以获取系统可用内存的大小 如果是的话怎么办 Use Microsoft VisualBasic Devices ComputerInfo TotalPhysicalMemory http msdn microsoft c
  • .NET 内存不足故障排除

    在阅读了几篇有关 NET 技术中的内存的启发性文章后 Out of Memory 不是指物理内存 https learn microsoft com en us archive blogs ericlippert out of memory
  • 为使用 SSH.NET SshClient.CreateShellStream 执行的命令 (sudo/su) 提供子命令

    我正在尝试使用 Renci SSH NET 从 C Web 应用程序连接到远程 Linux 服务器并执行 shell 脚本 我想一个接一个地运行脚本 但不知道如何运行脚本并读取输出并将其存储在标签中 我已经尝试了下面的代码 但无法一行接一行
  • PHP preg_filter 返回意外的长值

    尝试在 Woocommerce 中删除标签并过滤值 但无法以正确的格式获取它 有东西有腥味 我正在使用WC gt cart gt get cart subtotal 来检索该值 在此示例中 我的值是 2 429kr 原始返回值是 span
  • 同时从2个表中删除?

    我正在使用 asp net 和 sql 服务器 我有 2 个表 类别和产品 在产品表中 我的categoryId 为FK 我想要做的是 当我从类别表中删除类别时 我希望该类别中的所有产品都将在产品表中删除 如何才能做到这一点 我更喜欢使用存
  • jQuery Mobile 表单验证

    我有一个移动网站 除了验证之外一切都工作正常 基本上我希望从用户那里获取值 然后在单独的页面 process php 上处理它们 但是 在这样做之前 我需要检查以确保字段已填充 我已经研究了几种方法来做到这一点 但似乎没有一种有效 我现在有
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • ASP.NET Click() 事件在第二次回发时不会触发

    我有一个 ASP NET Web 表单 我第一次提交表单时 会引发 提交按钮单击 事件 表单返回到浏览器时可能会出现验证错误 或者可以选择使用新值再次提交表单 当再次提交表单时 提交按钮单击 事件永远不会触发 Page Load 触发 但按
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 电厂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