自学Java如何入门?

我是程序员小跃,一名在职场已经写了5年程序员的老程序员员,从一开始的菊厂 Android 开发到现在某游戏公司的Java后端架构,对Java还是了解的挺多的。

刚好不久之前,有个知友发信息给我,关于零基础如何学习Java,以及在学习过程中会存在一定的迷茫,如何应对等等。跃哥思前想后,觉得这个也是适合你的。希望能很好的帮助初学Java,以及想从事 Java 开发的同学。

提出问题的是一位高中生,发我信息让我给指点指点。跃哥最近有点飘,总会时不时地有勤奋好学的小伙伴来找我解惑,所以我从自身的角度来分析问题,毕竟我也工作多年,给初学者一些信心是我该做的;给初学者一些指导,是我力所能及的;给初学者一些劝退,也是我要做的,毕竟很多人可能最后发现自己并不适合写程序。

那么马上进入主题,该篇主要涉及到

  • Java从入门到进阶需要经历哪些
  • 如何学习Java入门
  • 还没开始实践就有一堆烦恼,该怎么办?

第一个呢就是Java学习路线是什么,Java各个阶段需要学的知识点有什么,课程大纲,就是和课本上似的都有目录包含了所有的哪些知识点Java,从基础到入门再到精通应该如何学?先学什么知识点在学什么?包含了什么知识体系Java里,辛苦你能不能和我仔细说说呢

答:

Java 现在主要是作为后端应用在发展,尤其是他的微服务领域。很多国内外知名的大厂在广泛使用 Java,甚至有大V认为,在微服务领域 Java目前还是王者。

所以,我们学习 Java 的更进一步的目标就是把自己培养成微服务的人才。

Java 是一门纯粹的面向对象的编程语言,所以除了基础语法之外,必须得弄懂它的 OOP 特性:封装、继承、多态。

关于基础知识学习

学习基础知识,就是让你对Java语言有一个初步的了解。话又说回来,基础知识是学习一门编程语言的必备条件,而且大部分语言的基础知识都是大同小异,包含基本的数据类型以及基本的面向对象知识,面向对象是重中之重,只有掌握面向对象的知识,在后续的开发中才会有更好的成长。

基础知识包括(这部分主要参考《Java核心技术卷》)

  1. 基本程序结构:基本变量类型、运算符、字符串、流程控制、数组
  2. 类与对象:类的定义和使用、静态属性和方法、继承、包管理、枚举、反射
  3. 接口和抽象类:接口的定义及实现、抽象类的定义及实现
  4. 泛型:泛型类、泛型方法
  5. 集合:集合接口、列表、Map、树、排序和查找
  6. 异常与调试:内置异常、声明异常、自定义异常、捕获异常、日志
  7. 多线程:多线程概念、使用线程、同步

关于 Spring 等学习

有了第一部分的基础知识,那我们第二步就是直奔主题。在领域里,Spring就是需要学习的利器。下面是掌握 Spring 相关,需要掌握的知识(可能不止,也可能有遗漏,后续可以再补充)

  1. Maven:Maven与包管理、POM文件、生命周期等
  2. Spring Core:依赖注入与控制反转、Spring概述、Spring容器与生命周期、自动装配、注解装配、切面编程(AOP)
  3. HTTP协议
  4. JSON知识
  5. Servlet概念’
  6. Spring MVC概念:配置Spring MVC、参数传递、实现REST、权限控制等
  7. RPC框架
  8. RESTFul

关于Spring的学习资料,推荐《Spring实战》,之前跃哥的朋友有从我这里拿走奖励,口碑还是不错滴

关于应用中间件的学习

中间件涵盖的领域比较多,包括持久化、缓存、队列、反向代理等,这些是完善一个程序的重中之重。前面的那几个知识属于基础框架,那么中间件就是给框架里填充一些增强的部分,让程序健壮稳定。

主要包括但不限于

  1. MySQL:关系型数据库概念,数据库的CRUD操作
  2. MyBatis:OR映射概念,配置,映射,基本Java库,和Spring集成
  3. Redis缓存:缓存概念、Redis的使用
  4. NoSQL:NoSQL概念,Mongodb的使用
  5. 队列:队列概念,RabbitMQ、Kafka
  6. 反向代理:反向代理概念,Nginx的配置和使用
  7. Linux:远程连接Linux,Linux的常用命令

其他补充

这部分和非技术相关,但是在往后的项目使用中,是肯定需要用到的,属于神兵利器吧。

  1. 开发工具:IDEA、Eclipse、VS Code
  2. 版本控制工具:Git、SVN
  3. Docker容器:环境部署

大体上就分为上面的三个部分,但是每个部分都有很多小的部分,基础知识最容易,也是重中之重,因为后面所有的代码编写,没有基础知识,一些都执行不了。

问了这么多,写了这么多,还是不能停留在理论,最好的方式就是实践。

第二个就是学习方法没有找到,不知怎么学,什么方法学起来很容易还不会忘记也不会不想学,我现在真的很迷茫,想学但是不知道该怎么学,特别是在你说的多实践敲代码问题上也就是第三点敲代码

我现在的顾虑就是不知道该怎么去灵活的敲代码,还有怎么才能做到编写代码很准确速度提上来呢现在吧脑子里还没有学究一想编写代码就无所适从,不知该怎么敲,心里就是觉得敲代码很困难,无法下手去敲,更别说多去实践了

还有就是在敲代码问题上如何才能按照给出的题意或者产品开发旨意编写出代码来呢?问这个就是我现在感觉这个很困难,之前在学校刚学c的时候根据课本源代码敲都敲错了,更别说布置的根据意思敲我直接不会,一想到这个我真的怕了所以才问自己适不适合,辛苦你了哥希望能给我仔细跟我说说。

答:

Java开发也好,C语言也罢,还是其他的语言学习,都是需要实践的;这个你就把自己当成一名技术工人,泥瓦工也是经过千锤百炼才能造房子;包装工也是经历过千万次的包装才能做到得心应手;语言组织也是如此,作文就是一字一句积累起来的。

编程是一门技术活,不是靠单纯的体力活动能胜任的,所以想提升能力方面这个无他,唯有熟能生巧。写代码这个要求太低了,还远远不够,我们还是想让自己更加优秀,那就需要做更多的努力

我经常和群友说,编程到最后并不是写代码,写代码是最最容易的事情。在写代码之前,还有需求分析,技术选型(选数据库,选中间件等),架构设计,流程设计,算法选择,这些都完成了,那你把这些转换成代码就是水到渠成。

这里只是给出一个最终的目标,针对初学者,一开始不能好高骛远,也不能被困难所吓倒。我上面给了学习路线,你看明白了吗?所以,你现在心里有数,有没有被吓到,如果没有,那么请你仔细阅读《Java核心技术卷1》,把上面的基础知识都先掌握,出现的代码都在编译器上实践,一行一行编写,理解他。如果已经被打倒,那后面就没有什么事了,好好选择一个更好的出路即可。

等基础知识都慢慢地学会,然后再去找一些小Demo,比如说实现一个计算器,就能检验你的学习成果。写代码是一个循序渐进的过程,基础先学会,逐渐就有成就感,那后面的困难就迎刃而解,否则等到后面学习算法,项目时间,困难重重。

这里再聊一点学习的方式 – 以下部分参考极客时间《左耳听风》专栏

人的学习分为「被动学习」和「主动学习」两个层次

  • 被动学习:如听讲、阅读、视听、演示,学习内容的平均留存率为 5%、10%、20% 和 30%。
  • 主动学习:如通过讨论、实践、教授给他人,会将原来被动学习的内容留存率从 5% 提升到 50%、75% 和 90%。

这里可以理解出来,你听别人讲,或是自己看书,或是让别人演示给你,这些都不能让你真正获得学习能力,因为你是在被别人灌输,在听别人说,在看别人的成果。

只有你开始自己思考,开始自己总结和归纳,开始找人交流讨论,开始践行,并开始对外输出,你才会掌握到真正的学习能力。

学习不仅仅是为了知道,而更是为了思考和理解。在学习的过程中,我们不是为了知道某个事的表面是什么,而是要通过表象去探索其内在的本质和原理。真正的学习,从来都不是很轻松的,而是那种你知道得越多,你的问题就会越多,你的问题越多,你就会思考得越多,你思考得越多,你就会越觉得自己知道得少,于是你就会想要了解更多。如此循环,是这么一种螺旋上升上下求索的状态。

在学习的过程中,我们要不断地问自己,这个技术出现的初衷是什么?是要解决什么样的问题?为什么那个问题要用这种方法解?为什么不能用别的方法解?为什么不能简单一些?……

这些问题都会驱使你像一个侦探一样去探索背后的事实和真相,并在不断的思考中一点一点地理解整个事情的内在本质、逻辑和原理。一旦理解和掌握了这些本质的东西,你就会发现,整个复杂多变的世界在变得越来越简单。你就好像找到了所有问题的最终答案似的,一通百通了。

学习是为了改变自己的思考方式,改变自己的思维方式,改变自己与生俱来的那些垃圾和低效的算法。总之,学习让我们改变自己,行动和践行,反思和改善,从而获得成长。

总结

大家读完了这几个问答是什么感受呢?这里我简单的总结一下。

首先,就是都关心的问题,我选择了Java,那么我以后能做什么。其实Java能做的很多,只是在现阶段,我们通过编程语言排行榜也能看到,Java是稳居前三,说明他有庞大的用户群体,那么就代表着网络上有海量的 Java 学习资料,良好的社区环境,优秀的解决方案,以及超级多的框架学习,你丝毫不用担心自己找不到问题的解决方案,找不到学习的路径。

我列举了 Java 后端的学习路线,是因为现在 Java 主要在后端发挥着作用。后端 Java 一家独大,几乎大型的互联网和大厂,银行,金融体系后端都是 Java。

其次就是如何学习,我列举的 Java 学习路线也是根据后端的学习路线来,其实还有挺多没涉及到,但是给入门,是足够了。

第三,就是学习方法,怎么学。说实话,编码一直都是取决于个人的学习情况以及自律能力。很多人在学校里努力,在校招的时候就能有一个好的offer,有些在学校里没能坚持下来,可能毕业之后就放弃这条路了;还有些是一开始觉得很感兴趣,后来发现自己不适合,要么学校里选择转专业,要么出来之后转产品,转实施等也算是改行。那么,就是两个结果,用篮球季后赛的术语就是 Win or Go Home。

判断自己是否有毅力学习下来,可以参考下我在上面的建议,当然,如果小伙伴们有更好的建议,给我留言,让大家一起交流交流。顺便在这里说一下,我目前是在职Java开发,如果在入门学习Java的过程当中有遇见任何关于学习方法,学习路线,学习效率等方面的问题,你都可以申请加入我的Java新手学习交流群:798844620,这里面聚集了很多正在学习Java技术的初学者,缺乏基础入门的视频教程也可以直接来找我,我这里有最新的Java基础精讲视频教程,群文件里面还有我做Java技术这段时间整理的一些学习手册,面试题,开发工具,PDF文档书籍教程。

千万不要什么都没去实践,但是一直在担心担心,担心自己不能写代码。如果你不开始实践,怎么知道自己是不是适合,是不是喜欢,是不是会走这条路呢,对吧。其实我刚读大一,接触 C 语言的时候,尤其是到了指针,链表,想过放弃,但是最后我断了这个念头,我要是不写代码,我大学不是白考了,转专业?现实点,能转专业的,都是班里的女生,死磕学习成绩,名额都抢光了。那么你还能怎么办,硬着头皮继续吧。

就这样,一直到毕业,我在实验室里看着书,敲着代码,大家的暑假有两个月,我的暑假就只给自己一个月,另外一个月都在学校里渡过,就是为了让自己能不辜负父母的付出。

奥利给,大家一起学起来,让自己通过编程,找到顺心如意的工作,加薪升职!!!

猜你喜欢

转载自blog.csdn.net/weixin_46898270/article/details/108132764