当前位置:  开发笔记 > 编程语言 > 正文

C++作为第一语言

如何解决《C++作为第一语言》经验,为你挑选了7个好方法。

我已经自学了C++大约4个月了.我很享受,我觉得我做得很好.然而,对我的一个问题的回答让我想到我可能会让自己陷入堕落.

那么,这里的人们如何看待C++作为第一语言学习?现在我开始有一个良好的开端值得我继续吗?



1> DevSolar..:

我不明白为什么人们仍然把"语言"与"图书馆"混为一谈.(参考链接的答案.)那么如果C++没有"原生"音频概念呢?有很多库,你可以很容易地使用C++,它们可能比任何"全能""标准库"音频处理API更适合你的特定需求.

C++是一门难懂的语言.还有一些更容易学习.我永远不会争论这个.

但是C++很容易成为最强大的语言之一.它可以是高效的,具有很强的优雅,在一次.当然,没有任何东西可以阻止你制造一切美好的混乱.

如果我推荐C++作为第一种编程语言?实际上,我不知道更好.其他人可能会保护您免于犯错,并使初步成功(例如您的第一个GUI应用程序)更容易.但是如果你建立在C++的基础上,你将始终处于稳固的基础上.实际上,您可能永远不必选择其他语言.但如果你想要/必须,你会发现它非常容易.

经验丰富的C++编码器可以在几周内全速完成Java.反过来呢?很多,很多更加困难.


许多年后,我觉得我应该修改这个答案.由于我的孩子让我教他们编程,我开始这样做.我发现自己实际上并没有从C++开始......因为我首先向他们展示了BF.绝对没有时间,他们了解内存和指针.然后我继续使用C++,到目前为止我们都非常享受自己.


然而再过几年,我觉得我真的应该把Kate Gregory从CppCon 2015这个优秀的演讲添加到这个答案:

停止教授C.


非常同意.一旦你了解了C++,通过比较,所有其他语言都很容易.至少在你冒险进入其他范例,如Lisp,Haskell或Prolog之前.
就个人而言,我认为在理解动作处理程序的概念之前,没有人应该编写GUI应用程序.如果没有对OOP的安全知识,很难做到这一点,如果没有丰富的经验,就不可能做得好*.为什么在游泳前将人们扔进深水中?
虽然语言和库之间的区别很重要,但是具有易于访问的第三方库(Perl/CPAN,Python/PyPI)或大型标准库(Java,C#)的语言确实有好处,而C++在第三方库中缺乏一致性.它们几乎都是彼此不同步发展的.这就是为什么你会在像C++这样的语言中看到巨大的重新发明轮子的原因.(这来自于喜欢C++而不是其他许多语言的人,但我也喜欢Python.)
+1.除了你说它是最好的第一种编程语言之外,我同意许多观点.我认为快速进步(例如第一个GUI应用程序)对学生来说很重要,他们可以决定是否喜欢编程而不会被语言细节所淹没.
当我听到"力量"时,我会想到它可以做什么,并且看到可以在C#中完成的任何事情都可以在C++中完成,但不是相反,我会说C++是更强大的语言.那说我还是喜欢C#.

2> tpdi..:

让我这样说吧:

我接受并通过了94%的Sun Java认证,而没有编译过一系列Java(那是九年前).我能够做到这一点,因为我非常了解C++.

在我的第一份专业工作中,我被聘为测试员.在我的第二天,我被告知我可以编程而不是测试,如果我在两周内学到了足够的PowerBuilder.因为我非常了解C++,所以PowerBuilder很简单.

C++ 很难,但如果你学得很好 - 阅读Stroustrup的C++编程语言,也可以练习,阅读他的C++设计和演变,阅读C++ Faq和Meyers书籍以及Herb Sutter的书籍,阅读comp.lang. c ++.审核,阅读Coplien的高级C++编程风格和习语,无论你想要编写什么OO语言 - 如果你学得很好,其他所有OO语言都很容易.

学习C++是学习编码的绝佳准备.(而且你也将成为一名公平的C程序员,但阅读K​​&R以成为一名优秀的C程序员.)

哦.和C++真的很好玩编程中,很多比Java冗长少,而且更加灵活.你真的负责,而不是IDE或语言.你可以自己射击,但你将负责这样做.一旦你了解了模板,就会阅读亚历山德里斯库的书,它会让你感到惊讶和沮丧,让你高兴.

C++很有趣.阅读"奇怪的重复模板模式":它看起来像这样

template< class  T> struct base {};

struct derived: base< derived > {};

是的,你做对了:它是一个派生自派生类模板的基础的类.现在这听起来很晦涩和愚蠢,但它有很多好的用途,就在前几天我打我的头因为你不能用Java做这个(因为Java使用类型擦除,而不是模板,用于泛型),但如果我可以使用它,我可以在很多课程中重复保存很多代码.

在C++中还有很多东西,如果你把自己限制在Java或.Net,你永远不会发现它.


"如果你学得很好,其他所有OO语言都很容易." 我不敢苟同.你的意思是"每个其他C++风格的OO语言都很容易".

3> D.Shawley..:

正如其他人所指出的那样,C++并不是一种容易学习的语言,但是它有一些原因使它成为一个体面的起点:

它不会将您绑定到特定的编程范例(例如,Java和OOP),因此您可以轻松地尝试不同的技术

C++没有花里胡哨的东西,所以如果你想知道它们是如何构建的,你可以集中精力制作构建块

因为它是一种语言而不是一个平台,你可以选择最适合手头任务的库或库或你选择的编程风格(例如,选择像Poco这样的Javaesque感觉,ACE用于坚韧不拔的早期风格OO等等.)

它是一种通用的编程语言,而不是一个平台(不得不说两次)

诀窍是第一次仔细而正确地学习它.我知道我和许多其他人一样,在真正理解它之前,通过将其理解为"C +对象"来努力解决它.这是一门难学的语言.我建议您寻找一位经验丰富的C++导师,以及阅读很多关于如何以及如何不编写C++的"强烈推荐"的书籍.避免预先学习坏习惯.

对于没有特定顺序的起始阅读列表:

Koenig和Moo的"加速C++"

Scott Meyers的"Effective C++/STL"

Bertrand Meyer的"面向对象软件构建"

Peter van der Linden的"专家C编程"

Musser,Derge和Saini撰写的"STL教程和参考指南"

Josuttis的"C++标准库"



4> Ðаn..:

如果你学习"现代C++"而不是"C加上一些新东西",C++将会更加平易近人.例如,使用std::string,std::vector<>unique_ptr<>/shared_ptr<>而不是C风格的字符串,数组和指针.

已经提到的加速C++科尼希和武是一个书,正是这一点.



5> simon..:

这里有很多对c ++的支持,但我不同意.每种语言都有它的优点和缺点(当然,有些语言比其他语言有更好的平衡).

话虽这么说,对于第一语言,我相信大多数人会学习如何使用a)没有编辑 - 编译 - 运行周期的语言更有效地编程(这对你来说本身就比程序员b慢) )具有垃圾收集c)具有良好的运行时内省.如果还有一个交互式评估者,那就最好了.

在这些语言中,开发(如果不是运行时)几乎总是更快,绊倒你的东西更少,并且有更好的工具来帮助计算出错的时候.

这并不是说用c ++这样的语言学习内存管理的变幻莫测并不值得做等等,它不是你真正想要开始的地方.

c ++的另一个问题是,尽管它具有实用性,但它的庞大规模增加了它具有不兼容的部分,这可能导致作为初学者最好避免的微妙问题.

编辑:John D在评论中提出了一点,即一些先学习GC语言(绝不仅限于"脚本"语言)的人从未学过指针.不过,这是一只红鲱鱼.由于种种原因,有些人不能学习各种各样的东西.我坚持认为,当你学习基础知识时,担心指针会分散注意力.在某些时候,您可能需要了解手动内存管理,但首先执行此操作并不是最重要的.或者更确切地说,避免这种情况所取得的成果比成本更重要.

让我说清楚,我不是说c ++是第一语言的劣等选择,因为它缺乏垃圾收集.这只是妨碍学习编程基础知识的众多问题之一.真正的问题是它是一个庞大的复杂语言,到处都是怪癖,甚至是内部不一致(例如指针和异常不能很好地结合在一起).当然,所有这些都可以妥善管理,你可以学习良好的做法,以避免陷入困境.

然而,这一点对于一个真正的新手来说都没有多大意义.因此,一些学习它最终将"以这种方式做,而不是那样"."为什么?" "因为我这么说 - 你还不会理解细节".几乎没有吉祥的开始.

学习第一语言的好处可能在于避免编辑 - 编译 - 运行周期(任何类型)并且具有良好的内省.


我开始同意了,但你对我的垃圾收集感到失望.对于初学者来说,堆分配应该永远不会出现.如果确实如此,我宁愿尽可能明确,所以他们开始时必须考虑它.

6> Ólafur Waage..:

如果你有一位好老师,C++作为第一语言就可以了.但这是第一次扩展的相当高的墙,但是一旦你扩展了这面墙,其他类似的语言变得非常容易.

所以,是的,继续.



7> z -..:

任何语言都是一种很好的第一语言(在合理范围内,不像lolcode)

一旦掌握了它的工作原理,就可以更容易地扩展到其他语言.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有