从PHP到Java。 有什么build议?

在过去的3年里,我一直在使用PHP开发Web应用程序。 我现在正在接近Java。 我最后一次使用该语言的时间大约是8年前,主要是学术。

我相当熟悉PHP的对象模型(版本5),而且我几乎完全使用OO进行编码。 现在我想传达这个经验,并用它来开发Java。

我来自哪里:

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

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

  • 我需要一个IDE:IntellijIDEA,NetBeans或Eclipse
  • 我需要select一个开发框架。 一些经常性的名字:Spring MVC,stripes,wicket。

现在我需要一些有助于使这一过渡更顺利的见解。 但从人们谈论它的方式来看,Java似乎是一个拥有自己的生态系统的全新的野兽。 听起来好像转向Ruby或Python实际上会更容易一些,因为从我的angular度来看,Java从概念上来说似乎是最接近PHP的,尽pipe它更加严格和预编译。

听起来很奇怪,很less有人公开logging他们的这种行为的经验。 我search谷歌,亚马逊和stackoverflow类似的问题,结果离开的愿望。 我简直不敢相信,如果我想快速成为一名Java开发人员,就必须像新手一样开始。

欢迎任何人作出回应,但我有些认为有这两种语言的宝贵经验的人最能丰富这个讨论。

  • 什么帮助你快速进入Java?
  • 什么概念是无所不在的Java和PHP不存在,反之亦然?
  • 一些PHP开发人员使用Java的一些小问题。
  • 在感觉过渡完成之前多久?

在学习语言的同时,我不会尝试学习IDE。 更简单的过渡将是坚持你的shell和习惯性的文本编辑器,并使用下面的shell友好的工具:

  • ant,组织您的项目,运行自动化testing套件,增量编译
  • BeanShell进行交互式testing,快速尝试
  • 一个简单的技巧:命令行中的javap将为标准库中的任何类提供方法签名。 与php -r类似,但是自Javainput以来提供了更多信息。

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

一些其他的区别:

  • string是字符序列而不是字节序列。 绝对是正确的做法。
  • 系统产生和消耗(字节或字符) stream而不是字节缓冲区。 例如,如果你想用PHP过滤输出,一个标准的做法是向ob_get_contents请求一个字节缓冲区,然后转换整个缓冲区。 在Java中,您将一个filter添加到您的servlet,一次转换一个字节或一个字符的输出。 开始工作有点太过于强烈,但当你习惯了时,它更简单,更乐于助你一臂之力 – 你的stream处理器不必知道事情的来源和去向。
  • 几乎所有有用的东西都是一个接口,而创build一个接口的实例可能会非常棘手,非标准化,而且并不总是logging良好。 在PHP中,您可以用new DOMDocument()来启动并运行XML。 在Java中, org.w3c.dom.Document是一个接口,所以new()将不起作用。 Javadoc非常精确地描述了接口实例在出现之后的行为方式,但是当您试图找出对象实际上是如何诞生的时候,它可能会相当co and和pr </s>。 很多时候,你必须查找教程和代码示例,然后复制粘贴一段样板文件给你一个DOMDocument或者java.sql.Connection的实例。 像Spring这样的框架很stream行的一个原因是,它们将丑陋的对象创build代码分离出来,并为您呈现一个接口实现在那里神奇般的世界。

我实际上转向了相反的方向。 我发现Java在一个大公司中运行得非常好,你可能正在一个组件上工作,把它交给其他人,他们把这个组件集成到一个更大的系统中,然后打包并交给一个单独的操作团队 – 这就是所有这些间接性和可configuration性( FactoryBuilderFactorytypes抽象,web.xml文件等)都是有意义的,并且有用。 在一个程序员操作人员的小公司里,Java是更多的工作。 使用Java,您必须习惯于像启动Java进程,监视Java进程以确保它保持运行,监视Java进程以确保它不会处于活动状态的昏迷状态没有响应,closures和重新启动Java进程,当你更新代码等时,只需要很less的中断。如果你有单独的操作人员,这很好,这是他们的工作,他们非常擅长。 如果你是一名程序员,照顾一个Java过程可能会分散注意力,难以做好。

从Java教程开始

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

然后去买Head First Java

http://oreilly.com/catalog/9780596004651

无论你想要做什么,它都能让你用非常重要的语言很快地完成任务。

严格来说,您不需要 IDE来使用Java。 我已经使用Java在十多年的时间里大量编写了代码(其他代码已经超过了25年),而且我也不太喜欢IDE。 也许这个年龄的隐含指标是问题的一部分:-)这是一个折衷,像其他任何事情一样。

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

周围有谁知道这个语言的人是很好的。 哦,到了这一点,成为Java API文档的朋友。 随着平台的发展,Java API有其起伏,但大部分文档至less相当透彻和相当准确。

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

这似乎是一个旧的职位,但嘿…

我从C#移动到Java,我刚刚开始了一个angular色,并正在从Java转移到PHP …

首先:Java是真棒:)

  • 为了让你的IDE得到Eclipse,一旦你习惯了,你永远不必离开IDE(除了SQL位)。 它很好地pipe理项目,你可以下载一些插件,比如SVN插件。 它允许您在Eclipse中运行Tomcat服务器,并直接向Eclipse控制台输出错误。

  • 对于框架,我用ORM的Struts,Tiles和Torque,花了一段时间把我的头围绕在他们身上,但是一旦我们结交了朋友,我无法想象任何其他的发展方式。 虽然我想像一个小项目,这将是一个很大的开销!

  • 同意上面的一个post – HEADFIRST JAVA,这就是我学到的东西,我用了很多其他语言,他们有一个可视化的学习方法,比纯粹的教科书更容易 – 对我来说也是。 我一整天都在忙着跑步,并且在几个星期内有信心 – 但总是在学习:)

  • 叶Java是严格的,但你来爱它,对我来说,松动“OL PHP是有点奇怪。

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

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

  • 其中一件让我恼火的事是,没有办法告诉你哪些JAR库不在使用,所以在一个站点上工作了几年之后,你的lib文件夹可能会有点混乱 – 特别是如果多个人正在删除和添加function。

我可以继续。

保罗

我build议在这里点击JavaBat

这会给你一些好的想法。 在专业的环境下,我花了1年的时间牢牢把握Java,一旦我有了想法,我就可以很容易地转入其他OO语言。

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

谨防复杂性。 首先,优秀软件的关键是简单,这就是为什么PHP结合了一个好的框架杀死Java。

使用Java,您有可能成为servlet容器和框架的奴隶。 select最简单的最灵活的框架。 控件和自定义标签是恶魔。 你会浪费时间来学习旨在使开发更快的东西,但最终太复杂和不灵活。 由于:复杂性,编译和静态types,Java会减慢开发速度。 你会厌恶空指针exception。

编辑:除了工具,Java和PHP是非常类似结构的“C”风格的语言。 比Python或Ruby更重要。 这是静态的types和复杂的工具,使Java如此陌生。

对于我的情况,我只处理了很多程序编码的PHP,所以跳到Java,不仅我发现一切都比php更宽松,更宽容(但现在我知道为什么必须这样,而我非常喜欢Java),但是学习在课堂上组织我的代码,同时学习Eclipse IDE需要花费大约1。5年的时间来修补,试验和错误,自己制作东西(主要是swing应用程序)。

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

祝你好运!

你见过栎( http://www.caucho.com/projects-open-source/php-app-server-quercus/ )吗? 这可能是一个很好的方式,让你轻松进入Java世界而不会感到不知所措。

编辑:更新与最新的链接。

最好的build议是远离Java。