作者:程序员小跃

几个星期之前,我在知乎上看到一个提问,说是:对于完全没有经验零基础自身的数学底子也很弱学习Java应该怎么学习呢?想着类似的问题我也有过回答,并且反馈还是蛮好的,就参考之前的思路回答了一遍,可惜没在公众号里和大家分享,后续再整理一份好好分享下。(该问答地址见原文

提出问题的是一位高中生,就顺藤摸瓜加了我好友,让我给指点指点。跃哥最近飘了,各种给人指点,也不知道是对是错,但是我还是从自身的角度来分析问题,毕竟我也工作多年,给初学者一些信心是我该做的;给初学者一些指导,是我力所能及的;给初学者一些劝退,也是我要做的,毕竟很多人可能最后发现自己并不适合写程序。

期间这位老弟和我聊了很多,我都零零散散给了解答。直到前几天,他抛给我很多困惑,都是在初学的时候会面临到的,所以我就抽时间做了一次详细的解答,主要涉及到Java从入门到进阶需要经历哪些如何学习Java入门还没开始实践就有一堆烦恼,该怎么办?


本文将以问答的方式,给出一些简单的见解,因为Java内容挺多的,可能会有遗漏,我已经让群里的小伙伴们做过一次筛选,读者朋友们看到了,也可以给我更多的补充噢。

知友:哥,我前两天也想了一些编程的问题向您请教请教吧,希望能得到你的帮助

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

答:

Java现在主要的领域是作为后端在应用,尤其是他的微服务领域,很多国内外知名的大厂都是使用Java作为后端,甚至有大V认为,在微服务领域Java无人能及。

所以,我们学习Java的目标就是把自己培养成微服务的人才。虽然,Android开发,部分前端也是用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实战》,之前群里有人中奖,我赠送过一本

关于应用中间件的学习

这一部分,就是Java开发中常见的“中间件”,这些中间件涵盖了各个领域,包括持久化、缓存、队列、反向代理等,这些是完善一个程序的重中之重,前面属于基础框架,这个就是给框架里填充必要的东西,让程序健壮稳定。

主要包括但不限于

  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
  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

判断自己是否有毅力学习下来,可以参考下我在上面的建议,当然,如果小伙伴们有更好的建议,可以在留言区给我留言,让大家一起交流交流。

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

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

跃哥今天有点话痨了,但是句句肺腑。接下来,跃哥学习那些优秀的号主,一个系列一个系列的输出,拿出当初编程学习样子,和大家一起奔跑。

最新文章

  1. 音乐播放器 EasyMusic (一)
  2. UIGrid/UITable 性能优化
  3. [JS5] 利用onload执行脚本
  4. 转码:unescape("%u7B80%u4F53%u4E2D%u6587")--->escape("简体中文")
  5. cavium octeon 处理器启动总线Bootbus 简介
  6. Kaggle入门
  7. C++ DLL导出函数的两种方法(导出序号那种方法,别人看不到函数名)
  8. sql server判断表是否存在
  9. oracle与sqlserver区别
  10. jquery中get传输方法实现读取xml文件
  11. basler 相机拍照简单类综合Emgu.CV---得到图档
  12. 基于Cisco packet tracer的AAA认证
  13. NoSql Cassandra
  14. Prometheus监控学习笔记之prometheus的远端存储
  15. php 获取网站根目录
  16. 【mysql】linux查看mysql配置文件my.conf
  17. Eclipce 配置javaEE
  18. vue路由权限之访问权限(meta控制是否有访问权限)
  19. 牛X的规则引擎urule2
  20. 自然语言交流系统 phxnet团队 创新实训 个人博客 (十四)

热门文章

  1. JAVA-阿里云短信服务
  2. Natas7 Writeup(任意文件读取漏洞)
  3. .NET的资源并不限于.resx文件(二)
  4. CSS实现垂直居中布局
  5. elasticsearch基础及在Python中的简单使用
  6. hdu3294 Manacher算法模板
  7. Linux_virtualenv常用命令
  8. [UWP]使用AlphaMaskEffect提升故障艺术动画的性能(顺便介绍怎么使用性能探测器分析UWP程序)
  9. 搞定SEO,看这一篇就够了
  10. coding++:Spring Boot全局事务解释及使用(一)