网友提问:
为什么很多人觉得C++是最难的编程语言?
优质回答:
曾经在某个场合C++ 之父 Bjarne Stroustrup表示自己有些看不懂C++了!
从这个趣事就可以看出C++是非常难学的编程语言,在主流的高级生产级编程语言中可以说是最难学的编程语言了,从入门到精通最难的编程语言,从入门到放弃最简单的编程语言,可以说是名符其实。
C++语言是C的超集,1982年,美国尔实验室(AT&T公司)Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,从此C++编程语言诞生,面向对象的到来、STL标准库的诞生,以及微软等大公司的支持,让C++逐渐流行起来。但是C++从一开始就是一门复杂的编程语言。
C++是一门通用的、支持多范式(multi-paradigm)的编程语言,这就是C++为什么难学的根本原因了。
从通用性上来讲,C++不局限于一个领域或者少数领域,而且没有明显的倾向性,比如PHP最擅长的就是web开发,Java最擅长的就是复杂业务逻辑处理,C#做桌面开发非常方便,而C语言最擅长的就是系统级别的开发,而Python则是最主要的人工智能研究语言。但是C++不一样,没有明确的倾向性,并且功能还非常强大。
C++可以完成系统级的开发,垂直领域的特定应用开发,甚至在教学科研以及嵌入式等等领域都能够很好的完成,这就是最大的问题,那么注定每一个方面都要做得很好。
从多范式来讲,C++不是彻底的面向对象编程语言,也不是纯面向过程的编程语言,也不是标准的泛型编程语言,这玩意儿是多范式的。也就是反过来说,她即是面向过程编程语言,也是面向对象编程语言,还对泛型程序也有很好的支持。知道什么问题了吗?对的,就是她什么功能都很全!
所以其实C++之难学,难于上青天的关键在于C++太强大了,功能太多了。这样一个通用型、多范式的编程语言,当然是非常难学。但是在很多领域,比如系统级开发,大型游戏开发等领域C++还有着巨大的优势,因为C++毕竟是仅次于C语言的运行效率的编程语言,何况它还支持面向对象。
其他网友回答
C++确实是比较难学的,它难在你即使很懂她,但是还是会莫名其妙的生气,C++的学习需要花费大量的时间,这或许也是她被称为“难”的原因,但是如果你将C++用熟练了,那感觉真的不要太好。
1.C++是C语言的升级版
C++最初的设计愿望是通过规则克服C语言语法规则不清晰造成的问题,这就意味着初学者很难入门,编译太过于麻烦,规则的限制非常的多,这就更意味着语法的细节要求更多,零散需要掌握的东西非常繁杂,甚至部分程序员工作好多年,仍然对C++感到陌生。
2.C++语言进化太快
C++语言的更新速度是非常惊人的,到现在为止还在进化,这就会导致一种情况的出现,等你辛辛苦苦学了很久的语法规则,在这个更新种突然被删除了,这真的会发疯的。
C++可以操作指针
指针本身的复杂程度是非常高的,再加上泛型编程,这就更加麻烦,在追求性能极致的同时还想让编程模式灵活,这就让压力过于大,以至于不少程序员转行做C语言会觉得特别轻松。从很多方面来说,C++的学习不是告诉你怎么用,而是告诉你怎么不能用。这就很尴尬, 学了一堆语法不能使用,可能是一种精神的折磨了吧~
优势
虽然难度相对较大,但是不容置疑的是C++是大多数构架大咖的最爱,包括如今也可以在C++论坛里看到很多大咖在指点江山,解决小白忙活了好几天也解决不了的问题,根本原因就在于对编程语言的掌握,当掌握这些规则后,使用起来就会特别的舒畅,仿佛将之前的阴霾一扫而空。
如今大多数软件框架都可以看到C++的影子,原因在于进行面向对象的框架设计时不影响效率只有C++可以出色的完成,例如现在安卓手机框架层很多代码都是C++,还有如今的浏览器内核代码几乎都是C++。
其他网友回答
题主的问题描述中四个“?” 我能回答两个半。由于本人是非专业人士,所以一下回答仅供参考。
C++是否是最难学的编程语言?
这个问题我不确定。
在我看来既然C/C++能够“长盛不衰”这么多年,足以说明它们的价值。单凭这一点就足够说明问题的了。
不过虽然我不是很专业,但是我也知道不用的领域会更多的应用不同的语言,尤其是题主还是自学,那么除非你的目的性很明确——比如从事某个岗位的职业,否则还是应该从比较容易上手的、应用比较普遍的语言入手比较好。所谓先上路,路上在慢慢想!比如你完全可以先选择比较容易上手的Python。
自学能学会吗?
能!
这个问题我能回答的原因是因为我家孩子9岁的时候开始学习的C/C++,我们学的比较慢一周也就是两次课(前大半年一周一次),纵然是如此,目前为止孩子基本上也已经把语法部分(即编程语言的本身)都学完了。只要不是算法太复杂的问题,孩子大都是可以做出来的。目前孩子正在开始学习各种算法。
我之所以说“能”是基于这近一年来孩子的表现以及二十年前我学C语言时候的一些经验总结出来的。
但是,我必须要说名两个问题:
1、能否学的好,完全取决于你的努力程度而不是“理论上的可能性”。
很简单的道理,当你看书学或者看视频学(网上资源跳多了)的时候,你仅仅是照着课程内容敲打一边代码就行了还是会做笔记、会找相关题目练习这两种学习的方式直接决定你后面的学习效果。就我孩子的学习情况来看,孩子的掌握程度基本上取决于投入练习的时间长短(当然,还有动脑程度)。
2、语言仅仅是一个工具。
编程语言仅仅是一个工具而已,当你工作时候更多的是要用这个工具去解决具体的问题。举个最最容易理解的例子:学习数学、物理的时候各种公式的本身并不难理解,但是当你应用的时候就会发现“我去!这题怎么做?”。同样的道理,语言你可以短时间内(两三个月足以达到入门级)学个七七八八,但是当你真的想用这个东西来解决问题的时候,往往会发现无从下手,甚至连点思路都木有!
因为我和孩子学习C/C++是因为我们想试试参加一下NOIP,所以我们的经验有限,但是这些道理也是很多老师、朋友跟我分享过的,我觉得是有道理的。比如我家孩子每节课听的都自认为没问题,但是一旦开始做题了,尤其是稍微复杂一些的问题时候,基本上就跪了!
老师、朋友们跟我说解决这个问题没有什么捷径可以走,就是多练、多读(读程序)、多想、多交流!
是不是只有读本科的人才能学?
这个问题我想我已经不需要回答了吧。我孩子今年10周岁。所以你一定没问题的!我不信你还赶不上一个小学生!
可以从事哪些工作?
这个问题不难回答,但是我说不全,所以只能借助网络尽可能的把它主要能做的事情给你罗列一些:
C/C++主要用于操作系统软件底层开发比如开发操作系统,各种协议软件,硬件驱动,嵌入式,服务器,或者算法研究,游戏开发,还有各种图形处理,总之那里的性能需求和运行速度比较高的,那就用C/C++。可能这么说觉得太笼统了,我再直白点比如手机,飞机、动车、机器人、大数据、人工智能、仿真等等都能用的上!
临渊慕鱼,不如退而结网!
无论你的规划、计划是如何,你都要先“出发”,只有在前进的路上你才会发现各种各样的问题,也才能更有针对性的解决。认真学、多练、多交流你一定行的。
最后给你讲一个我觉得还不错的案例:我的一位超级远房的亲戚孩子,高中毕业啥也没考上,最后去了我们这里的一个还算老牌的计算机培训机构,学了2年多的编程,后来推荐工作之后认真努力的学、做,几年下来这孩子现在一年收入也是很不错的。当然,这种事儿不具有“普遍性”,是否“成才”很大程度上还是要取决于个人的努力情况。如果你有这个毅力,那么就去做吧!
加油!
其他网友回答
1. 特性很多,需要记忆,很考验记性。
2. 还没稳定,没几年就改进,可能加很多特性,还可能去掉旧特性。
3. C++ 是多种语言的联邦,开发思维也就有多种,可以面向过程,也可以面向对象,还有泛型编程、模板元编程。
4. 它属于系统级编程语言,可上可下,也可以说是不上不下,做高层开发有很多更好选择,不少 C++ 程序员很可能中途逃离,Nodejs、Python、Go、Rust 等高级语言的崛起也势必分散他们的注意力。
其他网友回答
中国人编程多数是用别人写好了的架构或类库,底层的一概不知,快速完成老板交代的任务就行。优秀的程序员都是用或会用C/C++编写自己的代码,像TensorFlow,PyTorch等库那个不是用C++写的?