作为没有CS学位的程序员,我是否需要广泛学习C ++?

时间:2009-03-15 12:08:01

标签: c++ c

我是一名有两年工作经验的程序员,我在4个地方工作,我真的认为自己是一个自信,流利的开发人员。

我的大多数同事都有CS学位,我觉得没有任何区别!然而,为了跟上这些人的同一个流程,我研究了C(从初学者到专业人员阅读开始C),用C语言编写DataStructures,以及用C ++编写OOP。

我对指针,内存管理有一个合理的理解,我也参加了一个C,DataStructures和C ++参与的奖学金。

我想要指出,我对C和C ++的熟悉程度并不超过阅读某些页面,并执行一些演示; 我没有使用任何使用C或C ++的项目

最近,我的一位朋友建议我广泛学习C和C ++,然后转到OpenGL并学习图形编程。他说,通过学习这些主题,我可以获得的见解在我作为程序员的整个生命中将真正帮助我。

PS:我是一名全职开发人员,主要从事使用C#的ASP.NET应用程序。

推荐

16 个答案:

答案 0 :(得分:9)

实际进步:

从实际意义上讲,选择一种适合您想要工作的域的语言。

对于大多数编程空间,没有必要学习C或C ++。如果没有用这些语言编写一行代码,你就可以成为一名非常称职的程序员。

如果您不熟悉现在所处的确切领域,您可以学习C或C ++,以便找到较低级别的编程工作。

帮助您成为更好的程序员:

你可以从学习多种语言中学到很多东西。因此,以这种方式拓宽视野总是好的。

如果您想获得更多其他语言的经验,并且还没有尝试过,我建议学习一种函数式编程语言,如Scheme,Lisp或Haskell。

答案 1 :(得分:7)

答案 2 :(得分:6)

经验是最好的老师。

虽然您可以阅读有关内存管理,数据结构(及其实现),算法等内容的信息,但在您有机会将其付诸实践之前,您将无法获得它。虽然我不知道是否真的有必要使用C或C ++来学习这些东西,但我会付出一些努力来实际编写一些管理自己内存并实现一些常见数据结构的代码。我想你会学到一些能帮助你更好地理解代码的东西;要知道幕后发生了什么事,可以这么说。我还建议阅读计算机组织和操作系统,计算机安全性和布尔逻辑。另一方面,我从来没有真正发现需要做任何OpenGL编程,虽然我曾经做过一些X Windows的东西。

答案 3 :(得分:4)

实际上,学位与C / C ++无关。现在,像大O()估计,数据结构甚至数学背景的东西。例如,线性代数结果非常有用,即使在看似无关的情况下(例如搜索引擎)也是如此。

例如,一个好的编码员,但没有任何理论知识,可能会提交的典型错误是尝试通过精确算法解决NP-complete问题,而不是近似。

现在,为什么在大学里他们教你C / C ++?因为它让你看到它是如何在“引擎盖下”工作的。您将有机会了解调用堆栈的工作原理,内存管理的工作原理以及指针的工作原理。当然,您不需要这些知识就可以使用大多数现代语言。但是你需要了解他们的“神奇”是如何运作的。例如。如果你不知道指针和内存分配,你无法理解GC是如何工作的。

答案 4 :(得分:4)

我经常问这个问题(对我自己)。我认为更通用的版本是,“如果我不知道如何使用没有自动垃圾收集的语言,使用指针和所有'复杂'的东西',我怎么称自己为程序员?”我从来没有学过C ++,除了做一些HelloWorlds,所以我的答案受到缺乏的限制:

我认为你需要学习C ++(或者汇编程序,真的)的感觉来自于你总是在努力别人的抽象的感觉:写“火箭科学家”的人JVM,CLR,等等。 因此,如果你能使用较低级别的语言,你就会真正知道你在说什么。我认为这是非常错误的。一个总是建立在一组抽象上:甚至汇编程序也被翻译成二进制文件,也可以学习。除此之外,即使你有一把钳子和一些钛,你仍然无法用柴火制造电脑。

根据我作为软件开发人员(主要是Java)的企业培训师的经验,最好的人那些了解C ++的人,而是那些采用他们语言的人作为“播放”的独立空间工作。虽然C#和Java中的内存管理始终 ,但除了从对象中释放对象之外,你永远不必考虑任何事情(和一些其他陈词滥调的地方,比如使用流而不是在内存中扔掉巨大的物体)。指针和所有这些东西对你没有帮助,除了作为一个通行权(和一个好的,我敢肯定)。

总而言之,使用您所使用的语言进行工作,并尽可能多地使用相关的内容。这些天我发现自己沉浸在Javascript中虽然API应该让这个不必要,并在Fireworks中做一些东西,而我手工弄乱CSS。除了我在,PHP和Actionscript中真正所做的开发之外,这也是一切。 所以我的观点是:专注于您需要的抽象,因为它们更有可能与您平台下的低级别内容相关。

编辑:我对jalf的评论做了一些小改动,谢谢。

答案 5 :(得分:3)

我拥有一流的软件工程学位,并为一个大型控制台制造商工作,他们在一个程序员团队中开发游戏引擎,所有程序员都使用从Asm到C ++到C#到LUA的各种语言编程,并且知道里面的硬件出。

我会说我的学位的5%是有用的,而且远远地说,推动我的职业生涯最重要的特点是热情和自我发展。

事实上,我与之合作的很多同事都没有学位,平均而言可能是更好的。

我要说这是因为他们不得不用大学学位取代那张纸,用他们在业余时间开发的实际工作代码来学习他们自己背后的技能,而不是用勺子喂食它

我的驾驶教练用来告诉我,在通过测试后我才开始学习如何驾驶,即你只是从实际应用中学到了基础知识。 CS学位课程为您提供基础知识,如果您已经有6个月的任何主要语言的工作编程,您将拥有。学位只是打开了你可能没有的大门 - 一旦进门,它就没有那么大的帮助。

知道软件如何通过它的声音与硬件交互是目前最重要的领域,只有这样,“神秘”或“魔法”才真正消失,你可以对自己所说的内容充满信心哪里。学习C和C ++无疑将在这方面提供帮助,因为知道像OpenGL这样的API。

但我要说最重要的是找到你感兴趣的东西并编写代码。如果你对它有真正的热情,你自然会学到更多的低级信息并成为一个更好的程序员,如果这确实是你对更好的程序员的定义!

答案 6 :(得分:2)

我作为一名开发人员已经工作了近15年没有学位。我从Ada开始并迅速进入C / C ++,但根据我的经验,总会有一些语言“你必须学习”。如果它不是C ++,它将是C#或C或Java或Lisp。我的建议是确保你在适用于任何语言的基础知识上都很扎实(我最好的朋友作为没有学位的开发者是CLR书),你应该能够在语言和框架之间相对容易地移动。

答案 7 :(得分:2)

您不必完全学习C / C ++,但这两种语言都会教您思考您的软件如何与底层操作系统和硬件交互,这是一项基本技能。你说你已经知道指针,内存管理等等,这很棒。许多没有CS学位的程序员缺乏这方面的重要知识。

学习C / C ++的另一个好理由是,用这些语言编写了很多代码,了解编程的更多方法是阅读其他人的代码。如果您对编写驱动程序,操作系统,文件系统等低级代码感兴趣,那么C / C ++几乎是唯一可行的方法。

答案 8 :(得分:1)

你需要广泛学习吗?我不期待。

然而,最好总是学习一些东西,帮助你从不同的角度看待编程。学习C或C ++对于深入了解事物在较低层次的工作方式是值得的。对于C和C ++程序员来说,通过学习汇编可以实现同样的目的。大多数人不会在项目中使用汇编,但了解它的工作方式可能会不时有用。

我的建议是尽可能多地学习。如果你不是在不久的将来从事C ++项目,我不会太担心学习细节,但从另一个角度看问题并学习新语言总是很好的一种方法。那样做。

答案 9 :(得分:1)

今天对于大多数应用程序来说,C和C ++可以被视为一种学术练习:“我们如何编写没有垃圾收集的程序?”

答案是:你可以,但这是一个非常痛苦的经历。 C ++中最佳实践的大部分细节都与缺少垃圾收集有关。

鉴于现代GC的卓越性能以及计算能力的普遍提升,即便是手机也拥有了GC。在具有GC的平台中,您始终可以以限制GC压力的方式进行编码。

答案 10 :(得分:1)

聆听或阅读SO podcast 44,其中Joel播放他最喜欢的歌曲Write in C

  Spolsky:是的,无论如何,它还没有给甲壳虫乐队支付适当的版税。我们将链接到showotes中的内容。很棒的歌,写在C。

     阿特伍德:没错,乔尔最喜欢的歌。用C写下所有内容,因为Joel实际上用C语写了所有内容,不是吗,Joel?

     

Spolsky:我开始使用C99的最新版本C99,它可以让你在写完一些语句之后声明变量。

     

...

答案 11 :(得分:1)

如果没有专业的理由(除了自我改进的良好实践)学习C或C ++之外,那么你应该有一个热情的副项目,你可以用C或C ++编写。一旦侧面项目的进展变得艰难,你将需要你的热情和好奇心带你超越驼峰(因为在一个侧面项目中,你自然没有动力的支付或去激励高级隐约你)。

此外,大多数CS学位现在都使用Java作为他们的语言。这只是证明了选择语言所获得的经验以及学位课程其他课程所涉及的一些理论的经验,对于CS学位的人来说是主要的好处,而不是特定的语言(尽管我认为他们的抽象尺度越高,从长远来看,这对学生来说就越糟糕。)

答案 12 :(得分:0)

没有学习编程语言的实际原因,这很难。 如果您能够考虑特定问题或语言适合的特定任务 - 那么学习体验是由需求驱动的,而不是简单的学术研究。

我最近刚刚从VB切换到C#(1个月前),但没有像从C#切换到C那样明显不同,因为我因特殊原因切换,我发现它更容易学习。我曾经涉猎过没有特定问题需要解决,不用说我换回了

答案 13 :(得分:0)

如果您的学习方式与自学成才不同,那么我建议成为更好的程序员就是研究有关您所在领域的主题。从下到上,慢慢爬上梯子。有相当数量的不同程序员,没有人会擅长,所以不要从心中开始。

祝你好运。

答案 14 :(得分:0)

C ++只是一种编程语言。你没有其他学生(如果他们在课堂上注意到的话),那就是通过学习概念得到更深刻的理解。

作为一名程序员不是也不应该是任何CS毕业生的最终目标。然而,就大多数人而言,如果没有这样的学位,它就会得到。

这是一个类比:工程师和建筑师在某些时候都学会使用CAD来建造建筑物。此外,完全未经训练的人可以使用CAD进入并开始工作并且非常有效。这是一个很好的职业生涯,而且收入很高,但是对于工程师和建筑师来说,当你30岁时,这不是你想要的。

答案 15 :(得分:0)

了解C的一个价值是许多其他语言,包括C#,Java,C ++,JavaScript,Python和PHP都源于C语法。

另一个价值,也可能更重要的是,它将建立你的信心。程序员是一个自信的团队,非常乐观(你必须有信心认为你可以编写相当于1000页的书而没有单一的拼写或语法错误)。学习和有效使用任何语言的能力的信心将随着纯粹的C应用程序而大大增加。

所以用C写一个非平凡的程序;至少读取和写入文件,分配和释放内存,以及管理数据结构(如队列或二叉树)的东西。

你的信心会感谢你。