大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。
当前系列: 编程语言 修改讲义


三顾茅庐

1997年,Borland公司起诉微软公司,控告微软在30个月内挖走了自己30多名重要雇员!而其中的核心人物就是后来被称之为C#之父的Anders Hejlsberg(安德斯-海森博格)

  • 辍学的都是大佬
  • Delphi/Pascal之父,极其擅长编译器和IDE

Borland公司得到了广泛的同情,因为微软太夸张了:

  • 加长型轿车直接开到Borland大门
  • 三次饭局:100万 => 200万 => 300万
  • 最后一次,比尔·盖茨亲自出马,除了丰厚的报酬:
    安德斯:但我到微软来干什么呢? 比尔:你想干什么就干什么!


夭折的J++

这场诉讼虽然最终以 Borland 的胜利而收场;但Anders 已经在为微软工作了,研发Visual J++

  • J++:是Java语言的一个变种,其语法、关键字等均与Java相同
  • Visual:提供了Visual Studio的IDE支持

但是,因为和Sun的纠纷(参考:为什么),J++被迫中止。后面微软还试图用J#再蹭一蹭Java的热度,但最终还是不得不另起炉灶,C#横空出世!


C#

读作C Sharp,名称含义:

  • 官方解释:锋利的C语言
  • 民间说法:C++++,比C++还++
实际上,C#来源于J++,J++里面超越Java的部分内容(比如delegate和event)都被带到了C#中。


和.NET啥关系?

这是让很多人一头雾水的东西,也是鉴别一个程序员是不是懂C#/.NET的试金石。

被飞哥骂得删帖的一篇文章,就犯的这种低级错误。

和Java做一个对比:

  • .NET是类似于JRE的一个平台/环境,要被安装在操作系统中的
  • C#(还有VB.NET/F#)等语言编写的源代码都会被编译成类似于Java字节码的中间语言Intermediate Language
  • .NET运行时负责执行IL语言代码


追随并超越

C#一经推出,就取得了巨大的成功!

简单来说,C#(相较于Java)的优势:

  • 原生的WFC支持,开发windows桌面应用的必选(都不能说首选了……)在windows桌面应用仍然大行其道的时代,C#+Winform的搭配简直无敌。
  • 宇宙第一IDE(VisualStudio)
  • 更优秀的语言特性

以下引用自微软官网《C# 发展历史

  • C# 版本 1.0 非常像 Java,一开始是面向对象的 (OO) 通用语言
  • 而 C# 2.0 版很快改变了这一点。不过 C# 依然在追赶 Java 的道路上
  • C# 3.0 开始为 C# 转变为面向对象/函数式混合语言打下基础。C# 成为了真正强大的编程语言。

对标Java

但实际上C#和Java之间是你追我赶,最终趋同的。

一个合格的程序员(比如3-5年开发经验,能够独立完成绝大部分日常工作),在C#和Java之间转换,大概就这个样子:

第一天,找点文档看看,划划水

第二天,

  • C#开发:把开发环境搭起来(搭环境难度:Java > C#)
  • Java开发:学一学C#里面有的Java里面没有的语法,主要是Linq

第三天,骂骂咧咧的开始干活!

一个月以后,真香……

主要差异,先睹为快

C#仍然保留了(但不推荐)指针,以满足某些特殊情形下的开发需求(比如飞哥的代码演示)。要记得C#是有取代C++的野望的,^_^

  • 使用指针的代码被称为不安全的(unsafe),内存的释放由程序员自己负责
  • 不使用指针的代码被称为安全的托管(managed)代码,内存有.NET运行时垃圾回收(GA)

C#保留了结构(struct),类似于类(class),但其实生成值类型对象(实例化类会生成引用类型对象)

C#语言中Linq配合Lambda表达式,简直是大杀四方天下无敌!


.NET的破绽

我最开始想用“败笔”,但想一想苹果,人家一样“封闭”,但就做得挺好呀?

但无论如何,C#并没能超越Java,即使算上VB.NET,市场份额也和Java有一段相当的距离,为什么呢?主要是被.NET拖累:

绑定windows平台

本来,.NET设计之初就是为了跨平台的(IL的作用),但是,出于商业利益上的考虑,.NET一直顽固的只支持windows操作系统。

以至于旁人都看不下去了:这么优秀的语言,居然……干脆自己搞一个能在Linux等操作系统上面运行的.NET吧!mono就此诞生。

闭源

这是微软的一贯作风,疯狂diss开源运动。

微软前CEO史蒂夫·鲍尔默的名言:

开源就是一种癌症,Linux 是一种毒瘤

彻底激怒了整个开源届!

所以一直以来,.NET都是孤军奋战,举世皆敌。

PS:上面两个原因,本质上都是因为利益,明白吧?

Web时代步履蹒跚

基于.NET的Web项目开发技术被统称为ASP.NET。

.NET的命名其实已经暴露了它占领(互联)网络的野心(微软当时就应该已经认识到:桌面应用会衰落)。

ASP.NET 2.0 WebForm很快推出,当时确实非常牛逼,广受欢迎;但好景不长,Ajax和富前端技术迅速发展,ASP.NET跟进的力度不够。

同时在浏览器端又发力SilverLight,又一次的押错了宝,惨败!


革新之路

2018年6月4日,开源届被一则新闻惊呆了!

微软斥资75亿,收购开源大本营github

这是干啥,仗着财大气粗,要团灭开源啊?不讲武德!

误会,误会,都是误会!^_^

.NET core

其实微软内部,一直都有要求开源跨平台的呼声。

早在2016年6月27日,微软就发布了可以跨平台的ASP.NET core;

然后以此为突破,在开源的道路上一路狂奔,.NET被分成:

  • 只支持windows的.NET Framework,和
  • 开源的、跨平台支持Linux、MacOS等操作系统的.NET core

直到直接收购了github,表明其拥抱开源世界的决心。

2020年11月11日,.NET5正式发布,一统Framework和core,终于结束了.NET Framework和Core纠缠不清的复杂局面。

未来,我们拭目以待!


Web以外

除了做网站还能干啥?多了去了!

基本上啥都可以做

  • windows桌面开发:WinForm/WPF
  • APP:Xamarin,跨平台(Android/iOS)的APP开发框架
  • 游戏:页游(H5和Js)/桌游(unity)
  • 人工智能和大数据
  • 物联工控
  • ……

但实际上,你的第一份工作究竟是什么,现在是无法预知的。飞哥在培训班学的还是Java呢!

通过这个培训,最理想的结果,不是教会了你多少知识,而是形成了你“自学开发”的能力——这才是最重要的最根本的:做程序员,自学能力是核心竞争力。因为技术的进步和迭代实在是太快太快了,不可能出来一门新技术,你就要上个培训班,那你挣的那点工资,还不够培训费呢!^_^


作业

  1. 说一说C#和Java,有哪些类似,有哪些不同?
  2. 说明白一下这些概念之间的关系:
    1. C#和.NET
    2. ASP.NET和.NET
    3. .NET Framework和.NET core


延伸阅读:C# 发展历史


学习笔记
源栈学历
大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。

作业

觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 编程语言 中继续学习:

多快好省!前端后端,线上线下,名师精讲

  • 先学习,后付费;
  • 不满意,不要钱。
  • 编程培训班,我就选源栈

更多了解 加:

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧

公众号:源栈一起帮

二维码