从啥也不会到可以胜任最基本的JavaWeb工作,推荐给新人的学习路线(二)
在上一节中,主要阐述了JavaScript方面的学习路线。先列举一下我朋友的经历,他去过培训机构,说是4个月后月薪过万,虽然他现在还未达到这个指标。
培训机构一般的套路是这样:先教JavaSE,什么都讲一讲,可是都讲不透,基础差一点的只有越听越糊涂,被面向对象的概念,接口,抽象类,搞得头都大了。一天到晚盯着几个干巴巴的案例看。
JavaSE大概持续讲两个月,最后会让你做一个控制台的小屁项目,可能是ATM管理系统,也可能是图书管理啥的。
然后,开始讲html、css,这两样东西一般就是1到2天,讲了等于没有讲,让他做一个小网站的前端页面根本不可能,他只会用div画几个五颜六色的框框。定位也不会,总是凭着老师课堂上讲的那几个例子,写写 position:absolute。然后郁闷得一塌糊涂,这个div怎么就移不过去呢,怎么就是不动呢??为什么老师的代码可以,我写的代码就不行??去问老师,老师说,我们是Java培训,这个是附带的,没关系,你们到时候也不会写这种代码,你们是写Java的。(呵呵了)
不管那么多了,接下来几天马上学习JavaScript,第一天,着重讲了讲var是什么,js的几种基础数据类型。然后讲function,alert怎么用。大概3到5天的样子吧,JavaScript就讲完了。
最后一天用来讲jQuery,发现好神奇啊,可是$是啥,为什么会这样,就不知道了。只会写写 $("#id")这样的代码。可是不管怎么样,jQuery已经讲完了。懂不懂是你的事。
我朋友直到毕业,都不知道json是啥,ajax是啥?就最后两个礼拜讲了SSH,带了一下。
JavaScript讲完后,立刻开始数据库,数据库一般还是教的Oracle。第一天,啥也不做,Oracle太大了,也不教你怎么安装,反正就告诉你老师的主机已经安装好了,那个培训机构的电脑可承受不起oracle。数据库教了1个礼拜,什么都涉及一点,包括触发器,但是没有存储过程。反正学完以后,我朋友只会 select * from student了。left join,right join 没看懂,只记得老师花了半天时间解释啥叫笛卡尔积,什么是三大范式?好像很厉害,然后... ...不懂。
接下来就是tomcat,JSP,这段时间对他来说就是噩梦了,反正最后差点弃坑。最后半个月,终于,万众瞩目,SSH闪亮登场。OK,培训结束,去月薪过万吧。
因为关系比较好,我和他经常保持联系,后来一段时间,他去了外包。因为太辛苦,后来又辞职了。
说了这么多,我在此提出质疑,个人认为,这种学习路线绝对有大问题。对于一个没有什么编程基础的人,这种学习路线肯定会害了他。我个人推崇的路线应该是这样:
第一步:不学任何后台语言,从Html + css开始。
这个阶段,你可以花费一到两周的时间,看各种视频外加各种操练。最起码,你得有一些绘制网页的能力吧。虽然如同easyui的框架非常流行,可是你起码也要有点这方面的基础吧。用户的需求千变万化,你不可能永远依赖easyui的。你不要跟我说什么bootstrap,如果你连div + css都不懂,bootstrap你真的能用得溜吗?在我现在看来,bootstrap只是一种工具罢了,一些前辈把很多经常用到的代码封装起来,方便自己和他人使用,仅此而已。你不要觉得有多么难,毫无疑问,这种工程,我想最开始的时候肯定是一个人做的,后来随着名气越来越大,可能会有一个团队来维护。但是,最早最早的时候,肯定来源于一个人的想法和思考。
第二步:深入学习JavaScript。
JavaScript轻巧,灵活,只需要一个浏览器,就能立即看到效果,没有环境搭建方面的疑虑。另外,JavaScript兼具面向对象语言的各种特点,再加上现在前端这么火,你学习JavaScript吃不了亏。当然,我说的学习,不是泛泛而学,而是有目的地去深入学习。仔细体会其中的乐趣和奥妙,最起码,你得达到能够自己封装一个弹窗组件的程度。
我学习JavaScript后,再学JavaSE,真的就是一个水到渠成的过程,每学到一个地方,脑海中立马就闪现 “这不就是JavaScript中的XXX吗?”的念头。最好的学习方法就是类比。记得牢,而且可以融会贯通。就好像玄幻小说里面描写的那样,当你对某一个技能或者法则达到了很高深的境界,那么对于其他任何流派就都能融会贯通了。
第三步:突袭JavaSE
为什么说突袭JavaSE?因为我现在明白过来,对于JavaWeb开发而言,没必要对JavaSE做太多的深入。如果你的JS功底足够,那么JavaSE对你来说就太简单了,因为JS比Java难入门得多。以下的学习清单是我整理所得:
理解什么是类?
你不要去管什么面向对象还是不面向对象了,我认为面向对象这种概念很难用语言描述清楚,更多的是当你代码写多了,产生的一种直观的觉悟。你是去查资料也好,看视频也罢,先理解什么是类。然后自己尝试着写几个类。你不要去写什么Person类,Animal类了,有什么意思呢?随便打开一个网页,比如百度贴吧,你有百度账号的话,你就想想,一个百度账号会有哪些属性?用户名,密码,头像,是否可用,等等。用这些信息来写Java类。
一个Java类,无非就是属性和方法,大部分情况下,方法无非就是用来给属性赋值的。属性是干嘛用的,不就是用来存储数据的吗?你说对不对呢?Java有八种基本数据类型:分别为整型 int,短整型 short,长整型 long,字节型 byte,布尔型 boolean,字符型 char,单精度浮点数 float,双精度浮点数 double。
就比如说int,Java编译器规定int占四个字节,也就是4个byte,一个字节占8位,一个位就是一个bit。bit是计算机中最小的单位,它只有0和1两种状态。我们常说一个文件有多少兆,这个兆就是MB,1MB有1024KB,1KB有1024个字节。当你定义了一个int类型的变量,在运行的时候就会在Java虚拟机中申请一个4个字节的空间。1MB有1024KB,1KB有1024个字节。所以说1MB可以存放 (1024 * 1024 / 4) = 262144 个int变量。Java虚拟机的默认内存是64MB,所以最多应该能存放16777216个int类型的变量。当你定义一个int类型的变量,那么运行的时候,虚拟机的剩余内存就会被减掉4个字节。所以,属性是干嘛用的,我们在写Java类的时候,为什么要定义属性。我觉得没有别的含义了,定义属性就是为了存储数据的嘛。
我们写一个
private int a;
Java虚拟机(JVM)跑起来,一旦我们new了这个对象。这个a变量就会被放到JVM的内存中,然后JVM就会专门开辟一个空间,来装载这个数据。然后,我们才可以在计算机中操作这些个数据。你总不可能说,我有一个数字100,就要计算机对这个数字进行加减乘除的运算吧。计算机怎么知道这个事情呢?你是不是必须要告诉计算机有一个数字100,它才会知道?
为了装载这些数据,所以才有了八种基本数据类型,每一个数据类型就好比一个篮子,有的篮子大一点,比如long类型,可以放好长好长的数字。有的篮子小一点,比如byte类型,只能放一点点大的数字。Java类,我的理解就是一个模板,因为我学过JS,所以我会类比。但是这些类比,仅限于我个人,在此就不多说了。
Java类,,我更愿意把它称为一个 数据模板。它只是一个模板而已,不是一个实实在在的对象,这一点首先要确定。就好像工厂生产一个产品,首先是不是要有一个模板和设计图纸,这个模板决定了你这个产品是一种怎样的形状,以及可能会具备哪些功能?图纸则决定了功能的具体实现。比如生成一部手机,模板开出来就是一个扁平的长方体的样子,可是光有模板还不行,你还得规定它的一些具体细节。这些细节就好比是Java类的构造方法,以及其他的一些方法实现。
但是,你光给客户模板和图纸行吗?一般来说是不行的。
至于静态方法,我们知道,我们调用静态方法的时候,不需要先生成一个实例,可以通过类名直接调用。这就相当于,在弄模版的时候,这些功能就已经定制在里面了。你买手机的时候,里面不是经常有一些内置的应用吗?有些删都删不掉,这不就相当于静态方法吗?
(我只是举一个例子啊,你不要非得较真说我可以ROOT一下啊)
如果模板里面已经有了一些做好的功能,今后任何根据这个模具生成出来的产品也自带了这些功能。如果模板里面已经做好了一些功能,那么我的确可以使用这个模板,而不需要真正拿到一个产品。比如生产一部手机,它的模板里面已经做好了一个手电筒的功能,那么,你即便不给我一个真正的产品,仅仅给我一个模板,我是不是也可以用它的手电筒功能呢?
这就是静态方法。所以我们常说,静态方法和静态属性为所有实例共用,不就是这个道理吗?
所以,正常情况下,我们调用一个类的非静态方法,是不是必须要先new一个对象?
2.基础知识
这部分包括:包的知识,java中数据类型的分类(值类型,引用类型),继承以及继承的特点等。快速过一遍就行了,不要去深究,就算你深究了其实也没啥用。以后代码写多了,自然就会烂熟于心。
3.数组和其他一些常用类
数组的话,会用即可,不要深究。其他常用类,比如Date类,最好都去学一下,但是同样不要深究。
4.集合
集合框架,只需要掌握两个,一个是ArrayList,一个是HashMap,知道怎么用就行了。其他集合都可以不去管它,你不要老是觉得,我学这些会不会不够啊?等你以后成为了老司机,还不是学什么会什么?现在功利一些也无妨。有余力的,去研究源码,没有余力的话,不研究也没事。
对于ArrayList,我写过两篇文章,还差一篇才完结,以后补上。
5.泛型
能看懂 List< Map< String,Object > > 是啥意思即可,其他都不要管。你又不去写框架,就算真有这种雄心壮志,也是若干年后的事情了,现在你的当务之急还是找一份工作。
6.设计模式
不要管,最多去学一下单例和工厂。其他的暂时不需要考虑,刚工作那会,就是做一些增删改查,先找到工作,稳定下来再去提升。
7.IO流
其实这部分真无所谓,还不如直接学文件上传。即便是文件上传,一般公司都有现成的类给你调用,也不需要你自己去写。所以,IO流,不学都没关系。
8.Awt,Swing
有多远,扔多远,不要问我为什么。有精力学这个不如去学SWT,虽然99%你学了还是用不到。Swing有啥用,我能想到的只有去网上接一些课程设计啥的私活了。
9.反射
不需要,你又不去写框架,暂时不必关心。
10.新特性
不需要,不是你初学者该考虑的。等你以后工作稳定了再说吧。
11.JDBC
这个,你仅仅需要知道如果导入驱动包,在项目里面成功拿到链接就行了。其他都不用管,最原始的JDBC1.0规范,不学也没事。还不如重点去学一下Mybatis。关键在于,你要学会配置文件怎么配。至于SQL,顺带着学一下就行了。
再说一遍,直接去学MyBatis之类的现成框架,不要再JDBC上浪费太多时间。
我相关的文章:
http://www.jianshu.com/p/8944864f5161
JavaSE,我认为初学的话,能做到这样就可以了。毕业标准就是自己能够做一个完整地增删改查出来。你会测试就行,比如用JUnit测试,不要去写那种什么控制台项目了,有什么意思呢?直接写DAO层,然后体会一下其中的流程即可。
学完JavaSE,就是JSP、Servlet,这一块要相当用心地去学。它是基础,我个人认为比框架更重要。这些内容会在下一篇中讲到。
从啥也不会到可以胜任最基本的JavaWeb工作,推荐给新人的学习路线(二)的更多相关文章
- 马里奥AI实现方式探索 ——神经网络+增强学习
[TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...
- [OC] NSURLSession
有的程序员老了,还没听过NSURLSession 有的程序员还嫩,没用过NSURLConnection 有的程序员很单纯,他只知道AFN. NSURLConnection在iOS9被宣布弃用,NSUR ...
- 网络第三节——NSURLSession
有的程序员老了,还没听过NSURLSession有的程序员还嫩,没用过NSURLConnection有的程序员很单纯,他只知道AFN. NSURLConnection在iOS9被宣布弃用,NSURLS ...
- vim for windows 简介
普通人的编辑利器--VIM (for windows) 本文转载自 FROM Vincent_czz2005年5月,我开始用VIM.此后渐入佳境,原来因版权自律而放弃盗版UltraEdit的遗憾一扫而 ...
- 转《UNIX编程艺术》读书心得
花了一段时间看完了<UNIX编程艺术>,但不是看得特别仔细,尤其是后面作者通过对工具的讲解来阐述其设计思想,因为很多工具能未曾接触过,难免就会产生一些乏味的感觉.其实就像译者姜宏在译序里说 ...
- 【转】java架构师之路:JAVA程序员必看的15本书的电子版下载地址
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...
- IT行业常见职位职业路线图
我曾经面试过一些计算机相关毕业的应届生,问他希望做什么工作时,他回答只要是软件开发就好了,再细问一下你了解到的软件开发是怎样的?除了软件开发,还有其它什么工作?就答不出来了. 这里我先给出一张IT知识 ...
- 使用NSURLSession
NSURLConnection在iOS9被宣布弃用,NSURLSession从13年发展到现在,终于迎来了它独步江湖的时代.NSURLSession是苹果在iOS7后为HTTP数据传输提供的一系列接口 ...
- 【Todo】【转载】深度学习&神经网络 科普及八卦 学习笔记 & GPU & SIMD
上一篇文章提到了数据挖掘.机器学习.深度学习的区别:http://www.cnblogs.com/charlesblc/p/6159355.html 深度学习具体的内容可以看这里: 参考了这篇文章:h ...
随机推荐
- 《Django By Example》第五章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag注:大家好,我是新来的翻译, ...
- 在 ML2 中配置 OVS flat network - 每天5分钟玩转 OpenStack(133)
前面讨论了 OVS local network,今天开始学习 flat network. flat network 是不带 tag 的网络,宿主机的物理网卡通过网桥与 flat network 连接, ...
- 高大上的微服务可以很简单,使用node写微服务
安装 npm install m-service --save 使用 编写服务处理函数 // dir1/file1.js // 使用传入的console参数输出可以自动在日志里带上request id ...
- IE8/9 本地预览上传图片
本地预览的意思是,在选择图片之后先不上传到服务器,而是由一个<img>标签来预览本地的图片,非 IE8/9 浏览器可以从<input type="file"/&g ...
- js学习之变量、作用域和内存问题
js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...
- interpreter(解释器模式)
一.引子 其实没有什么好的例子引入解释器模式,因为它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中:在实际应用中,我们可能很少碰到去构造一个语言的文法的情况. 虽然你几乎用 ...
- 初识的Spring Mvc-----原理
一.Spring Mvc简介 Spring Mvc(Spring Web Mvc) 属于表现层的框架. 二.Spring结构图 Spring Mvc是Spring框架里面web模块的一部分,是在Spr ...
- Android 调用百度地图API
一.到 百度地图开发平台下载SDK http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download 1.点击自定义下载 2.下 ...
- Atitit.你这些项目不都是模板吗?不是原创 集成和整合的方式大总结
Atitit.你这些项目不都是模板吗?不是原创 集成和整合的方式大总结 1.1. 乔布斯的名言:创新即整合(Creativity is just connecting things).1 1.2. ...
- SQL Server的AlwaysOn错误19456和41158
SQL Server的AlwaysOn错误19456和41158 最近在公司搞异地数据库容灾,使用AlwaysOn的异地节点进行数据同步,在搭建的过程中遇到了一些问题 软件版本 SQL Server2 ...