Responsabilidad / Principales competencias
Es el responsable por el desarrollo de las piezas de software.
Entre sus competencias está:
Diseñar, producir o mantener (programar, adaptar e integrar) componentes o subconjuntos de software (clases, módulos, pantallas, rutinas, subsistemas, programas en general) conforme a especificaciones (funcionales y técnicas) para ser integrados en aplicaciones.
Nombres de cargos similares
Programador, Analista-programador, Developer.
Misión de la ocupación
Participar del proceso de programación/implementación teniendo como entrada las especificaciones de software y ajustándose a tiempos y estándares de calidad y trabajo de la organización y del proyecto.
Actividades que realiza
- Comprender el requerimiento de software.
- Modelizar y refinar especificaciones a fin de determinar un diseño detallado para implantar la
funcionalidad requerida.
- Construir o adaptar clases, módulos u otras piezas de software. Reutilizar componentes existentes integrándolos con código propio. Verificar los programas producidos probándolos en forma unitaria.
- Revisar el código para resolver defectos o mejorarlo.
- Documentar los programas de acuerdo a estándares. Tanto con documentos funcionales y de arquitectura, como con comentarios en el propio código.
- Investigar nuevas tecnologías, cumplir con los procesos definidos y proponer mejoras.
- Entregar a través de la totalidad del ciclo de vida de aplicaciones concepto, diseño, desarrollo, implementación, prueba y soporte.
- Mantener las aplicaciones productivas, corregir errores e implementar nuevas funcionalidades.
- Cumplir con las entregas según las estimaciones de tiempo realizadas.
- Trabajar en estrecha colaboración con otros desarrolladores.
- Trabajar directamente con los desarrolladores y gerentes de producto para conceptualizar, construir, probar y realizar productos.
- Reunir los requerimientos de funcionalidad y traducir esas necesidades en soluciones funcionales elegantes.
- Construir prototipos en fase de alcance técnico de los proyectos.
- Optimizar el rendimiento de las aplicaciones.
- Trabajar para construir aplicaciones con foco en la funcionalidad.
- Crear interfaces de usuario atractivas.
- Detectar oportunidades de mejora o conformidades y observaciones para incluirlas en el sistema de mejora continua.
- Participar en la definición y revisión de estándares y normas aplicables al diseño y construcción.
Estudios
Ingeniería informática; licenciatura en sistemas o computación; técnico superior en desarrollo de software (estudios finalizados o en curso), técnico secundario en programación.
Conocimientos necesarios, según el nivel del puesto
- Algoritmos y estructuras de datos.
- Dominio de lenguajes de programación (Paradigmas: Estructurados, Orientado a Objetos, etc.).
- Manejo de herramientas para la gestión de requerimientos y ambientes de desarrollo.
- Lecto-comprensión y elementos de redacción en inglés.
- Conocimiento de Bases de Datos y lenguaje de consultas estructurado.
- Conocimiento de Servicios Web.
- Conocimiento de SOA: Aplicaciones orientadas a servicios.
- Conocimiento de protocolos y lenguajes de comunicación como XML, JSON.
- Conocimientos de Ingeniería del Software.
- Nociones de arquitectura de software y aplicaciones N-Capas.
- Prácticas de Testing y Refactoring.
- Conocimiento de metodologías de análisis como UML u otros.
- Conocimiento de metodologías ágiles como SCRUM u otros.
- Conocimiento de herramientas de control de versiones como GIT u otros.
- Conocimientos de patrones de software empresarial.
Competencias, habilidades o aptitudes deseables según el nivel del puesto
- Iniciativa, proactividad y capacidad de análisis para la resolución de problemas.
- Flexibilidad en sus enfoques de las situaciones y búsqueda permanente de la calidad.
- Actuar ateniéndose a un orden propio que le facilite el acceso a lo que pueda necesitar.
- Conocimientos, metodologías y modelos de calidad para la industria del software.
- Capacidad de trabajar en equipo, estando dispuesto a preguntar, a compartir información y conocimientos y a tomar en cuenta a los usuarios.
Otras habilidades interpersonales deseables
- Creativo
- Buen manejo del tiempo
- Capacidad de resolución de problemas
- Gran capacidad de aprendizaje
- Capacidad de autogestión
- Actitud, responsabilidad y compromiso
- Orientación al Cliente Interno/Externo
- Orientación a Resultados
- Actitud crítica, de perfeccionamiento y actualización permanente
- Capacidad para trabajar en forma cooperativa y constructiva, en equipos multidisciplinarios
- Capacidad de abstracción: comprender la “big picture” más allá de detalles de implementación
- Permanente capacidad para derivar de la práctica, elaboraciones conceptuales.
Ámbito ocupacional
Forma parte de un equipo de trabajo organizado por proyecto o por práctica donde cada uno asume la responsabilidad de resolver en tiempo y con calidad su parte, teniendo que satisfacer pruebas de conjunto y pidiendo o brindando colaboración cuando se encuentran problemas. En empresas donde se trabaja con objetivos y medidas de productividad, es posible el teletrabajo.
Posibles especializaciones o áreas de especialización
- Desarrollador de aplicaciones clientes-servidor:
- Diseñar, programar, implementar y mantener aplicaciones de escritorio.
- Programar con capacidad de conexión con un servidor de aplicaciones.
- Sólidos conocimientos de tecnologías de comunicación de aplicaciones distribuidas.
- Sólidos conocimientos de consultas avanzadas en bases de datos robustas con gran volumen de información.
- Desarrollador Web:
- Diseñar, programar, implementar y mantener aplicaciones Web Front-end y Back-End
- Sólidos conocimientos en HTML, CSS, JavaScript y extensiones de JS como jQuery u otros
- Conocimiento de protocolos de internet (ej: HTTP, HTTPS, FTP, TELNET, etc)
- Conocimiento de lenguajes de estructuras y transferencias de datos serializados como XML, JSON
- Conocimiento de programación asincrónica y servicios web: AJAX, SOAP, Rest API
- Conocimiento de testing funcional y de stress de aplicaciones web
- Capacidad de desarrollo de interfaces web responsivas para distintos tipos de pantallas
- Conocimientos de Seguridad Web. Técnicas de prevención de ataques por SQL Injection y XSS
- Desarrollador Juegos / Aplicaciones Lúdicas:
- Analizar y desarrollar el código fuente a partir de stories, improvements y bugs
- Colaborar con las tareas de testing de los juegos desarrollados, creando casos de prueba automatizados cuado sea necesario y eventualmente creando issues o haciendo seguimiento de los mismos o el cierre.
- Participación en el Basecamp del proyecto de ser necesario
- Desarrollo y generación de ideas para nuevos juegos
- Desarrollador Aplicaciones móviles:
- Participar en la definición de la interfaz gráfica para móviles
- Conocer sobre el desarrollo de apps móviles para las diferentes tecnologías nativas (ios, android, windows)
- Integración entre desarrollo mobile y desarrollo web. Comunicación un servidor web a través de API Rest.
- Trabajar junto a los desarrolladores web para crear y mantener un marco sólido para soportar las aplicaciones móviles y web
- Trabajar con los desarrolladores de front-end para construir la interfaz con el foco en las características de usabilidad
- Crear interfaces de usuario atractivas, específicas del dispositivo y experiencias
- Normalizar la plataforma para entregar a través de múltiples marcas con mínima duplicación de esfuerzos
- Mantenerse al día sobre las últimas tendencias del sector en las tecnologías móviles
- Desarrollador de sistemas embebidos:
- Conocimientos avanzados de Electrónica Digital (Multímetro, Osciloscopio, Soldadura, Ley de Ohm, Resistencias, Capacitores, Semiconductores, Circuitos Integrados)
- Concepto de ánodo y cátodo, Multiplexación, Transistores
- Manejo de sensores para tomar información del medio ambiente (luz, temperatura, humedad, humo, etc.)
- Lectura de señales digitales (Digital Read, Pulsador, Internal Pull-Up, Pull-Up / Pull-Down, Interrupciones)
- Herramientas y protocolos de comunicación (Comunicación Serial, Bit / Bytes, Bluetooth, Wifi)
- Conocimientos de procesadores cortex
- Desarrollo de sistemas sobre placas open hard como Arduino o Raspberry u otros
- Arquitectura de Integración por Serie
- Memoria SD, Flash, EEPROM
- Request / Response HTTP
- Configuración de Router
- Arquitectura de Integración por Ethernet
- Domótica, Robótica, Internet de las cosas.