阅读前的说明:
1.虽然问题是“一年内如何全职学习”,实际如果时间安排合理,六个月左右就足够了,有些基础好自学能力强的朋友(例如科班或其他相关专业、职业转过来的),甚至在四个月左右就开始找工作了。
2.本文不吹不黑纯干货,尽管答于多年前,但一直断断续续在更新,所以并不过时。
3.本文长期遭受各种水军攻击,实在懒得理会,我就一句话,觉得有帮助你就拿去参考,没帮助就再探索其他路线吧,别拿来主义还抨击别人。
4.某些行内 “资深” 人士可能觉得我这个回答都是"如何成为码农"的路线,是不是蹭我的热度我不在意,我关心的是:如何先让非科班新手入行,而不是高谈阔论那些让新手望而生畏的计算机专业课(例如数据结构与算法等等),你们没有站在非科班新手的角度考虑问题,是无法体会那种难度的,人总要先解决眼前的问题,再去补充自己所欠缺的。
下面展开全文:
和楼主有些相似,大三的时候,我萌生了放弃本专业的念头,断断续续学 Java Web 累计一年半左右,总算是学完了,找工作对你来说或许还有些距离,而我已经有了自己喜欢的工作,从一个自学达人的角度,以下是我认为比较实际且行之有效的建议:
- 如果你打算入门 .Net, 建议转学 JavaWeb 或 Android, 我对学习何种平台并无偏见,而是自学需要大量的参考资料,Java 的学习资料,无论是视频还是电子书都要远多于 .Net,这是个很实际的问题,你可以去 百度/Google
一下(当年电驴活着的时候,获取学习资料很容易,现在只能怀念一下了),对比便见分晓。 - 当年下载视频教程只能忍受10KB 的龟速,现在多幸福,国内 Java 培训机构越来越多,官网也都放出了各种公开课(虽然公开课也是广告的一种形式,但能让你拿来自学就要心存感激,别指望公开课能提供最值钱的项目实战教程,利益相关,放出的也未必是完整的),提供的都是百度网盘,下载不再是问题了,希望看到这个帖子的朋友都知道该去哪里找教程,别去电驴那种 ed2k 网站了,电驴已成往事,资料参差不齐,不完整。
- 自学所需的视频教程一定要成体系,而且每部分必须完整,否则,你可能学到某个阶段发现剩下的视频还没有发布(培训机构都爱这么玩儿),也可能某个阶段只学了一半发现没有后续视频了,在选择视频教程前,你需要 .Net 或 JavaWeb 完整的学习流程图(培训机构官网都会提供学习路线图,大同小异),根据每阶段寻找对应的视频教程就可以了。
- 如果你的英文足够好,在看视频教程的时候一定要搭配英文电子书(文字版的,方便搜索),为什么这么做? 在我看过的多达 50G 的视频教程里,讲课的老师就算技术再好,也有讲的模糊的地方,甚至讲错的地方,甚至是忽悠你的地方!(讲课时间所限,这些老师也迫不得已)这时候,你需要的可能不只是 Google 和 StackOverflow, 你需要与此配套的英文电子书, 首推 Manning 和 O’Reilly 出版的书。
要不要选择培训班?
- 培训班基本上四个月速成,省心,不用操心软件、文档、路线、课程等等
- 有老师带着做项目,最后还能推荐工作(培训班卖点,实际都有水分的)
非科班是不是只能选择培训班了?
- 当然不是,实际工作中,据我观察,有很多通过自学找到工作的
- 培训班的卖点对你未必是个好事
- 你可能会很依赖老师,无法形成行业所看重的独立解决问题的能力,我就见过很多培训班学生连 eclipse 去哪里下载都不知道的,太依赖老师了
- 你可能很在意培训班推荐的工作,可是如果推荐的工作薪资很低你去不去?
补充:JavaWeb 学习路线
很多人私信我要学习路线,我贴个 Java Web 学习路线,仅供参考,但绝对够找工作的了, 如下,都是可以免费找到的教程(请一定验证是否完整),拼凑起来差不多刚够学习 Java Web 了,只是衔接起来会有些不连贯,毕竟不是一个机构讲的,不过问题不大
1.Java SE - 语言基础:Java基础,既然是基础,那肯定是最重要的,所以学习的时候也是需要重点学习的地方。
2.数据库:为什么要学数据库呢,因为我们的web数据需要持久化到磁盘上统一管理,而数据库无疑就是最好工具。目前主流的关系型数据库有mysql 和oracle。我建议先学mysql。为什么呢mysql相比Oracle难度要低,而在国内应用场景又是最多的。
学会了mysql可以开发出一个完整的产品了,再学oracle都可以的。
3.前端基础:既然是做一个网站,那肯定不能是后台的数据,这样用户也是没办法看的,所以需要学习前端知识,把数据展示到页面上,而对于后台人员来说,学习阶段只需要学习前端基础就可以了。Html 、js、css、jquery就可以了。当然到离开后期你也可以学学专门为后端人员定制的前端框架,比如,layui,easyui。如果还觉得不够可以学学前端专用框架。比如vue element ,但是大前提是把自己的后台学到位了再学其他的。
4.Javaweb:jsp、servlet。为什么用了html还要学jsp呢。因为jsp和Java是无缝连接的。学了javaweb以后就可以自己做一个项目出来了,比如你想做一个个人网站。你可以给你们学校做一个教务管理系统都是可以的。
5.Spring:后台框架。为什么要用框架呢,可以快速开发,并且降低了耦合。Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用,Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。
6.Mybatis:持久层框架,当然持久层还有一个框架应用也很广的,那就是hibernate,一个是半自动的一个是全自动,而在国内应用最多的是mybatis,在国外用得最多的是hibernate,具体原因,大家可以百度查查。持久层框架有什么好处呢?如果你用原始的jdbc做开发,那你得自己来管理每一个连接,连接的打开和关闭,都是有开发人员来操作的,而且jdbc也没有实体的映射,需要我们写代码把值set进去,而用了框架这些都交给框架去做了。
7.Maven:mavne是一个工具,他的核心是pom.xml,这个配置文件,pom的全英文是project object model,意思是对象管理模型,也就是把项目也看成一个对象来操作了。给我们带来最直观的好处就是依赖问题,以前我们需要自己下载jar包,在构建到项目中,但是有了maven只需要写jar的依赖就可以自动给我们下载了。
8.Springboot:springboot是基于maven的,springboot最明显的特点就是开箱即用,也就是构建了一个springboot项目 直接就可以做开发了,而不需要像我们自己配一个springmvc的框架一样的需要去配置大量的xml文件。让我们开发人员更着重于业务上的开发。
9.Redis:前面的mysql,oracle是关系型数据库,什么是关系型呢,就是一对一 一对多 多对多。有表与表之间有这些关系在,所以就叫关系型数据库,而redis就是非关系型数据库,也就是他存储数据之间是没有这些关系,他是以键值对 list set方式存储的。
10.Springcloud:微服务框架,什么是微服务呢,就是把我们传统的单体服务拆分开了,就是将一个单体架构的应用按业务划分为一个个的独立运行的程序即服务,微服务架构其实就是一个分布式架构,具体的就不详细的讲了,因为这里面牵涉到的解决方案是灵活的
11.Linux:linux的应用通常都是在底层,那我们上层开发人员为什么也要学它呢,其实我们的主要应用是在服务器上,也就是服务器的系统。当然系统也有Windows的,而Windows的和Linux的区别就是Windows服务器有问题是微软来解决,很方便:别人替你做,但也不方便:你遇到问题都得让他官方来解决漏洞,但是Linux就不一样,他是完全开源的,有问题自己马上就可以解决,只要开发人员能力够硬去改内核都是可以的。
12.Git:版本管理工具,与之对应的还有svn,最大的区别在于git是分布式系统,而svn不是分布式的,因为你们进企业以后都是协同开发 也就是一个项目小组里面几个小伙伴一起开发一个项目,所以就要有一个代码的管理工具来保证你们做的不同模块可以整合,所以说git也是需要学的。
顺带贴个某培训机构的学习路线图,侵删(请私信),非广告,喷子闭嘴。
补充-2:偶尔我会看到入门的人问如下几个问题,如果你问了,该好好反省。问题:谁有 CSDN 账号啊,帮忙下个资料?点评:CSDN 上能有什么好东西呢,竟然有人问我找 Spring 的帮助文档,说是只有 CSDN 上有中文版本,我都无语了,你既然选择了 Java 就不要逃避英文,任何时候都要首选英文文档,而且,CSDN 上的东西翻译质量乱七八糟,本来国外免费提供的东西它却要积分下载,不必理会,直接去官网即可。
问题:这个问题怎么回事啊,求大神帮助。。最好远程。。
点评:大神没空搭理你,没人愿意免费为你解答一个连描述都让人看不懂的问题,甚至帮你远程,再有,大神这个词会让老手觉得很别扭,让人感觉你很怂,不适合做软件。
问题:百度找不到答案,谁能给个 Demo 啊
点评:做技术用 Google, 不解释,另外,别以为有 Demo 你就能快速学会什么东西,那只能让你快速黏贴过来应付差事,留下的是乱七八糟的体系和原理不清楚,所以,请自己有个度。
补充-3:关于笔记
写程序的如果不会记笔记,就真的效率很低了,别告诉我你是用 Word 记笔记的,现在一般都使用 Markdown 记笔记(Sublime + MarkdownExtended),不知道的自己去 Google, 具体效果如下图:
我目前是在职Java开发,如果你现在也在学习Java,在入门学习Java的过程当中缺乏基础入门的视频教程,可以申请加入我的Java学习交流群:3907814。里面有2020年最新Java基础精讲视频教程,群文件里面还有我做Java技术这段时间整理的一些学习手册,面试题,开发工具,PDF文档书籍教程,需要的话都可以自行来获取下载。
这么写笔记:
预览如下:
补充-4:自学 V.S 报班
自学者的疑虑:
如果是上班族一天三、四个小时的学习时间要多久才能达到可以就业的水平?
就你看来,自学和报班这两种方式的优势与劣势各是什么?
上班族自学时间必然很长,从时间、机会成本考虑,值不值?
我的看法:
我当初自学,在学校和家里分别学了一段时间,如果连续起来的话,差不多六个月学完了,每天大概五小时左右敲码看视频。这期间,有一部分时间浪费在了寻找教程上,因为我学习那时,网上的教程没有能够连续看下来的,想买都没有,都需要自己一个一个找,每个阶段的老师也不一样,内容也杂,所以花的时间多了些。从我的体会来看,如果辞职在家学习,心里会觉得很漫长,我很推荐边工作边学习。至少你不用担心自己的生计,如果每天三个小时,大概得七个月。
你得知道,培训班都是从早到晚给你灌输,抓紧在四个月内给你快速讲完让你走人,所以留给学生的时间不多,没有多少自己思考的时间,这恰巧是自学最大的优势,因为自己思考出来的和别人告诉你的绝对不一样,这也是日后区分你和培训班学生的一点。培训班的学生依赖性太强,掌握新事物的能力太差,速度也慢,就是因为在培训班里他们学不会自己找资料,自己找答案,自己摸索新技术的能力。自学的话, 现在和以前不一样了,你可以弄套视频教程连贯地看下来,跟下来,培训班里讲什么,你也学什么,他们不学的,你也有时间去学,他们没有时间琢磨的,你有时间,因为,自学的时间是你自己安排的。另外,自学最大的缺点不是技术的难度,而是你自己对自己的怀疑,因为有些问题时长要一两天才能想明白,那会动摇你的信心,这也是我为什么推荐边工作边学习的原因。至少你每天不只是敲代码,还有别的事情做。
报培训班,要想学好,好的培训班,你得花费两万左右(食宿还不包括),而且你还得辞掉现有的工作,在异地也同样孤独,这半年你花的钱你确定你能再一年内挣得出来?我告诉你,除去自己的食宿,刚入行的,一年留不下什么钱,这样的话,自学为什么不是一种好的出路?就因为没人陪?就因为没人教?可是,现在不都有了吗,有教程,有学习群,有网络,有你的信心,还缺什么?
新手初学是否可以直接使用 IDE?
新手初学不建议直接使用 IDE,很多培训机构和正规院校直接让学生使用 IDE 入门,这是懒省事的做法,学生确实用的非常舒服,而且遇到的问题相对少一些,老师自然推荐。
但是初学阶段直接使用 IDE 会隐藏很多新手本该掌握的细节问题,举个例子:
1.初学 java 的时候,经常会遇到乱码问题,如果新手使用的是简单的notepad++ 之类的代码编辑器,可以查看文件编码,然后为 javac 指定对应的 –encoding 参数即可解决,但是如果使用 IDE 的话,编码问题 IDE 为你处理的很好的,很少会出现乱码的问题;
2.再者,新手初学,往往是从语法开始,使用 notepad++ 这类没有检查机制的代码编辑器,新手更容易出错,借此机会可以深化对语法的理解并对应解决,但是如果使用 IDE 的话,因为自带了纠错和检查机制,新手往往会形成依赖,自己解决问题和推测原因的能力就比较差。新手一开始往往贪图省事儿方便直接使用 Eclipse IDEA 这种高级工具,无法驾驭不说,还平添好多烦恼,导致本该从语言基础入门的,偏离到和工具做斗争。
上述只是说了冰山一角,无论如何,新手最好不要直接使用 IDE,这样才能把细节学扎实。