过去 3 年我一直在使用 PHP 进行 Web 应用程序开发。我现在正准备尝试一下 Java。我最后一次使用该语言是在近 8 年前,主要是为了学术目的。
我相当熟悉 PHP 的对象模型(版本 5),并且我几乎一直在 OO 中进行编码。我现在想传承这些经验并用它来用 Java 进行开发。
我来自哪里:
- Linux作为桌面和服务器
- Vim/gVim + 插件作为编辑器
- MySql 数据库
- 阿帕奇 httpd
- 使用过很多 PHP 框架,Zend+Doctrine 是我最常用的
到目前为止,我关于转向 Java 的收获是:
- 我需要一个 IDE:IntellijIDEA、NetBeans 或 Eclipse
- 我需要选择一个开发框架。一些经常出现的名称:Spring MVC、stripes、wicket。
现在我需要一些见解来帮助使这一过渡更加顺利。但从人们谈论它的方式来看,Java 似乎是一个全新的野兽,拥有自己的生态系统。听起来好像迁移到 Ruby 或 Python 实际上会更容易,这很奇怪,因为当我看到它时,Java 在概念上似乎最接近 PHP,尽管更严格且预编译。
尽管这听起来很奇怪,但很少有人公开记录他们的此类举动的经历。我在谷歌、亚马逊和 stackoverflow 上搜索了类似的问题,结果就如愿以偿了。我简直不敢相信,如果我想作为一名 Java Web 开发人员快速提高工作效率,我需要像新手一样开始。
欢迎任何人做出回应,但我认为在两种语言上都有一些宝贵经验的人会最丰富这个讨论。
- 是什么帮助您快速掌握 Java 知识?
- 哪些概念在 Java 中无处不在而在 PHP 中却没有,反之亦然?
- PHP 开发人员转向 Java 时遇到的一些问题。
- 过了多久您才感觉到转变已经完成?
我不会尝试在学习语言的同时学习 IDE。更简单的过渡是坚持使用 shell 和习惯的文本编辑器,并使用以下 shell 友好的工具:
- ant,用于组织项目、运行自动化测试套件、增量编译
-
豆壳 http://www.beanshell.org/对于交互式测试,快速尝试
- 一个快速技巧:
javap
来自命令行将为标准库中的任何类提供方法签名。如同php -r
但由于 Java 是类型化的,因此提供了更多信息。
Java 的在线文档精确、专业,并且语气和格式一致。与 PHP 中的所有函数都位于同一个命名空间中不同,Java 中的标准库是类层次结构。您必须熟悉该标准库,这意味着了解层级+职责: 例如你必须知道java.util.List
是一个子接口java.util.Collection
添加了有序条目的概念。有了这些信息,在 google 上搜索 java.util.List 将带您进入该类的 Javadoc,Javadoc 将告诉您确切的方法签名并将您链接到一系列具体实现。
一些杂项区别:
- 字符串是序列人物而不是字节序列。绝对是正确的做法。
- 系统生产和消费streams(字节或字符)而不是字节缓冲区。例如,如果您想在 PHP 中过滤输出,标准做法是向 ob_get_contents 请求字节缓冲区,然后转换整个缓冲区。在 Java 中,您可以向 servlet 添加一个过滤器,一次将输出转换为一个字节或一个字符。最初使用它有点令人印象深刻,但当你习惯它时,它会更简单,更像乐高 - 你的流处理器不必知道事物从哪里来以及它们去哪里。
- 几乎所有有用的东西都是接口,创建接口的实例可能很棘手、不标准化,而且并不总是有详细的文档记录。在 PHP 中,您可以使用 XML 启动并运行
new DOMDocument()
。在爪哇,org.w3c.dom.Document
是一个接口,所以 new() 不起作用。 Javadoc 对于接口实例一旦存在后的行为方式非常精确,但是当您试图找出对象实际上是如何诞生的时,它可能会显得相当腼腆和正经。很多时候,您必须寻找教程和代码示例,并复制粘贴一段为您提供 DOMDocument 实例的样板或java.sql.Connection
管他呢。像 Spring 这样的框架流行的原因之一是它们分离出了丑陋的对象创建代码,并向您展示了一个接口实现神奇地存在的世界。
我实际上转向了相反的方向。我发现 Java 在一家大公司中工作得很好,您可能正在开发一个组件,然后将其交给其他人,后者将该组件集成到一个更大的系统中,然后将其打包并交给一个单独的运营团队 - 这就是所有这些间接性和可配置性(FactoryBuilderFactory
类型抽象、web.xml 文件等)是有意义的并且做了一些有用的事情。在一家小公司里,程序员are对于运维人员来说,Java 的工作量更大。使用 Java,您必须习惯一些概念,例如启动 Java 进程、监视 Java 进程以确保其保持运行、监视 Java 进程以确保它不会进入昏迷状态(虽然它还活着),但当您更新代码等时,没有响应、关闭并重新启动 Java 进程,以最小的中断。如果您有单独的运维人员,那很好,这是他们的工作,他们非常擅长。如果您是一名程序员,照顾 Java 进程可能会分散您的注意力并且很难做好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)