偶对学习C#以及理解.Net平台的一些看法(一,Prerequisites)

偶对学习C#以及理解.Net平台的一些看法

从接触.Net这个概念,到现在,已经大概两年了吧,中间中小型东西玩了不少,书也看了一些,就连毕业设计也是基于.Net的。在这两年中,.Net从2.0到3.5,再到即将推出的4.0,各种新特性也是应接不暇,同时偶也发现玩.net的人越来越多了,正好这阵子比较无聊,就写一篇关于.net的文章吧。探讨一下学习.net的方法,之后会聊聊偶对马老师(软院小马哥)的.net教学的看法。

一,Prerequisites

不少的工科科目的课程都是有先决课程这一说的,拿CS或是SE的科目来说,几乎所有的专业课的先行课都是计算机文化导论,一个正规的大学的正规CS专业课是不可能直接上C语言这样的课程,毕竟,连计算机是怎么一回事都不知道就去编程序这种事,也就北大青鸟等xxx培训机构能玩的出来。

So,接下来,说一说学习.Net的一些先决条件:

首先,要对计算机的基础学科有一个了解,这些学科就是 计算机组成原理,操作系统和数据结构 ,偶一直认为区别一个学生是否是CS科班出身的首要因素就是对这三门课程的掌握程度。倒不用精通,了解其大概就行,偶在这里写几个简单的题目以供自测水准

计组:

1,CPU可以访问硬盘吗?
2,PC是搞什么的?
3,为何要使用DMA?
4,变址寻址的实际应用?

OS:

1,OS是干什么用的?
2,进程,线程的区别?
3,进程间通信的三种方法?

数据结构

1,简述递归?
2,栈和队列的区别及实际的应用?
3,可否完成一个二分搜索?(已修改,多谢娃娃王子指正)

如果上面的题目一道都答不出来,建议补习下基础再学习.Net,当然不会这些也可以做一些简单的.net应用,但是如果往深层次研究的话,基础薄弱就会很麻烦,偶自己是深有体会

除了对计算机科学有一个不错的理解之外,还有一个条件也很重要,就是至少掌握一门命令式编程语言(C或C++)

偶一直认为Java和C#这两种语言是不能作为程序员入门学习的语言的 ,用一句话来概括的话,就是它们把编程搞的太黑盒了,以至于初学者看不到任何哪怕是稍稍底层的东西,一个new就把C语言里甚麻烦的malloc给封装了个半死,GC的引入更是使内存释放成为了一个很久远的话题,以至于带给初学者一种内存是无限的错觉。

此外,Java和C#里面是没有指针的(实际上C#可以通过使用指针,不过指针被认作为不安全类型,除非有性能限制,否则不建议使用),注意, 偶说的没有指针是你在应用这两种语言时看不到*号或是&号了, 但这并不代表这两种语言真的把指针给根除了 。Java的原理偶不太熟,C#里面有太多的特性用到了指针,姑且不说ref和out这两个露骨的指针参数变体,事实上在C#语言里,所有在堆上创建的对象返回的都只是指向这个对象的指针而已,而赋值操作也只是创建了另一个指针指向这个指针指向的对象而已,如果不理解这一点的话,程序很有可能搞出一些很诡异的结果(偶认为不少了解C++的同学都会在浅拷贝和深拷贝这里迷糊过吧)。

掌握了C语言的话,就无需在任何命令式编程语言的语法上花什么时间,何况C#,熟悉C指针的应用的话,了解C#里面一些相对白盒的问题(比如说C#里面的new操作符究竟执行了什么操作,重量级的对象和轻量级的值类型在内存中如何分配,以及上面提到的一些问题),一天的时间就足以理解C#的基本特性,在完成一些C#的简单应用之后,大可以花时间去研究C#的一些高级语法特性以及CLR(.Net的核心,玩Java的童鞋姑且可以把它看作为是一种多语言单平台的JVM)的基本原理。

在满足了上述几个条件的基础上,偶相信学习.net不会是一个痛苦的体验。

PS:一些童鞋可能会发现身边的人学习新东西总是很快,其实IQ只是占了一个很小的因素,真正的决定性因素是学习方法以及基础的好坏。So大一大二的同学有时间的话可以暂且放下手中的xx框架,21天精通xxx的书籍,去阅读一些经典的CS图书(之后偶会推荐一些偶认为不错的书籍)。 CS是一个表面发展速度极快的科学,但实际它的内核思想三四十年都没有变过,so我们为什么要去追求那些表面浮华但很快就会被淘汰的技术呢

你可能感兴趣的:(.net)