Archivo

Entradas Etiquetadas ‘desarrollo’

Otra forma de ver la Universidad…

Sábado, 26 de Septiembre de 2009

En los últimos días he estado hablando mucho con mis compañeros de todas las cosas que nos molestan de la PUCMM, de sus profesores, servicios, las maneras tan “complicadas” de conseguir las cosas, la burocracia, en fin, un montón de cosas que a nosotros no nos gustan, y he llegado a un gran dilema: o estamos todos los estudiantes mal o la Universidad no se interesa por nosotros!!!

En días pasados, en una clase de Redes volvió a relucir el tema de como se dan las cosas en la Universidad, los bedeles que se la pasan en Youtube, algunos servicios que ahora quieren imponer( como la porquería de correo de Micro$oft), el Departamento, etc etc etc., a lo que el profesor responde:” Muchachos quejense de las cosas que pasan, vayan donde tienen que ir, porque yo no les puedo resolver esos problemas,  quejense en el lugar adecuado “.   En ese momento empezé a ver las cosas de otra manera: “La Universidad sigue siendo mala, pero no es sólo culpa de quienes están al frente, sino también de cada uno de los estudiantes”.

También recuerdo que un profesor decía que hay estudiantes que le tienen ODIO a su Universidad, y me parece que el tiene razón, creo que la manera de que las cosas marchen bien no es criticando sino haciendo( aunque esto no hace que me disculpe por las cosas que anteriormente yo haya dicho) y es por eso que me planteo como meta, y los invito a todos ustedes a  que me acompañen, a tratar de hacer de PUCMM una mejor Universidad, un mejor sitio, una mejor enseñanza, siempre que podamos colaborar pues hagámoslo….

Los invito a todos a que empecemos a reclamar nuestros derechos y no criticar sin razón, a aportar cuando sea posible, a mostrarle a la PUCMM que es lo que esperamos de ella y no que ellos elijan por nosotros por el simple hecho de que algo tienen que hacer con nosotros…Les invito a que nos unamos para beneficiarnos nosotros mismos, y si no, al menos ser parte de quienes iniciaron un verdadero cambio…

number of view: 41

Williams Mendez General, Internet, Linux, Mac, Programacion, Tecnologia, Telefonia, Video Juegos, VoIP, Windows, juegos , , , , , , , , , , , , , , , , , , , , , ,

Una nueva herramienta o simplemente una mejor técnica…

Miércoles, 22 de Abril de 2009

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

Libertad en la educacion: necesidad o capricho?

Lunes, 9 de Marzo de 2009

En Wikipedia se define Universidad de la siguiente manera:

Se denomina universidad (del latín universitas, -atis), al establecimiento o conjunto de unidades educacionales dedicadas a la enseñanza superior y la investigación.

También definen educación de la siguiente manera:

La Educación (del latín educere “guiar, conducir” o educare “formar, instruir”) puede definirse como:

  • El proceso multidireccional mediante el cual se transmiten conocimientos, valores, costumbres y formas de actuar. La educación no sólo se produce a través de la palabra: está presente en todas nuestras acciones, sentimientos y actitudes.
  • El proceso de vinculación y concienciación cultural, moral y conductual. Así, a través de la educación, las nuevas generaciones asimilan y aprenden los conocimientos, normas de conducta, modos de ser y formas de ver el mundo de generaciones anteriores, creando además otros nuevos.
  • Proceso de socialización formal de los individuos de una sociedad.
  • La Educación se comparte entre las personas por medio de nuestras ideas, cultura, conocimientos, etc. respetando siempre a los demás. Esta no siempre se da en el aula. Existen tres tipos de Educación: la formal, la no formal y la informal.

Tambien sobre Ingeniero:

Funciones del ingeniero

  1. Investigación: Búsqueda de nuevos conocimientos y técnicas, de estudio y en el campo laboral.
  2. Desarrollo: Empleo de nuevos conocimientos y técnicas.
  3. Diseño: Especificar las soluciones.
  4. Producción: Transformación de materias primas en productos.
  5. Construcción: Llevar a la realidad la solución de diseño.
  6. Operación: Proceso de manutención y administración para optimizar productividad.
  7. Ventas: Ofrecer servicios, herramientas y productos.
  8. Administración: Participar en la resolución de problemas. Planificar, organizar, programar, dirigir y controlar la construcción y montaje industrial de todo tipo de obras de ingeniería civil, sean éstas edificacionales, hidráulicas, viales o marítimas, entre otras..

Ética profesional

  • Los ingenieros deben reconocer que vida, seguridad, salud y bienestar de la población dependen de su juicio.
  • No se deben aprobar planos o especificaciones que no tengan un diseño seguro.
  • Se deben realizar revisiones periódicas de seguridad y confiabilidad.
  • Prestar servicios productivos a la comunidad.
  • Comprometerse a mejorar el ambiente.
  • Los ingenieros deben prestar servicios en sus áreas de competencia.
  • Deben emitir informes públicos. Se debe expresar la información en forma clara y honesta.
  • Deben crear su reputación profesional sobre el mérito de sus servicios.
  • No usar equipamiento fiscal o privado para uso personal.
  • Acrecentar honor, integridad y dignidad de la profesión.
  • Debe continuar con el desarrollo profesional (Continuar la educación).
  • Apoyar a sociedades profesionales.
  • Utilizar el Ingenio para resolver problemas.
  • Ser consciente de su responsabilidad en su trabajo.
  • No levantar falsos testimonios contra un colega.
  • Debe conocer las teorias cientificas para explicar los hechos y actuar sobre ellos.

El pasado Sábado he presentado una propuesta de proyecto orientado a solucionar problemas y ofrecer mejores servicios a los estudiantes de la Universidad. El proyecto ofrecía soluciones de Software Libre, como entiendo yo que debe ser la educación: Libre. ¿Es posible que un proyecto pueda ser rechazado porque ofrece LIBERTAD? Pues como dicen: todo es posible…

Cuando se trata de educar, a mi entender, se deben seguir procedimientos, algunas normas o reglas, dar cierta orientacion de lo que se busca, pero NUNCA JAMAS imponer los lineamientos a seguir, impidiendo el desarrollo del estudiante y la posibilidad de desarrollar habilidades en todos los campos posibles y/o deseados por el interesado en aprender, en nuestro caso, nosotros los estudiantes. Estoy bastante enojado por la forma en la que PROFESORES INGENIEROS hablan sobre temas que no dominan y luego quieren tratar de confundir al estudiante, obligandolos a utilizar las Herramientas que ellos conocen, quitando la posibilidad de que el estudiante, ya casi Ingeniero, investigue en otras áreas actualmente en un increíble y no repentino crecimiento.

El hecho de que un profesor no sepa de lo que está hablando me hace pensar que si no es porque me he dedicado a investigar por mi cuenta las cosas que a mi me gustan hacer, hoy yo fuera otro ignorante mas…

Por qué razón discutirias de vehículos si nunca has manejado uno, o simplemente ni siquiera sabes como funciona? Lamentablemente nuestros guías son así…Pero porque nosotros permitimos que sea así, porque para muchos es más importante “Salir de la Universidad” o “Graudarse con Honores” o simplemente decir “Ese profesor es asi, no hay nada que hacer” y que todo siga igual, y al final todos esos mediocres ingenieros salen de la universidad sin saber absolutamente nada simplemente “Porque las cosas son así”. Me da pena con muchos de mis compañeros que nunca han sentido el deseo de ser curiosos, de preguntarse por qué esto es así o no es así, por qué elegir esto o aquello…

Quise usar software libre para la universidad y se me nego, simplemente por que la universidad no usa software libre…Pero me lo negaron algunos profesores. Luego de saber esto, alguien me dijo: “Es inconcebible ( veo rara esa palabra) que sean personas del area tecnica que dicten normas de hacia donde debe dirigirse la investigacion y el conocimiento : es como si los hombres de cubierta quisieran dirigir el barco. Tan simple como eso.”. Estas son palabras de alguien que no puedo comprometer, pero que tiene toda la razon…Al fin y al cabo no son ni los profesores ni los estudiantes quienes deciden las politicas de las Universidades…

¿Por qué habríamos de negarnos a la Libertad? ¿Es mejor vivir atado y dependiente? ¿Qué ventajas me da Alquilar software y no Desarrollarlo por mi mismo si yo soy un Ingeniero? ¿Por que si soy ingeniero debo limitarme a usar cosas que no se como funcionan? Como ingeniero, ¿Nunca mas tendre que conocer nuevas tecnologias y diferentes ramas del saber? ¿ Cual es mi mision como Ingeniero y la vez educador? ¿Cual es mi mision como Ingeniero y a la vez empleado? ¿Cual es mi mision como Ingeniero y a la vez Estudiante? ¿Cual es mi mision como ingeniero de verdad?

Creo la tecnica de crear confusion para poder hablar en el unico campo que conozco no es para nada Etico, y mucho menos viniendo de un Educador profesional, Ingeniero y con alto rango…

Desde el inicio de este artículo he mostrado clara y precisamente mi inclinacion al software libre, especialmente a sistemas basados en GNU/Linux…Nunca propuse a la Universidad una migracion a estos sistemas, solo propuse el inicio de su uso, pero se me fue negado por una ENORME E IGNORANTE PREGUNTA ESTUPIDA E INCOMPETENTE DE UN INGENIERO: ¿Quien le va a dar soporte?

Dios!!! ¿Somos ingenieros para solo usar lo que alguna vez aprendí y me olvido del resto?

La educacion de por sí debe ser libre! O imagíne usted que Newton hubiese patentado F = ma y que para usar esta simple ecuacion usted tuviera que pagar!!! O peor aún, que la universidad le imponga que usted tiene que usar esta formula, pero debe comprar la licencia! O piratearla!!!

Asi es mi pais, asi son mis profesores, asi seran mis colegas… Dios Bendiga este paraíso!!!

number of view: 20

Williams Mendez General, Internet, Linux, Mac, Programacion, Tecnologia, Telefonia, juegos , , , , , , , , , , , , , , , , , , , , , , , ,

SYMBRION: Symbiotic Evolutionary Robot Organisms

Lunes, 19 de Enero de 2009

Alguien se acuerda de cuando los transformers se fusionaban???

bueno… varias universidades europeas estan trabajando en algo así. Muchos robocitos que se “pegan” unos a otros formando robots mas grandes.

Pueden tomar una forma especifica dependiendo de la necesidad, y pensar como un ente o como varios.

Las aplicaciones de esta tecnología se limita a la imaginación.

Pagina oficial: http://www.symbrion.eu/

number of view: 20

Lex General, Tecnologia , , ,