学习JAVA一年,有一些疑惑

本人学习软件编程1年多了(Java语言 Web开发),面对这些高级语言,整天知其然不知其所以然的编程,自己总觉得不踏实,不踏实是因为由于高级语言对底层的抽象,让我不不知道一些东西的真正"面目",(比如说变量,它在底层是什么样的,计算机是怎么运算的等等),所以本人想开始学习底层的知识,我已经开始补习数学等需要的知识了,希望各位给我个学习底层的顺序或计划,如详细指点更不胜感激,我是初中毕业的,决心做真正的程序员,希望大家给点意见!

2010年09月04日 16:46 "QuZhengLin"的内容
我是初中毕业的,决心做真正的程序员 ...

如果你不想发明算法,获得图灵大奖,你就不用学习数学,如果你能够学习数学,你就不会初中毕业,可悲的不是人的知识多少,而是基本逻辑关系要搞清楚。这些基本逻辑如果想不明白,软件就很难入门。

延伸开来:人们常说知识就是力量,其实错误的,知识多了,一地鸡毛,没有逻辑,还是形成不了力量,最多是一个人体google。还有人说:人与人之间区别就是知识多少,这也是错误的,知识多了,沉迷于细节,忘记方向,方向是最讲究逻辑的,而且知识多了如果没有逻辑,无法识别谎言,容易被那些多的知识洗脑,脑子里就再也放不进去新或不同类型的知识,这就是愚了。

所以,不管知识多少,关键在于逻辑,知识是用来培养逻辑的,逻辑是方向,知识学习是途径,不要为学知识而学,关键是思考。而为思考,你就必须有空闲时间,而如果你把空闲时间都用来学习,哪来时间消化思考呢?这也是沉湎于细节了。

以前有句话:知识越多越反动,这里反动是老子的反者道之动,当然不是说你知识越多,越能看到老子的反动之道(也有这个意思,个别人能达到这种境界),更多是说,知识多了糊涂,容易看不清方向,和大道反过来行动,知识越多,这种可能性越大。

以上有感而发,不针对楼主,象楼主这样知识不多的人反而应该高兴,这样可以装进更多和你现在知识不同的新技术进来,反而容易轻装上阵。很多事业成功的人所谓传统文化水平也不高,但是他们能成功,只能说明他们是拥有真正文化水平的,而不是传统我们定义那些文化水平。此文化非彼文化。

所以,楼主你要真正成为程序员,不必再重新学习传统所谓知识,而是根据你情况,择相近的学习,数学和Java是不相近的,倒是属于传统知识,有的人通过数学能够锻炼逻辑,所以说学习数学好啊,但是对于你可能不一定,中国古人通过易经五行也能学习锻炼逻辑呢,所以,不同人接受不同知识,都可以锻炼逻辑,不是非走西方人老路。
[该贴被banq于2010-09-05 09:26修改过]

回banq老师,谢谢您的回复,您说的是有道理的,高级语言的抽象,让算法不怎么重要,思想可能更重要了,抽象出这种思想的本体是数,最最原始的本体是0,1,我想这和易经里的卦也是一个道理,用阴阳组成64卦,我通过学习数学也发现并无所谓数学思想,软件思想,都是相通的,只是看事物的方式不同……
我学习软件一年多了,面对那些整天写的对象,我就糊涂,到底它在内存里是什么样的,怎么储存,哪个效率最高,这个软件在XX系统上的运行效率如何?我对这些都有疑问,所以想从传统知识学起,虽然现在OO,拿来主义,站在巨人肩膀,可是我想弄清本来面目,并不是为钱学习,只是钻进来了,疑问太多,想解除疑虑,老师可否指点一下如何学习传统知识,操作系统,编译原理,数据结构,高数,如何顺序入手……
谢谢banq老师的回复,十分感谢

2010年09月05日 11:55 "QuZhengLin"的内容
虽然现在OO,拿来主义,站在巨人肩膀,可是我想弄清本来面目,并不是为钱学习,只是钻进来了,疑问太多,想解除疑虑,老师可否指点一下如何学习传统知识,操作系统,编译原理,数据结构,高数,如何顺序入手…… ...

你也说了,钻进来,疑问太多,那么你为什么要钻进来呢?这也是逻辑问题。

什么叫逻辑,就是如果这样,必然那样,推理过程,寻找矛盾,寻找顺畅的过程,你好像把逻辑理解成高谈阔论的思想,当然逻辑是思想的入门。

我前面帖子其实已经告诉你如何培养逻辑,就是用知识,用你能够接受的知识,这个别人是无法指导的,如果你自己都不知道自己能够容易接受怎样的知识,别人更无法得知,就象减肥,必须针对你自己的情况减肥,别人的减肥忠告可能没有任何用处。

所以,对于你想学习的知识,你选择你看得下去的,然后能触发你思考的,培养你逻辑的即可。

想学习知识的态度很好,但是千万别粘上知识多人的毛病,就是钻牛角尖,说得好听一点是认真;反义词就是钻牛角尖。

祝你成功吧。建议到此为止。也谢谢你光临Jdon,有缘就希望帮帮你,至于能够起到效果,也看你的悟性了。谢谢。


[该贴被banq于2010-09-05 16:52修改过]
[该贴被banq于2010-09-05 18:19修改过]

关键是心态吧。我倒是建议开始学习些C 和汇编比较好·如果是真正想学好的话。。我觉得JAVA高手就是C高手,C高手到真的是汇编高手。可能我也有些太武断。不过我只是说了我的感觉·不过思想总在不断深化。你运用好各种语言发现语言对你不是问题·只是设计思想。后来慢慢也会感觉没种语言的差异,特性。其实区别还是很大。祝福你·学好。

2010年09月06日 22:58 "mk00709"的内容
我倒是建议开始学习些C 和汇编比较好·如果是真正想学好的话 ...

这个观点很普遍,我想先理性分析一下这个观点。我们看看下面顺序:
汇编 --->C语言 -->Java语言(C#) -->脚本语言 -->模式 ---> 架构

不知大家是否同意我这种从底层到高层的划分?如果同意,接着分析:

我们很多人是从中间Java语言进入的,这时候,就面临两个方面选择,向下奔汇编;向上奔模式架构。

向下奔汇编可以被冠以“基础”一词美化,但是基础真的是汇编或C语言吗?恐怕这个标准我也不是很赞同,但至少有一点我们可以认可:基础的范围是随着科技发展,不断上升的,如果你认为汇编是基础,那么计算机硬件 字节码你至少剔除了,不属于基础范围了。

那么关键是,当前科技水平决定了基础范围在哪里?我想这是我和大多数人不同之处,如果你的软件是为解决业务问题,解决管理,解决Web2.0,解决满足人要求,那么很显然,你的基础就不能离这个目标太远,否则基础到目标太远,学不能至用啊,而且开发效率低啊,当然苹果的Objective C其实已经不是普通C,是新的高级语言了。

以我上面这个目标来衡量,很显然,模式才是解决业务问题的基础,所以,你要学习这个基础,Java语言甚至是模式的“汇编语言或机器编码”。

当然,如果你的目标是在计算机软件发展,也就是说,Java语言或脚本语言是你的目标,那么无疑C语言或汇编是你的基础。

那么为什么很多人认为C语言或汇编是基础呢,因为大学计算机课程这么设置,大学教授权威这么认为,他们认为要发展中国的计算软件,要发展替代西方的Java语言或脚本语言或Linux或Android等等。

所以,最后我们有了1两个结论:
1.如果你搞应用软件,是为人服务的,那么模式是你基础。
2.如果你想在大学之外的普通工作岗位上决心发展中国计算机软件,那么C语言和汇编是你的基础。

对于,第2点,我认为还有商酌余地,不是说,靠人海投入战术就能发展中国计算机软件,关键是土壤环境,出发点是好的,方式直接了点。
关于这方面见讨论:
http://www.jdon.com/jivejdon/thread/39372

[该贴被banq于2010-09-07 09:36修改过]
[该贴被banq于2010-09-07 09:36修改过]

具体什么语言·到不是重点。入门哪怕你是JS。
只不过你懂汇编 对你些C 时候有帮助·理解程度更好·
你懂C 对你JAVA有帮助·难不成·去看看JAVA虚拟机对对象内存的释放也有帮助。JAVA现在就是没有什么大的应用(可能是我孤陋寡闻),总有说法JAVA搬不上大台。个人观点可以不用理会·

“汇编 --->C语言 -->Java语言(C#) -->脚本语言 -->模式 ---> 架构 ”
我不是从java进入的,学过basic,c,vc,vb,delphi,c#,最后5年学的才是java。越是前面的我掌握的越差,因为水平是随着年龄在增长的。
现在我也迷茫,到底该向下学习c,jvm字节码这些所谓的基础,还是向上学习ruby,erlang,scala等动态/脚本语言,架构。
又或者是学习socket,并发这些服务器开发需要的技术。
而实际上,我日常工作做企业应用开发,接触的都是些没技术含量的SSH,JBPM,Report。

希望bang指点一下。

各位前辈大家好,本人也有点自己的看法,不知道对不对。
目前似乎用JAVA语言做项目的人似乎很多,我也是其中一员。面对目前纷繁杂乱的框架、产品有时真是不知所措。SSH、 Spring、Hibernate、Struts这些名词应该是时下最最流行的词汇。然而许许多多的人整天追求的也是这些。最近发现身边的一些人突然停止最求,准备离开这个行业。这些技术好像是真的影响了一批人呢。
前几年什么都想学,后来发现什么都学不精通,到还不如不学。最后,我真的不学了。SSH, Spring, Hibernate, Struts, Oracle, MYSQL都不学了。
精力完全投入到Javascript和与web相关的html, css, xml这些东西上后发现,这样做还是很有收获的。一个人的精力实在是有限,就说cassandra hector,把这个东西写好不用几年时间都甭想。所以哪还有许多时间去学那么那么多的不知对自己有用还是没用的所谓技术呢。
我现在领悟到的是放弃,放弃的越多回报也越多。不知各位大人有何意见。
[该贴被ahopedog于2010-09-10 09:06修改过]

也对·术业有专攻。但是做一个比较好的软件·涉及到技术需要全面。
比较流行的软件估计·也是英雄主义的人写出来比较多。
卡马克那些就是个好例子。主要是不要停留在用什么语言层面上。要有思想懂思考。已经不错了。

2010年09月04日 16:46 "QuZhengLin"的内容
面对这些高级语言,整天知其然不知其所以然的编程,自己总觉得不踏实,不踏实是因为由于高级语言对底层的抽象,让我不不知道一些东西的真正"面目" ...

从你的问题我推测,你是认为“深入”很重要。针对你的问题,我谈一点浅见:任何认知对象都是多维次多层次的,这是首先要建立的观念,否则,“深入”就会变成盲人摸象。

什么是多维次呢?比如:股市有基本面,技术面,政策面,如果你只把眼光局限在某一面,不管多么深入你对股市的分析都不可能全面。放到计算机里面,UML的各种图实际上也是从不同的维度对系统建立的视图。如果你只从类图分析系统,那么不管你分析得多深入都仅仅是系统的静态结构而已,系统的动态特性还一无所知。所以,要学习计算机有很多很多的面,算法的面,构架的面,业务的面,等等;而每一面里面又可以分很多面。

什么是多层次呢?比如你开车只需要掌握方向、刹车、离合等,不需要深入到内部去了解发动机构造;但是对于维修人员则需要深入了解。这就是说任何事物是有层次的,每一层都是由更底层的事物构成,同时又处于一个更大的事物当中。我们在对事物进行认知的时候必须明白所处的层次。在计算机中需要特别注意越是高层越是抽象越体现本质,越是底层越是具体越易变。抽象的东西是稳定的,而具体的东西是可以有多种不同方式的。你不知道对象在内存怎么表示的正好说明它可以有很多种不同的表示方法,它们都是可以的,所以它们不是本质的。所以,“抽象”在学习计算机的过程中十分重要,需要慢慢体会。

所以,我是建议先建立一些观念,然后再深入学习和研究。

谢谢大家的帮助,这个东西要真说从哪里学起还真不好说,越说越细,软件依赖硬件,硬件依赖电子...电子技术依赖那些科学家...自己看想了想,知识是学不完的,还是珍惜自己的时间学一点是一点吧,与其学习这些说不定哪天就要淘汰的知识,还不如自己认认真真做好每天的事情,总结经验,吸收思想,提高学习能力,才能适应变化,谢谢大家的指点,谢谢大家了,谢谢你们!

越看越迷糊,

学无止境,学以致用;
电脑和手机一样只是一个工具,区别在于按钮比较多;


“研究画笔和染料永远不会让你成为优秀的画家。”

其实我觉得甚至连入门的画家都做不到,但是中国的现实就是一堆准备做画家的人拼命的去研究如何制造画笔如何制造染料,然后在痛苦中放弃编程之路,觉得编程极苦,极难。

真是奇怪为什么在中国那么多人认为如何制造染料和画笔是成为一个画家的基础?

什么学习C什么汇编是基础,我觉得01机器码,打卡机才是基础,所以学习编程应该从研究打卡机开始。