前言
2020年6月24日,凌晨12点05分,捧着《Efficient C++》,在CSDN上拜读大佬们对于内联虚拟析构函数的文章,偶然看见推送的关于初学者该先学哪门语言的博文,并且访问量很高,我不忍苦笑。由此写点感慨和建议,也借以总结历史。
如下事实请细品
以亲身经历做个例子,我作为初学者时也查了许多类似问题,而大多数文章都未给出肯定性建议,看完就得到一个结论——都行!有点儿打太极的感觉,也一度导致我误入歧途——痴迷于C++,学校课程还在学C,我就迫不及待的看起了C++,而作为初学者较难入手,最后没学多少果断放弃,浪费了很多时间。所以,结合当前和未来计算机行业形势和要求,明确给出肯定性建议,包含主要方向的语言学习顺序、必读书籍入手顺序。
首先明确一点,99%的大学对于计算机系的课程安排都是以 C语言–>java–>C++ (三大高级语言,其他语言在此不涉及)的渐进式学习路线。作者强烈建议按此渐进学习!!!如此安排必有其独到之处,下面详谈。
从三大语言的分析比较中选择渐进路线
C语言
C语言是所有高级语言的根基,其基础内容简单易学,并且也是其他高级语言的基础内容。所谓基础打好,才会学的更好。C作为入门语言对于高级语言的基础是谈论的是相当详细了,而其他语言对于基础部分谈论较为粗略。在学完C的基础之后,所有高级语言的基础就基本学完了。所以要学其他高级语言以先学C为上策。
书籍:
一般入门:《C语言程序设计》
目前99%的大学都是以《C语言程序设计》红皮书作为C的教学书籍,虽然这本书对于很多疑问一笔略过,程序风格的培养也很烂,饱受诟病,但毕竟是始祖书籍,也有些过人之处,作为C入门还是搓搓有余。
较好入门:《C primer plus》
可以考虑购置《C primer plus》作为额外参考,《C primer plus》较为详细介绍了C语言的语法。
经验分享:
- C语言作为入门高级语言的第一门语言,最好买一本带题库的配套辅导书,有助于快速入门。强调刷题很重要,本来题库就没多少题。刚接触C语言建议大一学C时配合《算法设计》一起看效率较高,不然大二以后要学其他语言,而且熟练高级语言后基本上对于算法不太关注。算法设计很重要。(对于计算机专业,一定要做好学习安排,什么时候该看什么书,不然浪费很多宝贵的时间和精力,要看的书是在太多,后期跟不上。当然很多人认为额外的书籍工作后再慢慢看,这个由你自己平衡优劣得失和时间。)
- 很多学校的计算机专业,大一上期学的是《计算机导论》,这都是学校怕学生刚入学,学习不在状态,没有理解到大学学习应有的紧张氛围,所设置的适应阶段。软件工程专业可能直接学习C,我们学校就是。然而《计算机导论》对于计算机专业的同学就是浪费时间!!!里面没有可吸收的内容,而且其内容在C语言和以后的计算机组成原理课程中都会讲解。一般只作为考察课,其内容根本不能拿出来考试,不要让老师拉着浪费时间了。其内容及其枯燥,当初我学跟着上课摸鱼,一学期完发现这本书有个屁用,软件专业的已经把C学完了,等我学完C别人已经学完了java,总是比你牛逼。白白一学期的时间,后悔莫及。一定利用好大一的时间啊同学们。
- 对于编写代码,一定一定一定要保持良好的风格和习惯,参考流行风格——Allmans风格和Kernighan风格。直到现在,我们班上很多人代码风格一塌糊涂,就有些老师代码风格也存在一些毛病,读这样的代码很难受,很容易导致被心里暗骂甚至被打。习惯和风格是需要经过一段时间的培养的,所以最好能在初学C时就下手了解,代码风格和习惯虽然没有绝对的标准,但要保证其初衷——提高代码可读性,并严格遵照行业习惯。
- 作为计算机专业程序员来说,需要看的专业书籍很多,而且小贵,最好淘宝买二手书,基本7、8成新,这样的旧书一般为盗版有些笔记,我觉得比新书好用。
java
java是基于C语言和C++而诞生的,解决了C语言面向对象的短板,比C++语言更具简单性且移植性更强。java中许多基本语句的语法与C++相同,两个虽为不同的两种语言却极为相似。从语言的简单性方面看,java要比C++简单,C++内容复杂,C++中许多容易混淆的概念,大多被java弃之不用了,或者以一种更为清楚、更容易理解的方式实现。因此别再问学java还是C++了,其实这两门语言的学习并不冲突,反而是相辅相成的。对于社会行业的要求,你要学java为何不学C++;你学C++为何不学java。你从C++学到java,和先学java再学C++,你会对编程和面向对象有截然不同的认识。基于java较C++内容相对简单,其实C++要比Java难多了,而且不止一点半点。因此先行学习java,再学C++,由易到难,渐渐深入,这样你会学的更好,更有兴趣。java是目前使用范围和使用人数最多运用范围最广的一门语言,是作为当前计算机专业人才必备的技能,而高级语言之间都是互通的,不可认为只学java或只学C++,对于这两大语言的都要有所掌握,学习的内容很多,所以一定要确定自己的主学方向,非主方向的语言基本只要看一本入门书知道基本语法就行。
书籍:
一般入门:《java 2实用教程》
这本书是我们课程的教学用书,这本书讲的不够详细,大体上就详讲了面向对象的基本原理,其他则简单介绍。反正我是觉得有点烂,很多东西就算作为入门也没讲清楚。但是对于java入门和面向对象入门足以。
较好入门:《java开发实战经典》
我强烈建议计算机专业的同学一定要选择这本书或其他相关书籍作为入门!!!我当初学java就是因为以学校的《java 2实用教程》作为唯一java入门读本,导致很多东西并未深刻理解,等到寒假才又入手的《java开发实战经典》,讲的十分详细,就算在《java 2实用教程》翻烂的基础上也收益颇多。就很后悔看《java 2实用教程》了。
进阶:《java设计模式及实战》
也可以选择《java设计模式》,但多了个实战,其道理不言而喻。对如何更好地设计程序、框架搭建的学习有所帮助,写中大型程序的必修课程。
经验分享:
- 总之选择java入门书籍,首先看书的厚度,切记买厚的,对于计算机专业java的学习睡都不能落下。直接深入一点学习,完全能跟上课程学习进度,适当部分可以暂时跳过或简单了解,后面有时间再详看。语言的学习一定要适当遵守不求甚解的道理,刚接触可能不能理解,但是别担心,在以后学了其他课程之后就会悄然迎刃而解。
C++
**C++**是在C语言的基础上扩充出来的面向对象程序语言,其完全兼容C,也可以说C是被包含在C++中的。也印证了先学C的道理,由浅入深。C++语法比较繁琐,许多人都还是喜欢java,上面已经讲了两者的比较。
书籍:
一般入门:《C++语言程序设计》
C++入门书籍大学教学一般用《C++语言程序设计》,对于java方向的同学这本书入门足以。
较好入门:《C++ Primer Plus》
如果对C++有深入需求的话,《C++ Primer Plus》 作为额外入门参考,更详细深入地介绍了C++的基本语法。这本书内容很多,有800多页,一般不建议作为课程学习书,而作为额外参考。
进阶:《Efficient C++》
对编程的良好的习惯和效率有很大帮助。主学java的同学也可以看一下《Efficient C++》,我说过编程语言都是相通的。
经验分享:
- 在学了C语言和java的基础上,对于繁杂的C++学习就简化了很多,有助于对C++的掌握以及对C语言和java的进一步查漏补缺、深入学习。
- C++完全兼容C,又与java极为相似,但有所不同。在C++的学习中,一定要严格注意C++与C语言、C++与java的不同之处。切勿混淆。
【注】这里只介绍了部分入门书籍以作参考和抛砖引玉,切记,按照自己的需求和方向选择书籍。更多书籍和进阶书籍请转如下链接:
java学习路线:从入门–进阶–到精通的学习进程(书籍推荐)