一起谈.NET技术,关于技术争论(尤其是ASP.NETWebForms 和 ASP.NETMVC 之争)

  技术争论在博客和twitter里无休止地进行着,这些争论涵盖每个开发人员社区。每个语言,框架,工具,和平台在某个特定的时间都不可避免地会至少有几个争论在进行中。

  下面是我多年来对技术争论所做的几个总的观察,以及对一些我最近看到的,尤其是关于ASP.NET Web Forms 和 ASP.NET MVC的最新讨论的一些评论。

  关于技术争论的总的观察

  下面是几个总的观察,无关任何具体技术争论:

  (一) 开发人员喜欢充满热情地争论和比较语言,框架,APIs,和工具。每个编程社区(.NET, Java, PHP, C++, Ruby, Python等等)都如此。我认为你可以2种方式来看待这类宗教性的技术争论:

  1. 这些争论有时很讨厌,经常是浪费时间。
  2. 这些争论经常是一个既健康又活跃的社区的一个标志(因为激情意味着争论双方的人都深切地关注着,远远好过了无兴趣(apathy))。

  就个人而言,我认为两者都对。

  (二) 开发什么东西从没有唯一的“正确之道(one right way)”。作为面试的开场题目,我有时会要求参试者以他们所能的效率最高的方式来对一组数字进行排序,大多数人都做的不是很好。这通常并不是因为他们不知道排序算法,而是因为他们从来不想起来询问其后的场景和需求,而这些对理解效率最高的方式的做法是至关紧要的。数字序列有多大?典型数字序列的随机度有多高?(是否大部分已经排好序了?数字差幅有多大?数字都是独特的么?重复数字是否群集在一起?)计算机架构的平行度有多高?作为排序的一部分,能否分配内存还是内存必须是常量? 等等。这些都是该问的重要问题,因为一组数字的效率最高和最优的排序方式依赖于对这些答案的理解。

  任何时候人们声称某个编程问题只有一个唯一的“正确之道”时,他们几乎总是假定了一套固定的需求/场景/输入,而这对每个场景或每个开发人员来说,很少是最佳的。众所周知,编程中的大多数问题比将一组数字进行排序要复杂多了。

  (三) 优秀的开发人员使用差的工具/框架也能造出优秀应用来,差的开发人员使用优秀的工具/框架也能造出差的应用来。在根据所用的工具/框架对你正建造的应用的质量来做太广的假定(无论好坏)时要千万谨慎。

  (四) 开发人员(好的和差的)可以通过延伸自己,学习新的思路和方式方法来变得更加强大。即时他们最终并不直接使用新的东西,学习这个行动本身就能以积极的方式使得他们变得锐利。

  (五) 在技术行业里,变化是永恒的。变化可以令人害怕。但你是否被变化压倒(get overwhelmed),归根到底取决于你是否让你自己被压倒。别太担心需要停下来,突然学一堆新东西,你很少需要那么做。 避免被压倒的最好方法就是务实,对大范围的东西在高的层次上保持相当地了解(而不仅仅是技术和工具,也包括方法学),有自信认识到,如果学一门新技术很重要,那么你现有的开发技能的绝大部分能够转移过去并且有所帮助。不管怎样,对开发而言,句法和APIs很少是最重要的东西,问题的解决,客户共鸣和互动(customer empathy/engagement),以及能够专注一个项目并且训练有素的能力,更为宝贵。

  (六) 下面是我偶尔会给我的开发团队的人员一些在与他人协作和交流时的引导:

  1. 告诉别人他们很蠢,你很少会赢得争论,无论你对他们智商问题的解释是多么有善意,或者是多么有说服力。
  2. 总有某个人,在世界上某个地方,比你更聪明,- 别总是假设他们跟你不在一个屋里。
  3. 你交流的人往往会忘记你给予他们的赞誉,往往会记住以前的侮辱,- 所以说话时一定要审慎,否则后患无穷(come back to haunt you later)。
  4. 人们可以改变主意,也会改变主意, - 所以在争论中一定不要固执己见,他们改变主意的话,也别洋洋得意或者歧视他们。

  (七) 当我听人埋怨编程抽象不太好时, 我总是发现有点啼笑皆非,特别是当这些埋怨是通过博客来发表的时候,想想博客内容是使用HTML来显示的,用CSS来做的样式,用JavaScript来做交互的,在线上是用HTTP传输的,在服务器端是用高级语言编写的应用实现的,使用了面向对象的,垃圾回收的框架,是在解释的或JIT编译的字节码运行时之上运行的,博客内容和评论最终是保存在关系数据库中的,最终还是通过SQL查询字符串来访问的。所有的这些都是在主机服务器上的VM中运行的,而VM 中的OS以kernel模式和用户模式进程界限对内存进行分配,使用线程调度工作,使用信号触发设备事件,使用抽象的存储API做硬盘持久。等下一次你读到 “ORM与存储过程之比较” 或者 “服务器控件,是好是坏?” 贴子的时候,非常值得把所有这些东西在脑子里再回想一番。而更有趣的争论都是关于特定问题的最佳抽象的。

  (八) 编程争论的历史是一个漫长的无限循环,其实大多数的编程想法都早已被解决过很多次了。不管是真是假,我们今天争论的许多问题很久以前就已在LISP 和 Smalltalk中解决了。令人啼笑皆非的是,尽管非常优雅地开创了许多东西,这二门语言却用得不太多了,琢磨去吧。

  针对 ASP.NET Web Forms / ASP.NET MVC之争的一些评论:

  下面是对我最近看到在社区里传播的一些争论的几个评论,这些争论是关于ASP.NET Web Forms 和 ASP.NET MVC哪个方案最好的:

  (一) Web Forms 和 MVC是用来建造ASP.NET应用的2种方案,它们都是不错的选择。取决于应用的需求和参与开发的团队成员的背景,对特定的问题,每个方案都可以成为 “最佳选择”。你可以使用两者中的任意一个建造出优秀应用来。你也可以使用两者中的任意一个建造出糟糕应用来。你是好的还是差的开发人员,并不取决于你选择了什么。使用两者,你可以是绝对地棒,也可以是毫无用处。

  (二) ASP.NET 和 Visual Studio开发团队在Web Forms 和 MVC上都投下了大量资源,随便哪个都不会消失。两者在接下来的几个月内都会有重大发布。ASP.NET 4包含了对Web Forms的重大更新 (干净的 ClientID 和 基于CSS的标识输出,较小的ViewState, URL导向, 新的数据和报表控件, 新的动态数据特性,新的SEO APIs, 新的VS设计器和项目改进等等)。ASP.NET 4中还会同时发布ASP.NET MVC 2,其中包含了重大的更新(强类型的辅助方法,模型验证,多区域,更好的脚手架支持,异步支持,更多的辅助方法APIs等)。别担心其中一个会变成死路一条或者你必须转向某一个。我怀疑,在我们大家都死了很久以后,在Internet某个地方还会有服务器依然还在运行基于 ASP.NET Web Forms 和 ASP.NET MVC两者的应用。

  (三) Web Forms 和 MVC 间共享的代码/基础设施/APIs 远远超过了参与争论双方的任意一位所提到的,- 认证,授权,成员,角色,URL导向,缓存,会话状态,用户信息,配置,编译,.aspx网页, .master 文件, .ascx 文件, Global.asax, 请求/回复/Cookie APIs, 健康监测,进程模型,跟踪,部署,AJAX, 等等等等。无论你是怎么构建你的UI的,你学到的所有常用的东西还是同样有效的。在未来,我们将继续投入大量资源建造可用于Web Forms 和 MVC两者的核心ASP.NET特性( 象URL导向,部署,输出缓存,和我们加到 ASP.NET 4 中的DataAnnotation的验证特性)。

  (四) 我经常发现围绕着编程模型之合适性和抽象的争论有点可笑。Web Forms 和 MVC两者都是编程web框架抽象,是建立在更广的框架抽象之上的,以高级编程语言编程,在运行引擎抽象之上运行,而运行引擎抽象本身又是在名为OS的巨大抽象之上运行的。你用Web Forms 和 MVC创建的是 HTML/CSS/JavaScript (所有的抽象都被持久为文本,在HTTP之上传输,而HTTP则是另一个高层次的协议抽象)。

  该争论的有趣的问题不是这些抽象是好还是坏,而应该是哪个抽象你感觉最自然,哪个抽象与你项目的需要/场景/开发人员最匹配。

  (五) 我们即将对www.asp.net网站做一个非常重大的更新。作为更新的一部分,我们将发表更多的全程(end to end)教程/内容(Web Forms和MVC两者都有)。我们还将提供教程和指引,帮助开发人员很快地评估Web Forms和MVC两种方案,轻松地学习两者的工作原理基础,很快地决定哪个他们感觉最好。这将方便新的ASP.NET开发人员,以及已经知晓Web Forms或者MVC的开发人员,来理解和评估这2种方案,然后决定他们想要使用哪个方案。

  (六) 决定某个项目你究竟想使用Web Forms还是MVC,然后对此决定你要感觉高兴。两者都是好的选择。尊重别人做的选择,他们做的选择希望是一个好的,并且进展会顺利的选择。记住,十有八九,他们对他们自己的业务/技能的了解要比你所了解的多得多。同样地,希望你对你自己的业务/技能的了解也比他们所了解的多得多。

  (七) 与他人共享想法和最佳实践, 那是博客,论坛,邮件列单和社区的一个重大部分。它们之所以成功,是当人们知道他们的想法不会被批得体无完肤,而且他们会受到尊重的对待。请有建设性,而不是刻薄。请教授,而不是教训。记住,三人行,必有我师。

  希望本文对你有所帮助,

  Scott

时间: 2024-09-22 06:07:14

一起谈.NET技术,关于技术争论(尤其是ASP.NETWebForms 和 ASP.NETMVC 之争)的相关文章

关于技术争论(尤其是ASP.NETWebForms 和 ASP.NETMVC 之争)

技术争论在博客和twitter里无休止地进行着,这些争论涵盖每个开发人员社区.每个语言,框架,工具,和平台在某个特定的时间都不可避免地会至少有几个争论在进行中. 下面是我多年来对技术争论所做的几个总的观察,以及对一些我最近看到的,尤其是关于ASP.NET Web Forms 和 ASP.NET MVC的最新讨论的一些评论. 关于技术争论的总的观察 下面是几个总的观察,无关任何具体技术争论: (一) 开发人员喜欢充满热情地争论和比较语言,框架,APIs,和工具.每个编程社区(.NET, Java,

周卫林谈支付宝大数据技术实践及应用

文章讲的是周卫林谈支付宝大数据技术实践及应用,第三届Oracle技术嘉年华再度来袭!作为国内顶尖级别的Oracle数据库技术盛会,现场邀请到Jonathan Lewis,Tim Gorman等Oracle数据库领域国际级专家,特别为中国的数据库爱好者带来他们多年的总结与经验分享.另外,来自Linkedin.Salesforce.京东.1号店.百度.360.淘宝.阿里巴巴.支付宝.移动.联通等公司的核心数据库专家.架构师为各位朋友带来国内最新的数据库领域应用及最佳实践分享. ▲支付宝DW/BI高级

浅谈IT企业挑选技术人员招聘几个要点

在实际人员招聘的一些感想总结,企业需要怎么样的人才,个人总结如下: 1.技术能力不是第一位 企业在招聘一个人的时候往往看你第一点不是技术实力,而是你个人言谈行为和态度,往往一个面试你的人员他不可能在半个小时内把你了解清楚,但是面试人员可以在半个小时内可以根据你的言谈举止了解的你态度和行为. 2.企业需要的不仅仅是高学历 学历再高,干不来活那是扯蛋,企业需要有能力的人员,能做实事的人员. 3.只有付出才有回报 一般企业都是为了盈利,一个员工对企业没有实际使用价值,企业是不会给员工开高工资的,更谈不

一起谈.NET技术,Asp优化,asp缓存技术

一.何谓asp缓存/为什么要缓存 当你的web站点采用asp技术建立的初期,可能感觉到的是asp动态网页技术带来的便利性,以及随意修改性. 自如的http控制.但是,随着访问量的增加,你一定会发现自己的站点访问速度越来越慢,IIS重新启动得越来越频繁.接下来,你一定想优化asp,诸如更换性能更优异的数据库.建立索引.编写存储过程等等.这些措施有些不需要增加成本压力,有些则成本压力很大(譬如丛access到SQL),而且效果还不一定. 面对web访问压力,我认为最经济的办法是利用缓存优化技术来实现

艾伟也谈项目管理,创业公司技术选型参考

java推荐框架 web项目来说,spring.struts是必选,当然有更加好用的,推荐来自疱丁分词作者王志亮在人人网的rose框架,使用上手快,配置少,是创业公司java必备. php框架推荐 zend framework,或者直接写个简单的框架,php的框架更加倾向去规范代码,让所有项目在新人加入时快速上手. 代码版本控制 subversion是必选工具,简单易学,git也开始流行,也是可选方案. jar包依赖管理 这是针对java项目,还在使用ant的朋友,可以考虑换换了,特别的,如果你

ASP+中取代ASP的RS(Remote Scripting)技术的Framework

ASP+中取代ASP的RS(Remote Scripting)技术的FrameworkBatman在上面的文章里面我提到了Page.IsPostBack属性的一个应用,可以用来保存用户输入的信息,下面我将介绍它的另外一个用处,那就是取代ASP中的RS(Remote Scripting)技术.至于RS的基本概念和用法我已经在asp版里面有很多介绍了,它主要的优势就是在不刷新当前页面的情况下和服务器端进行通信.但是由于它的底层是使用了java技术,所以它用起来还是显得较为烦琐,下面我就将介绍在ASP

语音读取文档技术java技术的开发

问题描述 语音读取文档技术java技术的开发 我想做一个语音读取,电子书的开发软件 ,就是想问问,现在的这些软件开发的优缺点在什么地方? 解决方案 主要的难题是朗读,毕竟机器的智能不如人类,读起来会有些不像. 另外就是电子书的阅读体验不同于纸质书,所以需要优化.举一个简单的例子,人翻阅纸质书寻找一个有插图的章节,可能一秒钟看100页,很快就找到了. 可是电脑的速度有限,你做电子书加载页面肯定有延迟,就达不到这样的流畅度.

一步一步教你加密解密技术——软件保护技术(1)(1)

第6章 软件保护技术第一节 常见保护技巧1.序列号方式(1)序列号保护机制数学算法一项都是密码加密的核心,但在一般的软件加密中,它似乎并不太为人们关心,因为大多数时候软件加密本身实现的都是一种编程的技巧.但近几年来随着序列号加密程序的普及,数学算法在软件加密中的比重似乎是越来越大了. 我们先来看看在网络上大行其道的序列号加密的工作原理.当用户从网络上下载某个shareware--共享软件后,一般都有使用时间上的限制,当过了共享软件的试用期后,你必须到这个软件的公司去注册后方能继续使用.注册过程一

一步一步教你加密解密技术——动态分析技术(1)

第2章 动态分析技术第一节 SoftICE与TRW2000安装安装与配制SOFTICE有几个平台的版本,DOS,WINDOWS 3.0,Windows 95/98,WINDOWS NT,等. 由于现在最普及的操作系统是 Windows 95/98.Windows NT.Windows Millennium.Windows2000因此就讲讲SOFTICE在这几个平台安装时的一些注意事项.一.SOFTICE for win9x安装与配制㈠.SOFTICE安装 1.SOFTICE目前最新版本是4.05