程序员不知道C和C ++之间的区别是否很常见?[关闭]


16

在一次采访中,有人问我是否知道C和C ++之间的区别。

我想知道为什么会问这样的问题?


11
考虑到我在最近几周用C ++标记的C问题的数量,我会说这是一个非常重要的问题。
2012年

13
从我看到“ C / C ++”的频率来看,这很常见。
user16764 2012年

6
你回答了什么
2012年

8
对于编程工作的申请人来说,什么都不知道是很常见的。但是我不会称这个人为程序员。
vartec 2012年

6
@Tjaart-您确实知道有些系统的字节不是8位,对吗?
Ramhound 2012年

Answers:


25

如果问题的措辞是“您知道C和C ++之间的区别吗?” 并且只允许您回答“是”,那么我可以看到您的困惑,但是如果他们实际上是在问“ C和C ++之间的区别是什么?” 正如他们所说,我希望这是一个更加开放的答案,我可以将其视为合法的“调查途径”。

例如,仅使用C语言进行编码,而从未使用C ++语言进行编码,我几乎无法回答模糊的“ C ++是否支持面向对象的编码?”这一问题。


40

有人观察到,有大量的编程工作申请者根本不会编写代码。因此,是的,提出“显而易见的”问题是很合理的。


7
这几乎是我的答案。采访过编程职位的人后,我可以告诉你,这些显而易见的问题将很容易地裁减出大量候选人。
Tyanna 2012年

一百万为您投票。我对初学者水平的问题感到惊讶,因此许多受访者无法回答。
HLGEM 2012年

1
再说一遍,我已经进行了25年的编程工作,还有一些我无法真正回答的初学者级的问题(如果您要求定义,那就更糟了)。我正在看这个答案中链接的文章,就像“嗯,是的,让我考虑一下”,而在工作中,我致力于实现相当复杂的系统,并且通常不会遇到很多麻烦。这些小问题中的一些让我感到震惊的不只是多层系统,而且还抛出了一些多线程功能,像那样废话……我知道这很奇怪。
MetalMikester 2012年

1
确实。正如在另一个P.SE线程上所讨论的那样,在采访中,我养成了从一个荒谬的显而易见的问题开始的习惯(“如何在JS中声明变量?”,“在Java中1 int有多少字节?”,“什么是指针?”等...)。我不介意第一个错误(即使我开始谈话时进行谈话以使他们放松,压力也是一个因素),但是通常如果我在遇到体面的问题之前能先得到3次罢工,那么我认为挂断而不走是完全可以接受的进一步或将他们踢出去。提出愚蠢的问题所需的5分钟时间值得节省时间。
haylem 2012年

3
实际上,我什至在问这些第一个问题之前就道歉,因为我不希望熟练的申请人被他们淘汰,或者认为我没有认真对待他们,并觉得他们不属于这里。
haylem 2012年

8

有一大堆。有无数的人拥有愚蠢的讲师,他们教C字符串和newdelete,或者是过时的教程或坏书,虽然他们学习“ C ++”但实际上是C,但他们认为两者非常接近。

当然,如果您是雇主,那么说他们相同甚至相似是一个很大的警告信号。


2
这提出了一个很好的观点。教C但使用C ++编译器是可以接受的,甚至是很常见的。这当然会导致从未学习C和C ++之间主要差异的学生感到困惑。我只在谈论同一修订版之间的主要差异。
Ramhound 2012年

4
@Ramhound:这是不能接受的,在所有。常见的事实是正交的。
DeadMG 2012年

1
可悲的事实是,C和C ++几乎在所有方面都不好教。转到SO并仔细查看C和C ++标记,您将一遍又一遍地看到相同的误解,相同的错误解释,相同的不良做法。这些不是人们随机地犯同样的错误。他们被教导如何犯这些错误。“我的教授说...”现在几乎对我来说是一个危险信号。
John Bode

5

还有一小部分人(例如我自己)在学习C之前就已经学习过C ++。

我敢肯定,您知道它们之间的区别,但是如果您是仅拥有C ++类而不是C类的学生,那么与C不兼容的C ++部分将不会很明显。

我了解到的一些更明显的差异(不是详尽的列表)()struct数据类型本来不能包含函数,也不能具有私有成员,这意味着很难强制实施抽象数据类型的有效性规则C中不支持类C()中不支持类,使用&运算符通过引用传递的引用特定于C ++()C不支持流或模板(*)malloc和free仅用于C中,而不能用于C ++


2
我认为这是一个关键的见解...在过去,您有一个C编译器,然后出现了C ++,因此您了解了这些差异。现在您有了C / C ++编译器,并且如果您被明确地教给C ++,那么除了“面向对象的知识”之外,几乎不可能知道C是什么,C ++是什么了,而且我不确定C / C ++是最常见的在愤怒中学习的语言(?)
Al Biglan 2012年

1
我非常希望百分比不会那么小,因为那些“转换为C ++”的C程序员通常是非常糟糕的C ++程序员
2012年

1

不幸的是,我认为它变得越来越普遍。

我认为刚从技术学校毕业(或从那里学习技能的年轻人)根本不会学习诸如C,C ++,Lisp,OCaml等较老的语言。他们只是以“ c#程序员”或“ java程序员”的身份出现”等。找到工作后,他们不会挑战自己学习其他语言。

当然有一些可以做到的,但是从我曾经合作过的人来看,年轻的程序员普遍遵循这种模式。

免责声明:既然我在谈论教育,那么在教育方面所强调的问题当然在各个国家之间可能会有所不同。


您在说什么大学?“奥术”语言?我曾在罗马大学学习汇编为MIPS ...
ВиталийОлегович

通常,我遇到的“年轻”程序员都具有工程学学位。想到这一点,与我一起工作的几乎所有程序员都拥有工程学学位,包括我自己。
皮特

1
C和C ++仍在学校教授。问题是在大多数情况下,使用相同的编译器来教授这两种方法。这意味着他们从不真正学习两种语言之间的差异。
Ramhound 2012年

@Pete如果我是一名“ C#程序员”,我无法想象将C或C ++作为“另一种语言”来学习。当然,我想要Ruby,Haskell,Javascript,Python。C系列语言非常接近,因此知道一种就足够了。
Kirk Broadhurst,2012年

0

可能不是从字面上看,因为他们认为C ++和C是一模一样的,但是就真正理解和能够使用C ++的不同功能而言,是的。

主要原因是简历/简历中列出语言/工具的二进制性质。本质上,标准似乎是,如果让“ Hello World”编译并以某种语言运行,则可以在简历/简历中列出它。

碰巧,C版本的“ Hello,World!” 还可以在C ++中编译和运行。因此,在没有任何其他信息的情况下,在履历上看到“ C ++”的所有信息都告诉我,这个人知道足够的C来获取“ Hello,World!”。运行,并且知道大多数C程序都将使用C ++进行编译。

鉴于此,我将需要在访谈中对此进行一些探讨。我可能不会通过问“是/不是”“您知道区别吗?”来这样做。问题,总之是因为它具有明显的“正确”答案。我可能会问应聘者,她更喜欢哪种语言,为什么,以及她没有选择的语言是否有优势。


0

回答

是的,这很普遍。我,我自己,同事或第三方库代码都已经见过这种情况。

例如,我本人有时会与其他编程语言或编程框架一起使用,并且必须链接或更新到“纯c”或“ c ++”库。

我只是有修改一些“纯C”代码的问题。并使用“ c ++”的“新”和“删除”内存分配功能。其余代码不是面向对象的

编译器是C ++。后来,我起诉了另一个编译器,并发现了错误。

奖金

如果有人通过口头或书面测试或在线在线测试提问:

“您知道C或C ++之间的区别”

然后您回答“是”或“否”。

他们的真正意思是:

“您知道C或C ++之间的区别吗,请告诉我?”

因此,您必须回答:

“是的。尽管如此,您可以在C ++程序内部使用Pure C来实现向后兼容性,这与C ++和面向对象的不同。”

有时,他们不会问您“如果您愿意,请告诉我”,他们会假设您不知道。不要只是回答“是”或“否”。


2
好吧,我认为答案并不完全正确。正确的答案是C ++对面向对象的代码具有强大的支持。不需要它。(首先是造成这种混乱的原因。)
弄乱了机器人

同样,“您可以在C ++程序中使用Pure C”可能意味着“ C ++是C的超集,即,任何C有效程序也是有效C ++程序”(错误)。或它的意思是“您可以将C ++程序链接到C库”(是的,但是大多数语言可以某种方式链接到C库。)在实际的采访中,您应该更加精确。
nikie 2012年

-2

编辑

首先,请注意,此答案并不意味着声明没有区别,或者我自称知道这些区别,甚至不是C或C ++中的“ Hello World”。这是对问题的答案,它规定了职权范围,指出很多人都知道基本差异(例如,一个+人的名字有一些特点),很少有人会知道所有或什至大多数差异。


这取决于您所说的“程序员”和“差异”。

我是一个“程序员”(尽管我称自己为开发人员),我将努力给出C和C ++之间的真正区别。如果按一下,我可能会说C ++是C的超集,它具有名称空间和继承。处理内存的不同方式。我知道足以修补一些bug或对现有程序进行一些更改,但是我无法想象除了用C或C ++编写一个简单的实用程序外,还要写些什么。我足够了解,但是我不会把自己描绘成“知道”这两种语言。

我知道其他“程序员”(也是开发人员)甚至不会告诉您Java与FORTRAN或Javascript与Pascal之间的区别。他们擅长于做程序语言,而不擅长程序语言。

然后有数百万的普通程序员几乎不了解他们每天使用的单一语言。

术语“差异”是模棱两可的。我已经指出了上面我看到的一些差异,但是我知道它们不是确定的和完整的。很少有人会知道每一个区别-将会有更多的人能够对对象定向给出一些模糊的答案(就像我一样)。


5
“我将努力使C和C ++之间没有任何真正的区别。” 您当然不是C ++程序员。请?
2012年

2
C和C ++是千差万别的语言,以千差万别的方式编码。您显然只是不认识他们。
DeadMG '13

@sbi “我不会把自己描绘成“知道”这两种语言。我让你自己决定。
Kirk Broadhurst,2012年

关于降票有任何反馈吗?是因为我不知道两者之间的区别吗?我不认为那会使我失去回答这个问题的资格。
Kirk Broadhurst

1
@KirkBroadhurst:我想我指出了我不满意要拒绝投票的那部分答案,而此评论被投票的次数是您被拒绝投票的次数的五倍,所以我不确定您要做什么。但是,需要详细说明:在这里,术语“差异”就足够了,因为C和C ++仅共享表面上的语法相似性,除此之外,它们是非常不同的语言。至于资格:我认为这里没有必要回答的资格,但是当一个答案公然错误时,它将与资格无关。
2012年

-3

程序员不知道C和C ++之间的区别是否很常见?

二十年前?是。

今天?没那么多。

这样做的原因是因为编程领域发生了很大的变化。当今的许多程序都是基于Web的。即使是为台式机编写的程序,也可能使用比C或C ++更高级的语言编写。因此,除非您是编写OS代码的程序员,否则您可能对这两种语言都不了解太多。

面试官可能会在面试中问这个问题,以评估您对编程基础知识的了解程度。如果您了解C和C ++之间的区别,那么您可能会知道什么是面向对象的编程,您可能会了解库和编译器,您会了解内存函数,引用,指针.....许多因素影响了当今的编程语言。我使用C ++的程度不高(我不能说我是任何语言的优秀程序员;智慧会随着时间而来),但是我可以说我在C ++方面的经验肯定使我成为一名更好的程序员。


8
本来会相反。我现在看到的人比5至10年前还多。
haylem 2012年

@Haylem回想起来,我想我想反过来说。
Lunchmeat317
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.