科班学习java遇到瓶颈,每天云里雾里怎么办?
声明:这个问题困扰了我好久,今天在知乎找到了答案。知乎链接https://www.zhihu.com/question/24240982,感谢大神@Tony He的回答。
链接:https://www.zhihu.com/question/24240982/answer/27138388
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
去书店找跟Java相关的书,你能找到一堆!都把他们买回来通读一遍吗,显然不现实。即使你真的那样做了,你也发现你还是什么都干不了,而且过程无比痛苦和迷茫。
---------------------------------------------------------------------------------------------------------------------
有效的学习方法是怎样的呢?
伟大的林副统帅(致敬)曾经说过—— 学习毛主席著作要带著问题学,活学活用,学用结合,急用先学,立杆见影,在“用”字上狠下功夫。
林副统帅英明!几十年前就给我们指出了学习IT技术的真谛。
有一个教育界流传已久的谬论——“如果要让学生喝下一杯水,老师首先要有一桶水”,其实不对,老师不一定需要有一桶水,甚至连一杯水都不需要,老师要做的是——把学生整的很饥渴,然后告诉他们哪里有水,他们会迅速奔向有水的地方把自己灌饱。
明白我要说什么了吗? 首先你得要有应用的需求,基于这个需求你会去找答案,找到一个答案、解决一个问题,你的学习就会变得非常有效,而且你学到的知识就是最实用的知识。
你之所以摸不着头脑,就是因为你根本没有产生学习某项技术的需求。
举几个栗子
很多很多年以前,我初二,想在屏幕上显示一个下拉菜单(用的是QBasic),为了多次执行一组操作,我不停地复制粘贴一段代码,旁边一个小学六年级的“大师”看了一眼说:“你为什么不用函数?”, “什么是函数?" 那个下午我学会了function这个伟大的东西,尼玛太爽了,再也不也复制粘贴了。我这辈子都记得这个玩意——函数是预定义的功能块,通过参数传入信息,通过返回值传回结果,在程序中使用函数实现代码复用,可以减少代码数量,提升代码可维护性...试想一下,如果一开始就读这段文字,你能知道函数是干啥用的吗?
另一个例子,很多学校的数据库课程是单设的,学生对于数据库是干嘛用的很难产生感性认识。比较理想的教学方式是他们有了一定的编程经验以后,在某个程序中产生了需要存储、查询数据的需求时再将数据库引入进来:从用户界面得到数据了,要插入数据库,就开始学"insert into...", 要删除数据,就开始学"delete from ...", 发现查询速度太慢了,咱建个索引,怕数据不符合要求,咱建个约束,要从多个表中提取数据,我们再开始学join....
小结:学习知识要先给自己一个应用目标,在应用中产生了问题,再根据问题去找答案,当答案积累多了以后,你的知识将慢慢形成体系,这种学习方法,称为归纳法。
找答案的过程无疑是痛苦的,有人会说这种方式学的太慢,学的不扎实,有些面没有覆盖到。没关系,你有问题自己解决不了可以问老师,老师会让你少走弯路。
这样学习的好处在于:
- 你可以通过观察问题是否解决了来检验你是否真正掌握了某项知识;
- 这样的学习过程锻炼了你根据问题找解决方法的能力,是程序员最重要的能力之一。
- 你学习到的知识,是最实用、最常用、最急用的知识。
---------------------------------------------------------------------------------------------------------------------
在补充Java学习路线问题之前先声明,参与最后一个Java项目距今已经8年了,此后一直沉迷在C#的温柔乡里,因此如果有对Java叙述不准确的地方,或者有偏见,请大神们随意批评、指教。
Java这货,以跨平台为核心卖点(有人说这是个笑话),基本上可以认定迄今为止,Java是除了C和C++之外运行环境最丰富的语言之一,这一点上C#还确实是差点。
Java的生态圈比较完整,从客户端(桌面和移动端),到服务器,到中间件,都可以用Java开发。
1. 客户端方面
在客户端,Java可以用来开发桌面应用和移动应用(比如安卓), 早年非安卓的智能机也可以运行Java程序。
2. 服务器应用
服务端是Java的长项,Java可以运行在Windows, Unix
like服务器上,这一点C#望尘莫及,虽说C#也可以在Linux环境下运行,但毕竟还没有形成主流。C#的程序还是在Windows下运行最放心。
Java的学习路径
第一个阶段,作为初学者,通常刚开始接触Java都是学习"J2SE",
主要包括的内容包括:
1. Java开发环境的设置
2. Java程序的编译和运行方法
3. Java的基本概念(类、数据类型、变量、常量、表达式、函数、循环、分支、常用的类库......)
4. 编写控制台程序或者GUI程序(比如swing... )
基本上,在这个阶段的学习都不会太有困难,因为涉及到的问题都被局限在Java中,界面也很简单,不难学。
但是从Java EE(又称J2EE)开始,长得一点都不像的各路妖怪几乎同时出现,JSP/Servlet, Javabeans, EJB, RMI,
WebService,数据库,JDBC,甚至HTML/CSS, 问题是,你根本不知道他们有啥关系,好忧伤啊!
所以,我一点都不建议你一开始就一头扎进这些具体的技术里,会被淹死的。
学JavaEE, 也可以从实际出发,先给自己设定一个项目目标,基于这个项目目标去达成自己的学习目标。
以你目前的状况,我建议你试着用从一个留言板做起,从用户注册、发表留言、留言显示开始,你至少可以了解:
1. HTML与CSS如何实现界面
2. 如何用JavaScript实现客户端交互,比如检查用户输入的信息是否有效(其实这货跟Java一毛钱关系都没有)
3. 如何用JSP处理客户端请求
4. 如何设计数据库以存储留言板信息
5. 如何在JSP中访问数据库
6. 如何查询数据库,并形成HTML页面发送到客户端。
上面阶段完成后,还可以试着克隆一个新浪微博,将重点放在客户端交互上,如何使页面更美观、界面更友好(用户体验)、后台处理更快,这时你将不得不去深入学习JavaScript, Jquery这些,后台编码的能力也会得到进一步的提高。
等你都能克隆一个新浪微博出来了,有一定的技术和经验积累,再去深入学习一些更深入的东西,比如EJB, WebService等等......
如果还有多余的时间,给你的微博做个安卓客户端,技术面就宽广了。
你要是把这些都做了还找不到工作,天理何在啊。
先就到这里吧,不清楚的在评论里继续提问,也欢迎各路大神前来拍砖。
PS:转来知乎的这篇回答,是为了解决自己的困惑,也希望看到这篇文章的人可以明确自己的学习方向。
科班学习java遇到瓶颈,每天云里雾里怎么办?的更多相关文章
- 如何自学编程,零基础适合学习Java或者Web前端吗,非科班的能学java吗?
很多人都会选择自学Java或者前端,相信有在校的大学生,有正在上班想转行的,也有已经在自学的.下面通过几个问题我来给大家分析学习编程的难易程度. 编程是什么? 通俗的理解,编程就是编写程序,哪什么是程 ...
- 疯狂学习java web5(SSI框架)
其实前面的所有只是铺垫,目的只是为了了解现有工程是怎样的.之前直接上来就看,看了很久依然是云里雾里,所以不得已学习点基础知识,前面的基础只是蜻蜓点水一带而过,希望能起部分作用了. 发现struct2有 ...
- 如何高效的学习Java开发
IT 行业的变化快是众人皆知的,需要持续去学习新的知识内容.但是,往往我们工作之后,经常发现学习的东西很少了,学习效率非常低,感觉自己到了一个瓶颈期,久而久之,就演变成『一年工作经验,重复去用十年』的 ...
- 怎么解决深入学习PHP的瓶颈
PHP给学习者的感觉是:初学的时候很容易,但是学了2-3年,就深刻感觉遇到了瓶颈,很难深入,放弃又可惜.所谓"鸡肋,食之无味弃之可惜"的感觉很是贴切. 经常会有这种感觉:不学,看似 ...
- 怎么解决深入学习PHP的瓶颈?
PHP给学习者的感觉是:初学的时候很容易,但是学了2-3年,就深刻感觉遇到了瓶颈,很难深入,放弃又可惜.所谓“鸡肋,食之无味弃之可惜”的感觉很是贴切. 经常会有这种感觉:不学,看似也不后退:学了,好像 ...
- 一个具体的例子学习Java volatile关键字
相信大多数Java程序员都学习过volatile这个关键字的用法.百度百科上对volatile的定义: volatile是一个类型修饰符(type specifier),被设计用来修饰被不同线程访问和 ...
- 【转】解决深入学习PHP的瓶颈?
转自:https://www.cnblogs.com/aksir/p/6774115.html PHP给学习者的感觉是:初学的时候很容易,但是学了2-3年,就深刻感觉遇到了瓶颈,很难深入,放弃又可惜. ...
- 如何接触学习java
信息科技必将是未来的潮流,Java语言必将在时代的进步中发挥不可估量的作用,未来,掌握好一门实用而且有良好应用前景的技术是你们的首要任务. 零基础怎么学Java 多年Java教育培训经验事实表明,零基 ...
- 【转】学习JAVA的步骤
好东西大家分享: JAVA学习的一些重点 . Java语言基础 谈到Java语言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的 ...
随机推荐
- linux学习笔记6--命令mv
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. mv命令用来对文件或目录重新命名,或者将文 ...
- Unix系统编程()open,read,write和lseek的综合练习
需求:程序的第一个命令行参数为将要打开的文件名称,余下的参数则指定了文件上执行的输入输出操作.每个表示操作的参数都以一个字母开头,紧跟以相关值(中间无空格分隔). soffet:从文件开始检索到off ...
- Failed to resolve: com.android.support:appcompat-v7:26.0.0wenti
在安装Android Studio 3.0的时候出现了这个问题.查阅了许多资料都没有找到原因.到最后才发现,Android Studio默认https是不走代理的,只要勾选上https的代理就顺利的安 ...
- Centos + HHVM 生产环境安装!
一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...
- 【BZOJ】2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛(树形dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=2060 裸的树形dp d[x][1]表示访问x的数量,d[x][0]表示不访问x的数量 d[x][1] ...
- WPF中DataGrid控件内Button的Command和CommandParameter的绑定
场景:视频上传功能,上传列表使用DataGrid控件,视频有不同的状态对应不同的操作,DataGrid中最后一列为操作列,里面是Button控件.希望点击Button后执行对应的操作,但是设置Butt ...
- Duilib教程-自动布局3-分隔条
先看一个常用的图,如下: 左边是导航栏,右边是信息区. 中间可以自由拉伸. XML如下: <?xml version="1.0" encoding="utf-8&q ...
- Office Developer Tools for Visual Studio 2012现在可用了
[原文发表地址] Now Available: Office Developer Tools for Visual Studio 2012 正如我以前写过的,我们正在为构建下一代Office和 S ...
- ASP.NET MVC 数据库依赖缓存
ASP.NET MVC 数据库依赖缓存 问题背景 最近做一个非常简单的功能,就是使用ajax请求的方式从服务端请求一段下拉表的数据. 以前也有做过这个功能,只不过这次做这个功能的时候冒出了一个想法 ...
- EF 更新操作 lambda解释+=
我曾写过一个EF批量更新.删除的博客,后来操作的过程中经常遇到更新字段,但是要在原来的基础上计算的情况,我就先去获取一遍数据然后再计算,最后再去更新,显然这个操作是很复杂的 var guest = d ...