同学提问:
我是个大专的学生,我们学校不开设操作系统,编译原理,数据结构这些课,而是教C/C++和.net。
如鹏理念:只精通一门语言,而把基础知识学扎实
作为一个大专的学生,我应该放弃C++或者.net其中一种的学习吗?把大量时间用来学习其中一门语言和数据结构,编译原理等基础知识
不知道这样想对不对,已经大二了,不想做代码工人,帖子我也看过好多,就感觉两门语言一起学会不会学杂了?
而且如鹏网自己也出了C语言和.net两门语言的教程,用不用都学完呢?为什么如鹏网没有基础知识的教程呢?
杨老师麻烦解答一下迷惑?

我的回答:

1、一通百通,为什么还出了C语言和.net的教程?
如鹏网一直倡导的就是:一通百通,不要在语言间徘徊,学好一门语言即可。
如鹏网说“学好一门语言即可”,由于在校生中很多专业都以C语言作为开蒙的语言,所以如鹏网推出了《C语言也能干大事》这套视频教程。但并不是说要所有学编程的人都学C语言,这也是很多同学的一直存在的问题,很多同学甚至问“老师,我现在在学C#,是不是要回头去学C语言”。如鹏网说的“学好一门语言即可”指的是自己确定一门语言,然后认真学习下去,不为别人所动,因为很多同学目前学的唯一的语言就是C语言,所以就建议这些同学继续深入学习C语言,多练手,多写程序,锻炼程序化的思维方式。但是还有很多同学的开蒙语言是C#,所以如鹏网也推出了.Net的课程,让学习.Net的同学也有像《C语言也能干大事》那样优秀的视频教程可以学习。所以说“一通百通,不要在语言间徘徊,学好一门语言即可”和如鹏网推出“C语言和.net的教程”并不是冲突的。

2、学校不开设操作系统,编译原理,数据结构这些课,而是教C/C++和.net。我应该放弃C++或者.net其中一种的学习吗?把大量时间用来学习其中一门语言和数据结构,编译原理等基础知识?
C++、.Net是你们的课程,如果放弃的话就拿不到学分,就无法毕业,所以你能说放弃吗?所以还是要学,要达到学校的考试要求,只要把自己内心里不重视的那么语言不用过多精力学习就可以。
现在很多计算机专业、软件工程专业、专科都在课程中去掉了数据结构、编译原理这些课程。因为这些课程不像编程语言那些看起来学上手就能混饭吃,而且最重要的原因就是大学里的老师讲不好这些课程,没有资深、丰富的行业经验根本没法把数据结构、编译原理这些看似高深的课程讲的明白,综上考虑,很多学校就去掉这些课程了。
如果同学们所在的学校还开设了这些课程,请认真好好学习,如果你们的老师讲的不好的话,到网上找其他大学讲的好的老师的教程,因为这些课程如果自己研究的话难度会非常大。如果同学们所在的学校没有开设了这些课程也没关系,也不用刻意去学,因为工作以后短期内基本不用到这些东西,工作以后根据需要再去学习,如果想在技术之路上走下去的话,一定要在工作后抽时间学习那些基础的东西,会对你的技术的提升有很大的帮助作用。

3、有一篇文章说:最好精通两门语言,一门面向过程,一门面向对象,C#不就是面向对象语言么?
同学们对面向对象、面向过程大部分有误解,面向对象、面向过程只是代码的一种组织形式,而不是一种语法。比如在C语言中也可以进行面向对象的编程(参考《C语言也能干大事第22节:C语言面向对象开发》 http://www.rupeng.com/forum/thread-7373-1-1.html)。既然C语言中也能进行面向对象的编程,为什么大家都是用C#等语言进行面向对象的开发呢?因为C语言中进行面向对象开发非常麻烦,而C#等语言中提供了简化面向对象开发的新的语法,让编写面向对象方式的代码更简单,仅此而已。
不要认为面向对象是代替面向过程的,是淘汰面向过程的。什么是面向过程?面向过程就是“代码从上向下执行”,面向过程就是if、for、while,面向过程就是函数、变量……。难道在C#等面向对象的语言中就不是“代码从上向下执行”,就没有if、for、while、函数、变量这些东西了吗?
所以说面向对象只是对普通面向过程的一个优化,将用纯面向过程实现起来非常复杂的代码用面向对象的方式进行组织,从而使得代码更加容易编写、容易维护。但是被面向对象组织起来的代码内部还是面向过程方式编写的。
因为具体代码仍然是面向过程方式编写的,比如《传智播客.Net视频:第1季C#编程基础 》中讲的就是C#中面向过程部分的语法,因此C#是一门编程语言,能够编写面向过程的代码,也提供了便于编写面向对象编写的语法。