一、修身先修心,学习编程前的心理建设问题。
学习编程的道路和学习其它任何一项技能一样,都是充满了枯燥、孤独、无助甚至绝望,但它又不太一样,计算机是个“可靠系统”,在一定的条件下输入一定的内容,它的返回永远不变,所以反馈的实时性和稳定性保证了我们练习的有效性。我们的程序写的对或不对,马上就能出结果。理论上,这种及时反馈能最大限度地提高学习效率,试错成本被降到最低,每次尝试只需要不到0.1s的时间,不到1k的内存,不到1kwh的电力和一台笨重的电脑就可以了,我们没有理由学不会的,耗费的只是时间和注意力而已。
但对于一部分人来说,这却是最大的障碍,每次看到屏幕里跳出来一串串红色的报错,都像是人帝在对我们进行审判,一个嘲讽的冷笑就能让我们的尊严扫地,然后,我们就只能硬着头皮在网上查,结果翻了十几页,发现根本驴唇不对马嘴,自己彻底崩溃,觉得自己根本不适合学写代码。
但你要知道,所有人都要从笨拙到熟练,从错误到正确,一点一点挨过来的,写代码从来都是一种创作,是一种用代码写的诗,所以它就和写作,谱曲一样,伟大的作品都是从错误,从失败中孕育的,所以心平气和地去接受开始时笨拙的自己,你慢慢地就会做的更好。
二、对于学习资料的选择问题。
2019年,我们生活在一个网络世界极大丰富,资料随处可得,信息快速传播的时代。每个人都被各种各样的书籍、网站、消息包裹挟持。这个时候,我们要学习,要烦恼的就不是无书可读了,而是选择,而选择的终极意义不是得到,而是失去,你选择了A方法,那就意为着要放弃B/C/D,但人性的本质是厌恶失去的,因此,我们就很容易陷入纠结的状态,最终这种纠结成了我们学习路上最大的拦路虎。
我的建议是,与其在不同的学习路线,学习方法中来回摇摆,总想找到最优解,倒不如找一条路,先实践起来,遇到问题再来想办法。
三、主动、主动再主动。
学习一定要主动,什么叫主动学习?这两个字是我们从小听到大的,但很多人都没有理解它的精髓。
要带着一种强烈的求知欲,这种求知欲不是外在的压力,也不是自己装模作样的做作,而是对自己能力提升的渴望,想清楚学习编程为了什么,找到心中那团火,很多小问题都不再是问题。
不能拘泥于别人的学习方法,尤其学习Java的帖子,五花八门,有的人是看书党,有的人是看视频党,有的人是看官网党,还有各种各样的政治正确、鄙视链,这种帖子如果看多了,你可能就自乱阵脚了。
对于我来讲,需要理解的,稍有难度的内容,我就会选择看视频,因为我知道,在上学的时候,我就是听讲党,如果上课听得好,我一道作业都不用做,就能考满分,但如果我上课睡着了,下课再怎么看书,也只能理解个大概。但一些技巧,细节,我喜欢看书,结合网络资源来学习,再加上实践练习,这样的效果很更好。那这个方法就需要你在学习过程中慢慢总结。
要自己掌握进度和精力分配,学习的过程中,要不停地“观察自己”,哪个地方是我一直记不住的,哪个地方是我一看就会了的,就像背单词一样,有的单词对别人很难,但你可能看了一遍就记住了,但另外一些看起来很简单的,你可能每次的犯错,这就要时刻总结,想各种办法搞定这些。
观察自己的精力,上学的时候可能有大量的时间和精力来专心学习,还好一点,但如果你是上班族,工作的时候又不能摸鱼,那就必须在有限的学习时间内提高效率,如果你是晚睡星人,那你就熬夜的时候去攻克最难的课程,如果你是早起族,那早上5点,喝完水,就赶紧打开电脑开始写昨天没做出来的算法题吧。
与学习路线相比,这些不起眼的细节,有的时候就能决定你能否坚持下来,游到河的对岸。
=============================================================
原答案:
话不多说,推荐一个网站、两本书:
How2J 的 Java教程
现在,我正在这个网站中学习,可以说,这是目前为止,国内最好的Java学习网站。
「Java 核心技术」,「Effective Java中文版」。
本文一共分为三个部分,新手入门Java编程的误区、市面上教材的问题、正确的学习思路是什么样的。
1.一定要找到最优路线
与上一代程序员相比,我们这一代程序员真是生活在天堂里,随处可得的都是经验,教程。但这也给很多新人造成了不少的困扰,哪一个学习路线是最好的呢?好不容易找到一个视频教程,看了两天,就看不下去了,又回去搜『怎么学习Java』、『有哪些适合Java新手看的书』、『最好的Java教材是什么』。其实,没有所谓最好的一条路,你走的那条,就是最好的。
2.拿到书,从第一页开始看,一个字一个字地看
学生思维中,最需要改变的就是这一点。编程书籍浩如烟海,每一本都是大部头,如果每一本书,都从第一页开始,一个字一个字的看,没有三五个月,你是啃不下一本书呢,可以到了三分之一的时候,你可能就已经到了崩溃的边缘了,放弃,只是早晚的事。
3.眼高手低,不重视练习
认为看懂了就是会了,这是编程新手很容易犯的错误,看懂了不算会,理解了不算会,只有你能写出来了才能算会。很多新人着急赶进度,每个知识点都是囫囵吞枣,看起来会了就过了。xdite老师曾说过,傲慢才是学习路上的天敌。放弃你的傲慢,重视练习,你才能获得最扎实的基本功。
请记住,慢就是快。
4.编程很难,我学不会
不要神化编程,好像只有古怪的程序员才能看的懂,学得会。编程其实就是和计算机交流,孰能生巧罢了。
1.罗列知识点
知识点摆出来,就叫做教材。但这样的教材还不如让我直接去看官方的文档呢,没有分析讲解,类比,再多的文字只能让人昏昏欲睡。
2.太重视细节和原理
有些国外的教材,又太过啰嗦,没有重点的讲细节。按照这样的教材去练功,很容易走火入魔,不顾读者成本和基础地讲解细节和原理,是极其不负责任的,这样的教材就像一个高手,功德圆满了,下山来秀花招,中看不中用。
3.缺少练习,练习缺少梯度
我在学习的过程中,就有这样的困惑,感觉学了很多知识点,却找不到用武之地,找不到合适的练习题,大部分书上的练习题都是互相抄抄,就像大学考试的题目一样,不实用,而且最重要的是梯度设置很有问题,要么太简单,一看就会,要么又太难,超过了知识点的范畴。
网上的大部分练习都是针对面试的算法题,太注重于各种复杂奇怪的算法,对于语法,编程基础的练习作用实在有限。
4.没有项目,无法串连知识点
如果说好练习题少,那可用的练习项目,可以说是几乎没有。缺少了实际项目的检验,我们所学的知识点就好像都漂浮在空中,没有落地,没有办法得到整合。零散的知识是不容易被大脑记住的,如果能有一个完整的串连项目,那就像在大脑中建立一个图书馆,各类图书分门别类,整理妥当,工作中真正需要的时候,我们就可以信手拈来了。
1.快速突破基础知识
其实学习Java编程和学习任何其实知识都一样。
知识点+练习+总结
看知识点,看实例,做练习。这个过程中是以练带学的过程。不要死记硬背知识点,把知识点用起来,才能记得住、记得准、记得牢。
重点来了,如果你在我推荐的how2j网站学习,做练习的正确思路,一共5步:
java 练习题,共计 194 道
1. 自行完成练习
根据练习目标尽量自己实现代码效果,期间会碰到疑问,难题,和自己不懂的地方,这些都是必要的过程
2. 带着疑问查看答案
完成过程中,碰到无法解决的问题,带着疑问,查看答案,分析答案的解决思路
3. 查看答案讲解视频
依然有不明白的地方,点开视频讲解,带着疑问,听视频讲解有问题的部分
4. 再做一遍
理解后,再从头做一遍,把有疑问的地方都捋清楚
5. 总结
最后再总结一边,总结思路,总结解决办法,以后遇到类似的问题,怎么处理
2.排列组合,搞清框架整合
对于框架学习来讲,搞清楚Hibernate、Struts、Spring、Mybatis的使用方法是第一步。
真正工作的时候基本上都是两个或三个联合使用。因此,把构架的整合思路理清楚,会为后面的项目学习打下很好的基础。
整合Struts和Hibernate教程
Spring+Hibernate 整合步骤
Struts+Spring 整合步骤
SSH 整合Struts+Spring+Hibernate 逐一配置的步骤
SSM Spring+Sping MVC + Mybatis 三大框架整合详细步骤
3.结合项目,整合所学知识点与框架
其实在学习Java编程的过程中,这一步不一定是最难的,但是市面上的资料很少,无项目可做,是很多初学者找不到成就感,不能形成正反馈,最终选择放弃最重要的元凶。
我现在正在学习的就是这个模仿天猫的完整项目。而这个项目一共分为了三个实现版本,一个J2EE版、一个SSH框架版和一个SSM框架版。这样,一个项目,三种实现,既能完整地复习前面练习的知识点,利用到大部分的知识点,又能前后对比,了解到框架的用法和好处。
JAVA WEB 项目教程-模仿天猫整站 J2EE版
JAVA WEB 项目教程-模仿天猫整站 SSH版
JAVA WEB 项目教程-模仿天猫整站 SSM版
Springboot 项目教程-模仿天猫整站 Springboot 版
4.结合两本书,查缺补漏
这个时候,我们才提到最前面提到的两本书,你应该常备案头,以备查阅。真正的好书,要像一个朋友,遇到问题的时候,你去问他,他总能帮你解决。但你学习的时候,又好像不需要他的存在,这就是君子之交。
总结
今天我所说的,都是自己的学习过程中的体会和总结。how2j网站中大部分内容都是免费的,但有一部分需要付费购买。如果说学习是一项投资,那金钱绝对不是最大的成本,它需要你的时间,你的耐心和你的决心。
【补充】
这一年的时间外部环境出现了很多变化,很多公司出现了裁员风波,作为我们来说,唯一能做的就是不断地学习,把自己的翅膀练得更硬一点儿,以不变应万变。
我们学习,要有目标,不能为了学习而学习,应该是有针对性的学习。开发人员学习的目标,简单地说,就是找一个好工作。
那么一个薪资不错的工作,有什么需要呢? 随手翻开一个招聘网站,像15k-20k 这样的工作,还是有一定吸引力的。 像如下截图的这份工作: 高级Java 开发工程师
很多同学,在工作中很少能接触到这些内容,没有相关经验,出现工作年限与能力不匹配的现象,跳槽时很被动,在网上找的帖子要不就是点到为止,要不就是很零碎,不成体系,很难找到突破口。
与基本知识和传统框架相比,学习新技术有一些新的困难,比如,经典书籍缺位严重,视频质量良莠不齐,网络课程体系混乱,学习路线曲径通幽,总是让人头昏脑涨,又找不到方向,得不到成就感。但这些内容又是互联网公司面试的大头,如果你想侥幸绕过去,那只能说你太天真了,所以很多人在网上搜索各种面经,笔经,想想蒙混过关,但自己学没学过,做没做过,还是会在面试中有所体现,就算在面试中涉险过关,在实际的工作中,也要重头再来。
面对这样的问题,你需要紧跟时代,在你把基础打牢,框架也能用个七七八八的时候,要做好最后一步,所谓行百里者半九十,我们要再上一个台阶,把自己的技术栈,从中等水平拔高到顶尖水平,打好卡位战,只需要领先半个身位,就能把最大多数的竞争者甩在后面,况且这些所谓的新技术就是一层窗户纸,拿出些时间来,把它们从头到尾实践一遍,把常见的坑踩平,你就再也没有后顾之忧了。
天猫整站Springboot系列教材
完整的 Springboot 模仿天猫项目,使用 Springboot 、Vue.js、shiro、redis、elasticsearch 等一整套技术栈, 从无到有涵盖全部129个知识点,564个开发步骤, 充实 Springboot 项目经验,为简历加上一个有吸引力的砝码
除了我原帖中极力推荐的网站以外,我还想介绍几个程序员必备的网站。
有的同学更喜欢系统的内容,我的建议是视频可以作为how2j网站的补充,网站就像一个简明地图,让你快速地在黑暗中探索出一条道路,帮你克服恐惧,找到感觉,而当你想深入的了解每一个知识点时,刘意老师的讲解会让你明白这一切。
链接:
https://pan.baidu.com/s/138bim6hl1M6otb3AMNri6g
密码:8aih
Learn Git Branching
Git是一大利器,但很多自学的朋友意识不到它的重要性,因为你是一个人,没有团队的合作需求,自己对版本的管理也还算清楚,但当你真实地参与到开发工作时,git是你武器库中决不可少的。
但git的概念入门还是有一点难度的,这个网站是一个游戏,当你通关了,git就被你纳入囊中了。
牛客网- 互联网求职神器和备考学习平台
牛客网是主要面向毕业生的网站,有很多面试真题,基础的练习题,还是算法题,可以说是一站式的解决方案,有事没事泡在上面,可以看到各路牛人,每道题,也会有大家的讲解,当你看到大家都在奋斗的时候,你就不会感到寂寞了。
刷算法题,是求职的必过的一关,很多小伙伴认为,算法都是很成熟了,我们在工作中只要搞定框架,然后调包就可以了,但我认为,刷题是个一举多得的过程,锻炼了你的思维能力,无形之中,提高你写代码的能力。
我自己和很多小伙伴一样,在刚开始刷题的时候,非常受打击,拿到题目,根本无从下手,觉得自己一无是处,然后就开始怀疑自己的智商,认为自己根本不适合做程序员,但你要知道这一切都是正常的,你需要的是一个导师,算法导师,而牛客网的左神,就是最完美的导师之一,不过他在牛客网上的教程很贵,小几千的样子,这里有一个我自己分享的链接,大家自取吧。
链接:
https://pan.baidu.com/s/1Fla5yOA1KEU5YEEeN7icpA
密码:azcx
消息对列,分布式搜索引擎,redis,分布式缓存,dubbo,分库分表,高可用架构,这些知识点是2-3年工作经验的程序员很难深入了解的内容,很多同学在跳槽面试一两次后,就发现,这些问题在面试过程中,经常以连环炮的形式出现,经常是一到两个问题就败下阵来,信心全无。其实大家应该相信,大家都差不多,在面试之前,这个视频可以帮到你。
链接:
https://pan.baidu.com/s/1oYkVv7FHbRqYEbVFlPCgfQ
密码:05qf
================================================================
光勤劳是不够的,蚂蚁也非常勤劳。你在勤劳些什么呢?有两种过错是基本的,其他一切过错都由此而生:急躁和懒惰。--by 卡夫卡
如果大家喜欢的分享,欢迎点赞支持!
一、修身先修心,学习编程前的心理建设问题。
学习编程的道路和学习其它任何一项技能一样,都是充满了枯燥、孤独、无助甚至绝望,但它又不太一样,计算机是个“可靠系统”,在一定的条件下输入一定的内容,它的返回永远不变,所以反馈的实时性和稳定性保证了我们练习的有效性。我们的程序写的对或不对,马上就能出结果。理论上,这种及时反馈能最大限度地提高学习效率,试错成本被降到最低,每次尝试只需要不到0.1s的时间,不到1k的内存,不到1kwh的电力和一台笨重的电脑就可以了,我们没有理由学不会的,耗费的只是时间和注意力而已。
但对于一部分人来说,这却是最大的障碍,每次看到屏幕里跳出来一串串红色的报错,都像是人帝在对我们进行审判,一个嘲讽的冷笑就能让我们的尊严扫地,然后,我们就只能硬着头皮在网上查,结果翻了十几页,发现根本驴唇不对马嘴,自己彻底崩溃,觉得自己根本不适合学写代码。
但你要知道,所有人都要从笨拙到熟练,从错误到正确,一点一点挨过来的,写代码从来都是一种创作,是一种用代码写的诗,所以它就和写作,谱曲一样,伟大的作品都是从错误,从失败中孕育的,所以心平气和地去接受开始时笨拙的自己,你慢慢地就会做的更好。
二、对于学习资料的选择问题。
2019年,我们生活在一个网络世界极大丰富,资料随处可得,信息快速传播的时代。每个人都被各种各样的书籍、网站、消息包裹挟持。这个时候,我们要学习,要烦恼的就不是无书可读了,而是选择,而选择的终极意义不是得到,而是失去,你选择了A方法,那就意为着要放弃B/C/D,但人性的本质是厌恶失去的,因此,我们就很容易陷入纠结的状态,最终这种纠结成了我们学习路上最大的拦路虎。
我的建议是,与其在不同的学习路线,学习方法中来回摇摆,总想找到最优解,倒不如找一条路,先实践起来,遇到问题再来想办法。
三、主动、主动再主动。
学习一定要主动,什么叫主动学习?这两个字是我们从小听到大的,但很多人都没有理解它的精髓。
要带着一种强烈的求知欲,这种求知欲不是外在的压力,也不是自己装模作样的做作,而是对自己能力提升的渴望,想清楚学习编程为了什么,找到心中那团火,很多小问题都不再是问题。
不能拘泥于别人的学习方法,尤其学习Java的帖子,五花八门,有的人是看书党,有的人是看视频党,有的人是看官网党,还有各种各样的政治正确、鄙视链,这种帖子如果看多了,你可能就自乱阵脚了。
对于我来讲,需要理解的,稍有难度的内容,我就会选择看视频,因为我知道,在上学的时候,我就是听讲党,如果上课听得好,我一道作业都不用做,就能考满分,但如果我上课睡着了,下课再怎么看书,也只能理解个大概。但一些技巧,细节,我喜欢看书,结合网络资源来学习,再加上实践练习,这样的效果很更好。那这个方法就需要你在学习过程中慢慢总结。
要自己掌握进度和精力分配,学习的过程中,要不停地“观察自己”,哪个地方是我一直记不住的,哪个地方是我一看就会了的,就像背单词一样,有的单词对别人很难,但你可能看了一遍就记住了,但另外一些看起来很简单的,你可能每次的犯错,这就要时刻总结,想各种办法搞定这些。
观察自己的精力,上学的时候可能有大量的时间和精力来专心学习,还好一点,但如果你是上班族,工作的时候又不能摸鱼,那就必须在有限的学习时间内提高效率,如果你是晚睡星人,那你就熬夜的时候去攻克最难的课程,如果你是早起族,那早上5点,喝完水,就赶紧打开电脑开始写昨天没做出来的算法题吧。
与学习路线相比,这些不起眼的细节,有的时候就能决定你能否坚持下来,游到河的对岸。
=============================================================
本文转自知乎