我的 Java 血泪史

自己学习 Java 将近两年了,自己水平还很浅,妄不敢说这篇文章是学习 Java 的金言。也是借着老师让我给学弟学妹们分享自己学习 Java 的经验的机会,同时也是对自己学习 Java 的总结和反思,大佬们不喜勿喷。

下面我就从五个方面来谈。

1、学习经历

我是从大二下学期开始学习 Java 的,那时我们还没有上 Java 这门课,所以就自学喽。也正好赶上找到了指导老师,老师就给我一个练手的项目,仿学校的医院管理系统。原程序是 C++ 写的,用的 MFC,Win10 上面跑不了,无法看到实际效果,我就看着文档中系统截图思考功能。在此之前只有一点 PHP Web 方面的经验,搞清做这个系统所需的技术后,我就开始学习相关的知识,Java 基础、Java Swing 界面编程,MySQL 数据库。一个学期边学习边写这个系统,那时候连 MVC 结构都不知道,也不会用任何的框架,就用了一个连接 MySQL 的 jar 包。虽然整个系统很 “精心” 的设计,但系统结构划分和代码还是一团糟。凭借着百度和琢磨,我还是写出来系统的大部分功能,当然 BUG 也是有的,这个系统就到此为止了,后来电脑重装系统,数据库文件没备份,系统就只剩个界面了,有时间还想重写一下这个系统,毕竟这是我 Java 梦开始的系统。

大二暑假,指导老师让我模仿一个学长毕业设计做的实验室管理系统,C# 写的,.NET 平台。有一星半点 Web 基础的我,学习了一个星期的 Java Web(准确的说是 JSP),就开始写这个系统了,当初还找了几个人组了个团队,但后来还是我一个人来写。前端到后端,界面到数据库设计,都是不小的考验,不用说了,界面做的丑,代码也是又臭又长。那时不懂界面重用,大量重复的代码,没有用任何框架,总共撸了有一万多行吧?。Java Web 的基础都没打好,后来我看书又重新学习了一遍 Java Web。这个系统好像还躺在我的电脑里,但是再也没打开过了。这个项目真的感觉很失败,都想放弃学习 Java Web了,后来老师开导我,我开始学习框架。

大三上学期,我开始学习 SSH 框架,一边看视频,一边自己实际操作,还写了十几篇SSH框架的学习笔记,自认为学的还不错,写个简单的管理系统是没什么问题了,这时搭建框架还是手动导入相关的 jar 包,还不会用 Maven。在老师的建议下,我申请了学校的创业创新项目,名字起的还很高大上,《跨平台的开放式实验室管理系统》,项目时间为两年,自己作为项目的负责人,还是之前的那些队员。这学期后段忙着项目申请书和项目开题的事,项目没真正开始写,还是调查研究阶段,我们查阅了大量的资料文献,我也有了一个大致的思路,但同时也发现了这个系统的难点所在。我们要做的这个系统当时写的是面向全校的,人员的权限就是一个大问题,并不是简单的增删改查这么简单,系统要能够灵活的分配权限,权限对应的才是功能。还有一个实验预约功能,不知道是我们想的太复杂的,还是怎么滴,没有一点头绪,在 GitHub 上也找了一些相关的项目,运行测试后,都没有实际用途,达不到要求。这个项目就这样停滞了,直到大三下学期。

作为负责人的我,大三下学期刚开学就不敢有丝毫松懈,全力研究系统中的权限控制,我先是在网上找资料,发现可以框架做(spring security、shiro),但觉得学框架太费时间,况且自己用的是 SSH 框架,框架也只是入门,框架太多,自己也驾驭不住。自己当时也了解到利用 RBAC 模型可以做权限控制,数据库是能设计出来,但是界面权限树搞不定呀,留下了 JS 和 Jquery 薄弱的泪水。终于功夫不负有心人,我找到了一个 OA 系统的视频,视频中用的框架也是 SSH,系统中的权限控制也和我们系统中的类似,心中一阵窃喜,但是视频真的有些老了,09 年的,用的技术就更老了。我们系统前端页面用的 Bootstrap 框架,为了体现出系统的跨平台性,没用 EasyUI 这类简单易用的框架,项目的技术选型都是我来做的,我当时是觉得 EasyUI 写的界面不灵活不好看?,当然也有懒得再用框架增加负担。当时 JSP 和 Bootstrap 的结合,我都想了好久,唉~,研究了一个月的视频,跟着视频做出了系统权限控制功能,还写了篇博客,发给老师看,老师说这个放到项目中就可以发篇论文了,我开始把权限控制移植到我们的系统中,这时才觉得框架真香,在 GitHub 上找了一个后台管理系统的框架,也是基于 Bootstrap的,里面使用的大量的插件,我研究了一天,修修改改用到我们的项目中。在权限控制移植到我们的系统中,我又发现了新的问题,系统中还有分院系管理的限制,不同的院系肯定只能管理自己本院系的事情,还需要在原来 RBAC 模型数据表的基础上添加院系表和相关的字段,这一改,伤筋动骨啊,半个月我都在设计和写代码,终于算是完成了系统的权限控制功能。又忙了一个月,不断的修改论文,之前还以为代码写出来就懂了,论文的逻辑写的很残缺,在老师的指导下,逻辑才逐渐清晰,这时中文版的论文才算是落地,后面就把论文改成英文的,程序界面也需要改,最终才把论文发表。你可能会问,团队的其他的人?渐渐这个项目做成了我的项目,而不是我们的项目,系统的设计到具体的编码,前端到后端,从设计师到苦逼码农,这其中的滋味只有我一人知道。这期间我也在想系统的架构,我们用的还是 JSP,这就需要写前端不仅要会 HTML 和 CSS,还要会 JSP 的标签,展示数据用的是 JSP 的逻辑标签呀。这学期我也学习了微信小程序开发,和一个老师办公室的小伙伴合作了一个微信小程序,两个人一个前端一个后端(我),前端就不多说了,看微信小程序的官方文档,WXML,WXSS,JS,后端我考虑后用的是 PHP,没用框架,因为不会也没学,两个人折腾了一个月还是搞出来上线了。后来我一想,我们做微信小程序采用的不就是前后端分离,前后端之间用 JSON 传输数据,合作开发时,我作为后端感觉很爽,因为程序功能不复杂,数据库也不难,我想如果我们这个系统中也做成前后端分离,精力就可以更集中开发自己的那部分,自己精力真的有限,前后端都写,结果都玩不转。自己思考了很多,把 Java Web 又重新看了一篇,进行了一些知识总结,就这样这个系统开发了一半,问题就只剩下实验预约了。

现在是大四上学期,我没有接着开发这个系统,而是转向了看书,因为也要准备校招和面试了。之前总是疲于做开发,书读得很少,都是为了完成程序中的功能,书是看不进去的。在看书中,我才看到自己的知识是那么脆弱,很多都是只动个皮毛,根本没有深入进去,于是我开始恶啃书籍,《深入理解 Java 虚拟机》,并做了一些笔记。之前老师给的李刚老师的《疯狂 Java 讲义》又拿出来看了看,之前看觉得写的很好,因为 Java 相关的东西基本都讲到了,包括一些高级特性。现在看已经满足不了自己的求知欲了,很多东西讲的还是太浅了,也正是这时我才感觉到 Java 真是太深了。于是对于一些类,我开始看源码,看不懂的就看网上的解读,对于概念性的知识有了全新的认识,并写了相应的笔记。

我的个人经历,看起来是边学边做,但是对于这种被动的做,被动的学。我的基础打的并不牢固,现在也是恶补,看很多的书。往者不可谏,来者犹可追,现在能做的就是把之前碎片化的知识归纳成系统,也是不断的写笔记整理总结。

2、学习方法

我学习了不止一门语言,现在是把 Java 作为我的主语言,结合个人的经历,我觉得学习 Java 还是要分阶段学习的。我觉得最好的入门方式,就是买一本相对基础但有比较系统的书(不要求深入,每个知识点都有例子就可以)结合着视频(推荐培训结构的视频)来看,在学习的过程中,把书中的每个例子最好都敲一遍,不要拿着源码运行一遍就完事了,一定要手敲,既可以熟悉语言又可以提高编码速度,熟能生巧。入门后想要提高,就要多思考,对问题进行总结,比如 Java中的抽象类和接口有什么区别,这个阶段可以编一些简单的管理系统,写一个就可以,功能不要求复杂,经常看看 java 的 API 手册,英文好的直接看英文,英文不好的可以中英文对照着看,因为有些地方翻译的真的不好,英文阅读能力绝对值得提高,不是吹,外国人的文档水平真是比我们好太多。推荐书的话,我推荐《Effect Java》,《Java 编程思想》也是经典书籍,但是真的是有些旧了,书中的思想也不是一年半载可以消化的,日后可以再读,所以这个阶段不太推荐。进阶阶段,可以深入了解一下的 Java 的高级特性,总有一天你会发现框架都是来源于这些高级特性,也可以阅读一些常见类的源码,如 Object、Math、String、ArrayList、HashMap 等等,这其中或许还要配合着设计模式和算法来看。更深入的阶段,设计模式、Java 虚拟机、算法与数据结构、Java 多线程编程。框架就不多说了,真的太多了,SSH、SSM、Spring等。现在的大数据时代,也对 Java 程序员提出了更高的要求,Hadoop、HSFD、Spark、HBASE、Zookeeper,分布式架构,Spring Cloud 全家桶、阿里巴巴的 Dubbo 框架。当然疲于学框架,效果肯定不好,每个框架都是有应用场景的,这也是框架为什么出现的原因。学习任何东西,都要先搞清楚哲学上的三个问题,这个是什么?为什么要学习它?怎么学习?第三个问题或许是学完后你才能回答,当然可以看看别的答案。学习框架,不仅仅是框架的用法,再深入的话就是框架中的思想,框架中是怎么实现思想的,这就要看框架的源码了,再甚至自己写一个框架。

3、个人经验

个人经验,我总结为下面四条:

  • 1、说:当你把别人教会了,就说明你真会了。
  • 2、写:写出来、就知道逻辑请不清晰了,经常写博客绝对会使你收益。
  • 3、看:多看书、看好书、书不一定是最全面的,但一定是最系统的。
  • 4、聊:与人交流,可知自身不足,也可碰撞出思想的火花,可以多逛逛别人的博客,不一定是大牛的。

上面四点经验,有刻意总结的味道,但有些确实是自己在坚持的,如写作。和老师的交流中,我经常可以发现自己认识不足的地方,也有灵感闪现的时候,有时候也发现自己认为的懂了竟然说不出来。看书真的是种享受,现在才体会到,心太急是读不好的书的,看书可以带着目的性或者是问题,但不要带着浮躁。

4、常用工具

因为面对的是没有基础的学弟学妹,大神大佬们可以跳过?。

Java IDE:

1、Eclipse:大多数人的第一款 Java IDE,优点是开源免费,适合新手,代码提示少,可以多敲代码,对电脑的性能要求也不是很高。缺点是,又少量的 Bug,对使用框架支持也不是很好,需要另外装一些插件,当然不想装,也可以用 MyEclipse,但是不推荐,因为和下面的 IDE 相比,真的被秒爆。并且在查看源码时,还需要手动导入源码,这点很不爽。

2、Intellj IDEA:神一样的 IDE 吧,优点是商业收费,有教育优惠,学生老师都可以用学校的 edu 邮箱免费申请正版的专属激活码,代码提示很全,对框架的支持也很好,自带的反编译功能使查看源码很方便,用起来真的很爽。缺点就是太吃电脑性能了,对 CPU 和内存的要求比较高。

数据库管理工具:

Navicat:支持多种数据库,在大学你所能用到的数据库这个软件都是支持的,如 MySQL、Oracle、SQL Server、SQLite 等数据库。

多个版本的 JDK:

我的电脑上是装了 JDK6、JDK7、JDK8、JDK9、JDK10,不同的 JDK 当然还是有区别的,这点你在看源码时就会发现不同版本JDK的差异和改进了。Java9 引入的类似 Python 的交互式编程环境 JShell,可以用于简单的 Java 代码测试,而不用再创建一个 Java 文件。所以你也可以根据自己需要,安装多个版本的 JDK,使用 Java 语言的新特性。

其他工具:

Typora:Markdown 写作工具,和市面上大多数分左右两栏,一栏编写一栏预览不同,Typora 是单栏实时预览,我比较喜欢这种方式。

Maven:当你用到框架时,你就会发现 Java 中的 jar 包很多,而 Maven 是项目搭建利器,以配置文件的方式自动下载和引入 jar 包,切换不同版本的框架很方便。

Git:版本管理工具,结合 GitHub 使用效果很棒!

5、资源分享

见学弟学妹,空着手,我这个做学长肯定也不好呀,所以我给学弟学妹们准备了 Java 学习大礼包,有书籍也有视频,直接看图吧。

这些资料我都放在了我的微信公众号:”编程心路“ 里,大家可以先关注领取完资料,再取消关注都可以,当然我会在这里分享自己的 Java 总结笔记,感兴趣的也可以来看看。

后台回复 ”Java书籍“、”Java视频“ 即可获取上面全部的学习资料。

后台回复 ”PPT“,也可以得到今天 Java 学习经验分享 PPT 文稿。

也欢迎你和我交流 Java,除了微信公众号 你可以在这些地方找到我:

GitHub:weizhiwen

博客:wenshixin.gitee.io/blog/

简书:Wizey

掘金:Wizey

哔哩哔哩:Wizey

学习交流群:558719561

非常感谢你能耐心的看完。

你可能感兴趣的:(我的 Java 血泪史)