<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Stephan Schwab - Languages category</title>
  <link>http://www.stephan-schwab.com/categories/Languages/</link>
  <description>Software Technology Consultant</description>
  <language>en</language>
  <copyright>Stephan Schwab</copyright>
  <lastBuildDate>Sat, 24 May 2008 11:24:54 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>Java o PHP para desarrollar una aplicaci&amp;oacute;n web</title>
    <link>http://www.stephan-schwab.com/2007/04/13/1176512593988.html</link>
    
      
        <description>
          &lt;p&gt;Inspirado por la discusi&amp;oacute;n con un cliente quiero publicar mis pensamientos sobre la cuesti&amp;oacute;n &#034;Java o PHP para desarrollar una aplicaci&amp;oacute;n web&#034;. Aqu&amp;iacute; en Panam&amp;aacute; y aparentemente en otros pa&amp;iacute;ses de Am&amp;eacute;rica Latina PHP es mas famoso que Java. Hay muchas empresas peque&amp;ntilde;as que se dedican a la creaci&amp;oacute;n de paginas web y ellos usan PHP para a&amp;ntilde;adir funciones de interacci&amp;oacute;n a las paginas. Todo esto me hace recordar la situaci&amp;oacute;n en Alemania hace como 8 anos atr&amp;aacute;s.&lt;/p&gt;

&lt;p&gt;Creo que es importante que se comparan manzanas con manzanas.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;PHP&lt;/strong&gt; es principalmente una tecnol&amp;oacute;gica para paginas web.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Java&lt;/strong&gt; es un lenguaje como C/C++ o Smalltalk para realizar cualquier aplicaci&amp;oacute;n que se puede programar. Paginas web solamente son una forma de user interface. Con Java puedo crear aplicaciones desktop para diferente plataformas con Swing o RCP. Puedo crear applets para el browser. Y uso OOP (object-oriented programming) juntos con una cantidad de otras t&amp;eacute;cnicas para crear un producto de calidad.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Java no se debe comparar con PHP. Mas bien con Microsoft .NET y alla con C# que es como el Java de Microsoft.&lt;/p&gt;

&lt;p&gt;Veamos TDD (test driven development). No solamente ayuda eso para dise&amp;ntilde;ar las clases - los objetos que se usan en el c&amp;oacute;digo - pero tambi&amp;eacute;n puedo comprobar que el c&amp;oacute;digo no tiene errores. Herramientas como Cobertura, EMMA y Clover reportan la coberatura por unit tests. Un buen ejemplo es el reporte de &lt;a href=&#034;http://tapestry.apache.org/tapestry5/tapestry-core/cobertura/index.html&#034;&gt;Cobertura para el proyecto open source Tapestry&lt;/a&gt;.

&lt;p&gt;Con una herramienta como &lt;a href=&#034;http://www.openqa.org/selenium&#034;&gt;Selenium&lt;/a&gt; puedo comprobar el user interface - o sea las paginas - de manera autom&amp;aacute;tica como si un robot seria usando toda la aplicaci&amp;oacute;n m&amp;uacute;ltiples veces al d&amp;iacute;a. Si se hace alg&amp;uacute;n error, ya se lo ve dentro de una hora en el pr&amp;oacute;ximo build.&lt;/p&gt;

&lt;p&gt;PHP frameworks como &lt;a href=&#034;http://www.oracle.com/technology/pub/articles/jansch_atk.html&#034;&gt;ATK&lt;/a&gt; y &lt;a href=&#034;http://smarty.php.net/&#034;&gt;Smarty&lt;/a&gt; no solucionan el problema mayor de PHP: no hay &lt;a href=&#034;http://www.microsoft.com/spanish/msdn/articulos/archivo/271106/voices/NPALayering.mspx&#034;&gt;separaci&amp;oacute;n&lt;/a&gt; &lt;a href=&#034;http://www.dsic.upv.es/workshops/dsdm04/files/02-Amaya-pres.pdf&#034;&gt;de&lt;/a&gt; &lt;a href=&#034;http://en.wikipedia.org/wiki/Separation_of_concerns&#034;&gt;asuntos&lt;/a&gt;. La separaci&amp;oacute;n de asuntos me permite de desarrollar c&amp;oacute;digo que atiende los asuntos asignados a la capa en que reside.&lt;/p&gt;

&lt;p&gt;Una clase en la capa de infraestructura comunica con la base de datos y retorna objetos de valores que se pasan a la capa de negocio. Yo puedo comprobar la funcionalidad de esa clase en aislamiento antes que se desarrolla el resto de la aplicaci&amp;oacute;n.&lt;/p&gt;

&lt;p&gt;Una clase en la capa de negocio que requiere datos de una base de datos para poder trabajar se puede correr en un test con una simulaci&amp;oacute;n de la infraestructura, porque no depende directamente del c&amp;oacute;digo en la capa de infraestructura. Le puedo pasar un &lt;a href=&#034;http://en.wikipedia.org/wiki/Mock_object&#034;&gt;mock object&lt;/a&gt; que tiene la misma interfaz que el objeto real, pero act&amp;uacute;a como defino en mi test.&lt;/p&gt;

&lt;p&gt;Con &lt;a href=&#034;http://en.wikipedia.org/wiki/Test-driven_development&#034;&gt;TDD&lt;/a&gt; puedo verificar la funci&amp;oacute;n correcta de cada hielo en el c&amp;oacute;digo, porque me permite de usar cada linea de c&amp;oacute;digo en una forma de laboratorio. Y si hago cualquier cambio siempre y autom&amp;aacute;ticamente se comprueba todo el c&amp;oacute;digo de nuevo.&lt;/p&gt;

&lt;p&gt;Claro ideas como TDD, &lt;a href=&#034;http://www.martinfowler.com/articles/continuousIntegration.html&#034;&gt;continuous integration&lt;/a&gt;, &lt;a href=&#034;http://martinfowler.com/articles/injection.html&#034;&gt;dependency injection&lt;/a&gt; y otras no son algo exclusivo para Java. Se puede usarlas con C, C++ y con PHP tambi&amp;eacute;n. Pero porque la historia de PHP (scripting language para paginas web) dudo mucho que los que usan PHP tienen mucho experiencia con eso. Para la mayor&amp;iacute;a de los programadores Java tambi&amp;eacute;n es algo nuevo - aunque la idea existe desde mucho tiempo.&lt;/p&gt;

&lt;p&gt;Nosotros usamos la metodolog&amp;iacute;a &lt;a href=&#034;/2007/01/31/1170302593849.html&#034;&gt;Scrum&lt;/a&gt; y usamos t&amp;eacute;cnicas generales como &lt;a href=&#034;/2006/12/08/1165587482609.html&#034;&gt;DDD&lt;/a&gt;, TDD y CI. Usamos Java porque es un lenguaje universal que nos permite aplicar eso en cualquier proyecto para cualquier plataforma y no nos limite a proyectos web. Tambi&amp;eacute;n usamos Java porque es un lenguaje OOP (object-oriented programming) y por este hecho nos ayuda dise&amp;ntilde;ar en una manera limpia. OOP fue inventado como antes de 20 anos y hay muy buena experiencia con eso.&lt;/p&gt;

&lt;p&gt;En PHP se ha cambiado mucho &amp;uacute;ltimamente. Se ha extendido PHP para poder programar con objetos. Pero sin embargo en &lt;a href=&#034;http://www.php.net&#034;&gt;http://www.php.net&lt;/a&gt; se dice: &#034;PHP is a widely-used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML.&#034; Wikipedia tiene una buena definici&amp;oacute;n para &lt;a href=&#034;http://en.wikipedia.org/wiki/Scripting_language&#034;&gt;&#034;scripting language&#034;&lt;/a&gt;.&lt;/p&gt;

&lt;!--
&lt;rdf:RDF xmlns:rdf=&#034;http://www.w3.org/1999/02/22-rdf-syntax-ns#&#034;
         xmlns:dc=&#034;http://purl.org/dc/elements/1.1/&#034;
         xmlns:trackback=&#034;http://madskills.com/public/xml/rss/module/trackback/&#034;&gt;
&lt;rdf:Description
    rdf:about=&#034;http://www.stephan-schwab.com/2007/04/13/1176512593988.html&#034;
    dc:identifier=&#034;http://www.stephan-schwab.com/2007/04/13/1176512593988.html&#034;
    dc:title=&#034;Java o PHP para desarrollar una aplicaci&amp;oacute;n web&#034;
    trackback:ping=&#034;http://www.stephan-schwab.com/addTrackBack.action?entry=1176512593988&amp;token=107616794343177453&#034; /&gt;
&lt;/rdf:RDF&gt;
--&gt;
        </description>
      
      
    
    
    
    <category>Languages</category>
    
    <category>Español</category>
    
    <comments>http://www.stephan-schwab.com/2007/04/13/1176512593988.html#comments</comments>
    <guid isPermaLink="true">http://www.stephan-schwab.com/2007/04/13/1176512593988.html</guid>
    <pubDate>Sat, 14 Apr 2007 01:03:13 GMT</pubDate>
  </item>
  
  </channel>
</rss>
