本帖最后由 梦回黑马 于 2017-9-23 16:02 编辑
大家好,我是深圳黑马C++的一名学员,受邀前来与社友们分享学习点滴。希望社友们多多支持,你们的认同与赞赏是我写贴的最大动力。谢谢。
我的名字叫做梦回黑马(学IT),灵感源自于梦回三国XXX。
废话不多说,下面是我本次想分享的主题。1.C++的学习趣事、经验分享。2.C++?为什么会是C++?
3.C++于人生的历练。
一.C++的学习趣事、经验分享。 有人说,学习不就是三点一线的生活吗,哪来有趣的事情可言? 其实,有趣的事可以直接从我们学习中得来,而且教授这门课程的老师就是趣味的源泉。 Teacher is very crucial, Teacher is very crucial, Teacher is very crucial! the import things to be repeated 3 times!
有人说,学习要靠自我修行,老师仅仅是个辅助。 有人说,学习好坏取决于个人,老师的影响微乎其微。 有人说,学习要多看书本,老师讲的知识点大多已囊括。 但就是没有人告诉你,而今天的我告诉你, 老师的作用性才是最为关键的。何以如此说?
当你上过江文聪老师(Mike)的课后,你会发现他的讲课思路频频有亮点。 传统印象中C语言是一门面向过程的语言,这种思想也早已深入人心。 那么你有没有想过,它是不是能以面向对象的思路实现功能? 在Mike老师的课中,你可以感受到: 1.C语言能实现多态?它不是没有虚函数吗,怎么编码做到的一种多态的功能? 2.C语言还能屏蔽数据类型?甚至于比C++封装地更为诡异,连整个数据类型都不让你知晓? 3.什么是多态?多态就是多么地变态!(O(∩_∩)O哈哈~)现在想想确实变态, 单凭一个虚函数能玩出22种设计模式,各种诡异的套路,你说变态不变态?
当你上过高帅老师的课后,你可以感受到: 1.C语言实现数据结构,难道就一定要#define或typedef类型而导致容器只能同时容纳一种 数据类型吗?敲邻家C++的泛型是多么强大呀,理论上支持同时容纳各种数据类型。那么 C语言有没有方法能突破数据类型的束缚,从而以泛型的思维角度实现数据结构? 2.仿内核链表与普通链表有什么不同?为什么前者在企业中得意广泛流行?Linux内核链表 又是怎样一回事? 3.ls的模拟,rm的模拟,tar的模拟,gettar的模拟,文件拷贝的多进程模拟, 文件拷贝的多线程模拟,shell终端的模拟?瞬间感觉Linux的各种命令玩弄鼓掌之间!
二.C++?为什么会是C++?
在当今IT高级语言的世界里,从客观的角度说,C++是最困难、最危险、但同时也是最灵活、最强大的。
困难在于:学习门槛太高(仅次于汇编语言),让许多挠有兴趣的人望而却步。从现实加入学习的人看,新手从入门到迷茫、从入门到绝望、从入门到死心、从入门到放弃、从入门到跑路的人比比皆是。
危险在于:使用一不小心就Game Over,要对程序崩溃习以为常。这对于某些完美分子显然难以接受。
灵活在于:花样太多,想有怎样的编码,要看你怎样的心情。
强大在于:支持最多的编程范式。你能获得最大的弹性,同时又保持最高的效率
(高级语言中的最高效率)
具体的说,无论是CSDN,还是知乎,或者其他IT社团。许多人都在谈论着C++的点滴故事。可归纳为以下几点:
1.C++的坑太多,一不小心掉入坑中,恐怕你就会从入门到...
2.C++的学习曲线太陡峭,任何一本C++的权威经典都超800页。想看完要到何年何月?
3.别的语言像Java等都没有指针、友元、多继承、位运算、位域的概念。唯独C++独树一帜,真让人难以捉摸
4.别的语言初期一般不涉及数据结构与算法、操作系统、基本网络原理的研习,而C++却绕不过此弯。
我对以上的一些小看法: 1.坑多要看你怎么绕过或填补,如果你掉坑了、并且灰心丧气,那注定就从入门到....。反之光明就在前方。 2.C++ primer 不是 primer book,就个人的体验而言是finalbook。一个初学者想读懂一本终极书籍,现实吗,可能吗? 3.你可以不用,将C++当做Java学又有何不可呢?像多继承是不推荐适用的,位运算等应用场景十分狭小。 友元可以用Java中的get&&set方法替代嘛。至于指针,Java一切对象皆指针,亲是否有所体会? 4.完全学懂这些你就是科学家,半懂半不懂的你成为了一名工程师。我这么说,你能明白吗?
C++的根基魅力——读懂Java毫不费力(非框架),吸收Java的精华充电补能。 不知道学习Java的朋友,是否有读过这些经典书籍,例如Algorithms 4edition(算法 第四版), Head First设计模式,Java并发编程实战等等。都是用Java语言来编写的。 但是,这些对于咱C++程序员来说也是很有参考价值的。为嘛?
1.Algorithms写地十分通俗易懂、深入浅出。那流程的思路,美丽的插图简直完美诠释算法的真谛。 2.C++设计模式的书写得太高端,一般人根本就摸不着头脑。而Java类的设计模式则很容易明白 “高端大气上档次”的设计模式,究竟是个什么玩意儿?印象中HF讲解工厂模式所用的Pizza店 的例子,如今依旧盘旋在我的脑海,久久不能忘怀。 3.C++_Concurrency_In_Action 翻译得太烂,我都怀疑那几个银行上班的工程师是否学懂了并发。 且不看语言的逻辑组织如何,怎么好多句子翻译地不通顺呢?是不是网上找百度翻译的哪? 而Java Concurrency in Practise的翻译质量明显好多了。让人能够不为语言文字的晦涩而懊恼。
C++98历经了10余年的沉默,迎来了C++11的曙光,几经完善又到C++14,越来越像Java,也 越来越接近。这是我十分热衷与情愿看到的状况。
Java最大的一个优点就是垃圾回收机制,它可以让程序员不用为管理内存而忧愁。当然这也是一个 缺点,因为它建立在虚拟机的运行之上,就难免降低了代码效率。而C++11 smart pointer机制 的引入,在一定程度上为新手级程序员们解决了内存管理的问题。从而能写出高健壮、高质量的 代码。而智能指针的使用是极其简单的,只要是对模版知识有所了解的人,就能很容易学会。并 非需要精通什么具体的知识。选择SP、使用SP,其实就不知不觉地以Java的思维在进行编码。
Java天下第一?其实将C与C++合二为一,才是真正的天下第一。
在近几年TOIBE的语言排行榜上,Java总是占据着世界第一的位置,当然C/C++也不甘多让,一直 占据着第二和第三的位置。但是稍微学过的人都知道,C++是完全兼容C89的,而C语言的精华 就在C89。后来的C99,C11增加的那些东东,其实对于应用级程序员来说无关紧要,甚至有点略显 多余的感觉。C99的VLA(变长数组),C11的Generic Macro(泛型宏),其实是非常不具可移植 性的。譬如在GCC的编译器下,VLA可以畅通无阻的运行,而到了微软Visual Studio之下,恐怕是 红灯一片。
既然C++完全兼容C精华之C89,而新标准的那些内容对多数程序员来说并不感冒,那么我们不妨将 C与C++看成一门语言。也就是将TOBIE排行榜的第二名与第三名合并。如此是不是迎头赶上、甚至 超越了Java?
一入IT深似海,从此女神是路人? 我知道广大程序猿们对妹子是极其渴望的,而我有这方面的点滴经验愿意与君分享。 当然要写到最后再哆嗦。
码字辛苦,实属不易。 古有点头之交,今有点赞之交。 如果您认为此文确实有看的价值,而不是一堆没有价值的信息, 请在下方点击赞赏。 谢谢亲爱的社友们~
|