问题补充: C++难在语法细节繁杂,而且版本还在不停的更新,重要的是不像java等高级语言不需要关心内存等状态,特别是指针以及泛型编程等因素,说成是最难的编程语言没毛病
从事嵌入式开发多年,有三种语言玩的比较多C/C++ java,从编程语言的难度来讲C++是最难得,而且也是最难入门的编程语言,很多编程老手都是这个结论,为什么C++是最难学的编程语言,虽然难学但还是很多编程老手喜欢研究它,更是很多架构师的最爱。
现在以个人的观点讲述为什么C++是最难的编程语言,其实在C++基础语法部门看不出这门编程语言有多难,难在泛型编程和面向对象的特性展示,几乎每个知识点都附带着很多细节点,而且更加要命的是C++语法规则还在不停的延伸,几乎长期玩C++都有一种通病总是觉得这门语言学不完,就连C++的创始人都说自己有时候都看不懂这门编程语言了,linux的创始人对于这门编程语言成见也非常大,有点故弄玄虚的感觉。
如果单纯从学校的理论角度去学习这门编程语言其实看不出有多难,因为基础语法的学习掺杂的东西就比较少,很多在学校学过这种语言的大学生觉得自己的基础应该还可以结果真正开始做项目的时候傻眼了,原来还有这么多自己不懂的语法知识,只靠那点皮毛根本解决不了问题,所以要想学好这门编程语言首先要做好充分的心理准备,起码几个月的时间在迷糊期度过。至于具备什么条件才能学好C++,这种没有定论很多大学生在学校自学了C++,还没毕业就通过网络途径找到工作了,所以编程语言的学习从来都不是固定的。
在网络上认识一个大学生,本身对编程很感兴趣,特别是对C++感兴趣,完全靠着一腔热血把这门语言给学好了,并且不断拓展知识面,有关C++的书籍研究了不下五本,并且借着这种势头还不断通过看书拓展自己编程基本功,还没毕业去找工作就成了抢手货,所以不要给自己设置界限,不一定非要参加培训通过自身的努力也一定可以。由于经常在网上写点东西,遇到一些大学生经常写技术文章,开始的时候不会写,后来坚持的时间长了越写越有感觉,再加上网络信息非常发达,有一些猎头或者技术高手在网络上发现有可塑的人才也会主动联系,所以很多大学生还没出校门就把自己的工作给搞定了,不要轻易否定自己。
学好了C++能够做点什么?
游戏开发,大数据和服务器方面开发,网络开发,嵌入式开发等,现在很多主流的客户端都是用C++完成的,安卓内核框架和谷歌浏览器绝大部分代码都是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++从入门到放弃》。某软件工程学生学了四年毕业,他告诉我:“学了四年,只记住hello world了”。
开个玩笑,C++是公认的,编程语言里最难的一种,毫不夸张的讲,这玩意儿跟考注册会计师、一级建造师、司法考试有的一拼(当然,毅力是关键)至于C++到底难不难,我这里引用一下轮子哥说过的一句话:
明明难的是scala。你要连程序设计语言的原理一起弄懂,才能搞定scala的所有语法。C++显然不需要,C++只要求你背诵(不过其实C++有一点也做得不好,符号实在太乱了,你不能全部装进脑子里,就会有一种“好难啊”的错觉。这只能说反人类,不能说难。你只要不断地训练自己的记忆力,等到有所成就之后,就不会觉得C++难了。
自学能学会吗?
从理论上说,当然可以学会,但这关乎到学习成本的问题。如果你之前已经学过了其他编程语言,学C++会相比其他人快一些,如果你只是初中毕业,数学很差、英语不懂,那学C++一定是非常费劲,但不代表不行。你要面对的困难,将多很多,除了学习问题,将来就业、发展也可能会受到限制,但这完全取决于你的毅力和学习能力。
至于是不是只有本科的人才能学会,这个问题肯定是否定的,但跟我前面讲的一样,还是难度问题,本科学编程的多、专科的也挺多,中职高中出来的也有,初中的少了,小学的更稀有。为什么会出现这种现象?学历月低,面临的困难越多,对人的意志和学习能力的考验越大。话又说回来,物极必反,一旦你成功了,学历反而成为了你的优势,想想,当一个初中、高中的人学会了编程,只要你能力达标,你的学习能力和毅力已经得到了最好的证明。就好像很多人很乐意去说马云只是杭师大毕业的屌丝,跟其他互联网巨头没办法比一样。
学会C++可以从事哪方面的工作?
很多,比较主流的有游戏开发、ios软件开发等等。
下面是w3cshool的一些建议:
首先,C++并不是非科班出身的最好选择,它太不容易上手了,而且现在是市场经济,难不代表需求大,很多简单易学的语言,待遇也并不低,比如近几年比较热门的PHP、Python、java等等。特别是Python,这个编程语言更接近自然语言,学起来相对容易,需求也大。。当然,你要坚持学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语言难学,跟其一脉相承的C++自然也继承了其难度。
不过,一旦你学进去了,就会发现它也没想象中的那么难,本人作为一个文科生当年赶时髦自学了一下,后来因为工作变动没有坚持下去,感觉正常人完全是可以学会的。
编程学习,难的不是编程语言本身,程序语言这东西,本身就是为了掩盖机器语言的复杂性而诞生的。经过一段时间的学习和熟悉,对程序语言的规则就会基本掌握。而对真正的编程工作而言,数据结构和算法才是要迈过去的两道大坎。
所以自学要学会c++是有可能的,但对编程来说还远远不够,你必须对软硬件都有所了解,熟悉常用的数据结构和算法。对真正的程序员来说,在不同的编程语言之间转换,比在不同的外语之间转换难度要小得多。
题主的问题描述中四个“?” 我能回答两个半。由于本人是非专业人士,所以一下回答仅供参考。
C++是否是最难学的编程语言?
这个问题我不确定。
在我看来既然C/C++能够“长盛不衰”这么多年,足以说明它们的价值。单凭这一点就足够说明问题的了。
不过虽然我不是很专业,但是我也知道不用的领域会更多的应用不同的语言,尤其是题主还是自学,那么除非你的目的性很明确——比如从事某个岗位的职业,否则还是应该从比较容易上手的、应用比较普遍的语言入手比较好。所谓先上路,路上在慢慢想!比如你完全可以先选择比较容易上手的Python。
自学能学会吗?
能!
这个问题我能回答的原因是因为我家孩子9岁的时候开始学习的C/C++,我们学的比较慢一周也就是两次课(前大半年一周一次),纵然是如此,目前为止孩子基本上也已经把语法部分(即编程语言的本身)都学完了。只要不是算法太复杂的问题,孩子大都是可以做出来的。目前孩子正在开始学习各种算法。
我之所以说“能”是基于这近一年来孩子的表现以及二十年前我学C语言时候的一些经验总结出来的。
但是,我必须要说名两个问题:
1、能否学的好,完全取决于你的努力程度而不是“理论上的可能性”。
很简单的道理,当你看书学或者看视频学(网上资源跳多了)的时候,你仅仅是照着课程内容敲打一边代码就行了还是会做笔记、会找相关题目练习这两种学习的方式直接决定你后面的学习效果。就我孩子的学习情况来看,孩子的掌握程度基本上取决于投入练习的时间长短(当然,还有动脑程度)。
2、语言仅仅是一个工具。
编程语言仅仅是一个工具而已,当你工作时候更多的是要用这个工具去解决具体的问题。举个最最容易理解的例子:学习数学、物理的时候各种公式的本身并不难理解,但是当你应用的时候就会发现“我去!这题怎么做?”。同样的道理,语言你可以短时间内(两三个月足以达到入门级)学个七七八八,但是当你真的想用这个东西来解决问题的时候,往往会发现无从下手,甚至连点思路都木有!
因为我和孩子学习C/C++是因为我们想试试参加一下NOIP,所以我们的经验有限,但是这些道理也是很多老师、朋友跟我分享过的,我觉得是有道理的。比如我家孩子每节课听的都自认为没问题,但是一旦开始做题了,尤其是稍微复杂一些的问题时候,基本上就跪了!
老师、朋友们跟我说解决这个问题没有什么捷径可以走,就是多练、多读(读程序)、多想、多交流!
是不是只有读本科的人才能学?
这个问题我想我已经不需要回答了吧。我孩子今年10周岁。所以你一定没问题的!我不信你还赶不上一个小学生!
可以从事哪些工作?
这个问题不难回答,但是我说不全,所以只能借助网络尽可能的把它主要能做的事情给你罗列一些:
C/C++主要用于操作系统软件底层开发比如开发操作系统,各种协议软件,硬件驱动,嵌入式,服务器,或者算法研究,游戏开发,还有各种图形处理,总之那里的性能需求和运行速度比较高的,那就用C/C++。可能这么说觉得太笼统了,我再直白点比如手机,飞机、动车、机器人、大数据、人工智能、仿真等等都能用的上!
临渊慕鱼,不如退而结网!
无论你的规划、计划是如何,你都要先“出发”,只有在前进的路上你才会发现各种各样的问题,也才能更有针对性的解决。认真学、多练、多交流你一定行的。
最后给你讲一个我觉得还不错的案例:我的一位超级远房的亲戚孩子,高中毕业啥也没考上,最后去了我们这里的一个还算老牌的计算机培训机构,学了2年多的编程,后来推荐工作之后认真努力的学、做,几年下来这孩子现在一年收入也是很不错的。当然,这种事儿不具有“普遍性”,是否“成才”很大程度上还是要取决于个人的努力情况。如果你有这个毅力,那么就去做吧!
加油!