关于.Net开源并跨平台的思考
开源的意义:
关于开源,我个人觉得有两个提高(勿喷)。
一方面开源提高了生产力,另一方面开源也是信任的一种体现。为什么这么说呢,在当下的互联网时代,开源是一种核心价值观。人与人沟通交流合作之下,降低成本并且提高生产力的必然产物。就目前流行的众筹之类的概念都是与之大同小异。试想一下,全球各地都有开发者、贡献者,这个力量与单独的个人与小团队的力量是不可同日而语的。而另一方面,信任。你可能会奇怪这跟信任能扯上什么关系?试想一个SDK你可以完全看到其实现过程,随时都可以检查其源代码,你有什么理由不去完全信任他?(你硬要说你看不懂那我无话可说0.0)
.Net跨平台
对开发者的意义
如果你对开源有一个深刻的认识,那么仅仅开源两个字就足以给你充足的理由去尝试一个非常不错新东西。但是对于其他一部分开发者来说,.Net核心源代码的开源对他们并没有什么实质意义,因为他们没有能力没有时间也没有兴趣去阅读或修改源代码,毕竟有的时候当兴趣成为了工作之后看待方式就不一样了,非常不幸,我就是其中一人233333。那么对于我们这类人,跨平台又有什么实质性的意义呢?Java有一个机制:一次编译,到处运行。什么意思呢,写一次代码,可以在任意平台上运行,这难道不是每一个开发者梦寐以求的东西吗?这难道不是Java流行的根本原因?各种语言之间的区别并不大,学习一门新的语言其成本也低到可以忽略不计,当然前提你是一名经验的开发者,这对于你来说简直易如反掌。但是对于一个生态环境的代价却是巨大的,每一门语言都有自己的类库,都有自己相对成熟的框架,恰恰就是这些东西拉开了各语言之间的差距与学习成本,相信这些也正是在日新月异的互联网环境下我们都难以承担的代价。
对于微软自身的意义
.Net的开源被不少人认为是微软最后的让步和尝试,而事实上这样的明攻暗守却并不是第一次了,最后无论是微软还是用户都已经从这个先例中获益良多。这里就不在敷述,各位有兴趣请自行搜索SUN公司。在当今互联网时代,传统的单纯靠授权收取费用来盈利已经不再是一个理想的方式了,吃肉喝汤才是正确的思路。苹果IOS的巨大成功就是一个吃肉喝汤的典范。那么如何才能正确的实施吃肉喝汤的战略?构建生态圈。构建生态圈的第一步就是拥抱开发者,正是庞大的开发者基数奠定了这个重要的基石。试想我们开发的application不用大规模的去修改核心代码就能够在Windows、linux、Android、iOS、Mac OS上运行,一门语言既能做当下流行的B/S网站开发又能做传统C/S桌面APP的开发,而且还能兼并移动开发,那么我们又有什么理由不想去投入这门语言的怀抱里呢?微软收购Xamrin与Mono已经展示他的野心,Xamrin在没被收购前价格高的吓人(偷偷告诉你比ios开发者还贵),而收购之后则是免费的,可以预见会有不如开发者加入这个阵营。
说到这里,不得不说微软在近一段织的一个大网“Azure”。天下武功,唯快不破。这里的快,并不是说性能上的优势,而是开发速度。我记得有句话是这么说的“人生苦短,我用python”,python以其开发速度与迭代速度在这个时间就是金钱的时代得到了无数开发者的认同。那么这跟azure又有什么关系呢?因为使用Azure你可以达到同样的效率,哪怕是使用C#(我不是说C#效率低,大神别喷)。Azure的集成度与使用的简易度已经完善到了令人发指的程度,在当今这个云时代还没见有更好的,这里只说界面不谈内容。Aws作为云的开山鼻祖在价格与基础、基础设置以及技术经验上都有巨大的优势,作为IaaS无愧为业界老大,但是在更高级的PaaS层面Azure确实是遥遥领先的。身为一个穷屌丝,我的网站都是部署在阿里云上,而且是学生认证那种23333,而Aws也是一次搭建***神器时发现的一年免费试用才接触到的。目前由于工作需要,有机会接触到Azure的大多数内容,其易用程度令人叹为观止。说句心里话,我真是害怕用多了我自己都成傻子了。站在巨人肩上,重新造轮子这种事在我们短暂的人生中还是少做的好。
看到这里微软的战略大局已经差不多清晰起来了:
开源.Net-拥抱开发者-Azure-完整生态圈-吃肉喝汤
而如果我们单一的看其中的任意一环都是毫无意义的,因为任意一环都可以被替代,但如果我们真正的踏入其中并开始使用这些服务时,那就完全是另一个世界了。
小结
作为宇宙最强IDE(没有之一)Visual Studio的使用者,清清楚楚的了解这种快感。能走到这一天也实属幸运,有生之年系列23333。在这里,我们也终于有机会像大部分Java程序员那样有钱了哈哈哈。前些日子了解到,Visual Studio已经发布了Mac版本,真是喜大普奔。这个世界从来都不是一成不变的,能够在linux上运行我的C#项目,这对我来说已经是一种幸运。
关于.Net开源并跨平台的思考的更多相关文章
- 微软“.Net社区虚拟大会”dotnetConf2015:关键词:.NET 创新、开源、跨平台
去年 11 月的时候,微软开源了 .NET CoreFX,然后是今年 2 月份的 .NET CoreCLR.自那时以来,已经有大约 3500 人在 GitHub 上进行了提交,而且贡献者的人数还在持续 ...
- 微软良心之作——Visual Studio Code 开源免费跨平台代码编辑器
微软良心之作——Visual Studio Code 开源免费跨平台代码编辑器 在 Build 2015 大会上,微软除了发布了 Microsoft Edge 浏览器和新的 Windows 10 预览 ...
- Google FlatBuffers——开源、跨平台的新一代序列化工具
前段时间刚试用了一个序列化工具cereal,请看cereal:C++实现的开源序列化库,打算再总结下我对google proto buf序列化库的使用呢, 结果还没动手,大Google又出了一个新的. ...
- Cocos2d-x开源、跨平台的游戏引擎
from://http://blog.linguofeng.com/pages/language/c/Cocos2dx.html Cocos2d-x 开源.跨平台的游戏引擎 一.下载 http://c ...
- 开源免费跨平台opengl opencv webgl gtk blender, opengl贴图程序
三维图形的这是opengl的强项,大型3D游戏都会把它作为首选.图像处理,是opencv的锁定的目标,大多都是C的api,也有少部分是C++的,工业图像表现,图像识别,都会考虑opencv的.webg ...
- 开源一个跨平台运行的服务插件 - TaskCore.MainForm
本次将要很大家分享的是一个跨平台运行的服务插件 - TaskCore.MainForm,此框架是使用.netcore来写的,现在netcore已经支持很多系统平台运行了,所以将以前的Task.Main ...
- 【腾讯bugly干货分享】解耦---Hybrid H5跨平台性思考
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1275& ...
- [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [一] 初衷与架构设计
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 为什么要造轮子 同学们可以去各大招聘网站查看一下爬虫工程师的要求,大多是招JA ...
- RPG JS:免费开源的跨平台RPG游戏引擎
RPG JS是一个2D RPG游戏制作引擎,目前版本基于Ease|JS游戏引擎,基于Canvas Engine的新版本即将发布. RPG JS是免费且开源的. RPG JS有着完善的文档支持. RPG ...
随机推荐
- PHP Filter 函数 日常可用
PHP Filter 函数 PHP Filesystem PHP FTP PHP Filter 简介 PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤. 安装 filter 函数 ...
- C++ 函数 函数的重载 有默认参数的函数
函数的重载 C++允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同.这就是函数的重载(function overloading). int max1(int a,int b, int c ...
- No.100_第一次团队会议
任务的确立 这次会议,我们的主要目标是确定任务: 我们的任务有以下几个选择: 学霸网站,这个项目拥有以前的前端代码,我们再使用Django后端服务.上手难度较低,环境较好. 多平台时间管理软件. 安卓 ...
- 对cnblogs.com的用户体验
1.你是什么样的用户, 有什么样的心理, 对cnblogs 的期望值是什么? 我们是计算机专业学生,是奔向神奇的代码世界的旅人.希望在cnblogs上找到自己感兴趣的技术,并学到更多的知识,提升自己的 ...
- BufferedInputStream 缓冲输入字节流 -------上
package com.BufferedInputStreamUse; import java.io.BufferedInputStream; import java.io.File; import ...
- python learning1.py
# 廖雪峰的官方网站 python教材 1~4章 # 格式控制符语法 print('Hello, %s' % 'world') print('hello, %s, you have %d dollar ...
- grunt入门讲解4:如何创建task(任务)
每当运行Grunt时, 你可以为其指定一个或多个任务, 这些任务用于告诉Grunt你想要它做什么事情. 如果你没有指定一个任务,并且你已经定义一个名为 "default" 的任务, ...
- js全端
js是世界上最好的语言之一,或许可以不用加之一 我是个js游戏前端开发者,但是我不局限于只是开发h5游戏,微信小游戏... js很强大很强大很强大,没有哪种语言能通吃,除了js. 网页, app, 服 ...
- java 数据结构与算法---栈
原理来自百度百科 一.栈的定义 栈是一种只能在一端进行插入和删除操作的特殊线性表:它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数 ...
- 父类是在子类创建对象时候 在子类中创建一个super内存空间
父类是在子类创建对象时候 在子类中创建一个super内存空间