【问题标题】:C++ | Progresssion Path [closed]C++ |进步路径[关闭]
【发布时间】:2011-05-22 08:43:36
【问题描述】:

我知道basic OOP-related topics、RTTI, Templates。从Java' Collection Framework 恢复,我试图在C++ 中找到这样的集合并找到STL,并试图在我的项目中使用它(尽管我不知道它们进出)。我搜索并找到了诸如Accelerated C++, Effective and More Effective C++之类的书籍推荐。

但我不确定我的发展路径应该是什么。我正在寻找这样的东西——Python-Progression Path:

def apprentice():
  read(diveintopython)
  experiment(interpreter)
  read(python_tutorial)
  experiment(interpreter, modules/files)
  watch(pycon)

def master():
  refer(python-essential-reference)
  refer(PEPs/language reference)
  experiment()
  read(good_python_code) # Eg. twisted, other libraries
  write(basic_library)   # reinvent wheel and compare to existing wheels
  if have_interesting_ideas:
     give_talk(pycon)

def guru():
  pass # Not qualified to comment. Fix the GIL perhaps?
  1. 发现list comprehensions
  2. 发现generators
  3. 经常将map, reduce, filter, iter, range, xrange 合并到您的代码中
  4. 发现Decorators
  5. 写递归函数,很多
  6. 发现itertools 和functools
  7. 阅读Real World Haskell
  8. 用大量高阶函数、递归等重写所有旧的 Python 代码。
  9. 每次向您介绍 Python 课程时,都会惹恼您的隔间伙伴。声称它可以“更好”地实现为字典 加上一些功能。拥抱函数式编程。
  10. 重新发现 Strategy 模式,然后从命令式代码中重新发现 all those things 哈斯克尔。
  11. 找到平衡点。

【问题讨论】:

  • 尽管问题标题中有 C++ 和 c++ 标签,但问题中似乎与 C++ 没有任何关系。想一想,问题是什么?
  • 隐含的问题是“对于 C++ 的学生来说,这个列表相当于什么?”
  • @Charles Bailey:我更新了我的问题。
  • 天哪,你为什么要发布一些模糊文本的屏幕截图,而你本可以向我们展示原始文本?
  • @jaif:好的!我改成文字(来自截图)

标签: c++


【解决方案1】:

首先要真正精通 C。我推荐 Peter van der Linden 的“Deep C Secrets”。

获取一份 Scott Meyers 的“Effective C++”,并将其建议记入记忆中(“More Effective C++”也不错)。

阅读 Coplien 的“高级 C++”。

阅读The C++ FAQ。

此时请阅读 Stroustrup 的“C++ 编程语言”。

【讨论】:

  • 熟练使用 C 实际上可能会教你在 C++ 中要避免的坏习惯。
  • @Mark B:同意。我绝对不会教潜在的 C++ 学生 C 习惯。
  • 当您发现某些 C++ 内容非常缓慢时,养成 C 习惯是件好事。
  • @kotlinski: 是也不是,有快速的类型安全 C++ 库,使用它们:)
  • 我坚持我原来的说法。 C 将使您对硬件有一个很好的了解。另外,写好 C 是可能的。我同意 C 可能会灌输一些坏习惯,但我认为接触它会让你更务实,更少意识形态。
【解决方案2】:

这是一个棘手的问题,因为你真正需要的是变得擅长你所做的事情,因此不存在权威列表。

话说回来……

  • 阅读 Meyers 的 Effective C++ 和 Sutter 的 C++ Coding Standards,如果您是初学者,您可能无法理解所有内容,因此请不时重新阅读它们(这也是一种很好的疫苗)
  • 是时候介绍 STL(它是一颗神奇的小珍珠),学习使用它的算法而不是手工制作所有东西,如果可能的话直接跳到 C++0x 版本
  • 将 Boost 加入到组合中,一开始是轻柔的:boost::optional、boost::variant、boost::lexical_cast、boost::numeric_cast 使您的代码更安全、更惯用。还戳了 Boost String Algorithms 库。
  • 接下来是模板元编程和 Boost.MPL:Abrahams Gurtovoy 的 C++ 模板元编程将对此有所帮助。您可能必须利用 Boost.Preprocessor 处理一些模板内容。
  • 了解更多 Boost 库,它是一个巨大的存储库,其中的所有库都令人惊叹。

我自己还在最后一部分,所以不能评论更进一步:)

每一步,你都应该写很多代码,光看是不够的,还需要实验。编程不仅仅是技术,程序的架构部分在该领域中极为重要。

哦,尝试加入(如果只是为了阅读)一个开源项目,没有什么比编写代码更好的了,最好由其他人审查:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2011-02-13
    • 2011-09-16
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多