我最近在考虑写本技术书,顺便也在整理过去几年在知乎的技术问题,正好有知友私信问我这个问题,回过头来再看,不由得感慨万千。
过去两年,陆陆续续不少人来加微信,QQ群,然而我仍然是越来越悲观,越来越坚定了我2年前的观点(附在后面),可能只有培训班,才会真的培养起入门这个事情。原因很简单,过去2年,我所看到的自学的人,无一不是三分钟热度,而他们遇到问题的态度,又无一不是伸手党。就算是我有心带一把后辈,我绝对不可能把我自己的业余时间无休无止地扔在帮人配JDK PATH上面对不对?
比如很多人问,JAVA到底如何入门。那么这其中又有大约两个层次:
第一个层次,你根本是行外人,一天用电脑也就一两个小时,玩玩游戏,其他什么都不懂,你听别人说JAVA很火工资很高,想要入门。
这个入门,是入编程门,走的路径是JAVA。JAVA对于你来说,是进入编程世界的工具。那么你所需要掌握的,主要是编程的思路,是一种想法,而JAVA是帮助你实现想法这种抽象物品的一个具体实现。那么,你需要的是三种能力。
第一是知识搜索能力,即使用搜索引擎的能力。这个能力我突然发现,很多人是缺乏的。曾经有一位网友,向我询问入门的知识,我告诉他,你可以看视频。这本是很直白简单的情况。然后这位网友,向我抱怨,他无法查到,我看了他提供的截图,发现他输入JAVA入门在百度当中,出来的结果多数是介绍JAVA历史知识这些,他显得非常沮丧。这就是我所谓的基础知识搜索能力。编程的时候,你会遇到很多问题需要去查询,如何能获取正确的知识结论,这个技能非常重要。如果是我,我就不仅仅会输入JAVA入门,因为我要查询的是视频,我可能会输入JAVA入门空格视频,甚至,我还能更精确到JAVA入门空格视频空格hello world,这样显然你在第一个链接就能获得想要的视频,从而达到你的目的。此即为基础知识搜索能力,当然,高级的知识搜索能力,是需要练习的,这个日后再讲。基础能力的表达形式主要是:根据一两个词,你应该能在网络上获取正确的解读。比如你要学spring,你就需要能够找到足够的关于spring的知识,你会如何搜索?你会仅仅在百度输入spring?还是别的什么?任何你需要的问题,在半小时内能在全网搜索到,基本上,你的学习能力是非常强的,一小时以上仍然无法搜索到,你需要考虑是是否合适在程序员这个岗位上继续下去,这对于你和代码来说,都会是个痛苦且漫长额过程。
其次是理性看待术语的能力,这是普通人不具有的一种能力,需要特别训练。术语乃是创造来供专业人士快速沟通的,你可以把他看做是一种专业的“梗”。所以术语不要望文生义,术语需要确切理解其针对的意义,这在初学者或者行外人当中非常常见,并且致命。他们通常会反问道,为什么这个词不是那个意思呢?术语,就是定义,定义成什么样,就严格按照这个定义来,同时,也希望你不要试图用通俗语言再进行二次理解,你就确切的,完全的理解术语,这是你需要做到的。打个比方,之前有人问我基础的infra的事情,我就给予讲解了服务器和客户端的结构,他就问我,服务器是不是就像是家里的宽带猫,我说不是,于是他就问我,为什么不是?他们的区别是什么?这我就认为,这样是提高了学习成本。编程本来就是反人类的,不要试图用已知的知识去套用未知的知识,你需要强行背出来服务器是什么,而不是拿不相关的东西去想像。
第三抽象思维和结构化思考的能力,这是更高阶些的东西,连一些处入行的人,都不具备。人类的思考方式具有联想性,随着你思考的范围增加,你会从一处跳到另一处,这就是很多人常常说的,我看不懂这些代码。为什么看不懂?所有的代码,除去语法区别,都是非常简单的,尤其是现在OOP的阶段,所有的东西都是对象方法属性,不可能看不懂,为什么看不懂?因为你的思维跳跃了,你本来想看toString()的实现,进去一看,还跳转到其他类,再进去看这个类,跳了几次,你已经不知道你想看什么了,这是缺乏结构化思考问题的能力,你需要能够知道何时把问题当做黑盒来看,何时把问题当做白盒来看,这样,才能快速将问题切分,切分的越小,越容易学会。
解决了这些问题,你就入门了,是从一个非计算机人才转变成了一个计算机人才,用JAVA作为入门的工具,事实上,在这个阶段,用别的语言也是没本质区别的,之所以选JAVA,很可能是因为JAVA的用户更多,资料更多。在这之后,你基本上已经了解了计算机语言的大致区别,可能是对计算机有兴趣的高中生或者理科大一的人,想要把JAVA作为发展的方向之一。
你就可能转入下面一个阶段,也就是去专精JAVA,这是第二个入门,程序员的JAVA入门。对于JAVA专精为目标的入门,其实网上有很多很多内容,我是嗤之以鼻的,尤其是充斥着知乎的脑图,我最为厌恶。
我教各位一个简单的原则,分清一个“路线图”是不是正确的,你看四个点
1,有没有swing,AWT,这类GUI,有的,直接扔掉
2,有没有XML作为一个巨大的知识点,让你看各种SAX,DOM,XSD,XPATH的,有的,直接扔掉
3,有没有Struts的,有的直接扔掉
4,有没有叫你了解一堆容器的,从tomcat开始,各种容器,有的直接扔掉
为什么?显然是闭门造车的后果,多数是学生的臆测,或者是水平很低的培训老师的产物。
JAVA世界的一个特点就是知识点分散,任何给你建议要全面学习的,在我看来,全部是学生思维的臆测。原因很简单,不可能。当你不可能精通十八般兵器的时候,你要如何上阵杀敌?回答很简单,一力降十会。
JAVA世界虽然知识点分散,但是总是有一条主要的脉络,而现在误导你们的,主要在于主次不分地给予你们指导。说简单,很简单,8成的公司都需要会这些东西的人:
layout+spring+database 就这么简单,在这个组合上面,能有千变万化,但是,何妨你先掌握最基础的一种?少林绝学千千万万,是不是还是入门每个人都要从少林长拳开始入门?长拳打的好,是不是也能成为大侠?萧峰就能靠一套长拳退敌,那你作为新人,为什么要着急去看一阳指呢?
来,我们就来入门JAVA长拳。JSP+spring mvc+mysql
是不是很简单,不要去看其他的东西,在你没有熟练这些之前。
那么我在另外的专栏里面讲过,用打包安装,可以跳过你最烦恼的环境配置。简单的采用bitnami上提供的tomcat安装包,数据库也已经包括在里面,可以很容易的进行环境搭建,采取eclipse官网提供的J2EE开发者安装包,或者IDEA都能简单的获得IDE,这两步都可以在半天内完成。如果你无法独立依靠搜索完成这两步,我劝你重新衡量入行程序员。
你有了IDE,你有了环境,你就需要开始写代码。
写一个jsp,写一个spring controller,写一个数据库直接访问类,这些网上都有直接的例子,部署到tomcat里面,注意什么资源部署到什么位置,这些按照你的能力,基本上能在1到2周内完成,我认为30%的人能独立依靠网络资源完成,50%的人需要同辈的互相讨论(这个我有一肚子话想要吐槽,放在后面非技术部分),最后20%的人必须有一个完全成功的例子,照着做才能做好。
这就入门了呀,这有什么难的?那大堆大堆的其他东西,都是在这个之上的呀,前端框架?前端框架再复杂,能跳出JS转换成HTML显示,JS提交表单吗?XML,XML再复杂,能跳出element读写吗?Json,有什么难的?任何输入格式只要告诉你如何读取,都是输入而已。数据库有什么难的?先不说大部分公司都有自己的实用框架,由不得你写jdbc,SQL写的好不好,纯粹是经验,经验这种东西,你靠学习能获得?木工你不去锯木板,你看书能获得经验?这根本就不是你该“学习”的事情,IT技术当中有相当多的“经验”,你学习?是学习不到的。早日抛弃学生思维,你要知道什么是学习能学习得到的,什么是要获取经验才可以的。
其实扔完干货,我有些掏心窝子的话想要和大家说,就是学习群的事情。大家都是成年人,免费的东西是最贵的。在商言商,培训班是因为培训而盈利,因为成绩而能获得更大的名声的,他们有足够的时间,资源来带你入行,而用爱发电的前辈,无一不是陷入无穷无尽的伸手党漩涡,最后身心俱疲,放弃的。这是两年前我就表达的观点,两年后,再次来强调一下。
过去几年,我带着一个可以几个月没声音的JAVA群,自己做公司里面的内部培训,自己也参加AWS的培训,也为很多朋友在培训和带领新人上面出谋划策,发现了一点,经过多年的演变,目前的培训,已经基本上从过去线下式的课堂教育,以贷款形式预知数千到上万学费这种我们非常讨厌,榨取式的培训,演变进化到了线上培训。线上培训,我是赞同的。这是目前的主流,也是我会推荐你们入门的唯一方法。
为什么推荐培训班了?原因是什么?是性价比。因为现在线上培训,已经白菜价了,而不出钱的混JAVA群,除了表情包能收获的大多是吹逼能力。
过去讲,IT人最讨厌培训班,讨厌的是那种动辄几万,以包就业为幌子的线下培训班,这些教的不是知识,是欺骗用人单位的方法,这样子教出来的,不是IT人,是骗子。
现在线上培训,已经很成熟了,包括他们的讲师聘请,课程销售模式,都是非常成熟的商业化。商业化是好事情,专业的人做专业的事情可以做到非常细致。尤其是线上的内容,可以比线下培训班深入很多,最大的原因是师资力量的不同。我记得我在平安的朋友讲,他们甚至于有一次找拉勾教育把尤雨溪找来培训VUE。我去他们的网站确认了下,还是真事。
比如这种线上的培训内容,你可以看到,如果线下培训班要凑齐这种师资力量,是不可能的,这种技术栈,连小一点的公司都覆盖不全,别说线下培训班了,而线上的培训班就可以做到,因为他的培训老师可以是从各大大厂拉来的,专门应对某一个话题的。
你可能想要一分钱不出,在网上找大神教,或者自己找资料学来入门。那么过去,是可以的,因为去培训班,你要全职去学,你要付出几万学费几个月时间,和这种成本比起来,晚上找资料或者大神,是远远高效的。而现在不同的是,你吃顿肯德基就能看上十几个小时的名师讲解,你网上找错几篇文章,抽一包利群干几瓶酒,也差不多这些钱了。。。
而且现在线上教育的好处,有一个是其他培训无法比拟的,就是深入。我和线上线下培训班都合作过,两者的差别非常明显,线下培训班的师资力量受规模限制,不可能拥有无限知识储备,但是线上培训班就可以,他们的课程录了一门是一门,随着累积效应的增加,的确可以覆盖大部分情况。比如JAVA虚拟机这种东西,要深入了解,就必须有非常多的实战经验,就得是真的做过大项目群的人,这种人,生活中你本身能接触到的就不对,人家也不一定有时间给你细讲,更不可能去线下培训班上课,也只有线上能把这样的资源整合起来,录成视频教学。
所以很简单,JAVA怎么入门?
少吃一顿烧烤,去买一堂网课。
============2年前的回答==================
我之前挺热心带自学入门的。后来扯了几个学习群后,知道水深了。再之后,我一般都劝培训班了。原因有二:1,免费的东西,基本上不珍惜。2,9成的人没有自学能力,但是觉得自己有自学能力。
比如我在群里,用spring全家桶搭了一个框架。基本上包含了spring入门的所有东西,“小公司,小作坊,可以直接用这些技术开发内容了”看看dependency就知道包含哪些了。
群快两百人。这个project fork只有6个。只有个位数的人问过问题,想要了解这个内容。其他大量的每天都是在看,这个分号少打了,那个逗号写错了,都是毫无意义的自学项目。这你就知道现在所谓如何自学,这些问题的真正目的是:有什么捷径?区区20几个类的程序都不愿意学,到处都是“读spring源码” “实现JVM”。
怎么入门?花大价钱去念培训班吧。起码花了钱会因为心疼而跟着老师做。