我现在是一所IT大学的四年级学生,当我和我的教授谈论这个话题时,他拒绝了我的意见,并给了我很大的批评(在我的大学里,我们被教导C(ANSI)(在程序编程课-大学一年级(C ++之前)(第二年OOP班)及其他...
但是在我13岁那年,我的兄弟首先接受了Java的培训,而没有别的。现在,他几乎可以完成普通的二年级学生使用Java可以完成的所有工作。
对于您的专业人士,我想知道您为什么认为我们应该首先学习过程编程。
我现在是一所IT大学的四年级学生,当我和我的教授谈论这个话题时,他拒绝了我的意见,并给了我很大的批评(在我的大学里,我们被教导C(ANSI)(在程序编程课-大学一年级(C ++之前)(第二年OOP班)及其他...
但是在我13岁那年,我的兄弟首先接受了Java的培训,而没有别的。现在,他几乎可以完成普通的二年级学生使用Java可以完成的所有工作。
对于您的专业人士,我想知道您为什么认为我们应该首先学习过程编程。
Answers:
快速摘要:
因为在现实世界中,迟早必须使用过程代码。
因为过程语言可以像面向对象语言的扩展或介绍一样工作,而不是仅仅是一种替代。
答案的补充2.由于OOP比过程编程更复杂,因此首先学习过程编程更好。
因为在现实世界中,程序员与AKA一起使用并结合了多种解决问题的方法,所以它称为“多范式编程”,而不仅仅是一个范式。
大多数编程语言在某种程度上都是多范式的,即使他们的设计师或普通开发人员则相反。
[NEW]因为可以将与程序性编程混为一谈的模块化程序设计应用于OOP,因此问题可以理解为“为什么在学习面向对象程序设计之前为什么必须学习模块化程序设计”
扩展的无聊说明:
第一点很清楚,不再赘述。
点2,类,继承,多态,接口,等等。
第三点,我在学习面向对象的Pascal之前就对过程式Pascal进行了编码,当我到达那里时,我说:“看,类就像小型的过程式程序…………你可以使它们彼此交谈,很酷!!! ”。
从普通C到C plus plus的人们也听到了同样的消息。
第4点,大多数时候,程序员结合了几种编程技术或范例或解决问题的方法。功能,过程,OOP,逻辑。
甚至Java“ Pure OO”也不像它所说的那样简单。
+1点表示“程序化编程”而不是“结构化编程”。或模块化编程。这些很重要。
值得一提的是,这些术语很多时候都被教导在一起并且可以互换使用,但并非如此。结构化编程包括许多概念,而不仅仅是使用过程,其中之一是使程序看起来不像“意大利面条式代码”。
今天,我阅读了一些看起来像“面向对象的意大利面条式代码”的“纯” OO程序,这意味着程序员使用了OOP,但是其代码却看起来一团糟。
很多时候,我可以阅读OO代码,并告诉程序员,因为OOP是清晰易懂的,所以在OOP之前就已经学习了结构化编程。
对于模块化编程,我已经看到了几个应用程序。在不使用模块的C ++和PHP中。*
我认为类推类似于数学。您需要首先学习一些基本概念(加法/减法...),然后继续学习更复杂的主题(代数/微积分)。过程程序非常线性,在学习语法时更容易掌握控制流。OOP可能被认为更复杂,它基于过程语言中使用的更简单的构造,但是更抽象并且更难以理解。从诸如C之类的语言入手,还可以使您更接近硬件,并使您处理内存分配和指针的问题,您确实需要理解这些问题,但实际上并没有在Java / C#之类的语言中使用它们。不论是第一还是第二,在学校中接触到它都有一些真正的价值。
FWIW,最终必将发生变化。当我开始上学时,我们在Pascal和PL / 1上学习。直到高级语言课程(我约会)之前,我们才开始使用C。直到研究生院,我才开始学习Java-它还没有被发明!
面向对象的编程是以一种有组织的方式收集的程序片段。我认为您正在学习的教训是面向对象的方法有助于维护组织和可维护性。有很多程序员无法区分这种情况,他们会在程序化程度更高时声称他们的程序是面向对象的。
我们首先使用Scheme 学习了函数式编程。然后,我们开始进行程序化, 然后是 OOP,然后是声明式编程。信不信由你,尽管我已经知道编程,但我认为它实际上对于其他人也更加容易:因为FP 就像数学一样!所以您已经知道了基本知识。
我已经多次与自己辩论,最终得出结论,这实际上取决于您的老师对您的概念的教导程度。
没有一个答案,因为:
从像C(甚至是汇编)之类的过程开始可能是一个不错的选择,因为您将学习计算机的工作原理
从某种面向对象的Java开始可能是一个不错的选择,因为它相对容易学习并将OOP应用于现实生活,并且因为它教会了您有关“形成”的知识。
从像Scheme这样的函数式编程开始可能是一个不错的选择,因为它教会了您更多抽象的思想(在函数而非变量方面),最终使您成为更好的程序员。
如果您的老师不能很好地教它,那么开始就没有关系。他们几乎都一样。
语言可以是面向对象的,例如C ++,Java或C#。您可以从这些语言开始。但是关键是,即使使用这些OO语言,您也必须首先学习过程编程,然后再学习OOP。我认为,您对您的兄弟也是如此。
=
的分配,if
,for
等)成更大片(方法),你怎能希望了解OOP。与大多数技能一样,非常聪明,有动力和/或可以使用一对一的指导可以使您同时学习多个相关主题。
至少使用C之类的语言进行的程序编程,将程序编程简化为一种非常简单的实践:算法和数据结构,并且在抽象级别上是介于人类可理解的源代码和汇编代码之间的一种令人满意的媒介。
通过这种方式,学生可以同时学习一点科学(算法,数据结构)和一点工程(源->对象->机器编译,冯-诺伊曼(可能是)体系结构)。
通过C ++ / obj-C进行的OOP引入了代码组织模式,这只是要学习的一件事。这可能会使学习上述概念更加困难。
通过Java(以及其他方法)进行的OOP通过抽象化硬件和环境而走得更远。现在,基础产品不是机器代码,而是某种中介,它不能揭示基础硬件的工作原理,但效果是它使学生可以专注于代码组织模式。
最后,我认为这是在学习硬件的工作方式或学习代码组织模式之间的权衡。至于哪个更重要,我真的不知道。现实世界至少需要某种程度的知识。
我猜想一个以低级过程编程开始的本科课程很可能会培养计算机科学家/计算机工程师,而一个以较高层次的概念开始的程序则会培养软件工程师/开发人员/程序员。
OOP对象的勇气由过程编程组成。
如果您不能进行for循环,请正确使用指针,声明类型和函数,您将无法为类编写接口,更不用说使内部做任何值得做的事情了。
无论如何,您实际上绝对不会在入门类中学习OOP,而只是语法-直接跳入OOP将使事情(一开始)比现在更加复杂。
OOP并不是为了声明形成类的语法,而是关于数据结构,设计模式,多态性,继承和组合。
要完成所有需要了解过程编程的事情,这是用C轻松完成的事情。无论如何,您都可以将通过C所学的大部分内容带入Java或C ++中,您可能不得不重新考虑一些在C,BUT中理所当然的事情...您必须先了解语法(在入门C中的位置),然后才能编写句子(必须编写用于定义接口的过程),然后才可以编写段落(必须知道数据结构),然后才知道一些设计模式(悲剧,喜剧,有缺陷的)英雄,他们如何互动;何时不使用它们),然后才能撰写完整的小说(完整的OOP系统)。
如果我是你,我会拿起以下的一些书籍:C语言,Java编程语言,设计模式,四人帮,和模式孵化。如果我对C / C ++认真的话,我肯定会拿起The C Programming Language的副本。
如果您只是想一直使用Java(并以$的价格完成)id,请阅读一些有关Java设计模式的书籍,以及如何将Java与Apache和Tomcat Web服务器一起使用以及有关SQL数据库编程的书籍。Java在网络上踢了很多屁股,很抱歉,但是PHP已有无数安全漏洞的历史,这使Windows陷入了麻烦,无法阻止服务器植根或注入SQL数据库。
您还应该花时间学习SQL,Oracle MySQL Postgresql和MSSQL在语法方面有很多共同点,但是如果我不得不自己学习一个id则选择Postgresql只是因为它是BSD许可而不是GPL的(您应该进行比较)并对比GPL / BSD许可)
我不得不说,大多数用诸如Java之类的面向对象语言编写的代码实际上并不是面向对象的。要真正理解OO背后的思想是很困难的,因为据称大多数OO代码实际上都是程序性的。
但是,用Java编写过程代码并没有错。是的,进行OO有很多好处,但是我不想让初学者感到困惑。因此,在此基础上,我认为教Java没有错。不要指望真正的面向对象,但它可以工作。
但是,Java隐藏了许多有关计算机内部运行情况的底层细节。C公开地保留了更多这些内容。一个很好的例子是,学生应该在使用一种照顾自己的语言之前,先学习这些低级细节的工作原理。但是,您也可以提出一个理由,您应该忽略这些细节并在以后学习。
对此过分直率,我认为这种势头主要来自希望过时的老程序员。
在不说其他任何事情之前,我绝对不会对年长的程序员产生任何争执,他们中的许多人都非常熟练。不幸的是,有时候那些不是,被洗劫一生,却从未真正真正擅长编程的人……当教授无法在“现实世界”中破解时,就成为了教授。(也不是所有教授...但是...很多)
OOP并不是编程的圣杯,程序编程也不是遗物。这是很好的知道至少有一些的都有,但我想的是什么最终被教作为过程编程一般的做法往往是时间和精力浪费巨大。我们需要在学术界学习编程,而不仅仅是一种风格。我将很多糟糕的代码和误解归因于此,包括我自己的。
我的两个原因:一种面向对象编程来解决过程编程问题。因此,通过编写一些过程编码,然后在OO中进行相同的编写,可以更轻松地理解它们之间的区别。
这里还有一个附加元素:两种编程主题教育方法。一个可以从最低开始(示例装配,在许多地方是程序性的,其他一些从电路开始),然后又向上(朝OO /功能/可管理)。另一种方法是从物理世界(例如浏览器/ Windows 7等)开始,然后再深入。每种方法都各有利弊。您的大学选择了第一所,并从程序开始。可能有一些理由,或者他们只是抄袭了其他人:-)。
除了制度上的惯性之外,没有其他理由。看一下CMU,他们放弃了整个OOP课程,并用功能编程代替了它。因此,您的问题的答案再次是,这是您所上的任何学校的管理者都可以选择的。如果有人想知道我在这里所做的事实陈述,那就是一位教授/管理员关于在CMU更改课程的帖子:向新生教授FP。