这篇文章是自己编程语言学习之路的总结(还在进行中),因为也踩过不少“坑”,希望能对后面的一些初学编程语言的朋友或者希望学习其他编程语言的朋友有一些帮助,避过一些不必要的坑。
9月14日补充:
谢谢下面的同学告诉我这篇文章推到了极客头条。
看了极客头条下面的一些评论略有感触。
其中有一个问题我觉得有必要再次说下。
问题:看书并不能提高编程能力,自己写一写代码,不会了再去看书这才是王道。实践才是检验真理的唯一标准。
我的回复:个人觉得这是两种方式,每个人适合的情况不一样。
前一阵一位前辈来为我们分享一些东西。
举了个例子,我觉得很好
看完书去实战和边实战不会了再去看书是两种学习方式。
就比如你给一张白纸上打点,
看完书实战相当于一开始就打满点,
实战看书相当于遇到不会的,打一个点,最终白纸也会打满点。
两种方式没好没坏。
我觉的。初学者不适合第二种,有编程经验或实战经验的适合第二种,
初学者如果写一个项目,不会去查,首先它永远不可能对一个方向有完整的体系了解,或者很久很久,就比如编程语言吧,你不完整的学习一门面向对象的语言,靠实战一点一点打点,什么时候能完整的获取整个面向对象语言这个体系呢?
没有完整的体系,你如何快速的学习一门其他的面向对象语言呢。
这样学习是千疮百孔的。
当然了有经验的人可以按照你说的方式学习,我现在就是做什么项目用什么,快速学习,文章中也写了是给一些语言入门的同学希望他们不要走弯路。
您说的没错,希望有个前提^_^
我先简单的介绍下自己学习的路线:
c -> c++ -> python -> java
我比较熟悉c和c++,python和java只能说能拿来用吧,说出这个是想让看的朋友带着审视的眼光,毕竟水平有限,比如你不熟悉c++你可以参考下我的学习过程,比如你很熟悉java,那么可以不参考我的,或者将你的好的方法或不同意见贴到评论区,一起学习,一起进步^_^。
- 开头随便聊聊
- 聊聊这些语言的特点
- 聊聊这些语言看什么书
- 聊聊用什么工具编写这些语言
开头随便聊聊
在我最初开始学习编程的时候,接触的是c语言,看的是《c 程序设计》是谭浩强老前辈的,起初觉得自己很笨啊,这种i++,++i,都不会哈哈~。
所以刚开始学习编程的时候速度也是很慢的,而且有时学到一般就学不下去了,直到我在网上看了一些文章,一些过来前辈的学习过程。
我知道了一本好书对你的学习来说是非常重要的
于是在网上买了本《c和指针》,看这本书的时候让我有了顿醒的感觉,以前觉得迷糊的知识有些清楚了,而且了解到了更多的知识。
后来学习c++的时候,就买了本《c++ primer》第四版,看了大概一个多月吧看的差不多了,当时对待课后习题的态度是大概扫一眼,看着觉得自己差不多会,就过了,这种自我感觉良好是不可取的,当然实战的时候自己尝到了恶果,一堆错误加还不熟悉这门语言。
我知道了书上的练习和课后题有多重要
自己尝到了恶果后,咋办,重学呗,这一次下定决心重学c++,无意中在小组看到了《c++ primer》第五版,学姐说是新出的,我晕,这么快都出第五版了,应该不会有什么大区别吧…,在我看了目录后发现,这这这…,差这么多,在内心纠结下,又整了本《c++ primer》第五版,开始学习!!,学习过程中由于对第四版知识还有印象,所以我发现了第四版和第五版的差距之大,c++11更新多么重大(前一阵看见一位学弟在看c++primer第三版,这也是我决定写这篇文章的一个原因吧)。
我知道了过时的知识点就让它过去吧,应该学习较新的且被大众认可(运用)的知识
也因为尝到了苦头,阅读第五版时速度很慢,敲了练习和课后题,将遇到的坑和重点知识都记了笔记并且记录到了博客上,因为c++是一门比较复杂的语言,在我忘记部分知识点的时候我能够迅速在自己的博客上找到并且想起来。
我知道了记笔记有多重要
当然记笔记是很花费时间的一件事,视自己情况吧~,c++学习时间比较长,看完了《c++ primer》后我还看了一些其他的c++书,会在后面说到,直到今年5月份我才开始学习python,大概2周左右看完了《python核心编程》并敲了大部分课后题,看的过程中非常顺,感激我之前看c++作出的努力,即使很慢。
我知道了付出的努力总是值得的
下面就是做项目的时候要用到java,此时我转换了学习语言的方式,推荐一篇孟岩老师的文章。
快速掌握一门语言最常用的50%
这篇文章非常好,但是适用于有类似语言基础的人,类似语言基础指的是比如说你会c++,这是一门面向对象的语言,那么你学习python或者java就可以按照上面的来。
学习java的时候,都说《thinking in java》 好,都说学c++后学java很轻松,开始看《thinking in java》还是比较容易的,直到看到了第14章 类型信息,我卡住了,有些真的很难理解,虽然说都是面向过程的语言,但是很多地方不一样,并且java这门语言有自己的特点,如果仅仅想使用它,很容易,二八定理,百分之百的东西我们最常用的也就百分之二十,想理解原理,比如说我看看java的容器怎么实现的?那必须要学习一些原理的东西了,此刻就没那么容易了。
我知道了,每门语言都有自己的特点,我们应该找到它的特点来攻破它,而不是以一门语言来看其它语言。
以上是我大概的学习路线,随便聊聊,希望看完后你会有一些想法和收获。
学习本身就是一个不断改进和不断进步的过程。
聊聊这些语言的特点
printf("C语言\n");
个人觉得c语言作为入门的语言是非常合适的
语法很简单,没有那么多语法糖。
如果第一次接触编程的话,我觉得不要接触封装太“严实”的语言,比如python,python是抽象层次比较高的语言了,而且语法糖也不少,会让我们迷失到一些语言中比较“炫酷”的东西,而忘记了一些本质,而且作为入门写python这种写习惯了写c/c++会很难受的,毕竟什么都要自己来实现,变量还要定义?- -,我不是说python不好,写着方便也是解放人类嘛,不适合入门而已c语言能让我们了解到一些底层的知识,语言只是计算机体系中的一部分,不是说你学了语言就够了,还有操作系统,网络等等一些知识,但是c这个除了汇编外最接近底层的语言在写过程中能让我们学习一些系统的偏底层的知识,对未来学习发展是非常好的。建议在linux下学习。
std::cout << "C++" << std::endl;
c++是一门很复杂的语言,学好不容易,用好也不容易,对于c++而言我是不推荐快速入门的,快速入门只能坑自己和队友,学习c++建议静下心来,整体过一遍,再在实战中锻炼自己。
特点
- c++是一门面向对象的语言,但是因为要兼容c语言,所以它不是一门纯粹的面向对象的语言,如果想学习面向对象编程的思想,建议学习java。
- c++效率和性能相对来说是比较高的,怎么说,python这种解释型的语言就排除了,c++开发效率比c高(STL能省你不少事),性能比java好(但是开发效率是低于java的,具体选择还是看我们追求性能还是节省时间)。
- c++适合偏底层的人员学习,比如后台开发等,用c语言开发效率是略底的,java又都封装好了,所以个人觉得选择c++还是不错的。
- c++近年来也不断再进步,c++11/14更新了很多内容,极大提高了我们的开发效率,c++17标准也在拟定中,还是蛮期待的。
System.out.println("Java");
接触了Java后,不得不承认Java开发起来的效率是非常高的,而且Java从事的面非常广,学习java Web的也非常多,还有安卓等,成熟的框架和开发工具也多,jdk更新到1.8。
- java是一门纯面向对象的编程语言。学习的时候一定要切记,会明白为什么这么设计这么写。
- java的框架和库以及ide非常多,善用成熟的库和框架。
- 感兴趣可以看看一些框架的源码,比如netty,能学习到许多东西,很多设计模式等都运用在其中,个人感觉比较值得学习。
- java由于基于虚拟机JVM,所以跨平台支持的非常好。
- java健壮性非常好,异常体制非常完善
- 天生支持多线程,写起多线程程序效率比较高
print 'python'
python是一门脚本语言,功能强大,也是库非常多,写起来非常简便,开发效率高,近几年用的人也越来越多。
- 语法简洁,使用起来非常方便,比如用切片等处理字符串非常方便,不过因为是解释型语言,速度比较慢。
- 库非常多,应用很广泛,网络爬虫,系统编程,web编程,数学图形学,文本处理等等
- 被称为胶水语言,能把许多语言模块结合到一起
- 对多线程支持不好,由于GIL存在多线程只能单核运行,不过支持进程和协程
水平有限,上面仅仅说自己了解的一部分,不过个人认为自己需要熟悉一门面向对象的语言,根据自己所学习的方向感兴趣的方向。
聊聊这些语言看什么书
要学会自己能分辨什么书好,看一本好书真的是节约自己时间啊~
我一般是上豆瓣看评分评论,网上搜索看下评价等,再看看目录,觉得不错才入手。
printf("C语言\n");
《c和指针》
算自己真正的一本编程启蒙书吧。
《c 程序设计语言》
c语言经典,评价很高。
个人觉得挑一本完整看完就行
std::cout << "C++" << std::endl;
《c++ primer》第五版
看的话一定看第五版,想比较于第四版更新很多东西。
内容非常细,课后题也非常好,便于自己查漏补缺。
《effective c++》
里面是按照条款的方式列出c++的知识点和坑点以及一些技巧
可以作为进阶书。
《effective stl》
stl是C++最重要的一个组成部分,如何用好可以看看这本书。
《深度探索c++对象模型》
也是c++进阶的一本书,主要是了解c++对象的模型内部是怎样的。
比如你定义一个类,它内部是如何表示的。
《STL 源码剖析》
上面的如果看完了,可以进阶这本了,我自己仅仅看过一小部分,功力不够,比较难看懂,主要是模板编程的技巧和数据结构。
参考顺序
c++primer -> effective c++ -> effective stl -> 深度探索c++对象模型 -> stl源码剖析
后两本顺序随意。
System.out.println("Java");
《thinking in java》
绝对的好书,每一句话都值得细细品读,不过不适合入门
需要一定的基本功。
《疯狂java讲义》
我看了一小部分,觉得还不错,内容比较易懂,不像thinking in java这种需要琢磨一下,适合入门。
《java核心技术卷1》
评价也比较好,不过我没有看过,已经出到第九版了。
《effective Java》
上面其中一本看完差不多就可以看这个了,java的进阶书。
thinking in java,java核心技术编程卷1,疯狂java讲义选一本看就行了,没面向对象编程基础不建议看thinking in java。看过可以看看effective java。
print 'python'
《python核心编程》
入门还不错,内容也比较广泛,还有socket,web编程,数据库编程等,不过错别字有些多。看的时候发现了好几处。
《python cookbook》
python编程技巧大全,进阶用
python学习手册貌似也不错,基础挑一本看就行,进阶可以看看python cookbook。
总结:下工夫学习一门语言也是蛮费精力的,所以还是建议根据自己的兴趣来选择学习,比如你喜欢java web,那么就下功夫学java,c++和python了解即可,或者不了解也没什么大碍。
不要贪多,尤其同时学习两门,会乱的
不要贪多,尤其同时学习两门,会乱的
不要贪多,尤其同时学习两门,会乱的
重要的事情说3遍
推荐这些书是自己看过或者搜索过的,个人觉得比较好的,不代表我推荐的就是好的,大家在选择的时候可以参考,实际看还是要自己去调查,多问问前辈有经验的人等,看看目录适合不适合自己,不要盲目随便挑本就开干。
聊聊用什么工具编写这些语言
c/c++
个人觉得是vim啦~,学习编程还是linux下好。
编译器gcc/clang都行。调试用gdb
vim
java
比较流行eclipse,个人觉得idea也不错
idea
python
写的不是很多,我是用vim写的。
补充:
python用PyCharm,最近尝试了下,比较好用。
vim配置好是非常好用的。可以学习一下。
我们应该明确的是语言没有好坏。合适的场景用合适的语言。一个合格的程序员应该掌握多于2门语言并有快速学习一门新语言的能力。
最后路是自己走出来的,适合别人的不一定适合自己,不过参考下还是可以的,希望能帮助到看的朋友。
完
from XiyouLinuxGroup by wwh