大学教授DOS风格的C ++,如何处理它[关闭]


19

我已经编程多年了,但是想要获得文凭以提高自己的就业能力。我曾经上过大学,所以我没有选择一个完整的5年制计算机科学专业,而是选择了一个较短的,面向实际的软件工程程序。

我以为它可能会更多地关注具体技能而不是理论,但是我仍然认为大学和教授喜欢正确,正式和学术的事物。仍然是科学,对不对?错误-我对许多IT课程如此草率感到惊讶。

在编写C ++入门课程中,仅编写了1-2个程序,就对诸如“为什么全局变量不好”和“为什么常量常数好”这样的陈词滥调进行了测试。没有适当背景的随机轶事。包含讲义system(pause/cls)getch和标头如conio.hiodos.h。任务之一是从32到255打印“ ASCII字符” ,并使用屏幕截图显示使用Windows-1252代码页打印的表格,但完全不提及编码。

问题:当大学/教授似乎在使用劣等和/或过时的工具和方法,并且所教的内容是不正确的边界时,您如何建设性和尊重地对待它(如果有的话)?

一些答案指出,您不应该局限于编程,因为它只是用于学习诸如数据结构和算法之类的主题的工具。我同意这个想法,但是在这种情况下,糟糕的风格背后实际上没有任何这样的计划。大多数课程只会简单地教另一个“工具”,而没有太多的背景理论或任何“大背景”。人们常常觉得他们只是为了提供这样的课程而很快就放在一起了。


我坚持下去,终于毕业了。整个过程中质量仍然很低(有几个例外),其他一些学生对此也有所抱怨。不出所料,我从个人项目和兼职工作中学到的知识比从学校中学到的要多得多,但是,完成学业和贴上“软件学生”的标签对他们自己似乎很有用!


2
根据我自己的经验,您将自己学习更好,更快,更便宜的编程知识,并从论坛中获得帮助。大学教学大纲过时的情况并不少见。在俄罗斯,Pascal仍在一些大学任教(尽管我喜欢这种语言,并不认为这完全是一件坏事)。
WKS 2013年

@WKS:我认为Pascal是一种很好的教学语言,用于学习根本没有过时的(程序化编程)原理。大学课程不应浪费时间教授特定的编程语言,而应教授教学范式(过程,面向对象,功能,逻辑等)。
Giorgio

是的,@ Giorgio当然是被选作教学工具的编程语言,这并不重要,但是,您必须期望所提供的编程方法是正确且最新的。
glampert 2014年

大多数大学都以培养本科生为目标,使他们成功获得硕士学位。大多数硕士学位课程都对硕士研究生进行教学,目的是使他们成功获得博士学位。大多数博士课程旨在帮助您成为一名成功的研究人员。
Rob P.

@glampert:引入Pascal后,程序编程没有改变。甚至更好的是,Pascal被设计为一种教学语言,因此它没有很多可能在实践中有用的技巧,但是在学习新东西时会分散注意力。因此,就教学命令式编程而言,Pascal是最新的。当然,人们可能想教其他范例,例如面向对象,功能,逻辑:那么您必须寻找其他语言,例如Python,Java,Haskell,Scheme,Prolog等……
Giorgio 2014年

Answers:


34

数学和编程是完全不同的东西。数学是科学,编程是技术。在学术界,编程是您必须了解的一件事,以便您可以处理真正有趣且重要的东西-算法。

谁在乎编译器是否古老而您使用system调用?谁在乎您是否拥有Linux而没有Windows?好吧,教授们不是,那是肯定的。他们不应该,真的。不要指望从学术机构的课程中成为一名专业的程序员。那不是你要去的地方。

确实,他期望您使用的编译器是古老的,并且关于OS的假设是过时的,并且存在问题。您可以提出来,也许可以解决。但这不是因为该课程与行业不兼容,而是因为它给学生带来了直接的困难。现在就去寻找那个旧的编译器,并使其在您的MacBook上运行...

通常,不应将学术研究浪费在学习C ++和Android上,而应该在那里学习实际的计算机科学知识。您不会再有机会了。Android?像我一样,下载带有ADT的Eclipse并开始在家里进行开发。不需要学校。

我认为不能期望大学提供技术发展。尤其不是研究型大学。您可以说,一个只提供学士学位的地方应该针对行业,但研究型大学则需要研究人员。教授正在寻找潜在的研究生和博士学位候选人,而不是优秀的程序员。因此,我认为您应该相应地设定期望值。


3
我对您的答复有一个问题:“总的来说,学术研究不应浪费在学习C ++和Android上,而应该在那儿学习实际的计算机科学知识。” -至少不了解一种编程语言的基础知识,CS的东西没有意义,而且使用错误的方法也太容易了。
Izkata 2011年

4
@Martin和izkata-使用上个世纪的编译器在C ++中的DOS下进行编程并不意味着您不知道编程。这只是意味着您正在使用过时的工具-但是如果您需要实现RB树-谁在乎?对于行业来说,这已经过时了,但是程序可以运行并且可以执行它们应该做的事情-足够好了。
littleadv

3
@littleadv-OP写道:“根据我所读的内容,这似乎很古老。” 这向我暗示,除了相关的讲义之外,他不得不寻找其他地方,以发现这是过时且不可携带的。当然,即使不是全部,许多编译器都具有额外的非标准库,但是如果您被告知那些非标准库的话,我认为那很不好-不论是新的还是旧的,无论是C还是C ++ 11的东西,因为目前C ++ 03是最近得到广泛支持的标准。
Steve314

3
@littleadv-好吧,也许我们不得不同意不同意。尽管我本以为计算机科学家需要细心研究细节,但是花几秒钟指出不标准的东西既符合要求,也绝非艰辛。如果CS教授将自己的即席符号与数学混合使用而没有指出这一点,您会感觉如何?毕竟,这是同一问题的另一个方面–其他计算机科学家是否能够理解您。人们和编译器都可以读取代码。
Steve314

4
@littleadv-我从来没有说过OP告诉conio.h是标准的-我建议他可能还没有被告知它是非标准的,即使如此,他也说:“如果他们弄清楚哪些是非便携式技巧,那可能是好。”。甚至在基础科学领域,我的学习方式是使用标准术语,或者如果必须使用非标准术语,则定义它们的含义。在我的学校科学课中,即使使用厘米也违反了规则-它们不是国际单位。在我看来,使用非标准库似乎没有什么不同。代码在计算机科学中的含义应该明确。
Steve314

19

计算机科学是编程,物理是木工。

如果您想成为一名木匠,那么学习物理将无法实现它。它会教给您很多有趣的东西,也许您可​​以将它们应用到您的工作中,但是它不会教您如何成为一名好木匠。为此,您将必须学习木工工艺。

同样,如果您想成为一名优秀的程序员,则必须学习编程技巧。不幸的是,没有机构可以发行任何形式的证明。因此,基本上,这是您必须自己做的事情,可能会找到可以帮助您的人。对您来说,这意味着重复和反思。写很多代码,然后再来看一看。也要花一些时间阅读别人的代码。考虑参加开源项目。

大学并不关心编程,而对于未来几年内将发生变化的细节则更少。您在学校看到的是,他们选择了一些编程环境(不好的环境,但这并不重要),现在向您展示,以便他们拥有一个参考框架,在其中他们可以教给您各种编程技术。有人会说,参考系很差,甚至语言也很奇怪。在他们看来,这可能并不重要,因为它是任意选择的。


2
物理对工程学来说怎么样?程序员在设计程序时应理解CS原理,以将其应用到工程师认为工程师需要了解物理学来设计建筑物,飞机和化学过程的方式中。
杰伊·埃尔斯顿,

3
@JayElston:物理是工程学,计算机科学是软件工程,它包括分析,设计,计划,实施,质量保证等。编程本身实际上更是一种使材料完成您想要做的事情的艺术,而工程设计首先要弄清楚您实际想要做什么。
back2dos

我仍然喜欢我的一位教授的名言:“工程学是运用科学解决问题的艺术”。
克里斯·奥

1
@克里斯:那么,也许科学就是创造新问题的艺术。
JasonTrue

@JasonTrue:嗯,有人可以说科学是创造更好问题的艺术;)
back2dos

9

学习“ DOS风格”没有错。我敢肯定,这里的许多老用户都是在DOS上开始的,甚至是从较早的操作系统开始,编写基于行的程序,并且已经进行了很好的调整。计算世界变化如此之快,以至于我不会被具体细节所困扰,例如哪个库用于什么。

实际上,我怀疑我们有一个充满程序员的世界,可以告诉您什么是依赖注入,但是却难以回答FizzBu​​zz的原因,是因为许多程序员在这个非常基础的级别上没有花费很多时间。

听起来这是编程入门,所以从本质上讲,不要担心。学习基础知识,一切都会好起来的。如果您对其他平台感兴趣,请自行进行探索。那就是编程的伟大之处。


5

您该如何处理?下载编程电子书或流式视频,自己尝试示例。不要依赖你的教授。编程是您自学的。


1
编程就像弹钢琴一样。您需要一个大师来教您如何做事,还需要大量练习来使它们做得更好。我相信很少有世界知名的自动钢琴演奏家。

7
真是奇怪的比喻,当然有很多熟练的自动编程程序员。
ocodo 2011年

@Slomojo是的,我遇到了一些。他们是一个奇怪的品种,擅长于自己所知道的。困难在于他们遇到的问题的广度。有时,当您了解计算机科学的某个角落时,问题的解决路径就更短了,但是,这些才华横溢的人往往会以他们所知道的唯一方式来不断探索,最终看起来像是蛮力。例如,DFA在两天的时间内通过测试(在TCL / TK中启动!)解决了“难以自学”的问题。两周后,他们仍然不理解,并作了解释。
Edwin Buck

4

很多大学都有糟糕的程序设计教授。我去了我国一所最好的研究生学校,几乎学到了编程的知识。我猜大多数的unis都是这样,因为真正好的程序员会选择更高薪水的工作(而不是教学)。您应该承担一个小项目,然后尝试自己编写代码。您可以从许多此类论坛中获得提示。从长远来看,这可能是一种更好的学习方法。


好的建议,当然,我完全同意。这只是文凭... :)
Toerndev

@gaidal:是的!那就是我从研究生院毕业的原因-品牌名称:P(尽管我希望加入后能有更多的收获)
1

2
大学不是要学习编程,而是要学习编程语言的概念,以及更广泛地说,是计算机科学的概念。当我不得不在大学里做关于操作系统的项目时,我被告知:它将在C语言中,这本书在图书馆中,去拿书并学习它。编程是关于实践的,这不是大学教你的任务。
Giorgio

1
关于高薪工作是对的。我的一个在大学里教书的朋友曾经抱怨:“我们教他们编程,然后他们赚的钱比我们多,这反过来!”
乔治

3

我认为大学应该教授编程语言,算法等的抽象概念,而不应该成为学习编程的地方:编程是一项非常实际的活动,您只能通过实践来学习。

在学习期间,我学习了Pascal编程的基础知识,然后在C中进行了一个项目(我们必须自己学习语言),然后学习了一门有关编程语言概念(过程,面向对象,函数,逻辑)的课程。 。在MSDOS上,您有conio.h或far指针,这是民间传说,在UNIX系统上则没有。这是我们的学生将要讨论的东西,不是啤酒,因为它并不那么重要,所以您在课堂上不会讨论。大学教学侧重于抽象的常识,避免赘述:给出示例和细节只是为了说明常规内容。

您提供的ASCII和Unicode以及MSDOS conio.h库的示例意味着每个编程环境都有其特定的处理和组织方式。如果在Visual Studio上用C ++编程,则必须使用其他库,例如在Linux上找不到的。因此,如果该课程是在Windows 7 / Visual Studio中进行的,则有些人可能会抱怨说,最好在Linux / GCC上进行。但是,海事组织,这不是重点。

因此,我认为您应该尽量避免被细节分散注意力,而应专注于本课程涵盖的一般概念。例如,在大多数编程语言中,您将需要一些库来实现控制台I / O,并且在给定的编程环境下,您将必须使用现有的工具来解决问题。也许这对您来说听起来很明显,您会觉得您没有真正学习一些东西,因为您已经掌握了一些先前的知识(可能会发生这种情况),但是我没有得到您正在学习不好的课程的印象。


谢谢,那么我会紧记您以为这不是一个糟糕的做法,这还不够。附带说明一下,我并不是说应该在Linux中使用它,只是他可以努力让学生了解这些差异并且有一个标准。
Toerndev

我同意您的看法,最好告知其他系统。这也取决于老师的经验:对于他们不熟悉的环境,他们可能会感到不适。例如,我在家中使用Windows和Linux,但我会避免使用MacOS,因为即使它可能是一个非常酷的OS,我也从未使用过。也许您可以尝试问一下它们是否可以在不同的C ++环境之间进行简短的比较:仅举几个例子,以了解哪些可以有所不同,哪些可以保持相同。例如,您可以在MSDOS和Linux上使用sizeof。
乔治

2

大学在打基础。一旦坚固,就可以在其上建造摩天大楼。我上大学时就学过BASIC,C和C ++。后来,当我使用Visual C ++进行项目开发时,我相信这是一个完全不同的世界。后来我意识到框架和语言之间的区别。

选择合适的大学,让他们专注于您想要的计算领域的发展。这可以在您的职业生涯后期为您提供帮助。


2

充满打印输出system("");实际上是一件该死的好事!我很震惊,今天人们对这些功能一无所知。

system("pause"),您就摆脱了getX函数的所有难题。 system("cls"),而您只保存了一页代码。 system("mkdir foo")您只保存了2页的缓冲区分配,路径拆分,_makepath_ss,256个路径限制,大量错误出口等。

而且代码很简单,猴子会理解。

 if(!system("mkdir foo"))
     //booo and exit`

法律应当禁止多态变态学派。

PS:此外,在所有应有的尊重下,我很难接受人们接受C ++例外和虚拟事物的指导,这是一件好事,因为它比您想象的要更多的陷阱和地雷,甚至Bjarne Stroustrup都将例外宣扬为超级容易和安全的东西,而实际上它们是核地雷。

请参阅有关Misra-C ++和JSF-C ++的分析。还有http://blogs.msdn.com/b/oldnewthing/archive/2005/01/14/352949.aspx。我懒得今天找不到其余所有文章。

综上所述,我是c ++开发人员,并且确实喜欢许多功能和整个语言。


1
我不确定我是否同意暗中鼓励没有经验的开发人员直接
跳入

@deworde:这与您在控制台中编写的内容相同,我认为您不能减少出错的可能性和安全性。
编码器

是的,但是当您在控制台中编写它时,您会(例如)知道自己的位置,运行的人,所运行的机器类型,最重要的是,为什么要这样做。该程序不一定知道这些事情,并且运行可执行文件的人不会知道他们必须在运行之前检查它们。
deworde 2011年

@deworde:不完全是,命令EraseFile仍将继承进程权限,因此,同一个命令也很容易搞混。
编码器

1

我的建议可能在那里,但请听我说...换专业。

根据我在学术界的经验,计算机科学专业是对导致计算机滴答作响的非常低级的研究。您从C ++的基础入门开始,以确保您知道程序是什么,以及程序背后的内存和计算基础,然后学习了组装,OS概念,电气工程,数字设计等。这个学位,并寻求与NVidia或AMD或Lockheed合作;他们正在制造新硬件的地方,这需要一个能够足够了解该硬件的人来编写驱动程序和控制软件。

听起来您想要的是一门在我的大学里被称为信息系统管理的课程。这就是我遵循的过程;它沿途教授Java,VB.NET,C#,PHP和其他Web脚本编程。它还需要演算(但与CS程度不同),会计,财务,统计,业务沟通,OO A&D,数据库设计和系统分析。我得到的是BBA而不是BS,并且我有基本的工具可以开始以Windows或Web软件开发人员的身份工作。

“计算机科学”专业为您准备的工作很大程度上取决于提供该学位的大学。听起来您似乎正处于一种过时的,低调的外观,这听起来似乎不像您从学业后的样子。我敦促您到大学四处逛逛,找到一门学习课程,该课程更侧重于放学后想要学习的计算机工作类型。

无论如何,您的学习课程都将从非常基本的“控制台级别”程序编写开始。语言无关紧要;他们在教您什么是基本的过程编程;如何以足够小的步伐思考,计算机可以一步一步地跟随您(因为计算机没有什么理所当然的,并且不能遵循人类的大部分逻辑飞跃)。从那里开始,您将进行面向对象的编程(而不是拥有一个长函数来完成所有工作,而拥有几个较小的代码“对象”,它们代表了现实世界对象的状态和逻辑,则更具可维护性),然后事件驱动的编程(“不要打电话给我们,我们会打电话给您”;您的程序基本上已经启动,告诉操作系统设置您的初始图形用户界面,


谢谢,是的,我会考虑的。如果我觉得自己朝着错误的方向前进,以后可以更改,那么基本课程应该在各个宇宙之间兼容。
Toerndev

小心这个假设;我将专业从CS更改为MIS,由于商学院拥有完全独立的数学课程,因此我尚未接受的任何数学都可以转移。英语,科学,人文学科,是的。
KeithS 2012年

1

计算机科学课程不会教您编程。与我在CS课程中完成的一些编程相比,这是在公园里散步。

根据我的经验,这的根本问题是,几乎没有地方可以教给您同等水平的编程,因此您别无选择。


0

我认为您学习的内容和原因可能会有些混乱。

好像您正在学习计算机科学入门课程。这是针对那些经验不足的人,他们正在学习有关计算机工作原理的基础知识。

看来您是一位半认真或专业的程序员。您已有10年编程经验,并且精通3种语言。听起来您知道自己在做什么,至少足以成为一个团队的一部分。您觉得这门课程不合适吗?其他学生的经验或技能水平是否与您相似?

您打算从本课程中学到什么?

您只是在那张“纸”上吗? 如果是这种情况,那么在学习期间不要停止尝试找工作。申请工作,告诉他们您是一名合格的程序员,并且您正在学习,因为您需要一张纸才能找到工作。如果他们雇用了您,那么您可以考虑辍学-一旦您从事了专业工作,那么您真的不再需要那张纸。接受比正常工资低的工资,因为(在工作中)学习有钱要比在学校学习要好-而且您的学习速度也会更快。一两年后,您将很快适应新的需求,然后您可以要求获得可观的加薪,或者因为经验丰富,可以去找另一份工作。

还是您想学习一些东西?然后停止评判您的教授。就像一个令人难忘的高中老师曾经说过“坐下来,然后闭嘴”。几乎可以保证,教授比您拥有无比丰富的经验和知识,并且您可以从他那里学到很多东西。如果他的进度太慢,那么请根据您先前的学习和经验,尝试获得这些入门课程的学分。

但是,您的方向正确吗?您还可以从文学教授或历史教授那里学到很多东西……不是特别重要。也许您不想要“计算机科学”,而想要更实用的“现实世界”技能。尝试“软件工程”。查看其他机构以获得更集中的课程。

就像您开始新工作一样,从外面很难回顾课程或学习课程。您似乎所学的课程无法如愿以偿。重新考虑您的选择。


谢谢,我已经考虑过这一点,并认为您对这两个选项非常正确。前者对我来说更真实,我会在等待工作的同时寻找课程是否变得更有趣。实际上,这一门软件工程教育,我选择了计算机科学,因为我想尽快起步并通过工作学习。也许这解释了为什么我期望更多的“现实世界技能”。:)
Toerndev

过去我大学的一些话:我学习了一门课程,我们按时间表安排了“编程101”,那部分课程对我来说很无聊。但是其他课程也很有趣(物理,机械等),因此,即使一个演讲很无聊,也可能不适用于整个课程,而对于其他部分来说,却值得经历痛苦。但是我退学了。同时,我了解到有时候,即使那张纸并不意味着我的工作会更好(我的工作很好,薪水不错,所以还不错;-)),有时那张纸会是有益的
johannes

0

我认为这个问题的许多答案令人失望。他们回到了关于CS与编程等的陈旧争论。也许是这样,但是在我看来,OP所使用的课程也不在教。

在大学兼职学习CS之前,我当时已经是一名程序员,并且自己做了很多研究。我到处购物,但总的来说发现课程浪费时间。即使他们已经在该领域拥有专业经验,他们也不会让我跳过课程。

根据我的经验,很大一部分教授都很懒惰,使用的课程过时。老实说,这听起来像是在浪费时间。我甚至质疑完成文凭是否会帮助您找到工作。

我怀疑您在改变课程方面可以做很多事情。您可以自己学习来补充它。或只是忘了整个事情,然后独立学习CS,并做一些行业认证。

我要补充一点,我不知道文凭在贵国就业市场中的价值。如果文凭本身尽管内容丰富但仍然有价值,那么您可能只需要忍受某种程度缺乏的课程。


以前没看到这个。我很高兴看到有人确切地说出我对某些答案的看法(您的第一段)!是的,教学内容毫无用处,我不再上课,只是上交我需要编写的程序。我用自己的方式来做(通常很糟糕,从CL到C ++),遇到了课程中没有的很多东西,并向程序员朋友而不是教授寻求建议。这种方式实际上很有趣。仍然希望我能在毕业前找到工作。
Toerndev

0

他们必须迎合学生。大多数学生无法编程。因此,他们并没有被迫去那里寻求技术。

他们也有自己专门的研究领域,但他们并未在教书。而且无论如何,许多研究人员都不是好老师,因此,如果他们正在教授您已经知道的知识,您可以认为自己很幸运!

无论如何,您似乎都不知道计算机科学是什么。这与行业实际无关。


-6

我会要求(然后坚持)以标准c ++返回您的作业。这是完全合理的,因为您无法完成分配。

至于不好的风格;不可避免地会有一些这样的开始。学习正确使用标准io库需要相当多的高级c ++功能,尤其是模板和迭代器。我可以看到为什么讲师会帮助您使用非常简单的io函数。我不怕问这个,它显示出热情和双眼。您的讲师应该能够将您的问题编入以后的演讲中,在那里您(希望)正确地进行了早期练习。

我会留在那儿。即使c ++可以是平台无关的语言,但通常不是。学习一些Windows系统功能不是一件坏事,特别是如果您随后按照标准训练自己去做的话。conio.h在查看其他人的代码时,您会在某个时候遇到它-很好地知道它的作用。


10
不,为您提供了完成这项工作的工具,使用这些工具是您的工作。如果您的工作只有一个运行CP / M的15年历史XT,要求他们接受您的64位Windows 7代码也不起作用,最好早日习惯。
jwenting

2
@Ramhound大学应该使完成课程而不必购买昂贵的设备(例如Windows操作系统)成为可能。其偏见。
汤姆(Tom),

3
@Tom,如果我在教Photoshop,我希望您购买Photoshop(这非常昂贵),并且希望您购买昂贵的教科书,但我看不出这有何不同。而且我敢打赌,校园里他有很多计算机可以不用购买Windows就可以完成任务(坦率地说,任何学习CS的人都应该同时拥有这两种软件,而你永远不知道最终会去哪里,人们在Microsoft堆栈中进行编程的产品不倾向于使用Linux。)
HLGEM 2011年

3
@Ramhound即使教授没有明确说明为什么使用简化的基于dos的IO例程,我们也可能做出正确的猜测。正如Tom提到的,C ++的io例程相对复杂,因此在入门级课程中隐藏细节并不是不合理的。使用基于Windows平台的特定库而不是基于* nix的库的决定几乎可以肯定地归结为以下假设:大多数学生使用的不是* nix的Windows,而且更多的Windows用户将很难开始使用* nix,反之亦然。
Dan Neely

5
@gaidal-规则存在是有原因的。如果您开始在某个地方工作并决定使用标准库而不是专有库,因为“存在标准是有原因的”-您会发现自己很快就会失业。将此课程作为编码标准合规性练习。您不会一直喜欢那些。
littleadv
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.