点击上方蓝字
关注我们
(本文阅读时间:15分钟)
大家好!我是爱吃、爱玩、更爱学习技术,IT界新晋小红人,开发者的好朋友——比特熊!
比特熊:本期故事汇是.NET专场,今天一次性邀请到DOTNET领域大家非常熟悉且各有擅长的三位嘉宾,给我们来谈谈.NET 7.0的新版本解析,技术选型,DOTNET企业应用现状,还有12月DOTNET 2022社区峰会划重点!我们先请各位“红人”介绍一下自己。
更开放的心态带来更繁荣的生态
苏震巍
用科技造福世界
盛派网络创始人/首席架构师
微软RD/MVP
微软技术俱乐部(苏州)主席
董彬
以渺小启程,以伟大结束
野村信息高级工程师
这是.NET最好的时代
黄国石
学无先后达者为师!
中通快递资深架构师
开心撸码,快乐生活!
苏震巍:我是苏震巍,是盛派网络的创始人兼首席架构师,也是微软最有价值专和技术社区区域总监,现任苏州微软技术俱乐部的主席。关于.NET我写了两本书:《网站模块化开发全程实录》——已经被很多大学当做教材了;《微信开发深度解析》,主要讲跟微信有关的.NET开发,已经印到第九版了。我在2002年.NET刚出来的时候就开始关注它,真正开始做产品是从2003年的时候开始了,那时候我刚上大学(暴露年龄了)。在将近20年的时间里,看到了.NET整个成长过程。当然我也用很多其他的技术做一系列的开发,有很多心得。.NET的趋势非常吸引我,在过程当中给我带来了非常多好处。
董彬:我叫董彬,现就职野村证券的信息部门,为公司的风控系统开发客户端。虽然我看起来很“成熟”,但实际上我做程序员就只有三年的时间。今天我是以新手程序员的身份分享我在工作中,.NET究竟给我带来了怎样的变化,以及我为什么会选择.NET作为我的主要研究领域。可能有朋友看我眼熟,因为我参与Reactor的活动,今后我也希望能够在技术领域,为.NET社区做出更多贡献。
黄国石:我是黄国石,网名“智能大石头”。现任中通快递的资深架构师,做数据分析和物联网,主要是车联网方面的项目。在社区里面我也算比较活跃,我有一个社区是新生命团队,我们有40多个开源项目,从2002年开始到现在已经20年了,踩过很多坑。我常把自己和朋友们在项目和实践中的经验做整理,做成开源项目和分享,丰富整个社区。今天我跟大家聊聊企业使用.NET的情况以及.NET在国内的现状。
比特熊:比特熊在去年11月的这个时间,请到了苏老师来做.NET 6的讲解,对苏老师逻辑化思维印象深刻,今天还是请苏老师给我们技术点把控一下。
.NET 7.0新特性大赏
苏震巍:从.NET 7的预览版我就一直在关注,发布之后,我们社区的一些产品也同步更新到了7.0。我重点讲几个我认为重要且可能对未来影响较大的更新。
第一个是对ARM64的全面支持和升级,一直以来.NET在CPU架构上主要以x86为主,对ARM甚至ARM64这样一些比较新的CPU支持有限。这一次.NET 7迈出的最大的一步是在CPU架构上,对ARM64的支持是有里程碑意义的。现在国产化对中国的软件市场是很现实的挑战……可能将来三年到五年,大量新采购的服务器会到ARM上面,不管你是不是国产,.NET 7在ARM层面的支持奠定了它将来是否能够在新的市场里有优势,吸引更多新鲜血液。
第二个是性能方面的提升,.NET的性能不断刷新我们的认知,3.1的时候它已经非常快了,以至于当时发布会上Scott Hanselman都以为是Demo跑错了,他自己都不敢相信跑出了一个非常棒的成绩。当时大家觉得这已经是巅峰了,速度已经达到了Node.js的好几倍。可是后来仅过了两年,6.0的速度已经是Node.js十倍以上了,现在7再一次超越。
在社区里面的经常有这样的声音,Python/ Javascript 等很多语言好学,但为什么C#的上手就是看语言还可以,但是看到框架就好像得去建一个比较庞大的项目,才能把它运行起来。这一点在.NET 6的时候已经做了比较好的改进,包括结合C#10。我们已经有了全局的using和非常简洁的的写法,我觉得这一点是非常务实的,因为一个好的语言,你不能总是要求大家有非常长的学习周期,才能够驾驭他。我觉得一个好的语言,应该是能从幼儿园,一直到老年大学,一整条线都应该去支持它。
曾经.NET Core在入门方面,是有一定的缺失的,当时微软花了大量的力气在做MSlearn,微软大量在推怎么样教会你去用……在6以后,可以看到非常好的趋势,比如我们现在已经可以通过一行代码跑出一个Hello World。我觉得在6之前,是没有办法通过官方的框架做到这一点,除非你在底层做很多别的事情。现在从6到7是非常符合这样的一个趋势,整个的环境,包括加上VS Code、Visual Studio原生的支持,像现在Windows11,包括Windows Server,做了很多原生的支持之后,甚至比开发Python还要容易。直接打开,跑一下,编一下,然后build一下,就可以去run了。在我心目中这是一个非常健康的,足够吸引我的框架。
比特熊:苏老师还以7.0更新中的泛型数学为例介绍了.NET在科学研究方面的潜力,希望这点能吸引到更多大学生使用.NET画图、做数据统计。
半路出家爱上.NET
董彬:接上苏老师的话题,因为我最近投入了比较多的精力在Avalonia UI的框架上面,这回有两个巨大的更新让这个框架得到了很大的提升。一个是7.0第一次实现了真正的Native AOT,让Avalonia UI可以编译成完全原生的Native客户端,启动速度更快,也增加了它反编译的难度。另外7.0推出了没有Blazor的WebAssembly,这样Avalonia UI就能以原生的WebAssembly实现在Web上的运行,这两点更新让我很惊喜。
我不是计算机专业出身的,我本科学能源动力,研究生学流体力学。2019年才开始转行做程序员,我的职业经历大概可以代表半路出家的程序员。我的第一份工作是在油田科技服务公司SLB当机械工程师,画画机械图。工作本身并不需要编程,我第一次接触到代码,是因为公司有一个程序是VBA(Visual Basic Applications)的,我们需要在Excel里面监测读出来的数据,然后直接生成报告。这就是我对.NET的第一印象,可能跟很多人都不一样。
工作到第二年,我开始对重复的文档工作产生厌烦,就自己写了一个WinForm的程序,那种输入几个关键字,就能直接输出一大段质量报告的评语。后来,我接触了WPF开发,在公司内部做了一个很成功的项目——用快捷键选中一段文字,然后拼个网址在浏览器里打开。很多内部系统都是通过这种方式来打开文件的,这大大提升了工作效率,也得到公司高层的认可。后来我了解到我们公司在北京有一个软件分公司,有非常复杂的WPF和现在我才知道叫ASP.NET的应用。作为一个机械工程师,以为我学程序在公司里面无法得到帮助,但当我在公司的论坛里发出问题,得到了非常专业的回答,因此我了解到公司的这个地层勘探相关的产品非常厉害。这种有专业支持的感觉给了我很大信心,也让我相信我也可以将较为复杂的东西做出来。随着我的探索,我发现程序不完全是照葫芦画瓢,就能写出来的东西。我不怕大家笑话,在我写完我的第一个程序之后,还是不知道值类型和引用类型的区别,甚至不知道两个概念的存在。我意识到了系统学习.NET的重要性,所以辞职去读了我的第二个研究生,数据科学方面的,整整两年时间都在写Python和R语言。虽然这些东西现在还是会的,但就是觉得有点虚无缥缈,跟我当初设想的不一样,我最早在计算机和机械专业之间选择了后者,就是因为喜欢这种看得见摸得着、去做手工艺品的感觉。现在Python和.NET之间,.NET更能给我这种感觉,因为它能够开发出一个漂亮的UI,后面我就更专注于.NET方向了。
毕业之后,我进入了一家设计、制造卫星的公司,他们所有的上位机全都是用WinForm开发的。我入职后的一个任务是为我们即将发射的三颗卫星开发地面运行控制系统。因为前期在上位机部分已经有非常多知识积累了,所以这个运控系统我们选择了ASP.NET Core作为后端,它有非常多的知识可以直接迁移。为了实现多端控制,我们也做了前后端分离,变成我一个人写ASP.NET Core的后端,也写了React的前端。正值2019年,.NET的开源进步非常快,3.1刚出来,.NET Core性能有极大的提升。我们的项目进展也很快,收获满意的成果。这家做卫星的公司里都是卫星方面的专家,没有专门的软件工程师。专家们的专业知识是非常宝贵的,.NET是把他们的专业知识转化为成果的重要手段,这也坚定了我做.NET的决心。
我后来到了现在任职的公司,做风控系统。它的客户端非常复杂,庞大到网页应用完全没办法实现它的功能。有人问过我,这个系统为什么不能用Web来做,我用Postman给他Call了一下这个API,都不用渲染了,返回出来的json就直接让Postman崩溃了。但是在WPF的界面上它的体验非常丝滑。所以说在非常critical的场景下,大家所推崇的这种Web应用不能满足需求。
从以上经历大家可以看出,我虽然是一个.NET开发者,但我实际上从事的领域是各式各样的。.NET开发者可以尝试在更多的行业领域去实现自己的理想,如果你有希望实现的想法,.NET可以是最好的选择。虽然我写程序时间不长,但是我写过VBA客户端、Web服务,还做过游戏,写过Unity,是AntDesignBlazor的早期贡献者,我也用.NET写过前端,现在MAUI差不多已经正式发布了,.NET现在也可以用来写移动端。
今天的另外两位嘉宾都有创业经历,应该能够感受到.NET对于创业公司是一个高效开始业务的好选择。我想鼓励更多像我一样可能不是专业程序员,但希望通过程序来实现个人理想或价值的朋友,来看一看.NET平台。
各行各业如何用.NET
黄国石:董彬老师刚才提到了卫星的地面站是直接用.NET开发的。我自己了解一些.NET在各行各业的使用情况,这可能在公共平台能查到的总结资料很少,今天给大家分享一下我的心得。
我算是一个幸运儿,1996年就开始接触计算机,1999年开始写程序:BASIC、VB、SP啊,后来到Delphi、PHP、Python等等学了很多,上大学就学C语言,C++之类的。我跟苏老师差不多,大概是2003年左右接触到.NET,但我没有学过.NET。刚才董老师讲到,可能原来的语言很难构建一个比较大的应用,我可以说BASIC、VB、SP、 C、C++都相当可以,但是感觉这些语言都很难构建一个很大的系统应用。于是我又去学了Java,然而快毕业的时候发现找不到工作。当时被广西电网录用了,要我写ASP.NET,虽然没系统学过也阴差阳错就从ASP一直进到这个ASP.NET来了,进来之后基本上就没有离开过.NET了。
我做过电网、金融、传媒,还有互联网创业,一直到现在的快递行业,这二十多年的时间转眼就过去了,我跟着.NET一起成长。我学了这么多语言,为什么一直没离开.NET?在这个背景下,我讲讲我对国内.NET在企业使用情况的了解。
在南方电网里,Java和.NET是平分秋色的。因为Web系统变动,.NET变少一些,Java变多了一点;工业是.NET相当低调的一个领域。工业里面做数据采集,辅助制造,清一色使用Windows系统,使用.NET,这个领域里很难找到非.NET的应用,.NET占比可能在95%以上。
很多人听到医疗就想到云什么的,但其实医疗领域大部分系统是不开外网的。医生开药方用的电脑的性能会偏高一点,跑的是一些桌面客户端。我自己观察过,这类桌面软件的复杂度很高。很多人都想说,这个桌面软件能不能换成Web,换成BS结构,在很多地方行得通,但在医疗里面真的很难。有些自助机慢慢会出现一些Web应用,一些Web做的展示和查询,还有就是拿这个客户端,用Cloudflare套一下Web去做一些东西,去连接硬件,例如说读卡器、打印机、身份证识别等等。大一点的三甲医院,它一年的信息化建设投入是过亿的。这个行业里服务器一般也是Windows驱动,虚拟化用的比较少,所以医疗行业里基本上也是以.NET为主。
生产行业,也属于工业,设备的控制机加工,制造领域.NET占比还是很高的。因为得益于Windows系统,.NET跟硬件的亲和性非常强。几乎所有外部设备都有Windows的驱动,Linux的驱动比较少;物联网领域,比如城市灯光秀、环保、建筑信息、设备运维等等很多跟硬件比较接近或者直接控制硬件的领域,基本上也都是.NET的。这些领域如果用其它语言开发,一是没有积累,二是对实时性的要求很高;我所在的中通快递,有几百台自动分拣机,还有非常多的设备,包括自动分拣、动态秤、快手、狂扫等,这些设备里面清一色是Windows+.NET,没有例外。
金融行业比较特别。量化交易的算法很多是用.NET写的,因为要用.NET版本的TensorFlow,不是Python版本的,Python版本跑算法是可以的,但是跑应用的话还是欠缺。
跨境电商.NET在国内虽然占比不高,但是在国外是非常流行的,像跨境电商领域对接国外的时候.NET非常受欢迎。咱们国内如果你去外资公司做开发的话,很多都是用.NET的。这两天我在群里面看到一位大佬讲了一句话,说这些人一直埋怨国内薪资不好,那你为什么不学一门外语呢?学一门外语薪资可能就打开了。
政府领域,近些年操作系统和软件国产化推的比较火热。最近两个月有一个朋友,他们国产化了一个信息收集的项目,我也给了他们一些建议,经过论证,目前所有国产Linux操作系统都是支持.NET的, 6.0、7.0、mono都是很容易装上去跑起来的。国产操作系统最缺的是桌面软件,基本可以说.NET是在Linux桌面开发上最好的框架。我们自己也跟进了三年多,确实做的很不错。去做一些Linux桌面软件,哪怕一些小工具也是蛮有前途的,不要把目光只盯着互联网。
对于找工作来说,一些公司决策者对.NET的认知还停留在十几年前,和Java相比开的薪水少,技术人员钻研.NET的热情相对低,形成恶性循环。其实只要更新认知,调整合理的薪资水平,就不会缺.NET人才。而对于.NET开发人员而言,只要有能力,就不缺机会。
.NET Conf 2022盛会划重点
比特熊:今年依然是在12月举办了.NET Conf,三位嘉宾都是这次盛会的核心人物,给大家划个重点吧!
苏震巍:这次是12月3-4号两天,主题更丰富了。3号上午是主会场,下午是解决方案,可以具体了解用.NET针对不同行业有什么解决方案。4号更多聚焦在技术层面,主会场有一系列的分享,下午分为三个板块,.NET在前端, IoT,还有开源。今年我们的主题是开源、安全、赋能。其它的很多语言都出现过非常大的一些bug,或者一些漏洞,.NET目前还没有。针对这个问题,一方面我们如何主动提高安全的能力,另外一方面也向大家展示.NET 7在安全方面的能力。
黄国石:今年我们增加了IoT的分会场,在工业领域其实有很多很低调的公司,今年我们邀请了上市公司维宏的首席架构师,来讲他们在工业控制里面的一些实践。邀请了国内比较有名的王强,他自己做了一套非常成熟的系统,写过相关的书。想告诉大家,.NET在很多领域可以做的很轻松很好,特别是在IoT领域。
董彬:我觉得我是跟着.NET Conf一起成长的,从听众到主持人,去年的闪电演讲,这次是正式演讲,这次我希望能够隆重地把Avalonia UI这项技术介绍给国内的开发者,因为现在随着国产操作系统的普及,越来越多的国产操作系统桌面软件的开发要被提上日程,我对比了各个开发技术后觉得Avalonia UI是一个非常适合.NET开发者入门的技术,尤其是针对龙芯这样一个全新的指定架构的操作系统来说,Avalonia UI有非常好的表现,并且龙芯公司对这个项目是非常支持的。
苏震巍:我参与到了主会场,负责开源板块的新内容,比如自动化的测试,视频方面的FFMPG,如何用.NET来玩音视频的处理,以及我们怎样在.NET上用TensorFlow。另外还有一位不是神秘人物的神秘人物,去年我们邀请了Scott Hanselman来交流,今年是哪一位大咖大家可以到我们峰会的内容里面去揭秘。
比特熊有话说
正值DOTNET 20周年和感恩节,比特熊与成为网友已久的几位专家探讨了.NET 7.0版本最新的测试感受和DOTNET “一路走来〞的特别故事。苏老师应该是新版本国内第一位公开测试者,黄老师提供了许多搜索不到的.NET应用企业的分析实感,通过.NET演进也里程碑化了董彬老师在这个领域的不断探索。了解了大家的真实经历,比特熊感受到了一项技术对开发者的能力促进和开发者的热爱不断推进的多维度探索。本期故事汇,不止技术选型,行业大观,经验畅谈,还有.NET领域风采各异的开发者映射出的DOTNET多样面。希望大家对自己憧憬的事物保有热爱,也从中汲取养分。
扫描比特熊个熊微信二维码
加入【比特熊粉丝后援会】
与开发者一起嗨聊,期待成为你的好友~
点击「阅读原文」重温本次直播~