sábado, 7 de febrero de 2015

¿Por qué es tan jodidamente difícil aprender a programar?

Un reciente post del blog del sitio web www.vikingcodeschool.com que ofrece cursos de programación online me pareció muy interesante.

En este habla del trauma que supone para muchos aprender un lenguaje de programación y las fases por las que pasan todos los estudiantes antes de dominarlo para poder acceder al mercado laboral.

Fase 1: La luna de miel


Todo el mundo sabe cuando empieza que es algo difícil, pero en realidad no es difícil, lo difícil es, citando a Martin Fowler "Cualquier tonto puede escribir código que un ordenador entiende. Los buenos programadores escriben código que los humanos pueden entender."

10 PRINT

Hoy en día hay muchísimos recursos en la red, plataformas como teamtreehouse, codeschool,  Codeacademy, code.org y w3schools, cursos Mooc en Udacity, Coursera, Edx, foros como stackoverflow, entredesarrolladores etc.

Todos mediante vídeos, pequeños retos de ludificación hacen que programar sea divertido y parezca algo fácil. Estamos de lleno en la luna de miel y nos creemos que fundaremos el próximo facebook o google.


Fase 2: La cima de la confusión


Aquí llegamos a una fase en la que muchos abandonan la programación, el momento en el que intentamos hacer proyectos desde cero con una hoja en blanco. Empezarán los errores, muchas veces de sintaxis, aparecerán cientos de fallos, ¡es la guerra!.



Muchos estudiantes se desesperan en esta fase, sienten que no avanzan, que es el código el que les domina y no tienen el control, este es el punto el que que mucha gente continuará o finalmente abandonará.


Erik Trautman señala que la razón de esta perdida de confianza es debida a dos factores:

Densidad de recursos

Buscar curso de programación en Google da casi un millón de resultados, parece que solo tenemos que buscar nuestro problema y encontramos un sitio donde copiar y pegar la solución. Se compran libros, se siguen tutoriales y parece todo muy fácil.

Pero en las siguientes fases cada vez es más difícil encontrar la solución a los problemas, no se sabe donde buscar, no vale con copiar y pegar ... la clave está en saber donde buscar, muchas veces la solución está en la documentación de las APIs, blogs técnicos, y cuando no se encuentran saber que preguntar en los foros técnicos.

i know kung fu - I KNOW GOOGLE-FU

Ámbito del conocimiento

Este abarca el total de nuevos temas que necesitas aprender en cada fase.



Cuando empiezas a programar se necesita la sintaxis básica, que es un bucle, que tipos datos existen etc. son muy pocos los temas que hay que aprender.

Después empieza a aumentar rápidamente los temas que hay que aprender y como en matemáticas, no hay una sola solución para todos los problemas.

En la tercera fase es cuando hay más temas, hay que saber utilizar las herramientas, aprender nuevos lenguajes, programación estructurada, programación orientada a objetos, buen estilo de programación, saber cuando buscar ayuda.

Solo cuando se ha pasado la tercera fase, empiezan a disminuir los temas que hay que aprender, te especializas en una tecnología y empiezas a sentirte cómodo, ya tienes claro que es lo que sabes y lo que no como puedes aprenderlo, la programación necesita actualizarse en toda la carrera profesional.

Fase 3: El desierto de la desesperación

El dolor combinado del incremento de temas para aprender y la escasez de recursos lleva al desierto de la desesperación. Esta etapa es larga, oscura y llena de terrores. Aparecen espejismos con tentaciones de recursos que cuando alcances solo verás más desierto.
Ha estas alturas te habrás apuntado a varios cursos Mooc, habrás seguido tutoriales y tienes algunos libros de programación y habrás aprendido la lección de la luna de miel de que no hay respuestas fáciles.

Aquí descubres lo muy poco que sabes, todo lo que te queda por aprender y lo lejos que estás de ser un auténtico profesional. ¿Cómo puedes saber lo que necesitas aprender o si estás aprendiendo las cosas bien? Incluso cuando desarrolles tus primeras apps que hacen y funcionan como querías puedes sentirte completamente perdido.


Aquí es clave la perseverancia y trabajar día a día, pronto tendrás tus primeros proyectos reales y empezarás a darte cuenta de que lo estás consiguiendo.

Fase 4: El ascenso a ser la caña


Has conseguido salir del desierto y tu confianza crece día a día, puedes encontrar la solución a tus problemas en Google y entiendes los congresos y blogs técnicos..


Sabes que todavía no estas listo para trabajar, aunque tus aplicaciones funcionan, sabes que dentro están llenas de parches y lo peor de todo, no distingues las partes que están bien de las que están mal. Pasas por periodos de brillantez a la vez que por errores de novato y peor, con la sensación de que no tienes ni idea de lo que estás haciendo.



En esta fase bipolar te sientes en parte un desarrollador a prueba de balas y un un principiante que va avanzando a base de ensayo y error. Cuanto más avanzas, más sensación tienes de que alguien se dará cuenta de que no sabes programar.

Aunque crees que ya deberías ser un programador, la distancia entre el código que escribes y el de un profesional nunca ha parecido estar más lejos.

¡Pero a pesar de todo lo conseguirás! Ya has superado el pico de la confusión y el desierto de la desesperación, estás en el momento de ser la caña, estás aprendiendo más que nunca y en un momento aprenderás las suficientes buenas prácticas que tus conocimientos de queso gruyere se convertirán en un conjunto de habilidades de un programador profesional.

Terminar esta fase dura más de lo que esperabas y siempre parece que estás tan cerca, pero no acabas de llegar, si eres lo suficientemente tenaz, convencerás a alguien para que te paga por seguir aprendiendo.



Cómo sobrevivir en cada fase

Erik Trautman nos da algunos tácticas para sobrevivir a cada una de estas fases y continuar en la dirección adecuada.


Sobrevivir a la luna de miel

En esta fase todo parece muy divertido, los tutoriales y los cursos de programación te ayudan facilitandote el trabajo para dejar los cimientos necesarios para las siguientes fases, pero tienes que tener dos cosas claras:

  1.  Busca, compara, y si encuentras un curso mejor, apuntate. Hay muchísimos recursos para aprender a programar gratis, formación oficial, turoriales de youtube, cursos online, escoge el que mejor se ajuste a tus necesidades, muchos están en inglés.


  2.  Una vez que escojas uno,trabaja con el hasta el final, no lo dejes a la mitad, de esta forma estarás listo para trabajar por ti solo. 

Sobrevivir a la cima de la confusión

Todo el mundo pasamos por esta fase, por que para aprender a nadar hay que tirarse al agua. No puedes pasarte la vida haciendo tutoriales, es hora de hacer tus propios proyectos.

  1. Programa en parejas, uno de los grandes beneficios es que será más fácil depurar y corregir errores.
  2. Lee código de proyectos open-source, Richard Stallman siempre incide en que para aprender aprogramar hay que escribir un montón de código y leer un montón de código. GitHub está lleno de proyectos open-source de los que aprender buenos patrones. Intenta entender el código y prueba a modificarlo.
  3. Proyectos mascota, Siempre deberías tener pequeños proyectos en mente que te interesen, ten siempre un pequeño proyecto en un tema que te motive y aprende a buscar errores y recursos a utilizar.

Sobrevivir al desierto de la desesperación

Una vez que te sientes cómo depurando, tu mayor problema será que conocimientos necesitas y como aprenderlos. Necesitas caminar por un camino seguro.

  1. Márcate un objetivo claro de lo que quieres conseguir cuando termines de aprender, no pierdas tiempo en cosas improductivas.
  2.  Encuentra un camino seguro que lleve directo a tus objetivos y asegúrate de que te llevarán a el. Aquí es cuando tienes que tener claro que lenguaje de programación es el idóneo, un buen sitio para ayudarte es este: http://carlcheo.com/startcoding
  3. Céntrate y evita distracciones: Si eres la clase de persona que le interesa programar, también estarás interesado en aprender todo tipo de cosas chulas. Cuando el código se pone difícil, tienes que ser capaz de centrarte en vez de distraerte con otras páginas, el móvil, juegos ... puede venirte bien un plugin para evitar perder tiempo en otras páginas: leechblock

Sobrevivir al  ascenso de ser la caña

Esta es una de las fases más difíciles, ya puedes programar pero aún no estás listo para trabajar. Para pasar esta fase necesitas tres cosas:

  1. Busca y sigue buenas prácticas de programación. Necesitas entender la diferencia entre una solución y la mejor solución. Las mejores prácticas marcan la diferencia entre un programa amateur y un código profesional.
  2. Pon en duda todo lo aprendido, por qué seguramente tengas algunas lagunas que ni sabías que tenías, tienes que encontrar y arreglar esas lagunas.
  3. Trabaja las habilidades menos divertidas que casi nunca utilizas pero son muy importantes para convertirte en un profesional. Estas incluyen las pruebas unitarias, la documentación, refactorización, estructuras de datos, repositorios, metodologías ágiles, arquitectura y despliegue... que son muy fáciles de saltar pero son fundamentales para un buen desarrollo.

La clave para completar estas tres cosas es tener retroalimentación. Es muy difícil pasar esta fase solos, y los estudiantes que no lo obtienen pueden producir código poco legible, modular y mantenible. Necesitas trabajar en con otras personas para poner a prueba tus conocimientos, hacer las preguntas adecuadas y forzarte a arreglar las lagunas que tienes.


jueves, 18 de diciembre de 2014

Proyecto Integrador en DAM

La pasada semana presentamos  a los alumnos de segundo del ciclo de Desarrollo de Aplicaciones Multimedia de la Universidad Europea el proyecto integrador para del curso 2014-15. 


Se trata de un app para dispositivos móviles llamada “QIZit”; un app educativa bilingüe y se desarrollará para móviles y tabletas Android que incluirá elementos de ludificación.

Screen Shot 2014-12-17 at 15.50.04
 
Para este proyecto integrador nos hemos involucrado los profesores de los módulos de Acceso a Datos, Desarrollo de Interfaces y Programación Multimedia y Dispositivos móviles.

28-scrum-600x279
Junto a la presentación del proyecto, hicimos una presentación del framework de metodología ágil Scrum que será utilizado para el proyecto integrador; este framework se utiliza en las empresas de desarrollo de software para gestionar el desarrollo de productos, los equipos se organizarán por sí mismos fomentándose la colaboración de todos los miembros del equipo, así como a una comunicación diaria cara a cara de todos los miembros. La clave en las metodologías ágiles es la adaptación al cambio y  encontrar soluciones a los nuevos problemas que puedan surgir según las necesidades del cliente o los cambios imprevistos que pueden no haber sido especificados en la planificación original.

xplogo

Además en este proyecto se utilizarán principios de la programación extrema como son:
  • Desarrollo iterativo e incremental
  • Desarrollo guiado por pruebas (TDD) y pruebas unitarias
  • Programación en parejas (Pair Programming)
  • Integración del equipo de programación con el cliente
  • Refactorización del código
  • Simplicidad en el código
  • Propiedad del código compartida en un repositorio (Github)
El desarrollo del proyecto se ha define sobre la idea de Sprints; un Sprint es un periodo de tiempo específico entre dos y cuatro semanas en el que el trabajo debe estar terminado y listo para la revisión. Al final de cada Sprint se hace una exposición de los objetivos conseguidos en el Sprint Retrospective.
Screen Shot 2014-12-17 at 15.55.27

En este proyecto se presentaron los componentes de los equipos; en estos grupos se repartieron cuatro responsabilidades que irán rotando en los sucesivos sprints:
  • Coordinador del equipo
  • Responsable del repositorio GitHub
  • Responsable de la documentación del proyecto
    Responsable de las pruebas de integración.
Screen Shot 2014-12-17 at 15.56.18

A su vez explicamos los roles de Scrum en clase:
  • Product Owner (PO): Es el profesor que define los “ítems” que contendrá el Product Backlog y su orden.
  • Scrum Master (SM): Es el profesor que supervisa y facilita que se aplique correctamente Scrum. No es un jefe de proyecto.
  • Development Team (DT): Los equipos de alumnos, que se encargan de estimar el esfuerzo de los ítems del Sprint Backlog. Toman todas las decisiones dentro del Sprint.
  • Scrum Team (ST): conjunto del PO, DT y SM. Se autoorganizan y son autosuficientes para realizar el Product Backlog
Ese mismo día se realizó la reunión del sprint planning; esta contenía dos partes principales:
Primero se hizo una selección de requisitos: El Product Owner (PO)  y el Scrum Master (SM), presentaron a los Development Team (DT) la lista de requisitos priorizada del producto o proyecto en el backlog, un documento que se utilizará para todo el proyecto y que contiene las descripciones genéricas de todos los requisitos, funcionalidades deseables etc. Este es abierto y solo puede ser modificado por el PO.
Cada DT preguntó al PO las dudas que les surgieron y se seleccionaron los requisitos más prioritarios para completar en el primer sprint en forma de user stories (historias de usuario); un user story es una representación de un requisito de software escrito en el lenguaje común del usuario; estas permitan de forma rápida administrar los requisitos de los usuarios sin tener que elaborar gran cantidad de documentos formales, se suelen escribir en un post it con una estructura “Como (rol) quiero (algo) para (beneficio)”
story
  • Cómo diseñador quiero realizar un análisis gráfico y funcional del diseño para crear la mejor experiencia de usuario.
  • Cómo diseñador quiero realizar una maqueta de la aplicación para tener una visión global de la app
  • Como desarrollador quiero un repositorio en GitHUB compartido con los integrantes del equipo para trabajar en equipo con garantías.
  • Cómo programador quiero analizar los requisitos de hardware y software del app para implementarlos
  • Como desarrollador quiero realizar la Creación de Virtual Devices y conexión de dispositivos físicos para comenzar con la implementación.
A continuación se realizó la planificación del primer sprint. Los DT elaboraron la lista de tareas del primer sprint necesarias para desarrollar los requisitos a los que se han comprometido.
La estimación de esfuerzo la realizaron de manera conjunta mediante planning poker; Es una técnica muy sencilla, eficaz y sobre todo divertida en la que todo el DT opina para estimar el esfuerzo de desarrollar cada una de las historias de usuario de un sprint. Lo normal es numerar las cartas con una serie de Fibonacci (0, 1, 1, 2, 3, 5, 8, 13, …), más la carta interrogante que equivale a “ni idea” y la carta infinito que equivale a “esto es demasiado grande”. Esto es así porque cuanto más grande es el número asignado mayor es la probabilidad de equivocarse en la estimación.

Screen Shot 2014-12-17 at 16.03.37

A continuación los TD pusieron las historias en el panel kanban y se autoasignaron las tareas.¡Es hora de ponerse manos a la obra! El tablero (kanban) ya tiene sus primeras user stories “in progress” e incluso algún “done” correspondientes al primer sprint!
 
Screen Shot 2014-12-17 at 16.05.12

Todos los alumnos están muy motivados con el proyecto, la información está fluyendo y están surgiendo ideas muy originales. Además recientemente realizaron una visita a Coritel dónde pudieron ver de primera mano como un equipo de desarrollo real utiliza Scrum para gestionar los proyectos.
 

domingo, 5 de octubre de 2014

Codemotion Madrid 2014

Es uno de los eventos más importantes sobre programación y tecnologías, la entrada normal son 50€y ya están agotadas, mientras que para estudiantes son 25 € y solo quedan 8 disponibles!
  • +1,500 asistentes
  • Más de 30 comunidades
  • 100 charlas y workshops
  • Actividades para startups, recruiting y networking
Podéis ver algunas de las transparencias y de los vídeos de las charlas del codemotion del año pasado en este link http://betabeers.com/forum/recopilacion-charlas-videos-codemotion-2013-madrid-381/
Se realizará en la Universidad San Pablo CEU, Campus de Montepríncipe (Boadilla del Monte, Madrid) los días 21 y 22 de Noviembre 2014

Para saber más: http://codemotion.es
 Entre los talks destacan:
Viernes 21
9:00 - 9:45 
10:45 - 11:30 
12:15 - 13:00 
13:15 - 14:00
15:30 - 16:15 
16:30- 1715 
17:30-18-15 
Sábado 22
9:45 - 10:30
12:15 - 13:00 
13:15 - 14:00
15:30- 16:15 
16:30- 17:15
17:30- 18:15 
Entre los workshops destacan:
Viernes 21
15:30 - 16:15
Sábado 22
12:15 - 13:00 

sábado, 12 de julio de 2014

Cómo hacer nuestros propios Open Badges con Mozilla

Diseño de una insignia para Mozilla Open Badges 

Lo primero que necesitamos es diseñar nuestras insignias (badges); esta es una parte esencial. Si nuestro centro tiene pensado entregar insignias, la mejor opción sería que estuvieran ligadas visualmente al centro. La marca es muy importante hoy en día, sin importar si nuestro centro es privado o público; tener en cuenta los colores, fuentes y logotipos utilizados en nuestro centro es necesario si tenemos la intención de que las insignias sean reconocidas. El sitio Noun project nos brinda la posibilidad de conseguir iconos que podemos utilizar de forma gratuita en nuestras insignias.

Estructura de una Insignia


Una insignia es en realidad una foto; exactamente, se trata de una imagen .PNG. Cuando un usuario ha conseguido una insignia y esta aparece en un sitio web, el fichero PNG de la insignia se mostrará así:



Las insignias deben crearse con las especificaciones de Mozilla; con los datos en formato JSON y enlazando a la cuenta del alumno en badgepack para mostrar información adicional sobre este (nombre, descripción, criterios, emisor...). De esta forma se evita que se dupliquen y extiendan. Una falsa insignia no será validada al hacer clic sobre ella para mostrar pruebas de su obtención.



Autenticidad de insignia

Cuando se hace clic sobre una insignia aparecen los datos del  distribuidor, el usuario, y la circunstancia por la que se la obtuvo. Esta información puede ser mostrada de una manera atractiva; debajo hay una imagen de cómo se ve una insignia de back pack de la universidad de Valencia para un curso de programación en Android.


Pasos para crear una insignia

1.- Crear una imagen .PNG para tu insignia. He creado a través de la página openbadges la siguiente imagen y la he guardado en una carpeta pública de Dropbox para que sea accesible.


2.- Crear un fichero de texto. Abrimos un editor cualquiera y siguiendo el formato JSON de abajo, completamos los datos en azul. Asegúrate de que el enlace a la imagen PNG sea accesible de forma pública (Dropbox, Google drive ...). 


     "recipient": "Badge earner's mail",
     "issued_on": "Date of expedition",
     "badge": {
                      "version": "version",
                      "name": "Title", 
                      "image": "PNG's URL",
                      "description": "Badge description", 
                      "criteria":"More info",
                      "issuer": { 
                                     "origin": "issuer's URL", 
                                     "name": "Badge Issuer name", 
                                     "org":  "Institution name", 
                                     "contact": "Institution name
                                  } 
                  } 
}

Un ejemplo podría ser el siguiente:
{
"recipient": "alumno@gmail.com",
"issued_on": "2014-07-12",
"badge": 
 { 
 "version": "1.0.0",
 "name": "Cualificaci\u00f3n profesional IFC155_3",                           "image":"https://dl.dropboxusercontent.com/u/14097447/openbadgets/IFC152_3.png",
 "description": "Configura, administra y mantiene un sistema inform\u00e1tico a nivel de hardware y software, garantizando la disponibilidad, \u00f3ptimo rendimiento, funcionalidad e integridad de los servicios y recursos del sistema.",           "criteria":"http://www.educacion.gob.es/educa/incual/pdf/BDC/IFC155_3.pdf",
 "issuer": {
            "origin": "http://iessanandres.centros.educa.jcyl.es", 
            "name": "IES San Andr\u00e9s", 
            "org":  "Junta de Castilla y Le\u00f3n", 
            "contact": "ies-san.andres@jcyl.es" 
           }
  } 
}

Si los acentos no te aparecen, puedes utilizar la siguiente tabla de conversión de símbolos utf-8 a iso-8859-1-ansi.

3.- Guardar el fichero de texto con extensión ".json": Debemos asegurarnos que también sea accesible de forma pública (Dropbox, Google Drive...). 

4.- Validación del fichero JSON: Para asegurar que el fichero JSON es correcto, copia y pega el contenido en la página validator.openbadges.org y haz clic en Check Validity; comprueba entonces que se muestra el mensaje en verde Valid:



 5.- Enviar la insignia al servicio baker de Mozilla. Es necesario construir una URL para añadir la insignia al servicio baker de Mozilla. Para ello, tomaremos el enlace público del fichero JSON y lo insertaremos al final del enlace siguiente:

     http://backpack.openbadges.org/baker?assertion=

En mi caso quedaría de la siguiente forma: 


Cuando introduzcas el enlace en el navegador y pulses entrar, estarás pidiendo al servicio baking de Mozilla que interprete tu fichero JSON y añada los datos a la imagen PNG que previamente indicaste en el fichero JSON. Este "horneado" enlaza los datos del fichero JSON con la imagen. Si todo va bien, se descargará automáticamente un fichero PNG; se trata de la insignia, horneada y lista para utilizar.


6.- Añadir la insignia al Mozilla Backpack. Las insignias PNGs obtenidas del servicio baking cumplen el Open Badge Infrastructure; la insignia únicamente podrá ser utilizada por el alumno que indicamos en recipient. En caso contrario, el alumno obtendría un mensaje como el siguiente:



Posteriormente haremos llegar la insignia al estudiante, que se logueará en Mozilla Backpack y solo tendrá que hacer clic en la imagen Upload a Badge.


Después el estudiante deberá pulsar en el botón "seleccionar archivo" para buscar el PNG de la insignia que le entregamos y lo subirá pulsando en el botón Upload.

Resultado final


El aspecto final que tendrá la insignia en la cuenta del alumno en su Mozilla Backpack será el siguiente:


Al pulsar sobre ella mostrará la siguiente información.







viernes, 7 de febrero de 2014

Informática entre las 20 profesiones con más futuro en España y EEUU

Según un informe de Adecco elaborado en diciembre prevé una elevada demanda de entre otros perfiles de informática, que será uno de los más buscados y mejor pagados en 2014.
Según este documento, la contratación por áreas laborales en 2013 en España informática ocupa el puesto tercero con un 16,5% del total de contrataciones; siendo el perfil de programador en Java uno de los más buscados en España.



Por otro lado el Departamento de Trabajo de Estados Unidos ha elaborado una predicción de la evolución del mercado laboral hasta 2022. El organismo público elabora estas proyecciones cruzando dos estadísticas laborales: la proyección de la demanda laboral entre 2012 y 2022 y el salario medio para cada puesto de trabajo. Como resultado, se obtiene una predicción fiable de las expectativas de futuro para todas las profesiones.

A partir de esta estadística, la revista neoyorquina Business Insider ha recopilado los 20 puestos con más proyección de futuro en la que se incluyen sólo los trabajos de nivel medio-alto, con salarios anuales superiores a 34.750 dólares (25.680 euros)
Entre estos 20, tres están relacionados con informática:
  • Software Systems Developers: En el top 12 con 82.800 puestos de trabajo previstos para 2022 con un salario medio de 99.000 dólares.
  • Computer Systems Analysts: En el top 7 con 127,700 puestos de trabajo previstos para 2022 con un salario medio de 79.680 dólares
  • Software Applications Developers: En el top 3 con 139.900 puestos de trabajo previstos para 2022 y con un salario medio de 79.680 dólares

Kimberly White/Getty Images

Leer más en:


jueves, 19 de diciembre de 2013

ProgramaMe 2013/14

Ya hay sede para el concurso regional de programaMe 2013/14, se trata del I.E.S. el Lago, pero, ¿que es programaMe?

Un poco de historia

Existen muchos concursos de programación, el más famoso es International Collegiate Programming Contest dirigido a estudiantes universitarios. España participa en el regional Southwestern Europe Regional Contest, que engloba también a Portugal, Francia e Italia, entre otros países.
Otro concurso de programación es el International Olympiad in Informatic, una iniciativa similar a ICPC pero para alumnado de ESO, Bachillerato y Ciclos Medios de FP impulsada por la Unesco. La eliminatoria española es la Olimpiada Informática Española, y es organizada anualmente por la Universidad Politécnica de Cataluña.

Lo más parecido para FP Superior son las Olimpiadas de Formación Profesional, más conocidas como Worlds Skills

Por esta razón un grupo de profesores de la comunidad de Madrid que habían participado en concurso de programación pensaron en la idea de crear un concurso de programación para Formación Profesional, con la intención de dar a conocer los ciclos de informática y quitarles esa etiqueta de que son para los perores alumnos.

La primera edición de ProgramaMe se realizó en Marzo de 2011, en el I.E.S. Antonio de Nebrija de Móstoles, y se abrió la participación a cualquier alumno de FP Superior de la Comunidad de Madrid. En el curso 2011-2012 ProgramaMe se expandió al resto de España, organizándose en 7 regiones distintas.

Reglamento

Es muy sencillo, podemos resumirlo en:


  • La inscripción se realiza por equipos, uno por centro con un máximo de tres componentes. Hay 16 plazas para Madrid
  • Los miembros de los equipos elegirán un nombre
  • Cada equipo puede tener un alumno suplente (avisando 24h antes)
  • Se propondrán entre ocho y doce problemas, cada uno con un color asociado para realizarlo en 4 horas.
  • Los participantes podrán utilizar como material de consulta un dossier realizado por el propio equipo
  • No se permiten móviles, portátiles, Internet etc.
  • Cada equipo tendrá un único PC, por lo que es indispensable la máxima de John Johnson "First solve the problem; then, write the code"
Las soluciones se envían a un juez automática a través de la red, que solo puede ser utilizada para para enviar las soluciones y consultar el ranking del concurso.

El juez automático calificará con uno de los siguientes veredictos:
  • ACCEPTED La solución ha sido considerada correcta y se acepta.
  • RUN ERROR La solución ha sufrido algún problema durante su ejecución y se ha anulado
  • WRONG ANSWER La solución ha generado una salida inválida con respecto a la especificación del problema
  • TIME LIMIT La solución se ha mantenido durante demasiado tiempo en ejecución y ha sido abortada
  • COMPILATION ERROR La solución enviada no ha compilado.


El el equipo que resuelva correctamente más problemas se proclamará ganador del concurso.

En caso de empate, ganará el equipo que menos tiempo acumulado haya necesitado para sus envíos correctos

Para calcular el tiempo acumulado por cada equipo se suma el tiempo transcurrido desde el inicio del concurso hasta el instante de cada envío aceptado, por cada envío que haya sido rechazado se añade una penalización extra de 20 minutos, esta penalización sólo se acumulará en los problemas que hayan sido resueltos finalmente.

Desarrollo del concurso

Cada equipo contará con un PC, este tendrá como Sistema Operativo una distribución GNU/Linux, que dispondrá de los editores más utilizados (emacs, vim-gnome, etc.). Todos los problemas pueden realizarse en C, C++ y Java, por lo que estará instalados los compiladores gcc, g++ y openjdk-6-jdk. Los equipos tendrán a su disposición los entornos integrados de desarrollo Eclipse y Netbeans además de documentación para Java y C. La red no tendrá acceso a Internet, solo al equipo con el juez on-line instalado.

El juez automático utilizado es DOMjudge. En la página web puedes familiarizarte con su interfaz en la "live demo" proporcionada por los creadores del software. 

Una vez que cada equipo realice el envío de una solución, se ve rápidamente el veredicto dado por el juez automático. Los jueces humanos estarán durante todo el concurso velando por la corrección de los veredictos de ese juez automático. En ningún caso se deberá pedir ayuda a los voluntarios que vigilen el correcto transcurso del concurso en las aulas.



Estrategias

La clave es organizarse, una buena estrategia es repartirse los problemas entre los miembros del equipo y ordenarlos en orden de dificultad, empezando por los más sencillos.
Una vez seleccionados los problemas fáciles, cada miembro resolverá el problema, lo plasmará en pseudocódigo. 

Como solo hay un PC por equipo, mientras uno está codificando, otro comprueba que no se comenten errores y le ayuda a resolver problemas que surjan, y el tercero puede ir preparando casos de prueba.

Es muy importante leer detenidamente todos los problemas, algunos tienen una dificultad técnica, otros son fáciles de programar pero necesitan una reflexión.

Lugar y fechas

Las Inscripciones de los equipos se realizarán en el mes de Enero.

El concurso regional será a mediados de Marzo de 2014 en el I.E.S. Lago de Madrid (ganador nacional del 2012/13)

Finalmente, los ganadores de los concursos regionales se enfrentarán en el concurso nacional que se realizará en el mes de Junio.


¿Porqué participar?


Es muy interesante participar, piensa que el concurso supondrá un reto para probar tus habilidades aprendidas y un cambio en la forma que has estado aprendiendo programación, lo que incrementa tu motivación.
    Además es una competición colaborativa, no sólo contra equipos de otros centros, sino contra el propio juez automático, una batalla hombre máquina al más puro estilo Matrix.
      Por último, programaMe es cada vez más conocido en las empresas de Madrid. muchos alumnos que han quedado bien clasificados en los concursos regionales este hecho como carta de presentación en sus currículums y tiene un impacto en la elección de los alumnos por parte de las empresas en la FCT.

      En el concurso pasado se entregaron los siguientes premios:
      • Primer premio: Para cada uno de los tres miembros del equipo que quede en primer lugar, un Apple iPad mini 16 GB WiFi. Premio patrocinado por Coritel.
      • Segundo premio: Para cada uno de los tres miembros del equipo que quede en segundo lugar, un Kindle Paperwhite WIFI. Premio patrocinado por Coritel.
      • Tercer premio: Para cada uno de los tres miembros del equipo que quede en tercer lugar, una Memoria USB de 64 GiB. Premio patrocinado por el Master de Videojuegos de la Universidad Complutense de Madrid.
      • Premio especial: Para cada uno de los tres miembros del equipo que resuelva el primer problema, un premio sorpresa. Premio patrocinado por El Corte Inglés.





        Para practicar

        El concurso ofrece muchos recursos en su página web y las redes sociales para tener más información, practicar con problemas de otros años y estar informado de las últimas novedades:



        Histórico de problemas


        Existen multitud de recursos gratuitos en los que puedes practicar contra jueces automáticos, aquí hay hay una lista de los más completos:

        • UVa Online Judge. Una de las mejores colecciones de problemas de la Red. Contiene una gran cantidad de problemas cubriendo diferentes categorías acompañados de un juez de reconocida estabilidad. Periódicamente organiza concursos on-line para todo el que quiera participar.
        • ACM-ICPC Live Archive. Página con casi todos los problemas aparecidos en los concursos de programación oficiales de la ACM. El mejor lugar para practicar concursos de alto nivel.
        • USA Computing Olympiad (USACO). Organización informática preuniversitaria de Estados Unidos cuyo objetivo es la mejora de las habilidades de programación tanto de alumnos como de profesores. Ofrece una sección entrenamiento.
        • Sphere Online Judge (SPOJ). Alrededor de 13000 problemas de gran calidad (y dificultad), indicado para grandes retos.
        • PKU Judge Online. Juez de la Universidad de Pekín.
        • Timus Online Judge. Juez de la Ural State University. La mayor colección de problemas de Rusia sacados de diferentes concursos. También organiza concursos on-line.
        • TJU ACM-ICPC Online Judge. Gran colección de problemas y de concursos on-line.
        • Fuzhou University Online Judge. Juez de la Universidad de Fuzhou (China). Posee una interesante colección de problemas y organiza concursos on-line. Algunas partes de la web están únicamente en chino.
        • Saratov State University :: Online Contester. Pequeña colección de problemas y algunos concursos on-line.
        • CodeChef. Juez desarrollado por Directi, una empresa de software india radicada en Bombay.
        • Jutge.org. Desarrollado en la Universidad Politécnica de Cataluña, contiene más de 800 ejercicios de dificultad baja o mediana.