SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
Visiones sobre el mundo de la
programación
José Manuel Ortega Candel
jmoc25@gmail.com
2
1.Introducción
En este artículo voy a tratar la profesión de programador para intentar responder a las
preguntas que toda persona que se quiera introducir en este mundo debería hacerse en
algún momento. También comentaré los diferentes perfiles que podemos encontrar, así
como las cualidades que debe tener todo aquel que quiera desarrollar una carrera en un
campo tan amplio como es la programación. Comentaré aquellas metodologías que han
surgido en los últimos años para el trabajo en equipo y explicaré el concepto de
framework, en particular en aquellos aplicables en entornos Java/J2EE. Por último,
mencionaré los libros técnicos que todo programador debería tener como referencia en
su trabajo diario.
En ocasiones, se ha comentado que ser programador es una profesión vocacional para
la cual es necesario tener un talento especial y, como los lectores saben, es una
profesión donde la intuición, la imaginación, el pensamiento lógico y el orden juegan un
papel fundamental. También es cierto que hoy en día cada vez existen más herramientas
para facilitar el trabajo a los empiezan, y, gracias a la evolución en ingeniería del
software, algunas funciones de programación han sido automatizadas. De esta forma,
los programadores han ido asumiendo algunas de las responsabilidades llevadas a cabo
normalmente por los ingenieros de software.
Otra de las características a destacar, es que en esta profesión hay que realizar un
esfuerzo extra para mantenerse actualizado, y la formación es casi continua en la
búsqueda constante de la mejora, además, es tan importante formarse y conocer varios
de lenguajes de programación (alto y medio-bajo nivel), como conocer las metodologías
para trabajar en equipo.
En primer lugar, me gustaría comentar las claves y el conjunto de buenas de prácticas
que todo programador debe tener presente en su trabajo diario.
3
2. Claves para ser un buen programador
 Rodearse de buenos programadores, tanto en la formación como en el trabajo
diario.
 Interesarte por la programación y estar constantemente actualizado.
 Hablar con otros programadores y obtener feedback sobre cómo optimizar el
código que estás desarrollando.
 Trata de programar con frecuencia, diariamente si es posible.
 Trabajar en proyectos con otros programadores.
 Al escribir código, intentar cumplir con los estándares de cada lenguaje.
 Adquirir buenas prácticas y conocimientos sobre metodologías y patrones de
diseño.
 Dedicar muchas horas y tener una gran disciplina y compromiso con tu trabajo.
 Leer libros técnicos sobre programación que te ayuden a reciclarte y a conocer
nuevos lenguajes y metodologías de desarrollo.
 Reutilizar todo el código que sea posible. Esto es lo que se conoce como “No
reinventar la rueda”.
 A la hora de escribir código hacerlo de forma modular y escalable.
3. Buenas prácticas de programación
 Conocer los fundamentos de la Ingeniería del Software.
 Saber manejarse con estructuras y tipos abstractos de datos (listas, pilas,
colas, árboles, hashes).
 Conocer los principios básicos de la Algoritmia.
 Conocer patrones de diseño y aplicarlos a la resolución de problemas.
4
4. Perfiles de programador
Dentro del ámbito de la programación podemos encontrar diferentes perfiles
dependiendo del entorno para el cual vaya destinada la aplicación (dispositivos móviles,
sitios web, procesos de una base de datos, aplicaciones de escritorio, aplicaciones dentro
de servidores, mainframes).
Debido a que las tendencias actuales del mercado son muy cambiantes, esto exige que
los programadores tengan la capacidad de aprender nuevos lenguajes de programación.
Es por eso hay que tener en cuenta todos los posibles perfiles junto con los lenguajes
más representativos con los que se relaciona:
 Programador Entorno Web: Aquí hay que diferenciar la parte relacionada con
los aspectos visuales de la parte que ejecuta la lógica de negocio.
Front End - HTML,XML, JavaScript
Back End - Ruby on Rails/Python/Java/C#/PHP/Asp .Net
 Programador Entorno Host/ MainFrames: Cobol, Perl, C/C++,Shell Scripts
 Programador Entorno móvil: Android (Java), iOS (Objective-C)
 Aplicaciones de escritorio: Visual Basic .Net, Delphi, Java
 Base de datos: PL/SQL, Transact SQL
5. Lenguajes
No importa la cantidad de lenguajes que domine un programador, lo importante es
conocer los distintos tipos, así como los paradigmas y metodologías que los envuelve.
Cada uno de estos lenguajes tienen sus particularidades, pero todos pueden clasificarse
en pocas familias de lenguajes de programación (procedimentales, orientados a objetos,
funcionales, scripting, orientados a etiquetas).De entre todos los paradigmas, el más
importante es el de orientación a objetos, el cual es fundamental conocer hoy en día
para el desarrollo tanto de aplicaciones web como de escritorio.
En mi opinión, hay que conocer como mínimo uno de cada tipo de paradigma, ya que
en cada uno se ofrecen perspectivas diferentes para la resolución de problemas.
 Un lenguaje de “scripting” (Ruby, Perl, Bash ShellScript) que te permita
automatizar tareas y desarrollar prototipos rápidos.
 Un lenguaje de “medio/bajo nivel” (C) que te permita conocer cómo se
maneja la memoria, acceder a hardware directamente y que te permite entender
cómo funcionan las optimizaciones que luego se aplican en lenguajes de alto
nivel.
5
 Un lenguaje de alto nivel que normalmente usarás para trabajar (C++, Java,
Objective-C, Javascript, PHP, Python). Uno de los lenguajes que más está
destacando hoy en día es Python, que es un lenguaje de script y bastante rápido
si lo comparamos con otros más pesados como Java, con el cual se puede
programar empleando programación lineal, estructurada y orientada a objetos
tanto aplicaciones de escritorio como aplicaciones web.
6. Las cualidades de un buen programador
Más allá de controlar más o menos lenguajes, lo que hace un programador se diferencie
del resto es su capacidad para trabajar en equipo e investigar en nuevas metodologías
que pueda aplicar en su trabajo diario. Entre estas cualidades destacan:
 6.1. Capacidad para trabajar en equipo
Todo programador debe ser capaz de trabajar de forma conjunta con otras
personas para el desarrollo de un proyecto en los términos de calidad, eficiencia
y plazos establecidos por el cliente. La programación, en particular, es un campo
en el que la comunicación con otras personas ha de ser fluída, abierta y efectiva
si se quiere obtener un buen resultado. El aspecto más importante es la división
de las tareas de forma equitativa y acorde a las capacidades y competencias de
cada miembro del equipo.
 6.2. Gestión de proyectos
Sea cual sea la dificultad del proyecto, el líder deberá hacerse cargo del proyecto
y asignar el trabajo. El gestor de proyectos supervisará la planificación y el
análisis y se hará cargo del diseño del sistema, su programación y su
implementación. Un buen programador es el que es capaz de ir aprendiendo de
la gente que le rodea (analista, jefe de equipo) y a medida que va adquiriendo
experiencia tener responsabilidades cada vez mayores en los proyectos en los
que trabaje.
 6.3. Idiomas inglés
La mayoría de documentación y libros están en inglés, por lo que es
fundamental conocerlo bien y saber manejarse con los aspectos técnicos básicos
de un lenguaje tales como la creación de variables, clases, objetos, funciones.
 6.4. Competencia profesional
Todo programador ha de ser competente en una gran variedad de lenguajes de
programación, o al menos tener interés por aprender otros lenguajes además de
los que ya sabe. Formar un equipo de programadores competentes en diversas
áreas asegurará el éxito de cualquier proyecto.
6
 6.5. Resolución de problemas
Hoy en día es prácticamente imposible saberse de memoria un lenguaje al
100%, de forma que la tendencia es conocer la sintaxis que se emplea. Lo más
importante no es saber programar en un lenguaje y saberse el API de memoria,
sino estar preparado para resolver un problema en el lenguaje que en ese
momento se nos pida profesionalmente.
7. Habilidades más importantes para los programadores del futuro
Además de tener habilidades analíticas y de resolución de problemas, los programadores
se verán obligados a adquirir una serie de conocimientos y destrezas en función del
campo en el cual desarrolla su carrera profesional.
 7.1. Conocer al menos uno de los "3 Grandes" (Java, .NET, PHP). Hoy en
día es imprescindible conocer al menos uno de los 3 grandes sistemas de
desarrollo: Java, .NET o PHP. A medida que los proyectos crecen y se van
añadiendo funcionalidades, vamos a necesitar conocer los frameworks y librerías
asociadas a cada sistema con profundidad.
 7.2. Aplicaciones RIA - Rich Internet Applications. La tendencia en RIA es
conocer el uso de herramientas que faciliten la creación de aplicaciones web
como si fuesen de escritorio gracias al uso de tecnologías como HTML5,
JavaFX, SilverLight, así como las mejoras que se están desarrollando en los
motores JavaScript de los navegadores.
 7.3. Servicios web. REST, SOAP, JSON son términos con los cuáles un
programador tendrá que manejarse cuando se introduzca en el desarrollo de
servicios web.
 7.4. Habilidades de comunicación. Cada vez más, los programadores están
participando en las reuniones que no son de desarrollo , pero sí fundamentales
para obtener el feedback necesario para que nuestro trabajo cumpla las
necesidades del cliente. Para ello, es necesario mejorar las habilidades de
comunicación con nuestros analistas y jefes de proyectos.
 7.5. Conocer nuevos lenguajes. Lenguajes como Ruby, Python o Groovy
todavía no están entre los grandes, pero cada vez son más populares gracias al
uso de frameworks como SilverLight y Grails.
7
 7.6. Metodologías ágiles. Los desarrolladores que tengan experiencia en trabajar
en equipo y en ambientes ágiles son muy demandados y van a serlo más en los
próximos años. El uso de metodologías ágiles como Scrum, Kanban, Extreme
Programming(XP),Test Driven Development (TDD),Lean-Agile, se están
utilizando cada vez más en los proyectos.
 7.7. Desarrollo móvil. Existen varios enfoques en el desarrollo móvil:
aplicaciones web diseñadas para funcionar en dispositivos móviles, y
aplicaciones que se ejecutan directamente en los dispositivos y que han sido
programadas de forma nativa.
 7.8. Conocimientos de Cloud Computing. Términos como SaaS (Software as a
Service) y aplicaciones en la nube son cada vez más populares y será necesario
conocer el funcionamiento de estos sistemas.
 7.9. Proyectos Open Source. Otros de los aspectos que más ha crecido en los
últimos años es la posibilidad de colaborar en proyectos Open Source. Algunas
de las tareas a destacar son:
1. Traducir/Documentar, donde con pocos conocimientos técnicos
puedes ayudar a traducir las interfaces de usuario, pantallas,
botones, menús o comentarios en el código fuente. Otra
posibilidad es la realización o traducción de la documentación,
los manuales de ayuda o el sitio web del proyecto.
2. Reporte de errores, donde se requiere un mayor conocimiento
funcional de la aplicación ya que hay que determinar las
condiciones bajo las cuáles se produce el error.
3. Beta-tester, donde los programadores determinan cómo se va a
comportar el programa bajo distintas condiciones y casuísticas.
Su trabajo es probar los programas exhaustivamente e informar
todo lo que van encontrando en el camino.
4. Mejorar un sitio web, si controlas alguno de los gestores de
contenidos más usados del mercado como Joomla, WordPress o
Drupal es una excelente alternativa para terminar alguna sección
de una página que esté incompleta, corregir errores o
simplemente colaborar con la publicación de actualizaciones. En
este apartado también cabría incluir la posibilidad de mejorar el
posicionamiento del sitio haciendo tareas de SEO.
8
8. J2EE: Java en la empresa
Las arquitecturas basadas en Java han tenido una gran evolución en el dominio
empresarial en los últimos años. Las razones principales de su éxito en la empresa han
sido:
 Programación independiente del Sistema Operativo
 Gran variedad de librerías existentes
 Rapidez de desarrollo y en el aprendizaje
 Fiabilidad y escalabilidad
Una de las mayores ventajas que aportan las arquitecturas basadas en Java es la
flexibilidad con respecto al desarrollo de las aplicaciones, en el sentido de que permite
comenzar el desarrollo de una aplicación en un entorno windows, y luego realizar la
subida a entornos productivos en servidores Unix/Linux, con las garantías de que la
aplicación se va a comportar de forma muy similar en todos ellos.
 8.1. Herramientas y frameworks J2EE
El número de librerías que se han desarrollado para Java no lo tiene ningún otro
lenguaje a día de hoy. Existen multitud de librerías que nos permiten simplificar
muchas de las tareas que necesitamos realizar. Por ejemplo, la librería log4java
nos simplifica las tareas de generación de ficheros de logs.
Entre las herramientas que se emplean en proyectos Java/J2EE podemos
destacar:
 Entornos de desarrollo: Eclipse, NetBeans, IBM WebSphere
 Servidores J2EE:Tomcat,GlassFish,JBoss,WebLogic
 Control de versiones/repositorios de código: CVS, SVN, Git
 Gestión de proyectos :Jira, Quark, Confluence, Jenkins, Maven, Junit
 Frameworks: Apache Struts, Spring, Java Server Faces, Enterprise Java Beans,
Java Persistence API, Hibernate
Los frameworks como herramientas de trabajo ofrecen un desarrollo ágil en el sentido
que te permiten abstraerte de funcionamientos a bajo nivel y poder centrarte en el nivel
funcional de la aplicación.
Uno de los frameworks más extendidos en el desarrollo de aplicaciones J2EE es el de
Spring, que cubre gran cantidad de posibilidades como configuración en ficheros XML,
facilidades para la creación de workflows (flujos de trabajo) y programación orientada a
aspectos (AOP).
9
 8.2.Metodologías ágiles en J2EE
El uso de metodologías ágiles como Scrum, XP se ha extendido en entornos
Java/J2EE en los últimos años, por ser las más adecuadas en entornos donde los
requerimientos de negocio son desconocidos o cambiantes.
Otra de las metodologías destacadas que también se utiliza mucho en entornos
donde hay cambios de forma contínua de requisitos es TDD (Test Driven
Development), donde el objetivo es desarrollar las pruebas a partir de los
requisitos y posteriormente se realiza el refactoring que permita pasar las
pruebas.
Para aplicar algunas de estas metodologías en el trabajo diario, una de las
mejores herramientas es trello, que permite organizar las tareas y realizar un
seguimiento de las mismas, así como visualizar los actores involucrados en cada
una de ellas.
 8.3. Estructura proyectos J2EE
En cuanto a la estructura que tienen los proyectos que emplean arquitecturas
J2EE podemos destacar:
Departamento I+D: Se dedican a la investigación, innovación y desarrollo de
las nuevas tecnologías que formarían la parte de arquitectura. Dentro del mismo
habría un departamento de arquitectura que se encarga del desarrollo de una
arquitectura J2EE, utilizando algunos de los frameworks comentados
anteriormente.
Jefes de proyecto, analistas y programadores se encargarían de los análisis,
diseños, desarrollos, pruebas y mantenimiento del conjunto de aplicativos de la
empresa. Todos ellos emplearían como base la arquitectura ya desarrollada por
el departamento de I+D.
Es muy importante que toda aplicación empresarial separe la parte de
Presentación (Front-end) de la parte de lógica de negocio (Back-end).Es lo que
típicamente se conoce como MVC (Modelo Vista Controlador).
Este modelo de separación en 3 capas toma especial importancia en aplicaciones
donde evolucionan de forma independiente cada una de las capas, porque
muchas veces se solicita modificar la lógica interna de una aplicación sin que se
vea modificada la forma de presentar estos elementos y viceversa.
10
La parte de front-end muchas veces resulta ser la parte fundamental de un portal,
pero en la empresa, en muchas ocasiones, nos encontramos que es al contrario y
que la gran complejidad de una aplicación se encuentra en los procesos de
negocio que se realizan en parte de back-end.
9. Libros técnicos
Título Autor Editorial
Clean Code: A Handbook of
Agile Software Craftsmanship(1)
Robert C. Martin Prentice Hall
Head First Design Patterns Elisabeth Freeman, Eric
Freeman, Bert Bates
O'Reilly
Pragmatic programmer: from
journeyman to master
Andy Hunt, David
Thomas
Addison-Wesley
Code Simplicity: The Science of
Software Design: The
Fundamentals of Software
Max Kanat-Alexander O'Reilly
Design Patterns: Elements of
Reusable Object-Oriented
Software(2)
Erich Gamma, Richard
Helm, Ralph Johnson,
John Vissides
Addison-Wesley
(1)Disponible también en español con el título: Código Limpio: Manual de estilo para el
desarrollo ágil de software
(2)Disponible también en español con el título: Patrones de diseño
11
Para sentar las bases para ser un buen programador es fundamental aprender sobre
patrones de diseño y buenas prácticas de programación. Para ello, es interesante contar
con libros de referencia como “Clean Code” o “Patrones de diseño”. Estos libros
tratan de explicar que más allá de que el código compile, e incluso que funcione, está la
buena organización del código y su óptima implementación.
10. Conclusiones
La experiencia como programador te permitirá descubrir que al final todos los lenguajes
funcionan igual y que el objetivo final de todo programador es abstraerse del lenguaje
para la resolución de problemas y plantear soluciones a los mismos sin conocer a fondo
un lenguaje en concreto. Esta capacidad de abstraerte del lenguaje te permitirá pasar de
ser un programador, a otro cargo con mayores responsabilidades y hacer evolucionar tu
carrera un paso más allá. Los mejores programadores no son sólo aquellos que saben
más lenguajes ni escriben más código sino aquellos que además lo hacen pensando en
patrones de diseño, con unos algoritmos y aplicando técnicas de programación
avanzada.

Más contenido relacionado

La actualidad más candente

Los lenguajes de programacion en el campo laboral y productivo sayyid valder...
Los lenguajes de programacion en el campo laboral y productivo  sayyid valder...Los lenguajes de programacion en el campo laboral y productivo  sayyid valder...
Los lenguajes de programacion en el campo laboral y productivo sayyid valder...XxJahenValderramaxX
 
6 Lenguajes de programación mas usados
6 Lenguajes de programación mas usados 6 Lenguajes de programación mas usados
6 Lenguajes de programación mas usados RobertoAntonioValbue
 
Lenguajes de Programacion
Lenguajes de ProgramacionLenguajes de Programacion
Lenguajes de ProgramacionAdrianGalarza
 
Zinjai como entorno de programación
Zinjai como entorno de programación Zinjai como entorno de programación
Zinjai como entorno de programación Leonela Yuquilema
 
Alexandrarevelo 10jm 4p Tarea01 Programacion
Alexandrarevelo 10jm 4p Tarea01 ProgramacionAlexandrarevelo 10jm 4p Tarea01 Programacion
Alexandrarevelo 10jm 4p Tarea01 Programacionguestbe59d1
 
Clasificación de lenguajes de
Clasificación de lenguajes deClasificación de lenguajes de
Clasificación de lenguajes deJoRgEp10
 
Cuadro comparativo
Cuadro comparativoCuadro comparativo
Cuadro comparativoedwin quiroa
 
INTRODUCCION A LA INGENIERA DE SOFTWARE
INTRODUCCION A LA INGENIERA DE SOFTWAREINTRODUCCION A LA INGENIERA DE SOFTWARE
INTRODUCCION A LA INGENIERA DE SOFTWAREVictor Herrera
 
Clasificacion de los lenguajes
Clasificacion de los lenguajesClasificacion de los lenguajes
Clasificacion de los lenguajesRBAC92
 
Como convertirse en Programador en la Mision Sucre
Como convertirse en Programador en la Mision SucreComo convertirse en Programador en la Mision Sucre
Como convertirse en Programador en la Mision SucreStephenson Prieto
 
Presentación informatica semana 4
Presentación informatica semana 4Presentación informatica semana 4
Presentación informatica semana 4ANDRESFELIPECHAMORRO
 

La actualidad más candente (18)

Como ser programador
Como ser programadorComo ser programador
Como ser programador
 
Los lenguajes de programacion en el campo laboral y productivo sayyid valder...
Los lenguajes de programacion en el campo laboral y productivo  sayyid valder...Los lenguajes de programacion en el campo laboral y productivo  sayyid valder...
Los lenguajes de programacion en el campo laboral y productivo sayyid valder...
 
6 Lenguajes de programación mas usados
6 Lenguajes de programación mas usados 6 Lenguajes de programación mas usados
6 Lenguajes de programación mas usados
 
Lenguajes de Programacion
Lenguajes de ProgramacionLenguajes de Programacion
Lenguajes de Programacion
 
Zinjai como entorno de programación
Zinjai como entorno de programación Zinjai como entorno de programación
Zinjai como entorno de programación
 
Alexandrarevelo 10jm 4p Tarea01 Programacion
Alexandrarevelo 10jm 4p Tarea01 ProgramacionAlexandrarevelo 10jm 4p Tarea01 Programacion
Alexandrarevelo 10jm 4p Tarea01 Programacion
 
Introduccion programacion
Introduccion programacionIntroduccion programacion
Introduccion programacion
 
9
99
9
 
Analisis desarrollo-patrones-j2 ee
Analisis desarrollo-patrones-j2 eeAnalisis desarrollo-patrones-j2 ee
Analisis desarrollo-patrones-j2 ee
 
Zinjai
ZinjaiZinjai
Zinjai
 
Clasificación de lenguajes de
Clasificación de lenguajes deClasificación de lenguajes de
Clasificación de lenguajes de
 
Desarrollo Full Stack. El nuevo rol del programador
Desarrollo Full Stack. El nuevo rol del programadorDesarrollo Full Stack. El nuevo rol del programador
Desarrollo Full Stack. El nuevo rol del programador
 
revista
revista revista
revista
 
Cuadro comparativo
Cuadro comparativoCuadro comparativo
Cuadro comparativo
 
INTRODUCCION A LA INGENIERA DE SOFTWARE
INTRODUCCION A LA INGENIERA DE SOFTWAREINTRODUCCION A LA INGENIERA DE SOFTWARE
INTRODUCCION A LA INGENIERA DE SOFTWARE
 
Clasificacion de los lenguajes
Clasificacion de los lenguajesClasificacion de los lenguajes
Clasificacion de los lenguajes
 
Como convertirse en Programador en la Mision Sucre
Como convertirse en Programador en la Mision SucreComo convertirse en Programador en la Mision Sucre
Como convertirse en Programador en la Mision Sucre
 
Presentación informatica semana 4
Presentación informatica semana 4Presentación informatica semana 4
Presentación informatica semana 4
 

Similar a Programmer visions

Presentación ejercicio 10 celiz alan
Presentación ejercicio 10 celiz alanPresentación ejercicio 10 celiz alan
Presentación ejercicio 10 celiz alanDavid-Celiz03
 
Introducción a la programacion.pdf
Introducción a la programacion.pdfIntroducción a la programacion.pdf
Introducción a la programacion.pdfIvanaTrento
 
Libro 3 presentación tareas y saber del programador
Libro 3 presentación tareas y saber del programadorLibro 3 presentación tareas y saber del programador
Libro 3 presentación tareas y saber del programadordavidcab
 
Preguntas y Respuestas 2
Preguntas y Respuestas 2Preguntas y Respuestas 2
Preguntas y Respuestas 2Fede Garcia
 
Aprende a Programar: Introducción
Aprende a Programar: IntroducciónAprende a Programar: Introducción
Aprende a Programar: IntroducciónDigital Learning SL
 
Framework para desarrollo de apps móviles
Framework para desarrollo de apps móvilesFramework para desarrollo de apps móviles
Framework para desarrollo de apps móvilesIván Campaña Naranjo
 
beneficio de tener conocimientos y habilidades, en el uso de lenguajes de pro...
beneficio de tener conocimientos y habilidades, en el uso de lenguajes de pro...beneficio de tener conocimientos y habilidades, en el uso de lenguajes de pro...
beneficio de tener conocimientos y habilidades, en el uso de lenguajes de pro...NEYTELLOPINTO
 
Presentación lenguajes de programación
Presentación lenguajes de programaciónPresentación lenguajes de programación
Presentación lenguajes de programaciónzanahoria2015
 
Presentación lenguajes de programación
Presentación lenguajes de programaciónPresentación lenguajes de programación
Presentación lenguajes de programaciónzanahoria2015
 
Programacion ii capitulo3
Programacion ii capitulo3Programacion ii capitulo3
Programacion ii capitulo3Halmiron85
 
Los tipos de lenguaje de programación
Los tipos de lenguaje de programaciónLos tipos de lenguaje de programación
Los tipos de lenguaje de programaciónKareliaRivas
 
Libro 3: tareas y saber del programaador
Libro 3: tareas y saber del programaadorLibro 3: tareas y saber del programaador
Libro 3: tareas y saber del programaadorsocrates12854
 

Similar a Programmer visions (20)

Presentación ejercicio 10 celiz alan
Presentación ejercicio 10 celiz alanPresentación ejercicio 10 celiz alan
Presentación ejercicio 10 celiz alan
 
Introducción a la programacion.pdf
Introducción a la programacion.pdfIntroducción a la programacion.pdf
Introducción a la programacion.pdf
 
Power point 3 y 4
Power point 3 y 4Power point 3 y 4
Power point 3 y 4
 
La programación.pptx
La programación.pptxLa programación.pptx
La programación.pptx
 
Libro 3 presentación tareas y saber del programador
Libro 3 presentación tareas y saber del programadorLibro 3 presentación tareas y saber del programador
Libro 3 presentación tareas y saber del programador
 
Preguntas y Respuestas 2
Preguntas y Respuestas 2Preguntas y Respuestas 2
Preguntas y Respuestas 2
 
Presentación del tema.pptx
Presentación del tema.pptxPresentación del tema.pptx
Presentación del tema.pptx
 
Aprende a Programar: Introducción
Aprende a Programar: IntroducciónAprende a Programar: Introducción
Aprende a Programar: Introducción
 
Framework para desarrollo de apps móviles
Framework para desarrollo de apps móvilesFramework para desarrollo de apps móviles
Framework para desarrollo de apps móviles
 
IDEs y Frameworks mas utilizados
IDEs y Frameworks mas utilizadosIDEs y Frameworks mas utilizados
IDEs y Frameworks mas utilizados
 
beneficio de tener conocimientos y habilidades, en el uso de lenguajes de pro...
beneficio de tener conocimientos y habilidades, en el uso de lenguajes de pro...beneficio de tener conocimientos y habilidades, en el uso de lenguajes de pro...
beneficio de tener conocimientos y habilidades, en el uso de lenguajes de pro...
 
Programacion_Undiad4_Blogger.pptx
Programacion_Undiad4_Blogger.pptxProgramacion_Undiad4_Blogger.pptx
Programacion_Undiad4_Blogger.pptx
 
Presentación lenguajes de programación
Presentación lenguajes de programaciónPresentación lenguajes de programación
Presentación lenguajes de programación
 
Presentación lenguajes de programación
Presentación lenguajes de programaciónPresentación lenguajes de programación
Presentación lenguajes de programación
 
Programacion ii capitulo3
Programacion ii capitulo3Programacion ii capitulo3
Programacion ii capitulo3
 
Los tipos de lenguaje de programación
Los tipos de lenguaje de programaciónLos tipos de lenguaje de programación
Los tipos de lenguaje de programación
 
Libro 3: tareas y saber del programaador
Libro 3: tareas y saber del programaadorLibro 3: tareas y saber del programaador
Libro 3: tareas y saber del programaador
 
Presentación programación en internet
Presentación programación en internetPresentación programación en internet
Presentación programación en internet
 
Cabrera ies 2011
Cabrera ies 2011Cabrera ies 2011
Cabrera ies 2011
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacion
 

Más de Jose Manuel Ortega Candel

Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdfAsegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdfJose Manuel Ortega Candel
 
PyGoat Analizando la seguridad en aplicaciones Django.pdf
PyGoat Analizando la seguridad en aplicaciones Django.pdfPyGoat Analizando la seguridad en aplicaciones Django.pdf
PyGoat Analizando la seguridad en aplicaciones Django.pdfJose Manuel Ortega Candel
 
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...Jose Manuel Ortega Candel
 
Evolution of security strategies in K8s environments- All day devops
Evolution of security strategies in K8s environments- All day devops Evolution of security strategies in K8s environments- All day devops
Evolution of security strategies in K8s environments- All day devops Jose Manuel Ortega Candel
 
Evolution of security strategies in K8s environments.pdf
Evolution of security strategies in K8s environments.pdfEvolution of security strategies in K8s environments.pdf
Evolution of security strategies in K8s environments.pdfJose Manuel Ortega Candel
 
Implementing Observability for Kubernetes.pdf
Implementing Observability for Kubernetes.pdfImplementing Observability for Kubernetes.pdf
Implementing Observability for Kubernetes.pdfJose Manuel Ortega Candel
 
Seguridad en arquitecturas serverless y entornos cloud
Seguridad en arquitecturas serverless y entornos cloudSeguridad en arquitecturas serverless y entornos cloud
Seguridad en arquitecturas serverless y entornos cloudJose Manuel Ortega Candel
 
Construyendo arquitecturas zero trust sobre entornos cloud
Construyendo arquitecturas zero trust sobre entornos cloud Construyendo arquitecturas zero trust sobre entornos cloud
Construyendo arquitecturas zero trust sobre entornos cloud Jose Manuel Ortega Candel
 
Tips and tricks for data science projects with Python
Tips and tricks for data science projects with Python Tips and tricks for data science projects with Python
Tips and tricks for data science projects with Python Jose Manuel Ortega Candel
 
Sharing secret keys in Docker containers and K8s
Sharing secret keys in Docker containers and K8sSharing secret keys in Docker containers and K8s
Sharing secret keys in Docker containers and K8sJose Manuel Ortega Candel
 
Python para equipos de ciberseguridad(pycones)
Python para equipos de ciberseguridad(pycones)Python para equipos de ciberseguridad(pycones)
Python para equipos de ciberseguridad(pycones)Jose Manuel Ortega Candel
 
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodan
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodanShodan Tips and tricks. Automatiza y maximiza las búsquedas shodan
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodanJose Manuel Ortega Candel
 
ELK para analistas de seguridad y equipos Blue Team
ELK para analistas de seguridad y equipos Blue TeamELK para analistas de seguridad y equipos Blue Team
ELK para analistas de seguridad y equipos Blue TeamJose Manuel Ortega Candel
 
Monitoring and managing Containers using Open Source tools
Monitoring and managing Containers using Open Source toolsMonitoring and managing Containers using Open Source tools
Monitoring and managing Containers using Open Source toolsJose Manuel Ortega Candel
 
Python memory managment. Deeping in Garbage collector
Python memory managment. Deeping in Garbage collectorPython memory managment. Deeping in Garbage collector
Python memory managment. Deeping in Garbage collectorJose Manuel Ortega Candel
 

Más de Jose Manuel Ortega Candel (20)

Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdfAsegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
 
PyGoat Analizando la seguridad en aplicaciones Django.pdf
PyGoat Analizando la seguridad en aplicaciones Django.pdfPyGoat Analizando la seguridad en aplicaciones Django.pdf
PyGoat Analizando la seguridad en aplicaciones Django.pdf
 
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
 
Evolution of security strategies in K8s environments- All day devops
Evolution of security strategies in K8s environments- All day devops Evolution of security strategies in K8s environments- All day devops
Evolution of security strategies in K8s environments- All day devops
 
Evolution of security strategies in K8s environments.pdf
Evolution of security strategies in K8s environments.pdfEvolution of security strategies in K8s environments.pdf
Evolution of security strategies in K8s environments.pdf
 
Implementing Observability for Kubernetes.pdf
Implementing Observability for Kubernetes.pdfImplementing Observability for Kubernetes.pdf
Implementing Observability for Kubernetes.pdf
 
Computación distribuida usando Python
Computación distribuida usando PythonComputación distribuida usando Python
Computación distribuida usando Python
 
Seguridad en arquitecturas serverless y entornos cloud
Seguridad en arquitecturas serverless y entornos cloudSeguridad en arquitecturas serverless y entornos cloud
Seguridad en arquitecturas serverless y entornos cloud
 
Construyendo arquitecturas zero trust sobre entornos cloud
Construyendo arquitecturas zero trust sobre entornos cloud Construyendo arquitecturas zero trust sobre entornos cloud
Construyendo arquitecturas zero trust sobre entornos cloud
 
Tips and tricks for data science projects with Python
Tips and tricks for data science projects with Python Tips and tricks for data science projects with Python
Tips and tricks for data science projects with Python
 
Sharing secret keys in Docker containers and K8s
Sharing secret keys in Docker containers and K8sSharing secret keys in Docker containers and K8s
Sharing secret keys in Docker containers and K8s
 
Implementing cert-manager in K8s
Implementing cert-manager in K8sImplementing cert-manager in K8s
Implementing cert-manager in K8s
 
Python para equipos de ciberseguridad(pycones)
Python para equipos de ciberseguridad(pycones)Python para equipos de ciberseguridad(pycones)
Python para equipos de ciberseguridad(pycones)
 
Python para equipos de ciberseguridad
Python para equipos de ciberseguridad Python para equipos de ciberseguridad
Python para equipos de ciberseguridad
 
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodan
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodanShodan Tips and tricks. Automatiza y maximiza las búsquedas shodan
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodan
 
ELK para analistas de seguridad y equipos Blue Team
ELK para analistas de seguridad y equipos Blue TeamELK para analistas de seguridad y equipos Blue Team
ELK para analistas de seguridad y equipos Blue Team
 
Monitoring and managing Containers using Open Source tools
Monitoring and managing Containers using Open Source toolsMonitoring and managing Containers using Open Source tools
Monitoring and managing Containers using Open Source tools
 
Python Memory Management 101(Europython)
Python Memory Management 101(Europython)Python Memory Management 101(Europython)
Python Memory Management 101(Europython)
 
SecDevOps containers
SecDevOps containersSecDevOps containers
SecDevOps containers
 
Python memory managment. Deeping in Garbage collector
Python memory managment. Deeping in Garbage collectorPython memory managment. Deeping in Garbage collector
Python memory managment. Deeping in Garbage collector
 

Último

Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...
Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...
Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...Luis Olivera
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 

Último (20)

Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...
Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...
Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 

Programmer visions

  • 1. Visiones sobre el mundo de la programación José Manuel Ortega Candel jmoc25@gmail.com
  • 2. 2 1.Introducción En este artículo voy a tratar la profesión de programador para intentar responder a las preguntas que toda persona que se quiera introducir en este mundo debería hacerse en algún momento. También comentaré los diferentes perfiles que podemos encontrar, así como las cualidades que debe tener todo aquel que quiera desarrollar una carrera en un campo tan amplio como es la programación. Comentaré aquellas metodologías que han surgido en los últimos años para el trabajo en equipo y explicaré el concepto de framework, en particular en aquellos aplicables en entornos Java/J2EE. Por último, mencionaré los libros técnicos que todo programador debería tener como referencia en su trabajo diario. En ocasiones, se ha comentado que ser programador es una profesión vocacional para la cual es necesario tener un talento especial y, como los lectores saben, es una profesión donde la intuición, la imaginación, el pensamiento lógico y el orden juegan un papel fundamental. También es cierto que hoy en día cada vez existen más herramientas para facilitar el trabajo a los empiezan, y, gracias a la evolución en ingeniería del software, algunas funciones de programación han sido automatizadas. De esta forma, los programadores han ido asumiendo algunas de las responsabilidades llevadas a cabo normalmente por los ingenieros de software. Otra de las características a destacar, es que en esta profesión hay que realizar un esfuerzo extra para mantenerse actualizado, y la formación es casi continua en la búsqueda constante de la mejora, además, es tan importante formarse y conocer varios de lenguajes de programación (alto y medio-bajo nivel), como conocer las metodologías para trabajar en equipo. En primer lugar, me gustaría comentar las claves y el conjunto de buenas de prácticas que todo programador debe tener presente en su trabajo diario.
  • 3. 3 2. Claves para ser un buen programador  Rodearse de buenos programadores, tanto en la formación como en el trabajo diario.  Interesarte por la programación y estar constantemente actualizado.  Hablar con otros programadores y obtener feedback sobre cómo optimizar el código que estás desarrollando.  Trata de programar con frecuencia, diariamente si es posible.  Trabajar en proyectos con otros programadores.  Al escribir código, intentar cumplir con los estándares de cada lenguaje.  Adquirir buenas prácticas y conocimientos sobre metodologías y patrones de diseño.  Dedicar muchas horas y tener una gran disciplina y compromiso con tu trabajo.  Leer libros técnicos sobre programación que te ayuden a reciclarte y a conocer nuevos lenguajes y metodologías de desarrollo.  Reutilizar todo el código que sea posible. Esto es lo que se conoce como “No reinventar la rueda”.  A la hora de escribir código hacerlo de forma modular y escalable. 3. Buenas prácticas de programación  Conocer los fundamentos de la Ingeniería del Software.  Saber manejarse con estructuras y tipos abstractos de datos (listas, pilas, colas, árboles, hashes).  Conocer los principios básicos de la Algoritmia.  Conocer patrones de diseño y aplicarlos a la resolución de problemas.
  • 4. 4 4. Perfiles de programador Dentro del ámbito de la programación podemos encontrar diferentes perfiles dependiendo del entorno para el cual vaya destinada la aplicación (dispositivos móviles, sitios web, procesos de una base de datos, aplicaciones de escritorio, aplicaciones dentro de servidores, mainframes). Debido a que las tendencias actuales del mercado son muy cambiantes, esto exige que los programadores tengan la capacidad de aprender nuevos lenguajes de programación. Es por eso hay que tener en cuenta todos los posibles perfiles junto con los lenguajes más representativos con los que se relaciona:  Programador Entorno Web: Aquí hay que diferenciar la parte relacionada con los aspectos visuales de la parte que ejecuta la lógica de negocio. Front End - HTML,XML, JavaScript Back End - Ruby on Rails/Python/Java/C#/PHP/Asp .Net  Programador Entorno Host/ MainFrames: Cobol, Perl, C/C++,Shell Scripts  Programador Entorno móvil: Android (Java), iOS (Objective-C)  Aplicaciones de escritorio: Visual Basic .Net, Delphi, Java  Base de datos: PL/SQL, Transact SQL 5. Lenguajes No importa la cantidad de lenguajes que domine un programador, lo importante es conocer los distintos tipos, así como los paradigmas y metodologías que los envuelve. Cada uno de estos lenguajes tienen sus particularidades, pero todos pueden clasificarse en pocas familias de lenguajes de programación (procedimentales, orientados a objetos, funcionales, scripting, orientados a etiquetas).De entre todos los paradigmas, el más importante es el de orientación a objetos, el cual es fundamental conocer hoy en día para el desarrollo tanto de aplicaciones web como de escritorio. En mi opinión, hay que conocer como mínimo uno de cada tipo de paradigma, ya que en cada uno se ofrecen perspectivas diferentes para la resolución de problemas.  Un lenguaje de “scripting” (Ruby, Perl, Bash ShellScript) que te permita automatizar tareas y desarrollar prototipos rápidos.  Un lenguaje de “medio/bajo nivel” (C) que te permita conocer cómo se maneja la memoria, acceder a hardware directamente y que te permite entender cómo funcionan las optimizaciones que luego se aplican en lenguajes de alto nivel.
  • 5. 5  Un lenguaje de alto nivel que normalmente usarás para trabajar (C++, Java, Objective-C, Javascript, PHP, Python). Uno de los lenguajes que más está destacando hoy en día es Python, que es un lenguaje de script y bastante rápido si lo comparamos con otros más pesados como Java, con el cual se puede programar empleando programación lineal, estructurada y orientada a objetos tanto aplicaciones de escritorio como aplicaciones web. 6. Las cualidades de un buen programador Más allá de controlar más o menos lenguajes, lo que hace un programador se diferencie del resto es su capacidad para trabajar en equipo e investigar en nuevas metodologías que pueda aplicar en su trabajo diario. Entre estas cualidades destacan:  6.1. Capacidad para trabajar en equipo Todo programador debe ser capaz de trabajar de forma conjunta con otras personas para el desarrollo de un proyecto en los términos de calidad, eficiencia y plazos establecidos por el cliente. La programación, en particular, es un campo en el que la comunicación con otras personas ha de ser fluída, abierta y efectiva si se quiere obtener un buen resultado. El aspecto más importante es la división de las tareas de forma equitativa y acorde a las capacidades y competencias de cada miembro del equipo.  6.2. Gestión de proyectos Sea cual sea la dificultad del proyecto, el líder deberá hacerse cargo del proyecto y asignar el trabajo. El gestor de proyectos supervisará la planificación y el análisis y se hará cargo del diseño del sistema, su programación y su implementación. Un buen programador es el que es capaz de ir aprendiendo de la gente que le rodea (analista, jefe de equipo) y a medida que va adquiriendo experiencia tener responsabilidades cada vez mayores en los proyectos en los que trabaje.  6.3. Idiomas inglés La mayoría de documentación y libros están en inglés, por lo que es fundamental conocerlo bien y saber manejarse con los aspectos técnicos básicos de un lenguaje tales como la creación de variables, clases, objetos, funciones.  6.4. Competencia profesional Todo programador ha de ser competente en una gran variedad de lenguajes de programación, o al menos tener interés por aprender otros lenguajes además de los que ya sabe. Formar un equipo de programadores competentes en diversas áreas asegurará el éxito de cualquier proyecto.
  • 6. 6  6.5. Resolución de problemas Hoy en día es prácticamente imposible saberse de memoria un lenguaje al 100%, de forma que la tendencia es conocer la sintaxis que se emplea. Lo más importante no es saber programar en un lenguaje y saberse el API de memoria, sino estar preparado para resolver un problema en el lenguaje que en ese momento se nos pida profesionalmente. 7. Habilidades más importantes para los programadores del futuro Además de tener habilidades analíticas y de resolución de problemas, los programadores se verán obligados a adquirir una serie de conocimientos y destrezas en función del campo en el cual desarrolla su carrera profesional.  7.1. Conocer al menos uno de los "3 Grandes" (Java, .NET, PHP). Hoy en día es imprescindible conocer al menos uno de los 3 grandes sistemas de desarrollo: Java, .NET o PHP. A medida que los proyectos crecen y se van añadiendo funcionalidades, vamos a necesitar conocer los frameworks y librerías asociadas a cada sistema con profundidad.  7.2. Aplicaciones RIA - Rich Internet Applications. La tendencia en RIA es conocer el uso de herramientas que faciliten la creación de aplicaciones web como si fuesen de escritorio gracias al uso de tecnologías como HTML5, JavaFX, SilverLight, así como las mejoras que se están desarrollando en los motores JavaScript de los navegadores.  7.3. Servicios web. REST, SOAP, JSON son términos con los cuáles un programador tendrá que manejarse cuando se introduzca en el desarrollo de servicios web.  7.4. Habilidades de comunicación. Cada vez más, los programadores están participando en las reuniones que no son de desarrollo , pero sí fundamentales para obtener el feedback necesario para que nuestro trabajo cumpla las necesidades del cliente. Para ello, es necesario mejorar las habilidades de comunicación con nuestros analistas y jefes de proyectos.  7.5. Conocer nuevos lenguajes. Lenguajes como Ruby, Python o Groovy todavía no están entre los grandes, pero cada vez son más populares gracias al uso de frameworks como SilverLight y Grails.
  • 7. 7  7.6. Metodologías ágiles. Los desarrolladores que tengan experiencia en trabajar en equipo y en ambientes ágiles son muy demandados y van a serlo más en los próximos años. El uso de metodologías ágiles como Scrum, Kanban, Extreme Programming(XP),Test Driven Development (TDD),Lean-Agile, se están utilizando cada vez más en los proyectos.  7.7. Desarrollo móvil. Existen varios enfoques en el desarrollo móvil: aplicaciones web diseñadas para funcionar en dispositivos móviles, y aplicaciones que se ejecutan directamente en los dispositivos y que han sido programadas de forma nativa.  7.8. Conocimientos de Cloud Computing. Términos como SaaS (Software as a Service) y aplicaciones en la nube son cada vez más populares y será necesario conocer el funcionamiento de estos sistemas.  7.9. Proyectos Open Source. Otros de los aspectos que más ha crecido en los últimos años es la posibilidad de colaborar en proyectos Open Source. Algunas de las tareas a destacar son: 1. Traducir/Documentar, donde con pocos conocimientos técnicos puedes ayudar a traducir las interfaces de usuario, pantallas, botones, menús o comentarios en el código fuente. Otra posibilidad es la realización o traducción de la documentación, los manuales de ayuda o el sitio web del proyecto. 2. Reporte de errores, donde se requiere un mayor conocimiento funcional de la aplicación ya que hay que determinar las condiciones bajo las cuáles se produce el error. 3. Beta-tester, donde los programadores determinan cómo se va a comportar el programa bajo distintas condiciones y casuísticas. Su trabajo es probar los programas exhaustivamente e informar todo lo que van encontrando en el camino. 4. Mejorar un sitio web, si controlas alguno de los gestores de contenidos más usados del mercado como Joomla, WordPress o Drupal es una excelente alternativa para terminar alguna sección de una página que esté incompleta, corregir errores o simplemente colaborar con la publicación de actualizaciones. En este apartado también cabría incluir la posibilidad de mejorar el posicionamiento del sitio haciendo tareas de SEO.
  • 8. 8 8. J2EE: Java en la empresa Las arquitecturas basadas en Java han tenido una gran evolución en el dominio empresarial en los últimos años. Las razones principales de su éxito en la empresa han sido:  Programación independiente del Sistema Operativo  Gran variedad de librerías existentes  Rapidez de desarrollo y en el aprendizaje  Fiabilidad y escalabilidad Una de las mayores ventajas que aportan las arquitecturas basadas en Java es la flexibilidad con respecto al desarrollo de las aplicaciones, en el sentido de que permite comenzar el desarrollo de una aplicación en un entorno windows, y luego realizar la subida a entornos productivos en servidores Unix/Linux, con las garantías de que la aplicación se va a comportar de forma muy similar en todos ellos.  8.1. Herramientas y frameworks J2EE El número de librerías que se han desarrollado para Java no lo tiene ningún otro lenguaje a día de hoy. Existen multitud de librerías que nos permiten simplificar muchas de las tareas que necesitamos realizar. Por ejemplo, la librería log4java nos simplifica las tareas de generación de ficheros de logs. Entre las herramientas que se emplean en proyectos Java/J2EE podemos destacar:  Entornos de desarrollo: Eclipse, NetBeans, IBM WebSphere  Servidores J2EE:Tomcat,GlassFish,JBoss,WebLogic  Control de versiones/repositorios de código: CVS, SVN, Git  Gestión de proyectos :Jira, Quark, Confluence, Jenkins, Maven, Junit  Frameworks: Apache Struts, Spring, Java Server Faces, Enterprise Java Beans, Java Persistence API, Hibernate Los frameworks como herramientas de trabajo ofrecen un desarrollo ágil en el sentido que te permiten abstraerte de funcionamientos a bajo nivel y poder centrarte en el nivel funcional de la aplicación. Uno de los frameworks más extendidos en el desarrollo de aplicaciones J2EE es el de Spring, que cubre gran cantidad de posibilidades como configuración en ficheros XML, facilidades para la creación de workflows (flujos de trabajo) y programación orientada a aspectos (AOP).
  • 9. 9  8.2.Metodologías ágiles en J2EE El uso de metodologías ágiles como Scrum, XP se ha extendido en entornos Java/J2EE en los últimos años, por ser las más adecuadas en entornos donde los requerimientos de negocio son desconocidos o cambiantes. Otra de las metodologías destacadas que también se utiliza mucho en entornos donde hay cambios de forma contínua de requisitos es TDD (Test Driven Development), donde el objetivo es desarrollar las pruebas a partir de los requisitos y posteriormente se realiza el refactoring que permita pasar las pruebas. Para aplicar algunas de estas metodologías en el trabajo diario, una de las mejores herramientas es trello, que permite organizar las tareas y realizar un seguimiento de las mismas, así como visualizar los actores involucrados en cada una de ellas.  8.3. Estructura proyectos J2EE En cuanto a la estructura que tienen los proyectos que emplean arquitecturas J2EE podemos destacar: Departamento I+D: Se dedican a la investigación, innovación y desarrollo de las nuevas tecnologías que formarían la parte de arquitectura. Dentro del mismo habría un departamento de arquitectura que se encarga del desarrollo de una arquitectura J2EE, utilizando algunos de los frameworks comentados anteriormente. Jefes de proyecto, analistas y programadores se encargarían de los análisis, diseños, desarrollos, pruebas y mantenimiento del conjunto de aplicativos de la empresa. Todos ellos emplearían como base la arquitectura ya desarrollada por el departamento de I+D. Es muy importante que toda aplicación empresarial separe la parte de Presentación (Front-end) de la parte de lógica de negocio (Back-end).Es lo que típicamente se conoce como MVC (Modelo Vista Controlador). Este modelo de separación en 3 capas toma especial importancia en aplicaciones donde evolucionan de forma independiente cada una de las capas, porque muchas veces se solicita modificar la lógica interna de una aplicación sin que se vea modificada la forma de presentar estos elementos y viceversa.
  • 10. 10 La parte de front-end muchas veces resulta ser la parte fundamental de un portal, pero en la empresa, en muchas ocasiones, nos encontramos que es al contrario y que la gran complejidad de una aplicación se encuentra en los procesos de negocio que se realizan en parte de back-end. 9. Libros técnicos Título Autor Editorial Clean Code: A Handbook of Agile Software Craftsmanship(1) Robert C. Martin Prentice Hall Head First Design Patterns Elisabeth Freeman, Eric Freeman, Bert Bates O'Reilly Pragmatic programmer: from journeyman to master Andy Hunt, David Thomas Addison-Wesley Code Simplicity: The Science of Software Design: The Fundamentals of Software Max Kanat-Alexander O'Reilly Design Patterns: Elements of Reusable Object-Oriented Software(2) Erich Gamma, Richard Helm, Ralph Johnson, John Vissides Addison-Wesley (1)Disponible también en español con el título: Código Limpio: Manual de estilo para el desarrollo ágil de software (2)Disponible también en español con el título: Patrones de diseño
  • 11. 11 Para sentar las bases para ser un buen programador es fundamental aprender sobre patrones de diseño y buenas prácticas de programación. Para ello, es interesante contar con libros de referencia como “Clean Code” o “Patrones de diseño”. Estos libros tratan de explicar que más allá de que el código compile, e incluso que funcione, está la buena organización del código y su óptima implementación. 10. Conclusiones La experiencia como programador te permitirá descubrir que al final todos los lenguajes funcionan igual y que el objetivo final de todo programador es abstraerse del lenguaje para la resolución de problemas y plantear soluciones a los mismos sin conocer a fondo un lenguaje en concreto. Esta capacidad de abstraerte del lenguaje te permitirá pasar de ser un programador, a otro cargo con mayores responsabilidades y hacer evolucionar tu carrera un paso más allá. Los mejores programadores no son sólo aquellos que saben más lenguajes ni escriben más código sino aquellos que además lo hacen pensando en patrones de diseño, con unos algoritmos y aplicando técnicas de programación avanzada.