V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TerranceChen
V2EX  ›  程序员

java程序猿很迷茫

  •  
  •   TerranceChen · 2013-05-30 13:51:08 +08:00 · 5146 次点击
    这是一个创建于 4186 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司做的东西比较老,也比较单一简单。就是spring + struts 1,一个电信的项目。

    加上项目人员单一,深感无趣。想学习,什么effective java,thinking in java , 计算机系统概论 买了也再看,但是就是为了学习而看书,结果项目中也用不到,学习的一点也忘记了。

    就这样想学习,读点书,用不到 ,忘记了, 很空虚, 想学习,读点书,用不到, 忘记了。这样的循环中。

    何解啊。
    43 条回复    1970-01-01 08:00:00 +08:00
    zpxhjs
        1
    zpxhjs  
       2013-05-30 13:56:16 +08:00
    其实可以考虑自己做一点东西玩玩,做你自己最感兴趣的东西
    undeflife
        2
    undeflife  
       2013-05-30 14:01:26 +08:00   ❤️ 1
    思考spring和struts里有什么是让你用起来舒服的 有哪些不爽的 看看spring 和struts源码 尝试自己造轮子.
    emohacker
        3
    emohacker  
       2013-05-30 16:15:25 +08:00   ❤️ 1
    @zpxhjs
    @undeflife
    有人说 java 已沦为民工语言,大家肿么看?

    我觉得是市场决定的,很多大系统都那java开发,很多轮子已经相对成熟,所以很多外包公司就廉价招聘java程序员,你只要动读文档,懂拼装一下就OK了。

    lz,我是建议想清楚自己的方向,如果定位在未来是想自己创业或加入具有活力的创业团队,就学些编写更高效的语言,比如弱类型的,java太过严谨。
    一个对象你不仅要关注,他是干什么的,还要关注他是哪里来的。
    而弱类型的你就关注他能干嘛就好。
    个人愚见
    undeflife
        4
    undeflife  
       2013-05-30 16:55:33 +08:00
    @emohacker 这是什么逻辑?java的库很丰富,用起来简单,所以java是民工语言?提高水平需要的是锻炼思维,所以我才建议楼主去尝试造轮子,而不是简单粗暴的换一门语言,假如楼主用spring、struts没搞懂http请求是怎么回事,换成rails就能搞懂了?换一个动态类型的语言可以提高你的生产力,但是并不能提高你的编程思维,就算楼主现在去学ruby学python,学完了基础语法之后能干嘛呢?还是要去写代码,找点自己感兴趣能坚持的东西去做 ,这样才能提高.
    ivanlw
        5
    ivanlw  
       2013-05-30 16:59:32 +08:00 via iPhone
    个人认为Java 精髓在于Lucene和Hadoop…J2EE除非在超大型的企业应用(参见Amazon,改版后淘宝,改版后Twitter),不然没有优势…
    Golevka
        6
    Golevka  
       2013-05-30 17:11:31 +08:00   ❤️ 1
    @emohacker 前面的资历尚浅所以吐槽不能, 不过后面针对弱类型的讨论果然V5...
    emohacker
        7
    emohacker  
       2013-05-30 17:13:15 +08:00
    @undeflife 非常赞同,编程的本质是相通的,编程语言的差异也只是语言特性的差异,一通百通,思维很重要。
    我对编程能力提高的过程,感触最深的还是去重构自己写过的代码,那个过程收获最大,重构完往往有脱胎换骨的赶脚。
    emohacker
        8
    emohacker  
       2013-05-30 17:17:54 +08:00
    @Golevka 亲有何见解?
    undeflife
        9
    undeflife  
       2013-05-30 17:31:10 +08:00   ❤️ 1
    @emohacker 关于静态类型 强类型 弱类型这几个概念上,我觉得你可能有混淆
    参考 http://en.wikipedia.org/wiki/Strong_and_weak_typing
    viator42
        10
    viator42  
       2013-05-30 17:37:28 +08:00
    @ivanlw JavaEE真有些过时了,学了Python才发现Java做web有多但疼.
    hanf
        11
    hanf  
       2013-05-31 08:44:41 +08:00
    java不是民工语言,而是很多代码民工用java语言
    hooluupog
        12
    hooluupog  
       2013-05-31 09:22:11 +08:00
    java是民工语言?找个民工去淘宝,京东试试?让民工搞搞设计模式和架构之类的东西看看。java最大的优点恰好就是让水平层次各不相同的人都能在一起工作,所以这么普及。
    davepkxxx
        13
    davepkxxx  
       2013-05-31 09:37:54 +08:00
    互联网行业,JavaEE使用的较少,一般都直接使用Lucene、Hadoop之类。不过一些安全性要求较高的项目,比如电子邮箱、在线支付这种还是经常使用JavaEE的。

    但是一旦到了金融、MIS、ERP、OA、电子政务这种系统就是Java大展拳脚的时候,说白了JavaEE的长处在企业级项目。
    raptor
        14
    raptor  
       2013-05-31 10:03:37 +08:00
    去做Android开发吧……哈哈
    yorkw
        15
    yorkw  
       2013-05-31 10:08:10 +08:00
    相比其他弱类型语言,Java在个人开发领域(WEB方向)确实没有太大优势。离开了企业级架构的Java程序员,想自己做点事情确实比较难。

    对于Java程序员, 移动领域是一个不错的切入点,Android的成功从某种程度上说焕发了Java的第二春。使个人开发者把自己的想法变成现实推送到数以亿计的用户面前上变得前所未有的容易。

    LZ如果厌倦了企业级应用, 可以在移动行业试试水,先做点自己喜欢的东西,技术成熟后可以试着学习其他平台iOS。移动领域前途光明,大有可为。
    cbc009
        16
    cbc009  
       2013-05-31 10:09:00 +08:00
    应该不是所有java程序员都迷茫。。。。
    lch21
        17
    lch21  
       2013-05-31 10:09:47 +08:00
    跳槽吧,少年
    halfbloodrock
        18
    halfbloodrock  
       2013-05-31 10:12:04 +08:00
    介个lz是想切实提高自身水平。。。不想再读了忘,忘了读,没有实战。。。这个楼歪成了“论Java优势劣势“ 了 :D
    soli
        19
    soli  
       2013-05-31 10:18:04 +08:00
    今年年初 Java 比 C++ 都火吧?
    darkyoung
        20
    darkyoung  
       2013-05-31 10:26:12 +08:00
    做Android +1
    seeker
        21
    seeker  
       2013-05-31 10:37:13 +08:00   ❤️ 1
    童鞋们,说一句话的时候请确保你们知道自己再说什么,比如,“弱类型”。

    楼主,我觉得你可以自己做点什么东东出来,我也是,上学的时候有各种习题,现在不习惯了。自己最好找点东西做做,一来练手学以致用,二来吹牛用。

    关于java,java很庞大,单单说java咋样咋样我觉得没什么实际意义。建议大家讨论的时候具体到某个具体的问题,或者某方面具体的问题。

    如果不是关于java,而是关于职业生涯,俺经验也浅,不足参考。推荐coolshell上面的一些文章:
    <程序员技术练级攻略> http://coolshell.cn/articles/4990.html
    <给程序员新手的一些建议> http://coolshell.cn/articles/4976.html
    code4craft
        22
    code4craft  
       2013-05-31 19:42:23 +08:00
    自己找个感兴趣的做吧,总会有些提高的,最近半年我自己做了一个项目,收获挺多的。
    jonyare
        23
    jonyare  
       2013-06-01 16:58:48 +08:00
    @emohacker 重构代码,确实受益良多。另外楼主迷茫绝对不是因为java啊。跟语言有毛关系啊!
    emohacker
        24
    emohacker  
       2013-06-02 01:41:11 +08:00
    @jonyare 我木有吐槽java的意思。
    只是感慨下外包公司压榨开发者血汗的行为,以及这种行为下导致的环境。
    牛叉的人当然不会受环境影响,但是很多初学的同学会在这种缺乏晋升渠道,重复单调的工作环境中迷失。
    emohacker
        25
    emohacker  
       2013-06-02 02:03:08 +08:00
    @undeflife
    @seeker
    感谢提醒。
    关于“弱类型”,我确实不是非常明白这个词专业的意义。由于平时听别人的表述,就记下了,也未去求证。
    我想表达的意思是,在不需要做强制类型转换的情况下做事情:
    比如 js :
    var a=1,
    b="2";
    var c = a+b;
    如果我想表述一种 “无需声明变量类型的语言” 和 “需要严格声明变量类型的语言” 用什么词汇去界定,虚心求教,愿闻其详。
    davepkxxx
        26
    davepkxxx  
       2013-06-02 02:10:07 +08:00   ❤️ 1
    弱类型语言Javascript:
    var i = 1;
    i = ""; // 顺利通过编译。

    Java:
    int i = 1;
    i = ""; // 无法通过编译。

    比较特殊的可能就是Scala:
    var i = 0; // 和 var i : Int = 0; 是一个意思,可以省略声明。
    i = ""; // 无法通过编译。
    Ricepig
        27
    Ricepig  
       2013-06-02 02:13:24 +08:00
    @emohacker 无论是强类型还是弱类型,表面上都可以达到你说的效果。强类型弱类型的区别主要在于一个变量声明了以后,是否可以改变其类型。
    例如,在C#(强类型语言)中,下列语句是合法的:
    var a=1;
    var b= "2";
    var c=a+b;
    仅仅是因为C#提供了var这个语法糖,它会根据后面的初始值来判断这个变量是什么类型。而C#的string类型又重载了加法运算符,所以c=a+b是合法的。但是以下语句是不正确的:
    var a=1;
    a = "2";
    而在弱类型的语言中(php,js等),类似上面语句应该是合法的
    Ricepig
        28
    Ricepig  
       2013-06-02 02:14:46 +08:00   ❤️ 1
    @davepkxxx scala的var也是类似语法糖,根据初始值判断类型的强类型语言,哈哈
    emohacker
        29
    emohacker  
       2013-06-02 02:19:28 +08:00
    @davepkxxx
    @Ricepig
    理解了。灰常感谢
    Golevka
        30
    Golevka  
       2013-06-02 02:25:08 +08:00
    @Ricepig 你也混淆了静态类型/动态类型和强类型/弱类型的概念. 如果我告诉你python是强类型的语言你大概就囧了吧.
    emohacker
        31
    emohacker  
       2013-06-02 02:36:17 +08:00
    @Golevka
    google 到这个
    http://mljavalife.iteye.com/blog/1296014
    这个定义应该是正确的吧
    Ricepig
        32
    Ricepig  
       2013-06-02 02:36:22 +08:00
    @Golevka 其实python我一点也不囧。让我囧的是C#,var和dynamic的出现,让我森森怀疑C#到底是不是静态强类型语言。。。
    Ricepig
        33
    Ricepig  
       2013-06-02 02:40:41 +08:00
    @Golevka 而且我举的例子,实际上是强弱类型的差别,而不是动态静态的差别吧。因为即使是动态类型(且强类型),运行期确定了其类型后,变量类型就无法再改变了。而弱类型的话就没有这个困扰,这也是我说
    var a=1;
    a = "2";
    可以在弱类型语言里通过,而无法在强类型语言里通过。无论动态语言还是静态语言,上面两句应该都是无法通过的,只要它们是强类型。
    davepkxxx
        34
    davepkxxx  
       2013-06-02 02:43:34 +08:00
    我发现我的举例不太对,那个更像用来解释动态类型和静态类型的区别,重新换个例子吧。

    JavaScript 里,1 == "1" 的结果为 true;而在 Java 里 1 == "1" 无法通过编译。

    也就是说强类型不会进行不同类型之间的转换,而弱类型语言会帮你做这些事情。当然这并不是绝对,Java 也会进行一些自动类型转换,比如 1 == 1L 的结果是 true 。
    Ricepig
        35
    Ricepig  
       2013-06-02 02:53:35 +08:00
    @davepkxxx 重载了==操作符以后就都可以了,哈哈哈
    davepkxxx
        36
    davepkxxx  
       2013-06-02 02:55:21 +08:00
    @Ricepig Java 不能重载操作符……
    Ricepig
        37
    Ricepig  
       2013-06-02 02:55:42 +08:00
    @davepkxxx 擦,C++思维了
    Golevka
        38
    Golevka  
       2013-06-02 03:08:34 +08:00
    @Ricepig 你已经凌乱了好伐. 至于var类似物其实只不过是做了最最基础的type inference而已. 所以乃最好先去脑补一下Standard ML类似物再去考虑type annotation对于静态类型语言的必要性=w=
    Ricepig
        39
    Ricepig  
       2013-06-02 06:11:31 +08:00
    @Golevka 乃就告诉我

    var a=1;
    a = "2";

    这个语句在哪种语言里会出错,在哪种里不会就好了嘛
    Ricepig
        40
    Ricepig  
       2013-06-02 06:12:46 +08:00
    @Golevka 另外,var是最基础的type inference,但是var加上dynamic就是不是了好吗?请自行脑补一下c# 4.0中关于dynamic的部分好吗?
    Ricepig
        41
    Ricepig  
       2013-06-02 06:21:07 +08:00
    @Golevka 再另外,在C#中有还有一段很有意思的程序:
    var a = 1;
    a = "2"; // 编译时错误

    dynamic b =1;
    var c = b; // 无错误
    b = "A"; // 无错误
    c = b; // 无错误

    你理解了为什么加上dynamic和var以后,C#越来越不像静态强类型语言了?
    Golevka
        42
    Golevka  
       2013-06-02 07:03:56 +08:00
    @Ricepig C#的dynamic成分也是强类型的. 顺便严重怀疑M$的dynamic是不是为了方便C#和别的语言相互乱搞
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3608 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:02 · PVG 13:02 · LAX 21:02 · JFK 00:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.