自学JAVA

自我介绍:我大学的专业是计算机网络。不出意外的成为了一个网管;
(2022-10-18):挺庆幸的.当时阴差阳错的进到了一个行业龙头的公司;也正因为是行业龙头,才有了现在的我. 
4年,我从一个网管,如今成为了一个1000的多人的电商公司IT经理,有心酸,有故事,也有遗憾。
这是自2018写这个文章后的第一次修编,和一些想法的补充,希望能帮到大家。
经过修编后的文章,应该能更加具体的 回溯当年是如何自己自学JAVA,然后一步一步的走过来的;有兴趣,或者有意向的朋友 可以认真读读。可能有些帮助;

正片:

1:欲望的开始:

    我所负责的位置是一个仓库。朝八晚六的网管工作很清闲,每天就是和其他部门的妹子唠唠嗑,和看看哪里的网线断了。和网吧的网管差别就是:不用送泡面了;

    周四,也是往常的一天。不同的是,我的上级领导要过来仓库和仓库的领导做ERP的流程和优化方案。这是每周都要讨论的;

    3500 的工资;没什么期望和欲望的日子;部门其中的一个程序员在抽烟的时候 聊了聊。以前也聊过,那天聊的时候不经意的就聊到了工资了;说实话,有点伤到我了。也正是因为这次的聊天,我想成为程序员的欲望开始了;

   领导:是我家乡隔壁镇的人,整个部门100多人,就我两个说白话。我和他聊天的时候都是说家乡话的;从理论上来说,算很熟悉; 他,31岁,经历就说一下:一个人搭建了整个公司的ERP系统(重点:行业龙头公司)。经历是很传奇的;

   在吃饭之余:我开玩笑式的和他透露了一下,我也想学学JAVA 的想法;可能是因为老乡的原因,和家乡话的清切,和家乡话的口头禅吧.  他答应了。不过是有要求的:"要自己完成一个WEB的项目",要完成这个要求后,他才给我转岗实习;

(总结一下:首先是要有欲望

    当时我的欲望是:工资,我不像再拿着这个死的3500,呆在这个毫无意义的岗位上了;
    我看到了机会: 只要你能做一个WEB项目出来;我就给你一个转岗的机会;   

    这两个:缺一不可。对我后面的坚持,和后续的学习 有着强大的推动力;可能各位看官,不身临其境,不能切身感受。但是当时我的,可以用意气风发这个词来说吧! ----起码我知道了奋斗的目标了。

2:苦日子的开始;

先说说自己的基础情况:大专是计算机的;接触过C语言,毕业后还弄不清楚for;因为是学习网络技术,所以对渗透学习有点研究,对HTML JS 有点研究。但是仅仅停留在工具上;

第一阶段:

学习的目标:我要最快的时间内做出一个WEB系统;

     不知道初学者会不会有这个疑问:我为什么定义这个变量;我用这个for用来干嘛的;这个数组什么有啥用?结合为啥要排序?.....等等一系列的问题呢?

    网上的教程,更多和国内的教育一样,学形。 小学或者中学的题目:(A个管进满水池的水要10小时,B管进满水池要5小时,AB两个同时开,请问进满水池要多少小时?)。这种不切合当时实际的题目?显示生活中太少类似的场景了;导致咱们再学习的没有代入感。没了代入感,咱们的学习事倍功半.......(重中之重);

   所以,当我我采取的方案是,快速的过钓JAVA的基础内容;2017.10.27到 2017.10.31号。我用了4天的时间,把JAVA语法的基础。和面向对象的知识; 其中三天的时间在理解和面向对象的知识;JAVA的基础就半天就过了;多写,多看,在学习面向对象的模块的时候,尝尝观察身边的事务,把他写成自己的类,写成对象。去理解他;(我当时,把家里的工具,电器,身边环境。等等,都尝试去写了实体类)我好想还记得(我写过差不多200多个类);也因为这200多个类的堆积,和与实际场景的理解,我渐渐的开始理解了对象的;(希望在这一步,大家多写,多做,多看,多代入); 我不刻意的去学习基础了知识(有人问,你不打基础,后面有遇到问题应该怎么做。说实话10.31号那天,我忘记数组应该如何创建。后面我们再谈);

第二阶段:Jsp  servlet JDBC

如果说第二阶段 我就做JSP servlet JDBC,大家按照 JAVA书籍上的顺序和视频的教学顺序。是不是发现我少了好多;
是的我少了好多好多内容:IO 多线程,集合====。为什么我会漏掉那么多?
正因为我阶段一说的:按照书本和视频的教学,我没有一丝的代入感。学起来没有意思,学了就很容易忘掉;

我随便在51CTO 上随便找了一个看起来还不错的视频;
(重):

首先,

第一:然后按照视频的理解和第一章的知识点,默写出来,默写不出来的地方,再看看视频那个点的位置;
第二:然后看完第二章:视频都是上下都连接的;我会把项目删掉;彻彻底底的删掉,从第一张开始新建项目然后默写到到第二章的内容;

以此类推,我记得那个视频又25章。可以说JSP servlet JDBC 那块,同样的代码 我几乎走了25遍;重重复复的走;
(我在这块,我用了5天的时间); 5天的时间,我写出了自己的页面,做好了登录注册,会写简单的SQL语句了;

重点(成就感就来了。一个登录和注册,这个就是最好的动力;) ,上面的方法,我是很笨的,重复重复再重复。有时候,我也会觉得我会了。但是让自己写,让自己想的时候,就是写不出来,就是想不出来,于是,我就重复重复。几乎能默写

第三阶段:在线视频商城:(22天)

本身我的前段并不是很好,我在慕课网上的找了一个在线视频商城的视频,把前端的代码和数据建表源码全部拷贝了出来;

于是,我就有了自己一个HTML 源码和SQL 表了;

在线商城:一些WEB 项目的功能都具备了;功能也不复杂。

重点: 

没有视频看咋办?

我在页面上看到一个视频收藏的按钮;顾名思义:他是用户要收藏视频的;

意思就是说用户收藏表中是不是要加一条映射的数据,说明这个用户收藏了这个视频课程;

页面上是不是也要把对应的图片改一下颜色,说明你已经收藏了;

......

HTML 静态的嘛。可以打开。我当时就是照着静态的网页上,那个模块需要什么功能,我就做哪些功能。不懂的逻辑,和模块,和解决方式。百度加上看视频;

22天: 文件上传呀,POI呀 ,等等。 之前我没有学习过集合呀,异常处理呀,IO ,泛型。 Map== 我自己在实践中加深了很多。 说实话,代入后做项目,比单纯的学习知识点,前者是更胜一筹。胜得太多太多了。就是用到什么学习什么,在实践项目中检验自己学习的东西,更充分的理解知识(这个最为重要最重要 重要)切记

有些功能不会,在网上找到了视频,然后我会尝试自己写一个;但是跟着晚上找的视频可能做不出来,因为别人会用框架,来做。而我是用JSP servlet来写的,只能一步一步的自己推敲出来了,或许这就是悟性吧;

这一阶段也是最难熬的(熬过去了心里面就有一个大概项目的 轮廓出来)每做一个功能。

第四阶段: 整合框架(10天)

我完成了自己人生中第一个WEB项目;我迫不及待的把作品给我领导看。但是领导开口说:"后台呢,我要看后台,框架呢,为什么没有用上框架。"

于是那时候我才知道,原来项目最重要的地方其实在后台;因为公司用的SSM框架 .所以我开始整合SSM框架,外加一个后台;

没办法,只能自己写HTML JS  CSS 了;不过有了上面的基础;后台的页面贼难看,但是能用;

框架的整合是最简单的==等同于 把项目再做了一遍;很快;

1个多月,我拿到了自己的JAVA实习OFFER。我第一个任务就是 画物流的面单哈哈。工资没变。  

总结一下:

   每天花费在学习的时间:我对自己比较狠。我每天早上8点上班到公司,因为没有事情,我会一直学习到下班-7点;晚上回家洗澡后9点又学习。到凌晨的 2-3点;几乎每天14-15个小时的时间学习;一直持续40多天;   

   可能吧。上天稍微眷顾我这种人吧,也正是因为这次,我也真正的相信 -- 努力是有回报的;

   借这个平台:给初学者和有意向学习程序开发的朋友们一些参考;有些地方可能有些激进,换个角度讲:当时可能对于我来说就是大势所趋。

   在这里分享一下:自己学习JAVA的经历,供大家学习学习;

有不少的同学发信给我,和我探讨java自学过程应该是什么样的,毕竟有很多人因为各种各样的原因不能参加培训。我试着给出自己的见解,抛砖引玉吧。 这个路线图是给那些为了就业的人准备的,如果只是兴趣,不一定照这个走。 这里只是讲了路线图,关于路线中的各个阶段,学到什么程度,如何学习等,可以参考后面的JAVA自学之路 七:《路线图明细》。 首先要学JavaSE,这是无庸置疑的。 与此同时,是的,与此同时,和JavaSE的学习同步,建议大家研究一下数据结构与算法。 在这儿之后,你可以选择向J2ME、或者Java GUI、Socket编程等方向努力,但是通过第一篇的办法,你可以很容易就将这方向过滤掉(永远不要忘了我们是为了就业),好吧,暂时和它们诀别,还是向着J2EE的方向前进吧。 在JavaSE完成之后,可以试着完成一些小项目,同时关注一下设计模式的内容,不必强求自己能够完全掌握各种细节,往前走吧。 掌握一种编程工具,比如说Eclipse。 数据库,可以选择使用Oracle或者MySQL开始 。 JDBC,用Java连接数据库。 可以选择在这个地方切入Hibernate,也可以选择在Struts 之后。 HTML CSS JavaScript,这些东西是做web项目必需的内容 。 Servlet JSP,服务器端必需。 XML AJAX,新的流行趋势不能不了解。 作一些小项目吧。比如BBS、留言系统、学籍管理、商城等等,随便着一些业务逻辑比较简单的来做一做。 Struts,MVC的典型应用 Hibernate,OR Mapping的典范之作。 Spring IOC + AOP, 面向对象 + 面向切面,完善的旅程。 把以前自己的小项目加入Struts、Spring、Hibernate的元素吧。 去研究各种商业项目的业务逻辑吧,才能在你的简历中加入浓重的一笔。 EJB3.0,java在走了很多弯路后的回归之作,值得研究。 SOA,业界铁定的未来趋势,要紧紧跟随。 在后面,我会告诉你每一步的学习方法和学习重点。 JAVA自学之路 三:要动手 无论如何,请坚持不懈的动手实验! 学习Java要动手,仅仅是看和听是不能够学好编程的。总有同学来信问我们这样的问题,说:"老师我看了视频了,可是怎么一动手就没有任何思路呢?" 对此,我一般都会说不要着急,如果你只是看了视频就想行云流水的话,那老师这些年的锻炼真是白费了,这么多年的苦练才能略有些行云流水的感觉,你一朝一夕就想自己能够达到,不是太奢侈了吗 作为编程的过来人想一下,当年自己学编程的时候是什么时候有思路的呢?至少也是照猫画虎画了一段时间之后吧,我本人是在某一个领域画虎画了上万行代码的时候才慢慢有自己思路的。就像写作文,要有自己思路总是一般来说要经过几个阶段,首先学习词汇,然后学习造句,然后大量阅读别人的文章,自己模仿着写一些,逐渐的经验积累,才能形成自己的思路。学编程,恐怕也得慢慢的来吧,只是看一看、听一听视频,是不足以学好编程的。 所以,动手吧,跟着做,一行一行的跟着敲,一个项目敲完了,比如坦克,再试着加一些自己的功能,按照自己的思路敲一些代码,收获远比干听大的多。 如果遇到,暂时对于一些思路不能理解的同学,我一般都会劝告说,动手写,先写代码,量变会引起质变的。而这种质变的确发生过不少次。 提醒一句,要理解代码思路之后再跟着敲 ,背着敲,千万不要左边摆着别人的程序,右边自己一个一个子母的写,这就不再是程序员了,成了打字员了。 纸上得来终觉浅,所以:别问那么多,别想那么多,动手写吧。 JAVA自学之路 四:要事为先 对待人生的任何事情都要:抓大放小,要事为先 对于一个以前从来没有接触过java的人,java无疑是庞大的,似乎每个领域都可以拓展开来都是一片开阔地,每一个领域要想深入接触到每一个细节所耗费的精力都是巨大的。这个时候大家都胸怀壮志,两眼发光的盯着每一个崭新的知识点,遇见了任何一个知识点都恨不得抠的清清楚楚,明明白白。 难道这有什么不对吗? 我的意见是,没什么大毛病,但是学习效率太低了!我们推荐的学习方式是,抓大放小,要事为先。 比如说学习J2SE的时候,学到GUI这一章,有的同学认为,既然学到这儿了,我们去把SWING细细的了解一遍吧;还有的同学,遇到了在Linux下的Shell编程,就恨不得把Shell先学成专家才肯,或者是才敢,继续往下学习;有没有过这样的感觉,一本书的上册没有学好,觉着下册心里也没底儿,甚至非要把上册复习一遍才敢继续学习。如果你也是这样,要去看看心理医生啦,没准儿会有洁癖的毛病。 任何事情都要追求完美才敢继续往后进行,是一种性格缺陷 大胆的放弃一些东西吧,有失才有得,把自己有限的、宝贵的精力用在对于就业直接相关的地方,这才是最有效率的学习方式!等你参加工作,有了可持续发展的事业动力和经济基础,有时间有精力闲的没事儿干的时候,再去研究那些其它吧。 曾经有一个故事,说得是产能和产量的关系。 一个人喜欢读书,读了一辈子,无所不通,这时候要做任何工作都可以,他的产能到了极致,但是,他老了,即便每天产出大量的东西也不能维持多久了,一辈子的产量并没有多少。 另一个人直接工作,忙,天天在机器旁日复一日,做了一辈子,没时间学习和进修,可以想象,产量能有多大呢。 人的一生,要锻炼产能,也要及时产出,引擎要转,也要停下来加油,这两者平衡的越好,你的贡献和产量就会越大。如果钻研的东西和产能目标(或者说近期的产能目标)无关的话,要舍得放手。 所以,对于SWING,暂时先扔在一边吧。 对于shell,对于各种协议过于详细的细节,对于喜欢的游戏编程,对于javascript各种华而不实的效果,都暂时和它们分别吧。一切和我们的直接工作目标关联不大的东西,扔在一边或者弄清楚到足够支持下一步的学习就可以了。 那这样岂不是妨碍我成为通晓各种细节的高手了吗? 我一向不认为一个人掌握了很多很多知识点的细节就是高手了,一个人如果告诉你,回字有四种写法,你会认为他是高手吗? 毫不客气的说,现在我们所教授的所有知识细节在网上或书中都可以找到,只要你肯花时间花精力去动手试,去钻研,没有什么不能掌握的。struts、spring你能掌握吗?当然能!但是如果把时间花在spring的各种细节的研究上,花在研究中国企业应用不广泛地的spring mvc上,这个精力就太浪费了,而且学习的积极性会受到打击,谁愿意整天泡在细节的蜘蛛网中挣扎不出来呢?谁愿意天天经历风雨却总是不能见到彩虹呢? 盖房子,要先建骨架,再谈修饰。 画山水,要先画结构,再谈润色。 认识一台结构复杂的机器,应该首先认清楚脉络,然后再逐步认识每一个关节。 为了应付从小学到大学的考试,我们背了各种各样的不应该提前掌握的细节,同时也养成了见到细节就抠的学习习惯。而现在,是到改改的时候了。 请在合适的时间,做合适的事情吧。 把时间和精力花在作项目上面,花在写作品以及锻炼解决问题的能力上面吧,这是迈向高手的正确的而且快速的方向。 我一直不认为一个课程提供了很多很多的细节就是优秀的价值高的课程了,掌握必要的细节,这个不含糊,至于其他,或者通过视频给出(这样可以给出更多的细节,但是不占上课时间,课上只讲重要的、必要的细节知识),或者在掌握了自学的能力后自己能够查出,这才是正途。 当你看书到某个地方暂时不理解的时候的,暂时放手吧,追求一些行云流水、自然而然的境界吧,只是不要停下前进的脚步,不要被大路旁边的支根末节干扰了你前进的行程,项目,真实的项目,这才是目的,就在不远的前方。 陶渊明读书,叫做“不求甚解”,但他是大诗人。 诸葛亮读书,总是“观其大略”,但他是大政治家。 作研究的,是在确定了方向之后才详细的研究深入的东西。 到了庐山,脉络形状扔在一边,盯着一棵棵小草、一粒粒石子的看,怎么样才能识得“真面目”? 作为应用型的人才,是研究回字的n种写法还是抓紧时间向着主要应用的方向努力,请自己作出抉择。 以项目驱动自己的学习吧,当把握了技术的脉络之后再去补充细节的研究,是正途。 这辈子就不研究其他的方向了吗? 当然要研究!但是在将来合适的时间再说吧。 所以,抓大放小,要事为先! 那么,在JAVA的这些课程中,哪些才是大,才是要事呢?请继续读下去。 JAVA自学之路 五:问题解决之道 既然是学习,就不可能不遇到问题。 既然是自学,就没有方便的和老师探讨的机会。 那么,遇到问题之后,环境配不通,程序调不过,运行不正常,遇见这些恼人的问题的时候,该怎么办呢? 首先我要恭喜你,遇见问题,意味着你又有涨经验的机会了,每解决一个问题,你的JAVA经验值就应该上升几百点,问题遇到的越多,知识提升的越快。 但是总是解决不了也是很恼人的,怎么办呢? 我一般要求我们的学生都是这样来进行的。 当你遇到一个问题的时候: 1:要仔细的观察错误的现象,是的,要仔细 有不少同学的手非常快,在编译一个程序的时候,报了一大堆的错误,扫了一眼之后就开始盯着代码一行一行的找,看清什么错误了吗?没有!有的时候安装软件出问题了,一个对话框弹出来说出错了,马上举手问老师:“不得了了,出错了,出错了”。 “什么错误?” “还没看呢?” 这都是典型的不上心的方法!请记住,学习编程并不是一件很容易的事情,自己首先要重视,要用心才可以。 在开发中,仔细观察出错信息,或者运行不正常的信息,是你要做的第一件事。 读清楚了,才能在以后的步骤中有的放矢,哭了半天,总要知道哭的是谁才成。 这里又分三种情况: A:错误信息读懂了,那么请进入2步:要仔细思考问题会出在哪些环节 B:没读懂,愣是一点没看懂,进入第4步吧:google C:读了个半懂,有些眉目但是不太能确定,第2步和第4步结合着来。 2:要仔细思考问题会出在哪些环节(重要) 当你读懂了一个问题之后,要好好的思考这个问题可能会在哪些环节上出错。 一辆汽车从总成线上下来,车门子关不上! 哪错了?你怎么查? 当然是顺着生产线一站一站的查下来。 程序也是一样的,也是一系列语句完成后产生的结果。 写一个网络程序,总是发现服务器端打印不出接收的数据,有几个环节会出错? 仔细分析这个现象的环节: 客户端产生数据->按“发送”按钮->发送到服务器->服务器接收到后打印 这几个环节都有可能会出错: 有可能客户端根本就没产生数据,有可能发送按钮按下去后根本就没发出去,或者发出去的不是你产生的东西,或者根本就没连接网络,或者发送出去服务器没有接收到,或者接收到之前就打印了等等等等。 学着去这样仔细的分析程序的环节和这些环节可能会产生的问题,你的经验值定然会大幅度快速的提升,这样做很累人,但是一件事情如果做下来一点都不累的话,这个东西还有价值吗? 在网页A输入了一个人的名字,提交到B,首先存储到数据库,然后再读出来,发现乱码!怎么办?当然是分析环节: 客户输入->HTTP发送->B接收->存储到数据库->读出->展现到网页 每个环节都可能出问题,怎么才能知道哪里出的问题?继续往下读。 3:如何定位错误(重要)分析清楚有哪些环节之后,下一步就是定位到底什么环节出错了。 定位有以下三种办法: A 打印输出,比如java的System.out.println(),比如js的alert(),这种办法常用,必须掌握 B Debug,可以参考我们的视频《坦克大战》,详细讲了Eclipse的调试。 C 删掉一部分调试一部分,也就是去掉一部分的功能,做简化,然后调试剩下的功能,JSP和JavaScript常用。 4:如果还不行,google吧 还查不出来?恭喜你,你遇到的错误是值得认真对待的错误,是会影响你学习生涯的错误,问一下google或者百度吧。照着下面的方法查查看。 一般来讲,搜索引擎可以搜到各种知识点,我曾经跟同学们开玩笑说:“学会了怎么google或者baidu,其实没必要跟老师学了,自己全都搞懂了,尚学堂是没必要来的。”当然,只是玩笑,培训的作用有三个: A:系统化知识 B:真实项目锻炼经验 C:少走弯路,节省时间 不知不觉开始做广告了,请原谅,处其位谋其事,总得为尚学堂说点什么:) 言归正传,如何查搜索引擎? 先精后粗,首先先进行尽量精确的查找,比如一个错误,SocketException,你怀疑它是在connect()方法出的问题,那么当然是选这样的关键词java connect SocketException 先中后英,本着以解决问题为主的想法,练习英文还是先放在一边吧,首先应该在中文网页中查询,还不行的话,搜索英文的吧,最近的尚学堂课程中会带大家阅读英文的书籍。有很多东西就像一层窗户纸,远看灰蒙蒙怪唬人的,你壮着胆子一捅,它就破了。阅读英文的书籍就是如此,不是想象中的那么困难:)宁可在沙场上战死,也不能被吓死不是吗:) 信息筛选,搜索出来的结果不见得能够完全匹配,建议大家多阅读前几页的搜索结果,多打开几个网页看看,不过,我的经验是超过3页一般就没意义了,所以超过3页还没有找到合适的答案,或许应该调整一下关键词,或者放粗整个搜索的结果了。 经常的进行知识难点的查询,如果一个问题牵扯的面比较广,就干脆到网上搜索一些相关的专题,比如“java 乱码 mysql” “oracle 创建用户”等等,如果有必要,不要犯懒,勤动手写一些小小的测试程序,来弄明白知识点的细节。这也是涨知识的重要的途径。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值