首页 > 编程笔记 > C#笔记

C#/.NET开发学习路线以及职位要求

在我们学习 C# 语言之前,也许大家会有这样的疑问,作为一个合格的 .NET 程序开发人员,需要掌握哪些知识?这些知识应该如何去准备?如果把 .NET 程序开发人员简单地分为初级、中级和高级的话,自己又应当属于哪一级呢?

下面先从 .NET 程序开发职位要求讲起。

.NET 程序开发职位要求

曾几何时,面向对象编程语言是 Java —统天下,但现在,.NET 开发的职位越来越多,很多大型企业也选择 .NET 平台搭建自己的系统与服务。

在各大招聘网站上都活跃着大量的 .NET 开发职位,这些职位的技能要求互不相同,但可以简略归纳为三部分:
例如,下图为某招聘网站上的一个“.NET资深开发工程师”的岗位要求。

某公司对.NET资深开发工程师的岗位要求

其中第 1〜5 条都属于必要技能,包括对 .NET 平台开发经验的年限要求,以及掌握 ASP.NET.MVC、WebAPI 等各类 .NET 平台部件的要求。

第 4 条为设计与架构相关要求,第 5 条则是数据库方面的要求。

第 6〜7 条为软性技能,第 8〜9 条为加分技能(通常有“优先”等字)。

那么,知道了应聘的要求,我们该如何进行准备呢?针对每种不同要求,又需要如何学习?下面主要讨论必要技能和加分技能。

必要技能

虽然各个岗位对必要技能的要求不同,但 一般来说,必要技能可以划分为几部分,如下图所示。

.NET程序开发必要技能

C# 相关

因为咱们接下来的主要任务是学习 .NET 和 C# ,所以我就默认 C# 是岗位要求的主语言。

对于 .NET 程序开发人员来说,主语言包括 C# 本身,以及它的运行环境 .NET 开发平台。

对于 C#语言来说我认为十分重要,必须要掌握的知识点如下图所示:

C#相关技能

其中:
对于这些形形色色的特性,除了可以答出它们的定义之外,还需要知道,为什么要引入它们,引入它们是为了解决什么问题,在没有它们的时候,同样的问题又是怎样解决的。

设计与架构相关

设计与架构相关的内容如下图所示。

设计架构相关技能

其重要性仅次于主语言,因为这个技能严重影响代码质量。

设计与架构的学习和理解绝非一日之功,对它进行“临时抱佛脚”基本是不可能的,通过考察面试者对设计模式、面向对象的理解,基本可以准确地将面试者归到高手、中等和初学者这三类中。

当然,如果岗位本身比较初级,那么这方面的要求将会相应降低。

因为 C# 是一个面向对象的编程语言,所以,面向对象成为面试考察的重点内容。

经典的设计模式就是灵活运用面向对象的结果。

常用的知识点包括:

岗位相关

如果用人单位招的是 ASP.NET 程序员,那么肯定得了解 ASP.NET 生命周期、路由、前后端传值、MVC,以及至少一门前端语言等。

如果招的是后端,可能会问一些关于 Web 服务、WebAPI 的知识。

专门负责写 WPF 应用的岗位,可能会在线程上大做文章。

当然,框架类库的基础知识点也很重要。例如对 WPF,如果你不知道如何禁止用户更改窗口的大小,那没什么关系,上网一查即可;但如果你不清楚长任务时如何保证界面良好的响应,工作线程如何更改 UI 线程控件的值,那么你编写出来的 WPF 应用一定会让用户怨声载道。

有些岗位还需要应聘者清楚分布式、脚本语言、Linux 环境、缓存、消息队列、高级算法、大数据应用等相关知识。

对这些知识的掌握和理解,一方面需要看书,另一方面也要结合相关项目经验。岗位相关的知识点五花八门,因岗而异。

数据库相关

确实有一些开发者不需要和数据库打交道,不过,大部分岗位都要求对数据库操作有一定了解。

数据库方面的技能如下图所示。

数据库相关技能

如果一个岗位要求熟悉数据库,那么面试官期待的将是:
上面说的都是关系型数据库中最重要的知识点,有些岗位还需要应聘者懂得非关系型数 据库、数据仓库等。

线程相关

很多复杂的应用都会出现多线程的身影,线程相关的技能如下图所示。

线程相关技能

Windows 操作系统赋予了我们使用线程的能力,我们可以利用多线程改善程序的性能。

对这一块知识,很多初级开发者都不清楚,可能是由于没有机会写一个需要多线程的应用。

关于多线程的材料较少,而且多为英文,也是初级开发者对于线程不清楚的另一个原因。

但是,大型应用,或者对性能要求很高的应用,多线程则无处不在。

.NET 本身也提供了非常丰富的线程管理类库。

语言相关

这里的语言相关是指使用英语的能力。具体来说,包括阅读英文文档、英文邮件写作,甚至使用英语和他人进行沟通的能力。

对于外企来说,这块非常重要,而非外企则相对不那么重要,但由于目前大部分较为权威的文档和资料仍然是英文的,而且缺乏翻译,所以开发者还是需要把自己的英语水平提升,能够无障碍地阅读英文技术文档。

这一块的学习只能通过日积月累,别无捷径。不过,我不推荐大家马上拿来一本四六级甚至托福单词去背,因为,其中大部分单词在实际开发中都遇不到,而真正需要知道的单词(例如,delegate 委托,interface 接口等),要么不在词汇表里,要么根本不是这个意思,而你把 abandon (四级的第一个单词)背得再熟,平时也基本看不见它。

更快捷的方法是阅读 MSDN 文档,并把不会的单词记录下来。

加分技能

软件工程和项目经验相关

虽然也有单枪匹马搞定项目的例子,但那通常出现在“远古时代”,现在的软件开发项目越来越复杂,常常需要多个人组成团队一起合作。

团队会有专门的项目经理负责需求的整理(也可能没有,如开发者自己兼职项目经理),制定开发进度,开发者同心协力,从小目标开始,分而治之,最终完成项目。面试官(可能是开发者,可能是管理开发者的团队领导),不仅仅关心一个团队新人是否有能力完成领导交给他的任务,也会关心这个新人是否可以和现有人员通力合作。

面试官可能会问以下问题,并根据你的回答默默思考你和新团队的契合程度:
如果面试者对这一块很不清楚,或者,面试者之前完全没有用过相关的工具(代码控制、测试等),面试官可能会担心这位面试者写出来的代码质量不高。

其他个人经历

这部分主要包括个人网站、社区贡献(如写书、翻译、MVP、论坛回答问题等)、开源项目,甚至个人出版物等。

随着网络的开放,开源运动的兴起,越来越多的开发者愿意分享自己的知识和代码到社区,也对其他开发者的批评和指正报以积极的回应。

由于大部分人都没有什么社区贡献,因此,在社区积极热心提供知识的那些开发者就很容易脱颖而出。

参与社区的活动会扩大自己的人脉,从而对找工作有着积极的作用。

而且, 对社区的贡献也体现出一个人在工作之余,仍然对技术有着浓厚的兴趣,并愿意将自己的心得体会分享给他人。

高级技能

除了上面列出的技能外,如果应聘的职级较高,那么还可能会有属于高级开发人员的一些必备技术型技能。

这些技能不是一项特定的技术,而是各项技能的综合,用于解决一些特定的问题。

例如,大部分大型 IT 公司都拥有一个自己的门户网站,它的访问量是十分巨大的,因此,大型 IT 公司的高级开发人员必须熟悉如何让系统在超高并发下保持稳定,找出系统性能的瓶颈,然后对其进行优化。

对这个问题的解答,并不限于一门语言或一种工具,而涉及方方面面的知识,这些知识的积累通常需要完整经历一个大型项目,并且该项目要足够大,这就限定了先决条件——小公司基本上是无缘大型项目的。

具备高级技能的开发者在就业市场上屈指可数。

所有教程

优秀文章