解决方法
当你开始专业地编写C代码(即每周40小时)并花费1或2小时来每天学习关于C的新东西(即每周5-10小时),阅读书籍和文章时,你需要几个月的时间如果不是几年,成为一名真正的专业C程序员 – 毫不客气地假设你的工作不需要你学习任何第三方API,新工具,技术等等,这会分散你学习C的注意力.
几年来,我已经向已经接触过Java一年的学生讲授过C.在4-5个月,12-15个讲座,以及实验室中至少两倍的时间,我已经设法将它们从“Hello,world!”中拖出来.一直到模板元编程的简短介绍.知道该范围所涵盖的所有区域的每个人都会告诉你,在此之后,他们仍然是血腥的新手.
(哎呀,我用C大约15年,赚了我的钱写C代码> 10年,并且几乎每周仍然学习它的新东西.而且这甚至没有考虑到我们倾倒的大量东西.新标准,已经“蠢蠢欲动”好几年了).
由于为了学习C而要覆盖的领域的庞大规模,并且由于C足够大以至于它的程序员可以被归类为几代,当涉及到他们学习的标准习语和“最佳”实践时,最后因为(再次由于它令人难以置信的巨大)新技术不断被发现和发展(模板元编程,现在是C的一个非常重要的特征,是一个没有人计划过的事故),C社区对习语和实践的看法不是比起Java社区那么紧凑,如果没有引起激烈的讨论,很难将其作为一套几十条规则进行沟通.
(我认为有几个不同的非常好的和推荐的最佳实践书籍,其中列出了几十个经验法则,以及其中一些人后来获得了补充更多最佳实践书籍的事实,从字面上说明了这一点.)
你会发现许多专业的C程序员,他们只使用了C提供的30%.例如,许多人只是将它用作OO语言,错过了模板(可能除了STL),异常和其他非常有用的东西.但C是一种多范式语言.它支持面向对象的编程以及通用编程,生成编程,许多函数式编程,以及其他一些范例.在这些范式结合起来的情况下,它变得最强大.
那么我的建议是什么?
看看The Definitive C++ Book Guide and List.
首先从初学者的书中挑选.既然你说你已经接触过C,我会推荐Andrew Koenig和Barbara Moo的Accelerated C.这是一个很好的介绍,对于它改变教学C的方式不能称赞,但它带来了相当陡峭的学习曲线.此外,250页,它只是一个简短的介绍.
替代方案可能是Stanley Lippman的C Primer(其中1000页,详细介绍了相同的基础)或Bruce Eckel的C in Thinking(我不知道)或Bjarne Stroustrup的经典C编程语言(也1k页)或他的最新书,编程 – 使用C的原理和实践(我还没有看过).
这些书有足够的任务让你忙碌一段时间.添加一些你自己的,你可以忙着学习几个月.
然后慢慢按照列表的方式工作.
下一个C标准,现在通常预计在2011年,将为语言添加一些具有挑战性的概念(如右值引用)和大大扩展的标准库. (目前的草案几乎是最后一页的两倍.)不幸的是,由于标准尚未完成,因此没有可用的书籍.这些都在文章和在线讨论中展开(虽然维基百科有a pretty good article about it),这一切都是为了流利的C程序员,而不是C新手.不幸的是,没有一篇文章教过C 1x到C新手而且我担心你可能需要几年时间才能在几本推荐书之间做出选择.
并且不要忘记C++ FAQ,它是一个非常好(并且非常易读)的最佳实践(及其理性)的在线集合,虽然它绝不是介绍性文本.