Si bien es cierto que un programador puede adaptarse a cualquier lenguaje, todo programador tiene un leguaje de programación preferido; este lenguaje es aquel en el cual se implementan más fácil las ideas, con el cual uno se siente cómodo, que se adpata a nuestra forma de pensar y de ver la cosas. Pero la realidad es que no existe el lenguaje perfecto. En el mundo real se buscan resultados. No importa en qué lenguaje uno escriba la aplicación. Lo importante es que la aplicación solucione el problema. A los programadores se les exige que desarrollen en tiempo mínimo y de la manera más eficiente posible.
Llevo 5 años programando bajo PHP como freelancer y como empleado fijo en varias empresas. Ese poco tiempo de experiencia que tengo me ha ayudado a ver cómo realmente son las cosas. Me he dado cuenta que al final no importa si desarrollo las aplicacines utilizando Programación Orientada a Objetos o Programación Estructurada. No importa si utilizo patrones como Model Vista Controlador o no. No importa si utilizo Zend Framework o CakePHP o simplemente nada. No importa si utilizo Smarty o mi propio motor de plantillas. El usuario final solo ve resultados. En un principio intenté adaptar el precio de mi trabajo al esfuerzo que hacía durante el proceso, ahora me doy cuenta que en verdad lo que debo adaptar es mi esfuerzo a lo que el mercado pague, aunque es bien dificil de hacer en una sociedad donde no existe un Mercado de Desarrollo de Software real. Pocos usuarios o clientes, saben realmente lo que es una aplicación web, porque al final solo ven resultados. Mientras la aplicación haga lo que tiene que hacer todo está bien.
Entonces… ¿Debería utilizar una nueva herramienta o simplemente una mejor técnica? Vamos a repasar las bases de todo esto…
Bases
La programación es un proceso por el cual se escribe (en un lenguaje de programación), se prueba, se depura y se mantiene el código fuente de un programa. Los programas son los elementos que forman el software, que es el conjunto de las instrucciones que ejecuta el hardware de una computadora para realizar una tarea determinada.
Para el desarrollo de programas de cierta envergadura o complejos, con ciertas garantías de calidad, es conveniente seguir alguno de los modelos de desarrollo de software existentes, en donde la programación es sólo una de las etapas del proceso de desarrollo de software.
Objetivos de la programación
La programación debe perseguir la obtención de programas de calidad. Para ello se establece una serie de factores que determinan la calidad de un programa. Algunos de los factores de calidad más importantes son los siguientes:
- Corrección. Un programa es correcto si hace lo que debe hacer tal y como se estableció en las fases previas a su desarrollo.
- Claridad. Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente, así como cuidar el estilo en la edición; de esta forma se ve facilitado el trabajo del programador, tanto en la fase de creación como en las fases posteriores de corrección de errores, ampliaciones, modificaciones, etc. Fases que pueden ser realizadas incluso por otro programador, con lo cual la claridad es aún más necesaria para que otros programadores puedan continuar el trabajo fácilmente.
- Eficiencia. Se trata de que el programa, además de realizar aquello para lo que fue creado (es decir, que sea correcto), lo haga gestionando de la mejor forma posible los recursos que utiliza.
- Portabilidad. Un programa es portable cuando tiene la capacidad de poder ejecutarse en una plataforma, ya sea hardware o software, diferente a aquélla en la que se elaboró.
Programas y algoritmos
Un algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Los programas suelen subdividirse en partes menores (módulos), de modo que la complejidad algorítmica de cada una de las partes sea menor que la del programa completo, lo cual ayuda al desarrollo del programa. Un programa está formado por algoritmos y estructura de datos.
Se han propuesto diversas técnicas de programación cuyo objetivo es mejorar tanto el proceso de creación de software como su mantenimiento. Entre ellas, se pueden mencionar las siguientes:
- Programación Estructurada: forma de escribir programas de forma clara. Para ello utiliza únicamente tres estructuras: secuencia, selección e iteración.
- Programación Modular: Es un paradigma de programación que consiste en dividir un programa en módulos ó subprogramas con el fin de hacerlo más legible y manejable. Se presenta históricamente como una evolución de la programación estructurada para solucionar problemas de programación más grandes y complejos de lo que ésta puede resolver.
- Programación Orientada a objetos (POO): Usa objetos y sus interacciones para diseñar aplicaciones y programas. Un objeto se define como la unidad que en tiempo de ejecución realiza las tareas de un programa, también a un nivel más básico se define como la instancia de una clase.
- Programación Declarativa: Está basado en el desarrollo de programas especificando o “declarando” un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solución. La solución es obtenida mediante mecanismos internos de control, sin especificar exactamente cómo encontrarla. Ejemplo: Haskell, Prolog y Lisp.
Patrones de Diseño
Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces. Un patrón de diseño es una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.
Desarrollando en la “Vida Real”.
Más aya de buscar la “Aplicación Perfecta”, en la “Vida Real” se persigue desarrollar aplicaciones funcionales en el menor tiempo posible.
Independientemente de las caracteristicas de los Lenguajes de Programacion, la “ventaja” principal de Plataformas como Visual (Basic,C#) + .NET, Delphi [opcionalmente + .NET] y Java+ (NETBEANS/Eclipse) es que ofrecen Entornos de Desarrollo Integrado que agilizan el proceso de Desarrollo, Depuración y Producción, disminuyendo el tiempo de proyección y, sobre todo, los costos; además de que facilitan a los programadores el proceso de Mantenimiento de un Software, garantizan un mejor trabajo en Equipo, ya que es simple crear una “rutina” de trabajo a seguir que se integra totalmente con las herramientas de trabajo. Entre otras cosas, ofrecen una gama enorme de librerias, extensiones y plugins que combinan las caracteristicas del IDE y la potencia de los lenguajes. Estas mismas ventajas ofrecia “el difunto” Visual FoxPro que fue (algunos creen que todavia “es”) durante talvés una década (1990-2000) el lenguaje más utilizado en República Dominicana.
Entre las “ventajas” de lenguajes como Ruby, PHP y Python es que se tiene un mayor control de la aplicación en sí, con una buena técnica se reduce bastante el código fuente de los scripts, son ligeros, totalmente independientes del sistema operativo, populares, libres, gratis, probados, de uso “general”, ya que se pueden crear aplicaciones web, de consola y aplicaciones de escritorio (gracias a GTK, Qt, wxWidgets, etc), entre otras cosas. Aparte de ZendStudio no existe un IDE para alguno de estos lenguajes que realmente llene las espectativas y que pueda ser utilizado en “la vida real”.
ZendStudio + ZendFramework es, en términos coloquiales, un verdadero “cuchillo”, puesto que ofrece las ventajas de la web, PHP, la robustes alcanzable gracias al patron de diseño MVC, disminuye el tiempo de desarrollo y mantenimiento, entre otras cosas. A pesar de unos cuantos detalles, fácilmente uno cae en “las garras” de un “monopolio” integrado por ZendGuard, ZendFramework, ZendStudio y ZendServer que claramente está orientado a ser una solución para empresas, ya sean pequeñas, medianas o grandes. Esto hace que para el “freelancer” las herramientas de Zend le queden grande.
Entonces nos queda Ruby+ Ruby On Rails y/o Python+Django para crear aplicaciones robustas de manera rápida. Aunque estos frameworks son verdaderamente buenos y cumplen con su objetivo, no encajan en el Mercado Local, además de que, a pesar de que las cosas han estado cambiando, no es tan fácil encontrar un buen Hosting que ofrezca soporte para estas tecnologías.
Mis Conclusiones.
Luego de investigar acerca de los lenguajes mencionados, se ha incrementado mi admiración por Ruby, aunque en la práctica no lo utilize. Ruby está orientado totalmente a ofrecer una herramienta real de desarrollo, robusta, fácil, simple y 100% orientado a objetos… ademas, es GRATIS. En los últimos tiempos el interprete de Ruby ha venido mejorando y cada vez pesa menos, aunque esto no es tan relevante ya que cuenta con un gran manejo de memoria. Pero, en un sentido, su fuerte siguen siendo las Aplicaciones de Consola y la Web. RubyGnome2 no es muy factible a la hora de desarrollar una aplicación grande.
PHP… php sigue siendo mi lenguaje predilecto. En los ultimos meses he estado programando aplicaciones de Escritorio con PHP-GTK. Gracias a Glade3, el soporte a POO de PHP5, y el soporte para GTKBuilder de PHP-GTK, he logrado desarrollar aplicaciones aceptables para mis ultimos clientes. Aunque el producto final, específicamente el código fuente, es muy dificil de Mantener.
Siempre he criticado a mis compañeros que utilizan VisualStudio porque: “todo está hecho, solo haces click y es fácil”, porque cuando se utilizan este tipo de herramientas realmente uno a manera personal no crece como Desarrollador, sino que aprende a dominar una herramienta y cuando estos profesionales se les presenta la ocación de crear un cron, un servicio, un deamon o un socket, inclusive una web, entre otras cosas no “visuales”, es como nadar en contra de la corriente.
Gracias a la fuerte influencia del ambiente de trabajo en que estoy ultimamente, le he puesto atención a .NET… y descubrí que, para desarrollar, .NET es realmente una maravilla (lo debo aceptar aunque soy Linuxero). Así que me he puesto a probar el ProyectoMono, en especial MonoDevelop con C# (un gran lenguaje).
Por mi necesidad de crear aplicaciones de Escritorio robustas en el menor tiempo posible, C#+.NET+MonoDevelop es una gran opción. Por ahí anda Java, pero Java sigue siendo un lenguaje muy poco flexible, lo que aumenta el tiempo de aprendizaje, todavía es muy pesado y es una plataforma extremandamente grande, la cual tardaría años para dominar.
Descarto aprender una mejorar técnica de programación puesto que, aunque ahorraría tiempo y dinero, aun sigue existiendo la “fustración” de crear aplicaciones que no son valoradas por el Usuario Final.
Entonces me quedan 4 opciones:
1.- Aprender C# basandome en el ProyectoMono.
2.- Crear un IDE para PHP/GTK
3.- A pesar de la Ignorancia del Usuario Final, utilizar Ruby + RubyOnRails.
4.- Seguir utilizando ZendFramework y pagar por licencias para ZendStudio y ZendGuard, al menos.
La opción 4 queda descartada porque representa una inversión de dinero. Si elijo la 3 igual estaría, creando aplicaciones desvalorizadas por los clientes. Para la 2, no tengo tiempo… Así que no me queda de otra que Aprender C#.
number of view: 36
david General, Programacion desarrollo
Últimos comentarios