.net 主要的开发语言是 c# , .net 平台泛指遵循ecma 334 c#和 ecma 335 cli 标准的开发平台 ,包括微软自行开发的.net 平台和 开源实现的mono 以及 微软最新开发的.net core。 从2007年加入公司自今一直在使用c#, 对这门语言在 腾讯的使用情况有大概的了解,最近有空整理了一下相关的情况,破除江湖传言 ”国内互联网公司都不用c# ”。
1、2003 ~ 2007 年
微软在2002年发布.net 1.0,2003年发布 .net 1.1。由于.net的开发效率高,2003年开始腾讯的oa系统也开始采用.net进行开发,早期的oa系统是使用cgi来开发的,2007年我接手oa的单点登录系统时里面还有cgi 的兼容性代码,那个cgi的兼容性代码还存在着内存泄漏问题,一直到2013年 oa登录的重构 才把它移除。2003年oa开发团队开始迅速的从几个人发展到2006年的30多人规模,公司的快速发展也要找更多的开发人员,在toby的介绍下2007年加入了腾讯,我从加入公司开始就一直负责腾讯oa基础服务,简称tof的开发运营工作。
2003到2007 这几年是.net在腾讯快速发展的几年, 最早的oa工作流-品高工作流产品也是用.net开发的,2004年引入并做了二次定制性开发, 我到公司后也接手维护过这一个工作流引擎,品高公司不再维护这一个版本, 2008年引入k2 工作流引擎替代它。 公司的门户www.oa.com 曾经是使用微软的sharepoint 2003系统二次开发而成,他是由toby 负责的,他是微软2005~2007年的mvp,也是在微软的社区活动上认识了toby,后来也在他的引荐下加入腾讯,工作到现在。当年不仅仅oa是用.net开发的,公司内很多的业务运营系统也是用.net开发的,开发的第一版的tapd 也是用.net开发的,在我到公司之前他们组建了现在的研发管理部用php重写了tapd,这也就开始了php替代asp.net的进程 ,还有很多系统,财经/hr/scm/公司论坛bbs/itil/boss等等的系统,可以说这是.net在腾讯的顶峰时期。从2007年开始往后的时间里asp.net开发的系统逐步使用python/php等替换,幸运的是,腾讯支付业务(前身财付通)的清算,风控等业务从创立至今还在使用c#,最近我有幸转岗到了支付清算业务,继续发挥光大c# 。
2、2007 ~ 2014 年
2007 ~ 2014年这个时间段的划分,正是按照微软的鲍尔默时期,微软丢掉互联网和移动互联网时期。 2007年初加入腾讯时,和toby一起前往微软总部参加微软mvp 全球峰会,比尔盖茨告别ceo,ceo交给了鲍尔默,一个干销售的ceo一心想着赚更多钱的,死抱着windows不放,导致互联网公司都排斥使用windows,.net 有着天生的跨平台理想,却始终没有实现,导致了很多人认为.net只能跑在windows上,观念一旦形成就很难改变,在此期间开源的.net 实现mono项目却在移动互联网领域找到了落脚点, 基于mono的商业项目xamarin和unity 分别在移动开发和游戏开发领域占据重要地位。
2007年初我加入腾讯,接手民哥维护腾讯oa基础服务tof,这一干就是9年,在这期间有很多同事出去创业了,民哥带领了一班兄弟去开创了公司的内网安全领域,其间开发的安全运营平台也是用.net 开发,2013年开始也逐步用c++替代.net开发了。公司的业务剩下使用.net开发的项目已经不是很多,掰着指头就可以数得过来,目前还有财经/行政/hr/财付通/互娱一些运营系统还是使用.net开发。如果只能部署在windows平台上,这些系统迟早要被替换掉。因此,我在做腾讯oa基础服务tof的维护的同时,业余时间在研究mono跨平台开发,通过博客,微搏宣传mono项目,并在实践中进行实践。
这个跨度的时间有7年,我也一直在进行腾讯oa基础服务tof的升级改造工作,在2014年完成了最完整的一次重构,支撑起公司内网api调用千万级别的蜕变,具体可看我的文章介绍《先定个小目标, 使用c# 开发的千万级应用》。公司其他使用.net开发的系统也在不断的演化,得以继续生存下去,当然也有很多的同学不再使用c#,转而使用其他语言来重写系统。2013年公司code平台第一次推出了腾讯年度代码报告:http://code.oa.com/v2/report/2013 ,开发语言前10 中不见c#的身影,我还没有运营公众号,这个只有内部数据,需要看具体内容请加入鹅厂。
2014年的腾讯年度报告http://code.oa.com/v2/report/2014 〈2014腾讯代码报告出炉 c#代码量增长一倍〉奇迹般的c# 排到了第七,增长了1700w行,这是什么魔力让他增长如此迅速,开发者也增长到了1563人。
在.net应用被其他语言不断替代的情况下,2014年c# 的代码却发出了洪荒之力,主角就是基于mono平台的unity 游戏开发,是手游让c# 爆发了,unity5.1版本后全力支持vr开发,今后的vr/ar领域c# 还会继续发扬光大。
3、2014 ~ 未来
2014 年更换了ceo,萨特亚·纳德拉接任ceo,正式开始推行开放策略,开始拥抱linux,开源,.net core持续2年的开发在2016年6月27日发布rtm,在这两年时间内微软转型也很成功,微软股价走出了一个完美的大底,现在刚刚开始上涨。
微软在这两年时间内也完成了对mono的开发商xamarin 的收购,通过成立.net基金会,效仿apache基金会的运作来推动.net平台的发展,目前已经吸收unity,redhat,samsung等业内企业加入。微软也完成了对.net 的平台演进规划,下面这张图是它的未来全貌:
2014年c# 在腾讯的发展借助于手游的发展使出洪荒之力,2014年的发展也很好,成为最有潜力的开发语言,我们来看下2015年腾讯年度代码报告http://code.oa.com/v2/report/2015:
使用c# 的人数从1563 上升到2068,代码增长也是千万级,据我所知这些增长都是unity所带来的,在新的vr 领域还会看到c#的增长,在传统的服务端应用开发方面还在继续下降,形势不乐观。随着微软发布.net core 1.0, 在windows、os x和linux系统上可用了。.net core是一个跨平台,开源代码,模块化的.net平台,可以用来创建现代网络应用,微服务,库和控制台应用程序。.net core现在在red hat enterprise linux和openshift上是可用的。另外,.net core完全被red hat支持并通过微软和red hat之间的集成混合支持合作关系进行扩展。
这是自.net创始以来最大的转变并且会在下一个十年引领.net的发展。我们已经以满足当今世界的需要为目标重建了.net基础: 高度分布式的云应用,微服务和容器。.net框架和.net核心以及xamarin 都是微软重要的产品,将继续分别在windows、linux跨平台云计算和跨平台移动领域发展。这个.net框架和传统的asp.net将继续与你现有的工作负载相关。你可以共享代码并且在整个.net体系中重用你的技能,所以你可以决定用什么并且什么时候用,包括运用了xamarin的移动应用程序。
微软在.net core 1.0 公告 列出了.net core 使用情况,游戏《崛起时代(age of ascent)》的开发商 illyriad games,报道称在azure service fabric上使用了asp.net core之后,性能提升了10倍。网易,一家中国领先的it公司,为内容、游戏、社交媒体、通信和商业提供在线服务,需要在不断变化的游戏空间保持领先优势也选择了.net core为后台服务。相比以前的java后台架构:“.net core缩短了我们发布周期的20%并节约了30%的工程资源成本”。当谈到吞吐量改进和成本节约时说到:“另外,它使在生产方面的虚拟机数量成半减少成为可能”。
总结
c#语言经历10几年的发展,已经从1.0发展到7.0,但是.net平台重新回归跨平台的设计初衷,版本号重新回归到1.0,重新出发。c#语言在腾讯的使用情况也经历了高峰到低谷,我们也要重新出发,我也转岗到支付业务,通过和同事们一道努力进军tlinux,docker。
