从PHP到Java。有什么建议?

时间:2010-02-06 18:16:28

标签: java php

我在PHP中过去3年一直在进行Web应用程序开发。我现在正准备给Java一个机会。我最近一次使用这种语言的时间差不多是在8年前,主要是学术性的。

我对PHP的对象模型(版本5)非常熟悉,我几乎完全用OO编码。我现在想传达这种经验并用它来开发Java。

我来自哪里:

  • linux作为桌面和服务器
  • Vim / gVim +插件编辑
  • MySql for db
  • apache httpd
  • 体验一堆PHP框架,Zend + Doctrine是我最常用的

到目前为止,我已经获得了关于迁移到Java的内容:

  • 我需要一个IDE:IntellijIDEA,NetBeans或Eclipse
  • 我需要选择一个开发框架。一些经常出现的名字:Spring MVC,stripe,wicket。

现在我需要一些有助于使这种转变更顺畅的见解。但是从人们谈论它的方式来看,Java似乎是一个拥有自己生态系统的全新野兽。听起来好像转移到Ruby或Python实际上会更容易,这很奇怪,因为当我看到它时,Java在概念上似乎最接近PHP,尽管更严格和预编译。

虽然听起来很奇怪,但很少有人公开记录他们对此类举动的体验。我搜索了谷歌,亚马逊和stackoverflow类似的问题,结果留下了欲望。如果我想快速成为Java中的Web开发人员,我就无法相信我需要像新手一样开始。

欢迎任何人回复,但我有点认为在两种语言中都有一些宝贵经验的人会最充实地讨论这个问题。

  • 是什么帮助您快速学习Java?
  • Java中无处不在的概念和PHP中缺少哪些概念,反之亦然?
  • PHP开发人员使用Java的一些问题。
  • 你觉得过渡完成多久了?

7 个答案:

答案 0 :(得分:22)

我不会在学习语言的同时学习IDE。更简单的过渡是坚持使用shell和习惯性文本编辑器,并使用以下适合shell的工具:

  • ant,用于组织项目,运行自动化测试套件,增量编译
  • BeanShell用于交互式测试,快速尝试
  • 快速提示:来自命令行的javap将为标准库中的任何类提供方法签名。与php -r类似,但自输入Java以来​​提供了更多信息。

Java的在线文档精确,专业,并且在语气和格式上保持一致。与PHP中的所有函数都在一个平面命名空间中不同,Java中的标准库是类层次结构。您必须了解该标准库的方法,这意味着了解层次结构+职责:例如,您必须知道java.util.Listjava.util.Collection的子接口增加了有序条目的概念。有了这些信息,谷歌搜索java.util.List将带您进入类的Javadoc,Javadoc将告诉您确切的方法签名并将您链接到一系列具体实现。

一些其他的区别:

  • 字符串是字符的序列,而不是字节序列。绝对是正确的做法。
  • 系统生成和使用(字节或字符)而不是字节缓冲区。例如,如果要在PHP中过滤输出,标准做法是向ob_get_contents询问字节缓冲区,然后转换整个缓冲区。在Java中,您向servlet添加一个过滤器,该过滤器一次转换输出一个字节或一个字符。最初工作有点气势,但是当你习惯它时它更简单,更像乐高 - 你的流处理器不需要知道它们来自何处以及它们去向何处。
  • 几乎所有有用的东西都是一个界面,创建一个界面实例可能很棘手,非标准化,而且并不总是有详细记录。在PHP中,您可以使用new DOMDocument()启动并运行XML。在Java中,org.w3c.dom.Document是一个接口,因此new()不起作用。 Javadoc非常精确地说明了接口实例在它们存在后的行为方式,但是当你试图找出一个对象实际诞生的时候,它可能会非常腼腆和谨慎。通常,您必须查找教程和代码示例,并复制粘贴一段样板文件,该文件板为您提供DOMDocument或java.sql.Connection或其他任何实例。像Spring这样的框架受欢迎的一个原因是它们将丑陋的对象创建代码分离出来,并为您呈现一个界面实现神奇的世界。

我实际上换了相反的方向。我发现Java在一个大型公司中工作得很好,你可能在一个组件上工作,把它交给一个将该组件集成到一个更大的系统中的其他人,然后将其打包并交给一个单独的运营团队 - 这就是所有这些间接和可配置性(FactoryBuilderFactory类型抽象,web.xml文件等)都有意义,并做了一些有用的事情。在程序员 操作人员的小公司中,Java需要做更多的工作。使用Java,您将不得不习惯于启动Java进程,监视Java进程以确保其保持运行等概念,监视Java进程以确保它不会陷入昏迷状态但仍处于昏迷状态。当你更新代码等时,没有响应,关闭和重新启动Java进程,中断最少。如果你有单独的操作人员,那很好,这是他们的工作,他们非常擅长。如果您是一名程序员,那么照看Java流程可能会分散注意力并且难以做好。

答案 1 :(得分:8)

从Java Tutorial开始

http://java.sun.com/docs/books/tutorial/getStarted/index.html

然后去购买Head First Java

http://oreilly.com/catalog/9780596004651

无论你想做什么,它都能让你快速掌握必要的语言。

答案 2 :(得分:8)

严格地说,您不需要 IDE来使用Java。十多年来我一直在使用Java进行大量编码(并且在其他方​​面已经超过25年了),而且我不太喜欢IDE。也许这个隐含的年龄指标是问题的一部分:-)这是一种权衡,就像其他任何事情一样。

我会将Stripes作为一个很好的简单框架插入,但主要是因为它相对较小且范围有限。像Spring这样的大型框架是“厨房水槽”生态系统,使用其中一个框架学习Java可能会使一些困难的部分变得平滑但却让其他基本方面变得神秘。再次,这是个人偏好的问题。

让周围的人知道这种语言是件好事。哦,到那时,结交Java API文档的朋友。随着平台的发展,Java API有其起伏不定,但在大多数情况下,文档至少非常全面且非常准确。

您还希望熟悉JSP及其与Java和Java Web服务体系结构的关系,因为这将是您最直接的PHP体验(我认为)。

答案 3 :(得分:5)

我做的最好的举动是从Java到PHP。

谨防复杂性。首先,优秀软件的关键是简单性,这就是PHP结合良好框架杀死Java的原因。

使用Java,您可能会成为servlet容器和框架的奴隶。选择最简单,最灵活的框架。控件和自定义标签是魔鬼。你会浪费时间学习旨在使开发更快的东西,但最终过于复杂和不灵活。由于以下原因,Java将减慢开发速度:复杂性,编译和静态类型。你会厌恶空指针异常。

编辑:除了工具之外,Java和PHP是非常类似的结构化“C”风格语言。远远超过Python或Ruby。正是静态类型和复杂工具使Java如此陌生。

答案 4 :(得分:2)

我建议在here

点击JavaBat

它会给你一些好主意。在专业的环境中,我花了一年的时间才能非常牢固地掌握Java,一旦我的想法被打败,我就能够很容易地进入其他OO语言。

答案 5 :(得分:2)

这似乎是一个古老的帖子,但是嘿......

我从C#转到Java,我刚刚开始担任角色,正在从Java迁移到PHP ......

首先:Java很棒:)

    你的IDE的
  • 获得Eclipse,一旦你习惯了它,你就不必离开IDE(除了SQL位)。它管理项目非常好,你可以下载各种插件,如SVN插件。它允许您在Eclipse中运行Tomcat服务器,它将直接将错误输出到Eclipse控制台。

  • 对于框架,我使用Struts和Tiles以及Torque作为ORM,花了我一些时间来了解他们,但是一旦我们结交了朋友,我无法想象任何其他的开发方式。虽然我想要一个小项目,但这将是一个很大的开销!

  • 同意上面的帖子 - 获取HEADFIRST JAVA,这就是我学习的方法,我将它用于许多其他语言,他们有一种学习方法,比纯教科书更容易学习 - 无论如何对我来说都是如此。我在一天之内就开始运行,并且在几周内我自信 - 但总是在学习:)

  • yip Java是严格的,但是你会喜欢它,因为对于我来说松散的'PHP PHP有点奇怪。

  • 你还需要下载Tomcat来运行你的Java位,它很容易运行。

  • Java非常好地组织你的所有课程,没有这个'require_once(some_text_file.php)'垃圾,只是'导入myClass'然后离开你。

  • 让我烦恼的一件事是,没有办法告诉你哪些JAR库没有使用,所以在网站上工作几年之后,你的lib文件夹会变得有点乱 - 特别是如果很多人正在删除和添加功能。

我可以继续。

答案 6 :(得分:0)

对于我的情况,我只处理了很多关于php的程序编码,所以跳到Java,不仅我发现一切都比php更冗长,更宽容(但现在我知道为什么一定是这样的我非常喜欢Java,但是学习在课堂上组织我的代码并学习eclipse IDE需要大约1。5年的修补,试用和修改错误,自己制作东西(主要是摇摆应用程序)。

我想只是自己创建东西,利用大量的Java库来构建自己的东西很有趣是最快的方法。另外我想通过彻底阅读java sun教程我可以节省更多时间。节省更多时间确保您已经彻底搜索了防止“重新发明轮子”的库。

祝你好运!