2010-08-13 59 views
6

伙计们,我需要找到一个像codingbat这样的好网站来“再次学习”C++。我在学校学到了它,但我从来没有认真对待过。我不在寻找类似于欧拉计划的东西,因为它专注于数学问题。我需要真正关注C++原理,特性和工具。C++编码类似网站

+0

thanx为链接。我已经学习了Python和Java,它将很好地去除一些灰尘和锈蚀。 – 2010-08-23 13:04:40

回答

11

我不认为这样的网站存在,我怀疑它永远会。原因在于C++是巨大的 - 我的意思是reeaallllyyy巨大。
当你开始专业编写C++代码(即每周40小时),并花1或2小时学习有关C++ 每天(即每周5-10小时)的新内容时,阅读书籍和文章, 如果不是几年,你将需要几个月的时间才能成为一名真正的专业C++程序员 - 假如你的工作不需要你学习任何第三方API,新工具,新技术以及什么都不会让你从学习中分心C++。
几年来,我已经为已经接触Java一年的学生教授C++。在4-5个月,12-15次讲座中,至少在实验室中两次,我已经设法从“你好,世界!一直到模板元编程的简短介绍。每个知道该范围内所有区域的人都会告诉你,在此之后,他们仍然是血腥的新手。 (哎呀,我使用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的C++。这是一个很好的介绍,对于改变教学C++的方式来说,这个介绍不够好,但它的学习曲线非常陡峭。另外,有250页,这只是一个简短的介绍。
到另一种做法可能是要么大师Stanley Lippman的C++入门(其中,在1000页,详细地讨论了同地)或布鲁斯Eckel的思考在C++(我不知道)或Bjarne的Stroustrup的经典The C++ Programming Language(also 1k pages)or his latest book,Programming - Principles and Practice Using C++(我还没有看过)。
这些书有足够的任务,让你忙一会儿。添加一些你自己的东西,你可以忙着学习几个月。

然后慢慢地沿着清单走下去。

下一个C++标准,目前普遍预计,2011年将增加一些具有挑战性的概念的语言(如右值引用)和一个大大扩展了标准库。 (目前的草案有几乎是最后一页的的两倍)。不幸的是,由于该标准尚未完成,因此没有任何书籍可以教授它。这一切都在文章和在线讨论(尽管维基百科有a pretty good article about it)和这一切都意味着流利的C++程序员,而不是C++新手。不幸的是,没有一篇文章将C++ 1x教给C++新手。恐怕需要几年时间才能在几本推荐的书籍中选择。

别忘了C++ FAQ,这是一个非常好的(也是非常可读的)最佳实践(及其理性)的在线集合,尽管它绝不是介绍性文本。

+0

+1 for C++ FAQ,这是一个很好的复习列表。 – Brian 2010-08-13 20:12:58

+2

C++很复杂,但是为什么“常规”的C++程序员应该熟练掌握模板元编程?你能否指出一个例子,模板元编程使开发人员能够做其他方法无法做到的事情? 对于常规应用程序开发,不需要知道整个C++标准。了解语言的陷阱就足以了解它(这本身就非常重要),以及目前用于该项目的基本库。 – Schedler 2010-08-13 22:37:13

+0

@Schedler:“你能否指出一个例子,模板元编程使得能够做其他方法无法做到的事情?”在编译时执行算法意味着,如果在开发者的机器上没有失败,它也不会在客户端上失败。如果你制作的应用程序要安装在几百万台台式机上,那么这个应用程序的价值几乎不可估量,几乎是值得的。当然,这并不意味着每个人都必须能够做TMP。但是,如果您将C++视为面向对象的语言,那么您就错失了很多。 C++是一个... – sbi 2010-08-14 10:09:03

3

实践中没有替代品。

在你的机器上找到你想要的程序(也许和计算项目中行数的东西一样简单),然后用C++编写。

我希望我能告诉你,我有一个很棒的资源,可以告诉你书中的每一个C++技巧,但事实会被告知,你是那个资源

练习。从自己的错误中学习。你是你最好的老师。

+0

这个建议与问题中链接的网站有什么不同呢?确切地说,只有它已经选择了一套可能被认为对学习语言有好处的例子呢? – sbi 2010-08-13 20:06:24

+0

@sbi - 正如您在答案中提到的,您每周仍在学习新东西。有没有一个网站教你的东西,或者你是否在学习它,因为*你*想要学习它?你的文章体现了我的观点 - 你是你最好的老师。 – riwalk 2010-08-16 15:45:56

+0

现在我主要通过讨论和其他人在SO等地方的答案来学习。 – sbi 2010-08-16 18:40:27

1

Sphere Online Judge看起来好像可以和C++一起工作(还有其他一些语言)。它不像CodingBat那么简单,但会有更复杂的问题。