JavaRush /Java 博客 /Random-ZH /让我们从头开始或“你好,Java World!”
articles
第 15 级

让我们从头开始或“你好,Java World!”

已在 Random-ZH 群组中发布
我想以一个乍一看不寻常的题外话来开始这篇文章。稍后就会清楚具体原因。
让我们从头开始吧,或者Hello,Java World! - 1
那么,让我们想象一下某人。有人想掌握高山滑雪。为此,他采取了以下步骤:
  • 教师、教科书、手册等 ——这一切都是恶人所为。您可以自学滑雪。此外,在学校他还学得很好的越野滑雪。因此,来自知识渊博的人的所有建议都会被忽略。

  • 选择最酷的装备。不低于专家水平。硬靴子会伤脚。硬质滑雪板需要付出极大的努力才能弯曲,远远超出某人的身体素质水平。嗯,等等。

  • 测试赛道是……好吧,比如说,世界杯大回转赛段的赛道。这正好适合学习。
  • 以同样的精神继续下去。
那么问题来了。你会怎么称呼这个人? 就我个人而言,作为一个熟悉高山滑雪大约20年的人,我会称他为(这还是很温和的!)——绝望。用这种方法根本不可能学到任何东西。但这肯定会受伤。而最确定的就是永远放弃滑雪的想法。我想你会同意我的这个评估。无论如何,我几乎可以肯定,这个人不会期望有人对他提出任何不愉快的事情。现在让我们想象另一个人。比如说,让他成为一名计算机科学专业的学生。他具有一定的 C++、C#、Pascal 知识。他想学习Java。他的行动:
  • 与他的知识水平(坦白说是零水平)相对应的文学被扫到了一边。基于对所提到的 C++、C# 和 OOP 理论的稍微熟悉。
  • 采用最强大的编程环境。比如说 Eclipse 或 NetBeans。自行完成所有操作,只需按一个按钮即可。
  • 作为试用应用程序,我们选择......好吧,让我们说聊天。客户端-服务器应用程序,客户端部分采用小程序的形式,服务器部分是 Web 服务,或者最坏的情况是 Servlet。正好适合学习。
问题。你会怎么称呼这个人? 你知道悖论是什么吗?事实是,在这种情况下,公正的评估将会大大减少。尽管事实上情况在所有方面都是相同的。除非第二种情况对健康和生命的影响不那么致命。也许这就是问题所在?情况确实非常相似。我用同样的风格专门描述了它们。奇怪的是:如果第一种情况的荒谬性是显而易见的,那么第二种情况就会出现数量惊人的新手开发人员。掌握 Java 从编写 MIDlet、数据库客户端、聊天、创建基于 servlet 的网站开始......您可以继续很长时间。但这一点仍然是显而易见的。与此同时,入门级文学却被轻蔑地放在一边。读这个?大部头书?是的,我用 C++ 编写已经三年了!(选项以 Pascal 形式提供,甚至以 Visual Basic 形式提供。)而且我了解 OOP!嗯,总的来说。那么,下一步是什么?然后是这个:
  • 如何将8字节数组转换为long数组?
  • 为什么会出现这种情况NoClassDefFoundError
  • 为什么我在 Eclipse 中启动应用程序 ( NetBeans/IDEA/JBuilder),一切都很好,但如果没有它java HelloWorld.class,我输入 ,就会出现错误?
  • 为什么会崩溃ClassNotFoundException
  • 为什么没有图书馆?我已经把它放在classes.zip里了,但是没有用!
  • 为什么我创建一个对象数组,但是当我尝试使用该数组的元素时却得到了NullPointerException
  • 为什么……?
  • 为什么……?
  • 为什么……?
为什么为什么为什么?但因为 Java 不是 C++ 或 Pascal。而不是 Perl。了解这些语言不仅没有帮助,而且还会带来阻碍。如果只是因为这些语言具有完全不同的意识形态。但外表的相似性具有误导性。当然,所有这些“为什么”和“如何”在书中都有答案。在最基础的文学层面。但读它是懒惰的(选项:羞耻、没有时间等)。我知道很多由优秀的 C++ 专家转移到 Java 的刻板印象。最近的一个例子:永远不应该在构造函数中抛出异常。为什么?是的,因为在 C++ 中,此类对象的状态没有定义。因此,发生内存泄漏。在Java中,由于垃圾收集器的存在,原则上不存在这样的问题。然而,有些人试图避免这种情况。只是根据根深蒂固的刻板印象。最糟糕的是,由于这些努力,代码变得更加复杂。语法很容易学习。而且完全不够。语言的意识形态更为重要。为了最有效地掌握它,你应该从头开始。究竟为什么以及如何?这是另一个问题。所以。从哪里开始以及如何开始。这取决于您想要实现的目标。如果你想成为一名熟练的编码猴子,你几乎可以从任何事情开始。如果你想成为一名专业人士,事情就有点复杂了。我的经历让我有理由说出以下内容。专业开发人员和“编码员”之间的区别在于他了解正在发生的事情。他所做的不仅仅是按按钮。强大的环境是一个很好的帮助。对于那些可以不用它的人。但它往往是那些刚开始使用它的人的唯一工具。如果没有它,编码猴子的价值为零。因为没有按钮可按。一般来说,按下按钮可能会采取真正可怕的形式。我的一位同事看到了一个用 Java 编写的产品。安装说明的开头是:“从磁盘安装 JBuilder...”现在这已经是致命的了。如果开发人员在没有开发环境的情况下无法使产品运行,那么我不禁想到它是如何编写的。至少,它是由业余爱好者写的。我所说的“了解发生了什么事”是什么意思?这意味着一个人必须了解以下内容:
  • 什么是虚拟机以及为什么需要它?
  • 从虚拟机的角度来看什么是类。
  • 什么是包裹?
  • 什么是图书馆?
  • 虚拟机如何查找和加载类;什么是类加载器以及它是如何工作的;默认有多少个;什么是类路径。
ETC。等等。这样的例子还在继续。请注意,我没有包含开发人员本身特定的知识。什么是线程,从 OOP 的角度来看什么是类,它与对象有何不同,布局管理器如何工作 - 任何开发人员都应该知道这一切。我列出的所有内容更多的是技术性问题。但事实证明,了解它们对于了解问题所在至关重要。生活中的例子。有一个用于处理 XML 的库,称为 xalan。它包含几个 javax.xml... 包 - 解析器、转换器等。这个图书馆很受欢迎。问题是这些相同的包自版本 1.4 以来就已经存在于 J2SDK 中。问题。如果 xalan 也存在于类路径 - 库中或来自 J2SDK 中,则从库访问 javax.xml.transform.stream.StreamSource 类时将加载哪个类?要回答这个问题,您需要了解类加载器是如何工作的。我曾经在一个论坛上看到过一场为期四天的讨论,最终归结为这个问题。该代码无法正确工作,正是因为加载程序没有获取预期的类。我在说什么?事情是这样的:开发环境越强大,为开发人员做的事情就越多——他需要思考的就越少。这已经是多么糟糕了。离猴子那么近。这引出了第一个结论,无论它看起来多么矛盾:

结论 1.建议在没有强大环境的情况下开始学习Java。

我不提倡使用记事本级别的编辑器进行写作。但我这样做的唯一原因是——它们通常没有语法突出显示。这是一件非常方便的事情,而且不会产生负面影响。您可以使用像Notepad++这样的东西,它理解 Java 语法,顺便说一下,它是免费的。例如,我在系统中专门为其注册了.java 文件类型。因此,一个具有语法突出显示和命令行的文本编辑器。两三天的折磨 - 并理解类路径是什么,解释器是如何启动的以及一堆其他小事情 - 理解这一点将永远存在。更远。我的经验让我有理由说,获取知识以供将来使用是不可能的。从某种意义上说,只有当文学能够回答问题时才值得阅读。如果你读了一本书而没有提出任何疑问,那么这些信息将在一周内消失。我非常清楚这一点,包括我自己的经历。我曾经开始读五遍关于 servlet 的书。直到我开始在工作中处理它们之前,这些信息都没有被吸收。这绝不是一个孤立的案例。很久以前,大约8-10年前,我读过以下内容,不幸的是,我不记得作者了:如何教一个人一门新的编程语言?很简单。您需要为其提供一种语言、多项任务和最少的文档。然后,几个月后,当他至少开始用这种语言写作时,提供全面的文档。两周后,人们将像侦探小说一样读完它,之后就可以开始工作了。我100%同意这个说法。一方面,两个月后,所有小问题都会消失。这些问题的答案将独立获得,这将大大增加它们的价值。另一方面,明确的问题已经形成,文档将提供答案。这就引出了第二个结论,它看起来并不比第一个结论更矛盾:

结论2. 建议在没有教科书的情况下开始学习Java。Java API 文档 + Java 教程 - 这已经足够了。

Java API 文档是必须的。我强烈建议将其保存在本地磁盘上。你必须联系她不止一次,不是两次,甚至十次。就我个人而言,我没有一天不去那里。我还建议将 Java 教程保留在本地。这是完全替代教科书的入门级信息。然而,那里有相当数量的东西。我必须说,在我工作中不涉及的领域,我仍然为自己找到了新的东西。读太多书是不好的。只要没有请求,就没有响应。读一点书也是不好的。中庸之道在哪里?我遵守这条规则:我一直阅读,直到我开始觉得我已经收到了问题的答案。90% 的情况并非如此。但此时此刻,最好停下来,自己继续。最初的动力已经收到,独立解决问题会带来更多。当然,一段时间后,学习文学是值得的。但同样,对于入门级文学。即使这一切看起来都是废话,也值得阅读最初的章节。我几乎可以保证你至少会学到一些新东西。这件事后来可能会变得极其重要。好的。我们似乎已经想好要写什么了。怎么写-也是。但我应该写什么呢?记住这篇文章的开头。我应该从编写即时通讯系统开始吗?当然,选择权在于您。在我看来,这不值得。任务越复杂,出现的问题就越多。在没有经验的情况下,这么多的问题会给人一种无法解决的感觉,进而产生一种自卑、愚蠢等感觉。最终,这可能会导致“让它见鬼去吧……”的决定并停止学习语言。那些。与所需要的效果完全相反。这与其说是 Java 的特征,不如说是学习过程本身的特征。但由于某种原因,他们在教授编程时忘记了这一点。同时,与在旅程一开始就放弃的宏伟系统相比,完成一个小任务可以带来更大的满足感和更多的知识。因此得出第三个结论: 结论 3。建议从适合您当前 Java 知识水平的任务开始学习 Java。 你不应该在一级方程式赛车上开始学习驾驶,你不应该在世界杯赛道上开始学习高山滑雪。同样,你不应该通过编写庞大的东西来开始掌握 Java。我明白,雄心壮志是需要付出努力的。但在这种情况下,它们是没有根据的。你的野心越不合理,你成为专业人士的机会就越少。奇怪的是,学习方面的一个显着现象是各种论坛。如果你明智地使用它们。明智地 - 这意味着你需要做相反的事情,而不是像平常那样。也就是说,不是提出问题,而是回答问题。任何你有力量到达的地方。如果你认为我自己知道一切,那你就大错特错了。是的,我知道很多。但有些地方是我从未遇到过的。或者我有,但很少。我实践中的一个典型例子是使用证书:代码签名、安全连接等。1998年,当我写论文时,我就这样做了,但从那以后一切都发生了很大的变化。多年来,我积累了一些疑问。我什至开始阅读一些文学作品。但是,正如我上面所说,你无法获得未来使用的知识。它就像一根撬棍——从一只耳朵进去,从另一只耳朵出来。除了头上破了一个洞之外,没有任何结果。这种情况一直持续到最近,有人在论坛上提出了有关与 tomcat 进行 SSL 连接的问题。出现了一些问题。只有这个问题促使我深入挖掘。如果有请求,就会有响应。我不仅找出了这个人的问题所在,而且还发现了很多其他有用的信息。我终于明白证书是如何工作的了。相应的文章在计划中。这种情况经常发生。例如,我经常使用 GUI。直到论坛上有人提问,我才了解了TextLayout的一些功能。在提出这个问题之前,我对他们一无所知。同样,我最近发现 JButton 也将 html 解释为自己的标头。在此之前,我以为只有JLabel可以做到这一点。这再次感谢论坛。事实证明:我们回答问题越多,我们学到的东西就越多。这就是为什么我不同意流行的观点,即如果一个人坐在论坛上,那么他什么也不做。这还远不清楚,主要取决于此人出现在论坛上的具体原因。他主要做什么——提问或回答。事实上,你甚至可以问。但也很明智。不要要求解决方案(尤其是附言“请知道的人给出答案,不要提问!”,我前几天就遇到了!),而是相反,再次要求设置运动方向。初学者很难理解在哪里挖掘,这是完全可以理解的,因为他根本缺乏经验。这不是人的错,甚至不是问题。这可以。每个人都经历过这个。包括我在内。对我个人来说,一个人想要学习一些东西更重要。不仅得到答案,只是在参加编程实验五分钟后就忘记了。我总是会告诉你运动的方向。如果我自己认识他的话。即使我不知道,至少我可以猜测。我当然也会寻找答案。但我可能永远不会给出直接答案——至少,我不记得了。顺便说一句,正是因为这个,我离开了其中一个论坛。当我开始问引导性问题时,他们异口同声地向我解释说,他们的习惯是简单地回答。通过我的问题,我可以走得更远。考虑到论坛的水平还有待提高,尤其要感谢这种做法!– 我决定不再浪费时间了。因此,选择一个您喜欢的论坛即可开始。顺便说一下,这个网站的出现正是得益于其中一个论坛。在那里交谈了一段时间后,我积累了一份最常提出的主题列表,并意识到这样一个网站将会受到欢迎。事情就这样发生了。几乎所有的文章都是在论坛上的一些讨论之后写的。或者遵循我也定期进行的通信。结果是什么?工作,工作,再工作。在初始阶段你允许自己为自己做的事情越多,你获得的知识就越少。而走向专业化的道路也就越长。但只有你可以选择你想成为的人——无意识地按按钮的猴子或专业人士。只有你自己选择实现这个或那个目标的道路。第一种方式很明确。我试图展示第二个。你们的行动,先生们! 原始来源链接:让我们从头开始或“Hello, Java World!”
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION