z***s 发帖数: 3241 | 1 我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,不爱玩社交
网站,不爱玩微博,唯独喜欢百度贴吧,潜水很久了,手痒来给新人分享下从新手成长
为老鸟的已见,也刷刷存在感,应该不比曝照差吧。
首先初识语法的阶段,必须要学会怎么操作对象,操作if和for,操作list set map,
然后是线程、IO和jdbc什么的,其余的,若是一时不理解,可以后边需要时再学。
这阶段完了,你可以写些能在控制台打印出来的小程序,锻炼下逻辑思维。也就是号称
JAVASE毕业了,其实不过是入门而已,如果要往WEB方向发展,这些倒是基本足够了。
接下来要学HTML JSP SERVLET 数据库 JAVASCRIPT TOMCAT,目标,写出第一个动态网
站,也许只是个登陆功能,只能展示下个人资料,但这是很重要的一步,你要弄清楚的
是,一个用户的点击产生的请求,是从哪里发起,哪里接收,哪里处理,哪里返回,你
得理解浏览器和服务器的关系和分工,cookie和session,request和response。这个是
个WEB开发的学习初级阶段,这都是些JAVA诞生以来最原始的最官方的WEB开发技术,当
然现在真正的项目很少直接采用这些技术了,为了不断提高技术的易用性、开发效率和
可维护性、可扩展性,无数开源项目都是在这些原始技术的基础上封装、改进。所以这
个阶段不要盲目乐观地跑去找工作或者对实习挑三拣四,你会被打击到的。
好,初始阶段完成,开始进入WEB开发的正题,首先是传说中的三大框架,struts
hibernate spring成为熟练的增删改查程序员是必须的,在这个阶段你还要理解为什么
要用这仨而不是那些JSP SERVLET JDBC,你要体会到写MVC、三层架构的好处。这个阶
段不要轻易质疑三大框架的价值,也许刚开始你会觉得麻烦,觉得他们有时候是多此一
举,一两年后回过头来你会觉得少了这些框架你已经很难干活了。这个阶段还要避免的
心态是能熟练地增删改查了,就认为写程序不过如此,然后往简历上填个精通,这也是
新手面试被批得体无完肤的原因之一。如果你学得好,这会应该能熟练地写个博客啊,
小论坛啊之类的WEB项目了,也就是达到了就业的基本要求。
接下来就没有固定模式了,你的第一家企业对你的影响会很大,我见识过烂企业是如何
毁新人的,用着设计恶劣的架构,老掉牙的技术,不断地耽误新人的成长,有的员工在
这种企业一呆数年,思维已经完全被错误观点定型,深陷于公司业务和老系统中疲于奔
命,看似能解决问题,却无法给公司带来真正的进步,就像一个用了数年砍刀的人,就
算再熟练,刀法再好,也打不过用枪的。如果离开了这个公司,恐怕很难在这个行业再
立足。记得有个说法很好,一个人用10年的时间重复做头一两年做的事,你的真实工作
经验其实还是一两年。烂公司的老员工就是如此。在这头一年里,定个标准吧,你应该
能做到的有:
1、把一些常用的琐碎技术学会了,比如xml的作用和实际运用,如何操作文件,如何运
用日志,如何简化封装常用的工具类,比如日期操作、编码处理、分页模块等等,这些
小东西会占用你大量的时间去处理摸索。
2、把数据库用好。数据库不是会增删改查就可以了的,你要关注事务设置是否合理,
是否有可能产生脏数据,是否要动用乐观锁悲观锁等等,重要数据出了错,无论是技术
上还是业务上都是很麻烦的事。
3、懂得什么是集群,什么是分布式,懂得怎么向别的系统发请求,交换数据,
webservice。
4、如果你也写页面,你要会用JAVASCRIPT,不一定要很深入,你可以用JQUERY代替,
做到无刷新的页面操作以及AJAX请求。
第一年能达到这个程度,你绝对已经在平均水准之上了。在我达到这个水平时,我有种
似乎一切网站开发都不在话下的感觉,当然后来我很快就发现了我还差得太远太远....
这个阶段想面个高薪的工作还是很难的,只能说达到温饱线了,不用为柴米油盐发愁。
下一个阶段,你应该考虑你的代码质量了。
1、多线程和异步、并发的概念会忽然变得很重要,因为在一个对性能有要求的系统里
,是不会允许你把各种琐事都排着队一件件去办的,你不能老写些a方法调b方法再调c
方法再调d方法然后返回的代码。你开始想起有队列这种东西,有runable这种东西,你
开始觉得自己的代码高端起来了,和当年的增删改查程序员有天壤之别。但同时麻烦也
来了,你开始遇到线程安全问题,尤其是当你的程序跑在一个多机环境而不是单机环境
里的时候,你会对这些很头痛。对于这些问题,Jms技术是个很有代表性的东西,当然
并不像ssh那么常用。
2、你会发现数据库性能实在不行,出于不甘现状,或者赶时髦,你该去了解nosql了,
memcached redis mongodb,眼花缭乱,没关系,试着用用,能很好地缓解mysql之类关
系数据库的压力。
3、出于公司某些业务需要,你可能会钻研一个特定技术领域,比如全文搜索技术,
lucenesolr,比如工作流jbpm,比如权限系统,单点登陆之类的,又或者某些特定业务
领域的算法研究,这些是你的加分项。
4、你开始发现你的代码很乱,久了以后自己都看不懂,重复的,难以重用的代码堆积
如山,不想维护,BUG百出。于是你要开始重视设计模式,合理地改造下自己的代码习
惯,不再被僵化的SSH,MVC三层架构束缚住。
5、Google和各种资料是你进步的动力,极少再遇到必须请教别人才能解决的问题,如
果你这个阶段还老是问别人,你的技术生涯也就快到头了。
这个阶段,如果你的交际和自我推销能力不是太差,你的收入将是白领水平,至少接近
了。
我觉得多数程序员在工作多年之后都能达到这个水平,有的人只需要两年,有的人却要
用上五六年,在这个阶段落伍的人,有的是出于天赋和思维所限,有的是出于对技术缺
乏热情,有的是出于工作内容的制约。等到年近中年,再也拼不过年轻人,被淘汰出局
,只能在自嘲为屌丝和码农的无奈中黯然转行。
这是个很重要的分水龄,你能不能继续进步,能不能在30岁以后继续从事技术工作,能
不能在公司里独当一面,我觉得就看你能不能超越这个阶段了。我前面提到的烂公司里
的工作数年的项目经理,连这个层次都还没达到...
接下来又是个全新的阶段。
1、你要读读优秀开源项目的源码,你要搞懂一些当年不懂的基础知识,你开始理解
thinking in java的精髓,你能写一些底层的代码,有时还会觉得自己封装的比某些开
源工具更好用更简单。
2、WEB的难点和重点永远都在于性能、负载能力上,而现在网络的发达造成了数据量和
操作密度的大大上升,硬件却没有相应的进步,你得试着更好地运用更多的服务器来协
同工作,从WEB端到服务端到数据库,全都需要集群,需要分布式,需要合理的控制数
据的流向,掌握好网站上下,一大堆机器的平衡,找出性能的瓶颈,找出稳定性和安全
性的瓶颈,硬件出现故障,第三方技术出现错误,将被当成家常便饭融入到你的系统和
代码里仔细考虑。
3、开始觉得方案无比地重要,一将无能累死千军将不断应验,一个不好的设计,一个
不好的方案,会让一群优秀的程序员工作成果大打折扣。你要关注架构知识,不能再满
足于SSH三层架构到底。领域驱动设计,面向事件开发,敏捷开发等等一系列的思想在
关键时刻能决定你项目的生死,这个阶段不再有标准范例让你照抄,你只知道思想和原
理,实践却需要自己不断尝试和改进。
4、多关注各种杂七杂八的开源技术,有些你可能前面已经接触过了,和通信有关的,
和集成开发环境有关的,和架构有关的,各个领域你都应该能信口说上几个主流技术,
虽然你可能只是听说过,了解,但关键时刻你得知道如何去选择技术,并快速掌握它。
你还会去考虑尝试下别的语言,这里不是说转向什么C++ C#之类的,那和JAVA程序员不
相干,我说的是一些运行于JVM之上的语言,比如scala和groovy,初识他们时你会觉得
java真的老了。但当你回到一个综合性的大型项目中,又会觉得java积累下来的整个体
系技术是如此完善,就像一个工业化标准一样。
你能把这个阶段实践好,胜任项目经理,乃至中小公司的技术总监都是可以的。
不知不觉写了这么多了,以上是我个人眼里的一般向JAVA EE发展线路,限于篇辐也不
全面,实际个人成长路线可能因为工作内容的不同差异会很大,有的人偏向了底层研究
,有的人偏向了业务需求设计,有的带有浓重的行业色彩,而且技术之外,还有很多知
识也很重要.w做JAVA没有轻松的方向,但一个对技术抱有兴趣的人,走到这一步时,仍
然会对开发抱有热情,想要写出好的项目。纯为了生计而工作的程序猿是走不到这一步
的。
暂且收手,希望以上能让J8的新人们了解将来要面对的大致状况,同时也抱着打击下小
朋友们幼小心灵的邪恶心理就此按下发表按钮。
能完整看完的同学,在此表示钦佩,我想当年的我也未必能看完这种又臭又长的叙述..
. |
l****8 发帖数: 133 | |
s****s 发帖数: 628 | 3 个别点的理解明显落后.里面有不少破绽.
【在 l****8 的大作中提到】 : 很好!很强大! : 学习了!
|
z***s 发帖数: 3241 | 4 批讲一下什么落后 什么破绽吧
【在 s****s 的大作中提到】 : 个别点的理解明显落后.里面有不少破绽.
|
g*****g 发帖数: 34805 | 5 我觉得spring mvc在7,8年前就取代了struts的地位,其余的没看出什么大问题。
我觉得写得挺好的。当然2年要熟悉web开发外加多线程, nosql,我觉得太乐观了。5年
差不多。
【在 z***s 的大作中提到】 : 批讲一下什么落后 什么破绽吧
|
z***s 发帖数: 3241 | 6 这文章也不是很新的文章了。多年前可能是新系统用spring mvc的多,老系统struts多?
现在spring mvc能有多高占有率?只说java不说。net。有没有8,9成?
另外java ee的多线程跟java se的multi threading一样吗?会se的就够了吗?
【在 g*****g 的大作中提到】 : 我觉得spring mvc在7,8年前就取代了struts的地位,其余的没看出什么大问题。 : 我觉得写得挺好的。当然2年要熟悉web开发外加多线程, nosql,我觉得太乐观了。5年 : 差不多。
|
z****e 发帖数: 54598 | 7 spring mvc占有率在所有java里面可能连1成都不到
struts早被淘汰了,现在除了legacy code,没有人用
好吧,我上一份工作有nc在用xwork,搞得我很痛苦
因为code base太老太旧,连文档都不全
文章中说的只是很古老的ssh框架组合
现在有还是有,但是web service起来之后
有更多更新的框架在跑,比如jax-rs
spring自身也做了大幅度的扩充,有各种东西
比如spring data,java的外延很广
远远超过这里面列举这几样,想懂全部是不可能的
所以理论比实践其实更重要,要懂得举一反三
很多东西都是类似的,spring mvc和struts也没有过大区别
spring mvc就是对struts的糟糕设计感到愤怒后做的改良
然后再针对一些常见的框架予以练习
其实写多了之后你就发现,无非那么点东西
不都是接口api类库config这些东西么?
多?
【在 z***s 的大作中提到】 : 这文章也不是很新的文章了。多年前可能是新系统用spring mvc的多,老系统struts多? : 现在spring mvc能有多高占有率?只说java不说。net。有没有8,9成? : 另外java ee的多线程跟java se的multi threading一样吗?会se的就够了吗?
|
z****e 发帖数: 54598 | 8 学习的话
java语言基础在大学里面就要完成
毕业之后再对一些基本的语法犹豫的话,这都属于不太可以的
然后是熟悉web相关的frameworks
spring, hibernate, jdbc, jquery这些
语言可能还需要sql, javascript, xml
数据格式可能还需要json, xml
这样大概一两年之后,觉得差不多可以了,出师了
然后是提高
ant, jvm本身, j2ee里面也有一堆东西
不要求你都懂,但是要看懂猪怎么跑,知道大概怎么回事
出了问题知道怎么google,很多人你让他google他都搞不定
所以只能掏钱去买support
其实还有ui比如swing, javafx, applet, webstart这些
android也算吧,但是这几个作为兴趣了解了解就是了
这几个也就是android有点搞头,其他几个都不成功或未成熟
然后再此基础之上,你再搞一些groovy, scala这些
甚至jruby, jython, rhino engine
现在新一波的框架还在不停地冒出来
hadoop, vert.x, rxjava这些,都是新生事物
但是都是从旧的那些框架项目中脱胎而来
很多东西都是类似的
比如ant, gradle, maven这三个其实是类似的东西
java好就好在选择很多,百花齐放,所以你有的是东西可以搞
也所以你不以为这个世界上有什么东西你可以学得有尽头
你永远学不完,但是这也有好处,就像法国高考数学一样
出300题,从简单到很难的,你肯定做不完
但是从中可以选拔出分数最高的,java也一样
java世界从最简单到最难的都有,你肯定搞不完全部
但是你的水平就体现在你会多少东西上,这就是一个经验积累的过程
要不然随便一个毕业生就能搞掉你
你写那点hello world,哪个毕业生不会? |
z****e 发帖数: 54598 | 9 我学java,语法关一过
后面基本上就是看别人扯淡
然后不停接受新的概念和知识
不就是一个理解后记忆的过程么?
又不难
比中学数学简单多了
我花时间最多的可能就是ejb了
认真啃了下来,后来觉得很无聊
不就那点东西么,从那以后再也不把这些东西当回事
有趣的是,我越不当回事,我接受起来就越快
平常看点文章,一下子就记住了,没啥难的
因为一般我看一篇文章,就那么一两个概念要理解
看完不就理解了,但是如果你没有其他概念的理解作基础
那很痛苦,一篇看下来,五六个关键字不懂
那怎么受得了,英语也是一样
你看阅读,一片文章看下来,主题那一两个不懂
猜都能猜出来,但是五六个关键字不懂
你麻烦大了 |
z****e 发帖数: 54598 | 10 我给你来个列表,看你能懂多少概念
基本上都是轮子
java
jvm
awt
swt
applet
webstart
swing
javafx
rmi
ejb
sessionbean
entitybean
messagebean
jms
spring
struts
webflow
hibernate
ibatis
ant
gradle
maven
ivy
jboss
eclipse
android
jar
gc
g1
permgen
j2ee
serlvet
jsp
jca
web service
jax-rs
xml
json
annotation
singleton
design patterns
nio
security
dom
sax
hadoop
yarn
vert.x
rxjava
jdbc
jsf
validation
persistence
orm
transaction
javax.util.concurrent
websocket
jruby
jython
rhino
groovy
scala
clojure
polyglot
cassandra
hbase
weka
后面还有,太大路货就不问了
也不难,java老鸟这个列表里面所有内容都懂
哪怕没有吃过猪肉,也见过猪在跑
其实还有很多
你打开java8的pkg
看看包名,再看看j2ee的包名
最后看一下apache top level projects
这三个加起来差不多就是我们常用轮子的80%了
剩下20%一般都能找到开源对应的 |
|
|
z****e 发帖数: 54598 | |
g*****g 发帖数: 34805 | 12 在java里大约有3-4成,考虑到java上百web framework. 已经很高了。论史上所有部署
恐怕比struts还高。
多?
【在 z***s 的大作中提到】 : 这文章也不是很新的文章了。多年前可能是新系统用spring mvc的多,老系统struts多? : 现在spring mvc能有多高占有率?只说java不说。net。有没有8,9成? : 另外java ee的多线程跟java se的multi threading一样吗?会se的就够了吗?
|
z***s 发帖数: 3241 | 13 貌似这个列表,淘汰的和前沿的交织在一起?
【在 z****e 的大作中提到】 : 我给你来个列表,看你能懂多少概念 : 基本上都是轮子 : java : jvm : awt : swt : applet : webstart : swing : javafx
|
z***s 发帖数: 3241 | 14 mvc现在除了spring mvc, struts2之外还有什么流行的? jsf算mvc框架吗?
【在 g*****g 的大作中提到】 : 在java里大约有3-4成,考虑到java上百web framework. 已经很高了。论史上所有部署 : 恐怕比struts还高。 : : 多?
|
a****i 发帖数: 1182 | 15 当然是,JSF是仅次于Spring的框架,使用数量排第二
【在 z***s 的大作中提到】 : mvc现在除了spring mvc, struts2之外还有什么流行的? jsf算mvc框架吗?
|
z*******3 发帖数: 13709 | 16 老的东西不会马上淘汰,they just fade away
其实这些东西理论上都差不多,触类旁通,剩下的就是体力活
【在 z***s 的大作中提到】 : 貌似这个列表,淘汰的和前沿的交织在一起?
|
g*********r 发帖数: 9822 | 17 1、把一些常用的琐碎技术学会了,比如xml的作用和实际运用,如何操作文件,如何运
用日志,如何简化封装常用的工具类,比如日期操作、编码处理、分页模块等等,这些
小东西会占用你大量的时间去处理摸索。
2、把数据库用好。数据库不是会增删改查就可以了的,你要关注事务设置是否合理,
是否有可能产生脏数据,是否要动用乐观锁悲观锁等等,重要数据出了错,无论是技术
上还是业务上都是很麻烦的事。
3、懂得什么是集群,什么是分布式
有人能给翻译成英文吗? |
F****n 发帖数: 3271 | 18 最重要的一点:懂英文。LOL...
【在 g*********r 的大作中提到】 : 1、把一些常用的琐碎技术学会了,比如xml的作用和实际运用,如何操作文件,如何运 : 用日志,如何简化封装常用的工具类,比如日期操作、编码处理、分页模块等等,这些 : 小东西会占用你大量的时间去处理摸索。 : 2、把数据库用好。数据库不是会增删改查就可以了的,你要关注事务设置是否合理, : 是否有可能产生脏数据,是否要动用乐观锁悲观锁等等,重要数据出了错,无论是技术 : 上还是业务上都是很麻烦的事。 : 3、懂得什么是集群,什么是分布式 : 有人能给翻译成英文吗?
|
g*********r 发帖数: 9822 | 19 令狐兄能给翻一下吗?实在缺乏想象力唉
【在 F****n 的大作中提到】 : 最重要的一点:懂英文。LOL...
|
k*******n 发帖数: 190 | 20 主要是google,网上一般的问题解决方案都有.
我每天花六个小时google,然后copy, paste,一天下来也能写几十行的程序. |
k*******n 发帖数: 190 | 21 就是要会google,我每天花六小时的时间google,网上答案例子都有,一天下来写个几十
行程序是可以保证的.至于那些名字,都不需要记,google都会自动跳出来. |