分享:PHP or .NET,是否选择正确

在2001年, 我曾面临一个选择,去学PHP或者ASP.NET。 我最终选了后者,但我依然怀疑这个选择其实不好。

那是2001年,我面临一个选择。

设想一下,如果你可以回到过去,改写你的技术生涯。哪些重要的时刻,你会想改变?在2001年,我曾作为一家成功的网站咨询公司的共同合伙人,去处理有关 Classic ASP的事情。当时,这些事情是很了不起的。我们是一家微软产品的经销商,并且为此感到自豪!但是……

我曾用过早期的.NET 并且很痛恨它。我讨厌Visual Studio。我不知道 C#,而 VB.NET 看起来就像一个笑话。我记得我坐在奥克兰到旧金山的船上,决定学习ASP.NET的基础来应对工作,而一边又不停的问自己一个问题。

你究竟要多努力才能搞懂这些?那天我去工作,并且和我的合作人坐在一起。我告诉他 “.NET” 已经脱轨了。他笑了笑,然后那天,我们有了一次关于我们公司和我的未来的谈话。

我熟悉classic ASP,IIS SQL 服务器,windows NT/2000 – 我知道如何处理这些事情。我并不知道 Linux 或者 MySQL, 但是我通过阅读代码可以发现:新的框架其实基本上照搬Classic ASP,但有些针对MySQL和Apache的改动。

我本可以预料到这些,并且这本可能成为一个有趣的挑战。我一直喜欢学习直到现在。我可以回去买书并且在一个月内掌握这些新技术。

但是我们有一些不能流失的顾客。我必须立刻服务他们,不能中断。这种情况下,学习一个新技术平台会非常困难,尤其是我们顾客找我们的理由是因为我们是微软专家。(就像毒瘾一样,难以割舍。)

“继续做自己熟悉的事情“是个想当然的选择。问题是我过去的知识和经验并不能很好应用到.NET上。无论如何,我需要学习一门新语言和新框架。

微软统治的年代

你需要记住2001年是微软统治的年代。大型的网站是由Linux和Java构建开发的。如果你那时在硅谷,并且和别人说你是一个微软开发者,你会被嘲笑的。(现在嘲笑的人更多了)

出了硅谷,对于任何企业,微软就是答案。这些公司已经购买了微软的Window和Office,而他们现在要网站。微软是他们想当然的选择。

不幸的是,(我的咨询公司在IT泡沫事件破产)我去了一家”The Valley“的初创企业。这家企业的架构是由开源/Java/Emacs/Eclipse组成的。我是唯一一个微软程序员,服务一个全部采用微软技术的重要客户。

其他开发团队需要数周来完成在客户网站上的一个小改动。而我仅要几个时辰就可以用SQL服务器和Classic ASP达到。对于他们本打算放弃的任务,我总能给客户满意的结果。

这就是我选择成为一个微软专家和一个.NET的开发者的原因。除此之外,我曾拼命地去成为一个微软认证工程师。(我曾经做到了!)最终,我貌似成为了一个微软方面的MVP。或者说,我认为我成为了。

现在看来这实在很愚蠢,但如果你是当时的我,在那种工作环境之下,MVP的头衔意味着一切。去问问你的.NET朋友,他们会告诉你这些。

接下来的事

因为对象数据源不能同数据列表绑定,所以Entity Framework不能被使用。

虽然我现在发了这条Tweet,但是很多ASP.NET的程序员依然对这个问题很茫然。这不是恶搞,这是一个微软官方的教程。

这就是我决定转行之前,我职业生涯的真实写照。

从2002到2008年,微软网站产品曾经是(现在很大程度上依然是)“可视化组件开发”。这意味着你只需要不断地拖放组件,然后让组件实现你的功能。(生成HTML,连接服务器,CSS代码等等)

这项技术使得表格必须用“数据源”这种原始方式去生成。我需要麻烦的写出一些XML文件去映射“数据源”。

这事从来没有顺利过,但我还是坚持去做。请不要问我为什么。

这些也发生了

2008年,我开始用Rails,并且立刻喜欢上了它。但这并不意味着我从此“义无反顾”的转向了。Rails令我可以,像以前开发时一样,拥有全面的反馈。HTML和CSS不再可怕。(它们对ASP.NET开发者而言很可怕)代码重新成为你的朋友。

在.NET的环境下,在某种程度上,我们处理后台代码和服务器组件,而水平最高的开发者仅用最少的代码来完成程序。不知何故,在这一情形的驱使下,我们背离了我们原本的目标:网站开发者。

这一切想法向我涌来。我清楚地记得我想远离.NET的想法。但当我冷静下来,我有了个想法:

如果我将我在Rails学到的带回ASP.NET,那么会发生什么?

从此我启动了”亚声波“项目(受ruby的”活动记录“启发而写的ORM),并且尝试了5种不同的方法去构建一个基于.NET的MVC的框架。 我喜欢C#,而且微软的产品市场很大。为什么要依赖微软的研究室来决定如何写堆栈?这构成我接下来5年的职业生涯。我被认为是一个”麻烦制造者“,”搅罐器“,”抱怨者”,并且被认为是个“巨魔”。或许这些看法确实有点适合我。 “改革推动者”对我而言是个新角色。(Twitter也是)因此… 我觉得我的公关技巧还需要改善。

这有些跑题了(但还是有联系)。我真正想知道的是…

如果当时我不这么做,会发生什么?

今天提起这件事情是因为我有一次我被邀请去看一个”Ghost Blog“的模块。(作为一次随意讨论的一部分)而这个Node程序看起来就像用PHP写。

这不禁让我想到”如果我坚持用PHP,是否我会用同样的方式写Node程序“?我很可能通过一个脚本开发者的角度去看网站,并且错过了一些我从.NET开发中学到的”高级概念“。这种想法很正常,我应该会这么写Node。

这当然引发了另一个问题:我写Node程序是否和.NET开发者类似?

或许有一些。我知道我写ruby程序就是这样…那么这是个糟糕的事情?这些影响是否令我更容易扭曲我的Node代码?

我知道我将会习得很多有关Linux或MySQL的知识,并且我确定我将会参加一些有趣的开源项目,如同我写.NET时一样。我可能会迷上Rails,并且尝试将一些Rails优点带到PHP中。

好似历史就会重新聚焦到此刻,但有一个重大的不同:我将不会陷入ASP.NET的泥潭长达五年。

我认为我应该能做到:

更加了解Linux系统 更加了解MySQL和其他开源服务器。 我不会像4年前一样害怕Javascript 不再依赖开发工具 喜欢HTML和CSS

这里有一个明显的缺点:.NET阻碍我增加关于HTML/CSS/Javascript的知识。我无须告诉你这些知识是如何重要,永远不需要。

另外,我被迫使用”Visual 工具“,而且现在每天还同它作斗争。在网站项目上,我习惯于用TreeView控件来看数据库和文件里的表格。Visual开发已经被烧录进我的大脑!啊哈!

另一方面

或许当我最终决定进入Rails的世界时,这些挫折迫使我不断的学习。这团火始终和我在一起,鼓励我发了这条博文。借用Lewis Black的一句话:

要不是因为我的马,我才不花时间上大学呢!

我的马就是 ASP.NET。

文章相关课程 BF-TECH系列第一阶段课程1:初步了解.Net平台及
深入讲解C#4.0编程(VS2010) 风舞烟ASP.NET软件工程师IT高端培训(BF-TECH)-10年IT从业经验结晶 2013版ASP.NET特战训练营培训(410课时)-性价比最高的培训

时间: 2024-09-20 22:05:02

分享:PHP or .NET,是否选择正确的相关文章

如何选择正确的链接建设策略

成功的链接策略建立在认真调研和有条理的战略制定基础上.你可以用很多方式策划链接建设活动,但注意错误的选择会导致链接建设投资的回报很低,你应该考虑到哪种战术将会带来最好的长远价值. 另一个要考虑的因素是可用的资源以及链接建设过程是否能规模化.如果网站有1万个外部链接,你的计划能带来100个新链接的话,效果可能并不好.除非所有这些链接都指向一个以某个关键词为目标的单独页面,或者指向很少数量的页面.在确定使用哪种链接建设方法前,这是要考虑的关键点.下面教你如何选择正确链接建设策略. 首先,确定可能链接

如何选择正确的布线设计和空间规划

都市的节奏越来越快,我们每天都会面对新的改变,没有哪个领域比企业IT行业更能体现这一点.由于进化是科技的自然属性,企业不得不持续发展以面对增长的业务需求,其中数据中心网络布线也是值得关注的一块. 数据中心网络布线是支持业务需求的基石,我们在布线过程中会遇到无数的设计方案和解决方案.这篇文章就是为了帮助你决定最适合你机房的布线方案. 1.合适的布线设计 高效的布线要求计划和设计一丝不苟.在数据中心标准TIA-942中,规定了在数据中心中有五个关键的功能区域: 接入室(Entrance Room,简

IaaS vs CaaS vs PaaS vs FaaS:选择正确的平台

本文讲的是IaaS vs CaaS vs PaaS vs FaaS:选择正确的平台[译者的话]本文分析了从IaaS到PaaS,到SaaS再到FaaS各类平台的优劣,为寻求合适的平台的迷茫者提供了很好的参考,对于软件提供商也有很好的借鉴意义. [烧脑式Kubernetes实战训练营]本次培训理论结合实践,主要包括:Kubernetes架构和资源调度原理.Kubernetes DNS与服务发现.基于Kubernetes和Jenkins的持续部署方案 .Kubernetes网络部署实践.监控.日志.K

小白自学教程:如何选择正确的防火墙

本文讲的是 : 小白自学教程:如何选择正确的防火墙   , [IT168 评论]对于保护网络和数据免受内部和外部威胁,防火墙发挥着至关重要的作用.防火墙是将网络与互联网分开的虚拟墙;他们可过滤流量,限制对内部网络的访问,以及阻止拒绝服务(DoS)等威胁.如果没有部署有效的防火墙,网络可能容易遭遇数据泄露事故以及其他恶意威胁,最终可能导致您的企业面临巨额损失,甚至失去客户. 因此,您在选购防火墙时,必须做足功课.在选择防火墙时,应该考虑以下问题,以确保选择最能满足您需求的网络安全解决方案. 它是否

如何选择正确的无线协议:802.15.4、zigbee以及专有网络对比

许多设计人员都听说过 zigbee 与 IEEE 802.15.4 标准,但不清楚到底应该选择zigbee,还是 802.15.4,抑或是开发自己的专有网络协议.本文将以专有协议为例,介绍各种协议的优势,并在性能和应用领域方面进行对比区分.讨论不同的网络拓扑.资源要求以及灵活特性,从而帮助利益相关方(interested party)选择最适合自己应用需求的开发协议. 本文分三部分讲述低功耗网络及在他们之间如何选择的问题.第一部分论述网络基础知识以及低功耗网络选择标准:第二部分继续探讨选择标准,

地图-link环境下开发一款《订餐软件》,请问如何通过多个选择框选择正确的地址

问题描述 link环境下开发一款<订餐软件>,请问如何通过多个选择框选择正确的地址 link环境下开发一款<订餐软件>,请问如何通过多个选择框选择正确的地址,并且在地图上定位 解决方案 http://www.jb51.net/article/23921.htm 解决方案二: 又是订餐软件通过这种方式,让别人免费做了.很好,是不是要附加上GPLv2协议吗?

《深入理解Elasticsearch(原书第2版)》一2.5 选择正确的查询方式

2.5 选择正确的查询方式 在<Elasticsearch Server,Second Edition>一书中,我们详细介绍了Elasticsearch的查询DSL,这一种使用JSON结构化的查询语言,可以构建极其复杂的查询语句.不过,在那本书中我们没有探讨在不同的场合可以用到哪些查询方式,以及应该使用哪种查询方式.对于一个在全文搜索引擎领域没有经验储备的人来说,Elasticsearch提供的查询方式显得太多了,而且容易让人迷惑.因此我们将在本书中对这方面的知识做一些深入探讨,从而引导读者如

【行业观点】如何为微服务选择正确的数据库

微服务成为基础设施建设重点的原因在于它提供了服务分离.数据自主存储.小型化开发.测试可设置等优势,这有助于新应用程序更快地上市或迭代更新.此外,容器和容器编排工具也增加了对微服务的使用频率.微服务的核心摒弃了传统架构,这使得它在服务之间共享一个单一的数据库.相比于传统的服务架构,微服务架构的每个微服务单元都具有独立.自主.专用的数据存储单元. 以一个电子商务解决方案为例,如图所示,该方案采用的服务包括:应用服务器.内容缓存.会话存储.产品目录.搜索发现.订单处理.订单跟踪和数据分析等等.现代电子

《深入理解Elasticsearch(原书第2版)》一2.4.5 选择正确的过滤方式

2.4.5 选择正确的过滤方式 读了前述关于后置过滤和过滤查询的解释,你可能会在以后只考虑使用过滤查询并远离后置过滤.这一规则在绝大多数情况下是正确的,不过在某些条件下,存在例外情况.经验法则告诉我们,开销最大的操作需要移动到查询处理链条的尾部.如果过滤器执行很快,开销很小,并且易于缓存,很简单,直接选择过滤查询即可.相反,如果过滤器执行很慢,CPU开销大,并且难于缓存(比如有大量唯一值的情况),请使用后置过滤,或者尝试优化过滤器.优化途径包括简化过滤器和使得过滤器对缓存更友好,比如,可以降低时

《C++面向对象高效编程(第2版)》——3.14 为参数选择正确的模式

3.14 为参数选择正确的模式 C++面向对象高效编程(第2版)尽可能避免按值传递大型对象.对于基本类型和小型对象,可按值传递.复制对象的开销很大,但是,如果主要考虑安全问题,则应坚持按值传递. 需要传递对象时,不要传递指针.`void f (T* object);`(1)指针无法保证它确实指向某对象,它很可能是一个空指针. (2)如果被调函数需要将真正的对象作为参数,则传递引用,而不是指针.这可确保不出现问题,被调函数无需检查空引用(因为不可能出现这种情况). (3)如果希望被调函数在对象中写