为什么别人学习JAVA很快,我学的就很慢,我也看视频,敲代码写作业,可是为什么就感觉云里雾里的?
2023-06-06 · 百度认证:重庆猪八戒网络有限公司官方账号
以一个过来人的身份分享一点自己学习Java的心得,希望对正在学习Java或者刚步入职场的Java小白有点意义,小编目前就职于某独角兽互联IT企业。
要点:看视频、敲示例代码,是一个极其难熬的过程,而解救你的永远是一个参加实际项目的机会,实践永远是检验真理的唯一标准,这个道理在编程领域仍然有效。
研究生二年级的时候,我接触了Java语言,在此之前我只接触过VB语言,其它编程语言均没接触过。当时因为导师的一个项目需要用Java语言开发,所以,导师让我学习一下Java语言。从此就开始了我的Java酸爽的学习之路。我去图书馆找来了《Java入门》、《21天精通Java》之类的书,每天躲在实验室不停的看这些书。看的时候跟题主一样,也是云里雾里的,但就是坚持”硬看“。
艰难的看了两本Java的书籍,了解了一下Java大概的语法、知识点,准备动手写点代码,发现还是不能完整的写一段代码。所以我又去网上找来了马士兵的Java全套视频,翻来覆去的看视频,跟着视频学习敲示例代码。说实话,通过视频学习还是非常有进步的,起码简单的for循环、IO读写文件是掌握了的。但是,整体感觉还是云里雾里的,知识点是碎片化的,没有一个整体的系统的使用Java的机会。就在此时,一个实习的机会降临到了我的身上。
意外的实习机会
正在我痛苦难熬的时候,有一天我的导师找到了我,说她的一个朋友开了一个小公司,目前想招一个实习生,问我愿不愿意去。我当然愿意啊,现在我就缺一个实习的机会,只有参与到一个项目中,才能真真切切的使用一下Java,才能将我从这痛苦中解救出来。第二天我就去了这家公司,我导师确实没骗我,这家公司真的是一家小公司,全公司只有不到10个人,老板跟我面对面结对编程。
进入到公司以后,公司的一个老人带着我一步一步的从基础的项目开始,记得当时第一个项目用的是Struts+Hibernate,这两个框架我之前也没仔细看过。幸好,这个项目是已经搭建起来的,很多功能都有了。所以我就照猫画虎,看别人的action是怎么写的,别人的crud是怎么写的,然后我再写我的一部分功能。遇到不懂的地方,上网查原理,查写法。
很快,通过参与项目,Struts和Hibernate两个框架我就基本掌握了,虽然很多原理没有搞明白,但是完全可以熟练应用。通过一个月的参与项目加上晚上回学校的学习,我就基本可以独立完成领导给我分配的小功能,当然开发中也碰到了很多问题,通过自己定位也能解决。如果实在解决不了,那就问同事。
最后
我的经历告诉我,千万不要一直埋头看视频、敲代码,不要认为只有彻底掌握了整个Java技术体系,才能出去找工作。这是一种完全错误的认识,真正的技术需要参与到项目中才能学到。而只有参与到项目中,才能更好的理解一些技术点和实现原理,更多迷惑和不懂只有参与到项目中才能解开。一个小小的项目带给你的收获远比你一年埋头学习所获要大的多。所以,如果此时正在学习Java的你感觉痛苦难熬,那就停下,去找找可以接受你的公司,那怕是一家低薪水的小公司,不要在意,去就是了。一个月以后,你就会有破茧成蝶。
我就分享我学java的经验吧,我刚学习的时候也是跟你一样,也是边看视频,边写代码,以为只要按部就班的学习就可以了,其实不是。
如果你边看视频边敲代码,你如果你为这样就能熟练的掌握java,那么你想法错了,不能死板的去学,去敲代码,要想为什么?要向外扩展,说多了也没用,下面我就举个实际的例子,我就拿学习ArrayList为例来说明。
我先介绍一下,我是怎样学ArrayList的?
1、ArrayList的增删改查的api操作,这个要熟练掌握
2、ArrayList底层怎么实现的?有什么特点?
底层用数组实现,可以添加重复的元素,可以按照添加的元素进行取出。
3、怎样排序?jdk8可以直接调用sort方法,也可以使用Collections工具类进行排序。
4、ArrayList怎样去除重复的元素呢?
可以在定义一个list,然后循环比较,还可以直接使用set去重。
5、ArrayList是线程安全的吗?为什么不是线程安全的?怎样保证线程安全?
ArrayList不是线程安全的。
主要表现在底层容量存储数组是共享变量,多个线程并发添加会出现重复覆盖问题。
可以使用Collections来创建同步的list
也可以使用COW来代替
6、为什么循环的时候不能添加元素或者删除元素。
因为底层有一个计数器,循环的时候不能增加或者删除,如果有类似业务,可以使用线程安全的类。
7、为什么调用sublist方法返回的list不能强制转换ArrayList呢?
因为返回的是一个视图,不是list的子类,所以可以看源码就明白了。
8、最后,你可以看看底层源码是怎样实现的,然后自己模仿写一个。
也许你会想,如果我按照你的方法学,那么一个类会学好几天,我觉得花了好几天是值得的,通过这样的方法学习,以后你会越来越顺,不会像现在云里雾里的。
以上就是我的学习经验,如果对你有帮助,可以关注我,后续会继续分享干货!
用心学
Java现在在线学习起来还是很容易的,因为各大视频网站,技术类网站有大量的教程。你可以很轻松的找到你想要学习的知识。但是也有缺点,就是太杂乱,经常东一块,西一坨。
因此,你作为一个初学者。还是应该买本书,这是最重要的。书本一般都是从基础到进阶,不会有太大的跳跃性。
另外,书本可以让你快速笔记,在以后你某个知识点模糊的时候你可以快速找到当初学习的时候理解。再看一次你就可以加深印象,而不是去网络上查,因为每个人的学习习惯不一样。
多动手
在Java这一行,特别是你这样的初期新人。你要反复的练习你所学习的内容,而且要经常重温。
比如用一个sout输出helloworld语句,你会不会手写出来?main方法的那些参数有什么作用前期不要管,你就让你自己练出习惯性记忆就好。
好记性不如烂笔头,这句话用在学习上一点错都没有。
多总结
总结就是你与别人拉开差距的最大原因。
比如,今天学习了流程控制语句,给你留了一个题。让你用for循环做。你是不是只用了for循环呢?你应该考虑如下两点。
还有其他的流程语句能解决吗?while,迭代器,流,拉姆达表达式能解决吗?
还能解决其他类似的题吗?自己给自己出题,自己做。
相信你只要经常这样总结,你的基础就扎实了。
坚持
其实,学习最大的敌人是自己。学习就像长跑,只要坚持,总能到达。而好的学习方式是让你快速到达终点。
总结
擅长奔跑的马,从来不会在意自己的起点。
今年31岁,2月份疫情期间开始学JAVA的,学到现在差不多三个多月了,现在正在做一个微信小程序商城的项目了,后端就用学的springmvc+myba**,数据库用MySQL,前端不写,直接用自学Android写后台管理系统,现在已经写到添加商品这个功能模块了,我觉得学习最重要的是兴趣,我学编程不是为了上班,单纯的想做个东西出来,所以动力十足,我的基础一般般,但是我会复制粘贴,百度拿来我知道怎么改,Android的控件我都是直接百度来用的,小程序还没开始学,到时候等我写出接口再研究小程序,编程个人觉得做这些应用类的,入门没啥难度,如果深入底层我就不会了[捂脸]
有的人逻辑清晰,条理分明,在系统学习下有着很快的进步。
而有的人需要引导,例如兴趣或者目的性的指引才能更快找到学习的道路。
例如游戏,那就先用程序作出个确定按钮跳转到确定成功或者其他菜单页面(单独文字和图片匹配显示),取消跳转到上一级或者关闭程序。网络上找些比如加减乘除的简单计算器照着抄一个下来,然后试着给每一个按钮添加颜色或者图案。这些都是游戏必不可少的菜单界面要试着进入状态,急于求成任何事情都没有的。
如果只是想着赚钱,那么程序是钱,技术是钱,但是没有一个求学和新知识充电的状态那么,任何代码都不适合你,学了一种代码你会发现其他代码也要去融合不用像主代码技能一样精通也要去理解,因为要么能加快程序编写,要么就是需要运用到相关接口。
每个人接受新鲜事物的速度不一样.
还有可能是别人有其他语言基础.
另外你是从网上找的视频吗?这个和老师的关系也很大,有的老师讲的就是不行.你可以在找找其他的视频看看.
还有,要写笔记.多背多记,对于一些很抽象的概念确实挺难理解的,可以把理解不了的硬背下来或者记下来,先往后学着,随着学习的深入你就会理解了,如果还不理解,就去百度研究一下.
我觉得学习就是多学多练多思考,哪有那么多天才,比你优秀的大多都是比你努力的.
一定要把关键字背熟,一定要多敲代码,光看是不行的,祝你成功[耶]
带着目的性去学。av96244032
一定要形成自己的思考模式,光听别人说是没用的。用我下面这个方法,假以时日,你一定能走出迷雾,豁然开朗。
先从小项目入手,自己设计数据结构,自己设计对象,属性,方法。
多练练就好了。
比如自己做一个电商小软件。
一、先思考下,抽象出几个对象:
1.商品product,
属性:id,name,stock,price,description。
2.用户user
属性:id,username,account,email,phonenumber。
3.订单order
属性id,product_id,count,total_amount,user_id。
然后就可以设计数据库啦。
画一个e-r图,生成个sql。
二、然后就思考有哪些方法:
1.buy(stringproductid,stringuserid,intcount);
用户购买商品的方法,该方法返回订单号;
2.pay(stringorderid)
支付
...........
然后用你熟悉的语言实现即可。
不要小看这个过程,这个就是写代码的核心。一旦你领悟了面向对象,领域模型设计,其他就都是语法,语法糖,常识,框架了。
我上学的时候就是强迫自己按照这个模式锻炼自己。画了很多图,写了很多代码,那个时候自己没有电脑,就把代码写纸上,然后上机时敲进去,跟享受这个过程,这样容易上瘾。
希望对你有用。
每个人基础可能不一样,也可能别人很多努力和付出你并没有看到,不要攀比,按照自己的进度去学习,多多思考,不要觉得敲完就完成任务了,保持对知识的好奇心,多想想代码为什么要这么写,掌握原理,掌握原理,掌握原理,重要的事说三遍,才能真正的掌握技能。去gitee找个感兴趣开源项目,阅读代码,看看这套源码还缺什么需求,想想怎么实现,尝试修改代码,这样才能有成就感,越学越想学,从而快乐的学会编程。c语言之父丹尼斯里皮说:真正有趣的,不是编程本身,而是你能让编程去完成你想要做的事情。
学的时候切忌心浮气躁。特别是学java的时候,看视频是不够的。
一、基础的知识,打印成提纲,如果是初学者建议手抄代码。例如线程相关的,抄几遍自然就会了。
二、有一定基础后,建议多上gihub,java好的开源项目很多,下载下来看看。没必要每行都看,知道整个运行流程即可。
三、多积累,多收藏,正常工作后大部分代码都是复制粘贴的,前提是你有粘贴的资料。没有就会工作效率很低。
当然了,学技术以后可能还会创业,但基础是学好技术,例如百度的李彦宏,腾讯的马化腾,微信的张小龙,头条的张一鸣技术都很牛逼的。
努力学习,天天向上。