.NET for初学者(2020)

2021-04-22 11:25:44

Warning: Can only detect less than 5000 characters

BCL(基类库)为所有三种语言提供了基础,但它们仅在C#中写入。除非整个特征在一起,除非整个特征是一方的,否则这不是一个问题,除非是一种语言,又非常繁琐地从另一个语言写入。例如,F#仍然没有对任务和任务的本机支持,并且在System.Collection之间转换。*类和F#类型是一个痛苦的事业和F#函数和.NET动作< t>对象' t map很好。

虽然最令人沮丧的事情是当对一种语言的变化强制在另一个语言中强制额外的复杂性。

这三种语言之间的互操作问题是新开发人员的重大负担,特别是当他们从其他东西开始,而是C#。然而,与此可能一样痛苦,互操作问题不是一个新初学者必须面对的唯一复杂性。尝试以有意义的方式向新的C#用户解释与具有默认方法实现的标准类,接口,抽象类或接口一起使用的继承。这些选项之间的差异已经如此淡化,即人们不能再解释一个连贯的答案中的区别。

为一个例子拍摄此stackoverflow问题。在接受(和最高兴)的答案中没有描述的任何内容,它也是如此,对于今天的默认方法实现的接口也是如此:

另一个优秀的例子是越来越多的C#数据类型。创建数据类,不可变数据类,可变结构,不可变形结构,元组类,名为元组的新概念或即将录制类型的新概念?

经验丰富的.NET开发人员对何时使用这些类型的何时何时使用,并且根据新的初学者谁将询问,或者它们' LL阅读,它们很可能会非常不同,并且经常相互矛盾的建议。任何人都不会认为这是一个大规模的问题必须是严肃的否认。学习编程语言是困难的。学习一个编程语言,其中两个导师(你可能仰视的人)给你矛盾的建议甚至更难。

讽刺是,许多新添加的语言和框架功能应该更容易学习:

(顺便说一句,我一直是一个很长一段时间丢弃.csproj和.sln文件的巨大支持者,但以前的微软员工为他们辩护,好像有人冒犯了他们的家庭一样,所以它终于看到了一些支持太想法!:))

唐' t给我错了,我同意斯科特那个特定的功能*将使第一世界应用程序写作比以前更容易,但是,我们的朋友约瑟夫伍德华盛着不可自由地提供:

它&#39不仅仅是学习如何编写C#。学习.NET的一大部分是阅读其他人和#39; S代码,结果也是如此:

虽然我喜欢并支持向C#添加更多功能的想法,但我不能忽视它也造成的收费。

有些人提出了一个很好的观点,可能是时候考虑使一些旧功能过时:

无论人物#39;个人意见是什么,"功能臃肿"当然是C#社区的越来越多的关注,微软将是愚蠢的,不要倾听或至少拿一些笔记。

鉴于F#已经是一个功能的第一个多范式语言,C#肯定会朝向那个方向前进,也许有一天有一天'是将两种语言巩固到一个语言的未来机会? (是的,我敢于建议它!)或者微软应该建立100%的特征奇偶校验,以便互操作性在语言之间无缝,唯一的差异因子仍然在他们的语法中 - 一个推向功能的第一体验和另一个面向对象的等价物。

如上所述,所有三个.NET语言从.NET独立地发展。 C#朝向第9版,F#接近版本5,VB.NET已经在第16版本中。同时.NET Framework在版本3.1上的版本4.8和.NET核心上。 Don'甚至让我开始在Mono,Xamarin或ASP.NET上开始。

现在我明白所有这些事情都是非常不同的,我将苹果与橘子进行比较,但新开发商应该如何了解所有这一切?所有这些组件都是独立的,但尚未相关,以压倒一个带有这样的屏幕的新开发人员:

甚至.NET开发人员拥有5年以上的经验,发现难以消化的上述信息。我知道这是一个事实,因为我在面试中提出这个问题很多,它很难得到正确的解释。问题不是这种信息太冗长,或错误,或者不必要了解,而是不幸的案例,它' s只是大大。事实上它甚至更大但是我相信.NET团队已经尽力将这个屏幕压缩成最简单的形式。我理解困难 - 如果你' ve得到了一个非常成熟的,功能丰富的平台,然后#39;很多很多解释 - 但是它不是特别性感的外观。

与.NET相反,这是在初学者中抛出的认知负载:

它'在各方面都很简单。不可否认,它不是一个完全公平的比较,因为Go直接编制到机器代码中,因此没有人' t在SDK和运行时进行真正的区别,但我的观点仍然是一样的。肯定有足够的改进空间,我不认为我们今天看到的是我们所看到的。

也许在正式对齐语言中的一些价值,ASP.NET核心和.NET(核心)版本每次一起发行一个连贯的发布?幸运的是.NET 5是那个方向的正确步骤,但在我看来,那里还有更多的事情!

现在这个可能会遇到一些神经,而是一个*大* .NET的问题是微软在任何地方都痴迷于.NET的想法。每一个新的发展都旨在统一一切大型平台,为每一个可能的用例都有想象的:

(感谢Ben Adams I&#39的礼貌。ve更新了图形,以表示.NET的完整图片。Ben为自己的博客创建了这个图像,您可以在www.ageofascent.com/blog上阅读。)

在许多方面,它具有很大的意义,但所采取的角度造成比帮助更大的伤害。虽然它在舞台上行走了很多感觉并吹嘘你的产品可以解决他们所有现有和未来问题的潜在客户,但它并非总是最好的方法,当您实际上想要从事新开发人员各种各样的不同行业。

将整个堆栈统一到单个.NET平台上并未提供。多年来,事情不断地移动,已经创造了新的东西,其他事情已经下降了。最近我必须再次重新考虑我的ASP.NET核心启动代码:

每次尝试统一的统一事物' s&#39的缘故使得简单的代码更详细。毫无疑问,前面的代码更容易理解。我赞赏了一份通用主机的概念,但是一个人必须奇异于开发人员实际上想要将两个服务器组合成一个人?在我看来,必须有一个真正的好处,以证明复杂性,例如在另一个建设者中拥有一个建设者!开发人员多久希望*创建* Web服务器而不是*运行*它?我肯定这些边缘案件确实存在,但为什么可以从另一个通常举行的使用案例中隐藏在其他99.9%的情况下?

像生成器模式一样好,有用的是,无论兰德达表达可能给出的架构好处都可以给予,到一个只想创建Hello World Web应用程序的C#Newbie这是疯狂的!

路由器:= ... //等效.netif错误中的startup类:= http.listenandserve(":5000"路由器); err!= nil {//处理err}

微软' s"瑞士军刀"方法在许多不同的方式创造了新的.NET开发人员对新的.NET开发人员的不必要负担。

例如,这里'是作为.NET CLI的一部分发货的所有默认值的模板的输出(减去长颈鹿一):

他们几乎没有适合单个屏幕。再一次,它'很多微软将Blazor作为WASM的答案,或者他们将WPF作为Windows的选项,但为什么这些东西在一起作为一个大丑陋的事情?为什么可以是控制台应用程序或类库的模板,然后是一些文本,其中说明了如何下载更多?这是一个经典的例子," .net到处都是#34;进入大多数用户'办法!

它很少是新的.NET开发人员想要在选项海洋中淹死之前的情况,以便开始使用一些基本代码。大多数新人只想设置最小骨骼以启动和运行并编写他们的第一行代码。他们甚至不关心它,如果它'是控制台应用程序或ASP.NET核心应用程序。

我完全支持一个.NET的想法,它可以满足各种不同的需求,但必须以更少的压倒性方式应用。 Visual Studio'新项目对话不需要匹配Microsoft' S营销幻灯片和Dotnet New命令不必为每种类型的应用程序运送模板。它不得不经常发生开发人员首先要在一系列业务Web应用程序上工作,然后告诉构建一个Windows窗体存储应用程序,后来要求建立游戏。绝对没有人需要二十种不同的模板,这些模板在他们的机器上跨越十个不同的行业。

我的建议是优化初学者的.NET体验,并根本不担心高级开发人员。第#39;'我们称为高级用户的原因。如果高级开发人员想要从iOS切换到IOT开发,那么他们将知道在哪里找到该工具。目前.NET CLI船舶十五!!!用于用户选择的不同Web应用程序模板。如果甚至经历的.NET开发人员划伤他们的头,如何如何在正确的模板上决定正确的模板?微软必须明白,没有跃发每一个工具或具有百万不同选择的工具或IDE .T的意味着用户不明白这些选项确实存在。

在我看来,周围的整个心态和#34; .net到处都是#34;完全错了。它应该是一个积极的副作用而不是目标。

我观察到的另一个问题是微软害怕被忽视。微软有几乎所有问题都可能面临的问题。它'这是一个惊人的成就和真正为其感到骄傲的东西(而且我真的是吝啬的事情),但同时微软必须学习如何为开发人员提供一些空间。

微软不会错过一次宣传一系列产品的机会,当有人看一定的时候。做.NET开发?哦,看,这里是可视化的工作室,可以帮助你!哦,顺便说一下,您可以直接部署到IIS!如果您想知道,IIS附带Windows Server,也可以在Azure中运行! AHA,谈到Azure,您是否知道您也可以单击此按钮,可自动创建订阅并部署到云端?如果你不喜欢右键单击发布我们也有Azure Devops,这是一个全功能的CI / CD管道!当然有没有压力,但如果你*现在注册*那么我们' ll给你一个月的免费积分!无论如何,它' s只是一个"友好提醒"所以你知道理论上我们提供完整的包,以防你需要它! C'周一看着我,看着我,现在看着我!

再次,我完全明白为什么微软做了他们所做的事情(和我'你肯定有很多良好的意图),但它遇到了完全错误和相反的方式。

嘿伙计,看看我们现在不同,我们是跨平台,我们跑到处都是我们希望你有一个伟大的体验。在这里'这是一堆可以帮助您旅行的东西。

嘿,所以.NET是一个Microsoft产品,它主要只与其他Microsoft产品合作,所以这里'这是一堆你必须使用的东西!

一方面,微软希望创建这个新品牌的开源,跨平台开发工具链,并在另一个时,他们在另一个他们推送Visual Studio和Azure时.NET。这是发送混合消息和混淆新的开发人员,从.NET和#39;实际的光彩,并对整个开发平台进行大规模的孤立。令人沮丧的是,越多.NET正在向世界开放,微软正在推动自己的专有工具。如今,当您观看一些最具标志性的.NET员工时,请在.NET上演讲。然后它'■只有50%.NET和REST广告窗口,边缘和Bing。这不是大多数.NET开发人员来看,它不会发生在其他编程社区中,例如Node.js,Rust或Go。除此之外,如果有人经常宣传本月的每一个新的微软味道,那么他们也会随着时间的推移而失去开发者的信誉。

这个问题,特别是答案真的很糟糕,Beca

......