java程序猿很迷茫

2013-05-30 13:51:08 +08:00
 TerranceChen
公司做的东西比较老,也比较单一简单。就是spring + struts 1,一个电信的项目。

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

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

何解啊。
5193 次点击
所在节点    程序员
43 条回复
seeker
2013-05-31 10:37:13 +08:00
童鞋们,说一句话的时候请确保你们知道自己再说什么,比如,“弱类型”。

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

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

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

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

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

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

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

var a=1;
a = "2";

这个语句在哪种语言里会出错,在哪种里不会就好了嘛
Ricepig
2013-06-02 06:12:46 +08:00
@Golevka 另外,var是最基础的type inference,但是var加上dynamic就是不是了好吗?请自行脑补一下c# 4.0中关于dynamic的部分好吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/70645

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX