应该的。网开发人员的真的**能花时间学习C对于低水平暴露?

StackOverflow https://stackoverflow.com/questions/125791

  •  02-07-2019
  •  | 
  •  

当乔尔Spolsky和杰夫*阿特伍德开始的分歧,在他们的播客是否程序应该学习C,无论它们的工业界和平台交付的,它闪闪发光的相当一爆炸性辩论的开发者社区可能仍然肆虐之间的某些群体今天。我已经阅读一些章的一些程序员的博客作者与他们采取的在问题。该论从双方肯定运载重量,这两个什么我没有找到一个角度是唯一角度的离的角度来看 开发者只关注。净框架.几乎所有的人都在谈到上一个一般程序员的角度来看。

我在试图获得在?回想一下杰夫*阿特伍德的意见,即大部分时间开发人员在如此高级别会花费将是在学习 业务/域, ,无论是需要了解的技术,以实现这些领域的要求。在我工作的经验,这是一个非常准确地描述的工作生活中的许多。现在假设。网开发人员可以叉的时间用于"额外课程"学习、应 是C?

为了记录在案,我已经学到了C回学校自己,我绝对可以理解和赞赏倡导推理。但是,当时在想事情经过的,我个人的感觉。网开发人员不应直接成C.因为,我希望更多的开发人员将需要一些时间来学习的是- CLR.

也许我坚持的一个不寻常的束的同事,我不知道,但它似乎对我的许多人们不保留 意识 他们C#或VB代码汇编在IL先前JIT来,使得原始计算机代码。最不知道IL,并没有兴趣如何 到底 CLR处理的代码,他们写。阅读杰弗里*里希特 CLR通过C# 是相当令人震惊的我在这么多的领域;很高兴我读尽管它的同事们贬为"太低的水平"。我不是专家在IL但是与知识的基础,我发现自己如下的他的案文更容易因为我已经熟悉栈行为。我发现自己拆卸组件来看看如何IL实证明,当我写某些特定的代码。

我了解CLR和集因为我知道,是直接层 我下面.该层允许我进行我自己的层的工作。C,实际上是进一步下降。更接近我们的"现实"是CLR和集.这就是为什么我会推荐其他人要去看这些,因为我看不到足够的人探讨在这一层。或者是你的团队已经熟悉集?

有帮助吗?

解决方案

我已经知道C并且在1.1天内帮助了我,在.NET基础库中还有许多东西还没有,我必须从Platform SDK中调用/调用一些东西。

我的看法是,我们应该总是花时间学习一些我们还不知道的东西。为了回答你的问题,我认为学习C并不是必不可少的,但如果你有空闲时间,C语言是一门很好的语言学习,并且与其他任何语言一样有效。

其他提示

当然你应该。变得过于专业化和专注(并且相应地,具有有限的市场技能)的最好方式是仅使用单一类型的语言,并避免所有其他语言“与您当前的任务无关。”

每个程序员都应该拥有一些现代JIT'd OO语言(C#/ Java),一种更低级别的简单语言(C,FORTRAN等),一种非常高级的解释语言(Python,Ruby等)的经验。和功能语言(Scheme,Lisp,Haskell等)。即使你没有在日常生活中使用所有这些,扩展你的思想过程,这些知识授予是非常有用的。

是的,C远低于链条。了解MSIL可以帮助开发人员了解如何更好地优化他们的应用程序。至于学习C或MSIL,为什么不两者兼而有之? :)

.NET开发人员应该了解CLR。但是他们也应该学习C.我不知道如果没有对裸机上发生的事情有一些低级别的理解,任何人都无法真正理解CLR是如何工作的。

花时间学习更高级别的概念肯定是有益的,但是如果你以低级别为代价过度集中于高级别,你就有可能成为那些“架构师”之一。那些可以在白板上画盒子和线但却无法编写任何实际代码的人。

通过学习C学到的知识对你职业生涯的其余部分都有用。随着Microsoft改变平台,您对CLR的了解将变得过时。

我是说学习一些编制语言和大会是一个 必须.没有这些,你不会得到多功能性的需要之间的切换的语言和栈。

更具体地说--我认为,任何良好的/优秀的程序员都必须知道这些事通过直接经验:

  • 之间的区别是什么一个登记册和一个可变的?
  • 什么是DMA?
  • 是怎样的像素放在屏幕上(在较低的水平)?
  • 什么都中断?
  • ...

知道了这些事情之间的区别是工作一个系统你 了解 和一个系统,该系统,对于你所知道的,通过魔术。:)

为了解决一些评论意见

你最终有两种不同开发商:

  • 人们可以做一件事在10种方式中的一种或两种语言
  • 人们可以做一件事在一个或两种方法,在10个不同的语言

我强烈认为,第二组是更好地开发商的整体。

我想起来就像这样:

  1. 程序员可能应该使用适当的最高级语言实际工作。什么是合适的取决于您的情况。设备驱动程序或嵌入式系统与CRUD桌面应用程序或网页属于不同的类别。
  2. 您希望您的程序员能够以他们工作的语言尽可能多地练习。
  3. 由于大多数程序员最终都在使用通用桌面和Web应用程序,因此您希望编程学生在学校期间尽快使用更高级别的语言。
  4. 但是,高级语言会混淆一些基本的编程问题,比如指针。如果我们应用我们使用适合学生的原则,那些更高级别的语言可能不适合一年级学生。这会抛出Java,.Net,Python等等。
  5. 因此,学生应该使用C(或更好的:C ++,因为它是“更高级别”并涵盖大多数相同的概念),在学校的第一年或第二年涵盖基本概念,但很快就会升级到更高 - 等级语言,以便更早地启用更难的程序。

足够高级的在编写C#你需要理解的概念在C,甚至如果你不了解的语言适当的。

更一般地说,虽然,如果你是认真的 任何 技巧,你应该知道至少一个抽象的级别低于主要的工作水平。

  • 编码在jQuery应该配合一了解的JavaScript
  • 设计电路需要知道的物理
  • 任何良好的篮球运动员会了解肌肉、骨骼和营养
  • 一个小提琴家会了解的相互作用的松香,摩擦,弓头发,string,和木材干

我喜欢每年学习一门新语言。不一定要掌握它,而是强迫我的大脑以不同的方式思考。

我觉得学习C语言是学习低级概念的好语言,而不需要在汇编时编写代码。

但是我觉得从Haskell,python等语言中学习经验教训,甚至可以说是正则表达式(不完全是一种语言,但是你能抓住我的漂移?)与从C中收集的课程一样重要。

所以我说,如果这是你的区域,那么在工作中了解CLR和MSIL,并在业余时间尝试每隔一段时间学习一种不同的语言。如果今年恰好是C,那对你有好处并喜欢玩指针;)

我认为没有任何理由。 Java和C#等语言的设计使您无需担心底层细节。这就像询问WinForms开发人员是否应该花时间学习Win32 API一样,因为那是在下面发生的事情。

虽然学习它并没有什么坏处,但是你可能会花更多时间学习你熟悉的语言和平台,从而获得更多,除非你需要学习低级技术细节。

学习MSIL并不是一个坏主意,但在某种程度上它只是另一种.NET语言,但语法难以理解。不过,这是另一层,我认为人们应该至少对所有层都有一些模糊的理解。

C,有点像汇编语言,语法更好,是一个很好的方式来了解发生在相当低级别的事情(虽然有些事情仍然隐藏在你身上)。

从另一端来说,我认为每个人都应该知道一些像Haskell或Lisp这样的东西来了解更高级别的东西(并且以更清洁的形式看到C#3中引入的一些想法)

如果你认为自己是程序员,我会说是的,学习C。

许多编写代码的人都不认为自己是程序员。我在工作中每天写3个小时的.NET应用程序,但我并没有将自己标记为“程序员”。我做了很多与编程无关的事情。

如果你整天都在编程或考虑编程,并且你要让整个职业生涯都围绕编程,那么你最好确定你知道自己的东西。学习C可能有助于建立一个知识基础,如果你要深入学习编程技能,这将有所帮助。

随着外翻,需要权衡利弊。您学习的语言越多,花在技术上的时间越多,学习其他技能的时间就越少。例如,学习C或阅读有关项目管理的书籍会更好吗?这取决于你的目标。你想成为最好的程序员EVAR吗?学习C.花费数小时编写代码并专注于工艺。您是否想要管理其他人而不是整天编码?利用你投入编程的时间,找到提高软技能的方法。

.net开发人员应该学习C吗?我会说“不一定”,但是我们应该总是在我们的职业监管机构之外使用某种语言,因为每种语言都会带来一种思考问题的新方式。在我作为.net(以及之前的VB 2-6)开发人员的职业生涯中,我用Pascal,LISP,C,C ++,PHP,JavaScript,Ruby和Python编写了小项目,目前我正在考虑使用Lua和Perl的。

除了C ++之外,我没有在我的简历中列出任何一个,因为我不打算成为其中任何一个的专业人士。相反,我带回了每个有趣的想法,用于基于.net的工作。

C很有意思,因为它真的让你接近操作系统,但这并不是你需要知道成为优秀程序员的唯一级别。

CLR 是一台虚拟计算机,所以如果这就是你所学到的,那么你只知道在虚拟级别发生了什么。

学习 C 会在内存使用情况方面向您传授有关物理机器的更多信息,正如您所提到的那样,CLR在其下使用了什么。学习CLR如何工作并不会让你对垃圾收集有太多了解,比如学习C.用C语言,你真的欣赏内存管理所涉及的内容。

另一方面,

学习 CIL 会告诉您更多关于.NET执行情况的信息,而不是学习 C 。尽管如此, IL 如何映射到机器语言仍然是大部分仍然是个谜,因此了解一些高级操作码(如用于投射类型的操作码)在理解方面没有帮助。真正发生的事情是因为它们在大多数情况下是不透明的。然而,学习 C 和指针会启发你的一些方面。

问题是学习C还是MSIL,还是更基础?我会说,一般来说,更多的开发人员可以了解更多有关计算机(物理或虚拟)工作的信息。只有在框中理解语言和API,一个人才能成为一名相当称职的程序员。为了将职业提升到一个新的水平,我觉得开发人员真的需要了解整个堆栈。不一定详细,但有足够的一般性来帮助解决问题。

通过了解有关编译器和语言设计的更多信息,可以获得很多这些技能。你可能需要学习C才能做到这一点(哎呀,鬼鬼祟祟),但编译器编写是学习C的好环境.Steve Yegge 在他的博客上谈论这个,我在这一点上基本同意他的看法。我在大学里编写的编写课程是我参加过的最开眼的课程之一,我真的希望它是200级课程,而不是400级课程。

我这的另一个线程,但它在这里也适用于:

我相信你需要一个良好的基础,但投入的大部分时间到学习什么你会被使用。

  • 了解足够的汇编添加两个数字在一起,并显示结果在控制台上。你会有一个更好的理解什么是实际上与计算机和它将有意义的,为什么我们使用的二进制/Hex。(这可以通过在一天和可以做到 调试从cmd.exe).
  • 了解不够C的得分配一些存和使用的指针。一个简单的 链表 是足够的。(这可以在一天或两个)。
  • 花更多的时间学习的一种语言,你都要使用。我会让你的利益引导你进入其语言(C#、Java、红宝石,蟒蛇,等等)。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top