26 de marzo de 2018

Nueva certificación de Microsoft: Introducción a la programación usando Python

Introducción

Una certificación profesional es un proceso por el cual una organización valida y dictamina el nivel de conocimiento y/o competencia que tiene una persona para un cierto trabajo o tarea. En el área de TI (Tecnologías de Información) las certificaciones profesionales comenzaron a popularizarse en la década de los años noventa a través de diversas empresas como Cisco, Novell, IBM, Oracle y Microsoft. Con ello cualquier individuo tiene, desde entonces, la posibilidad de ganarse las credenciales que avalan su dominio en el manejo de ciertas herramientas tecnológicas demandadas en la industria.

Fuente: www.certifiedeo.com

Hasta hace relativamente poco había tan solo un puñado de certificaciones relacionadas con Python, las cuales se podían obtener después de tomar uno o varios cursos presenciales o en línea (por el ejemplo los cursos ofrecidos por la Universidad de Illinois a través de la O’Reilly School of Technology) o presentando un examen no supervisado por Internet (como los ofrecidos por la empresa Brainbench). Sin embargo, no existía una certificación de Python que tuviera un amplio reconocimiento en la industria a nivel mundial. Por decir, algo equivalente a la certificación de Sun Microsystems/Oracle para el lenguaje Java o la certificación de Ruby ofrecida por la Ruby Association. Al parecer esta situación está cambiando a partir de hace unos meses.


El recién creado Python Institute anunció que está preparando dos certificaciones de tipo vendor-neutral (independientes de proveedor). El primero y más básico es el Python Certified Associate Programmer (PCAP), que será liberado supuestamente en este mismo mes (marzo de 2018). El segundo y más avanzado es el Python Certified Professional Programmer (PCPP), el cual está programado para ofrecerse a partir de julio de 2018. PCAP no tiene requisitos previos, pero, como es de esperarse, para ser PCPP primero se tiene que ser PCAP. Cada una de estas certificaciones se obtendrá pasando un examen supervisado en alguno de los más de cinco mil centros autorizados de evaluación Pearson VUE localizados alrededor del mundo. El costo anunciado de estos dos exámenes es de $295.00 USD, con la posibilidad de obtener un descuento del 50% si se toman los cursos en línea correspondientes, los cuales no tienen costo.

Otra opción para certificarse en Python apareció apenas en agosto de 2017. 98-381 “Introducción a la programación usando Python” es la clave y el nombre del nuevo examen ofrecido por Microsoft. Conviene mencionar que además de esta certificación, Microsoft recientemente ha hecho un esfuerzo encomiable para apoyar al lenguaje Python y a su comunidad. Por ejemplo, Python ahora corre en Visual Studio 2017, Visual Studio Code y el Subsistema de Windows para Linux; así mismo, Azure (el servicio de cómputo en la nube de Microsoft) permite crear Jupyter Notebooks (documentos que contienen código fuente, ecuaciones, visualizaciones y texto explicativo) de forma gratuita.

Fuente: www.microsoft.com

Desde el año 2000 he obtenido más de una decena de certificaciones profesionales, principalmente relacionadas con la plataforma Java. La verdad es que me gusta el desafío que representa obtener una certificación en algún área de mi interés. Así que cuando me enteré de que Microsoft estaba ofreciendo una certificación con Python no pude mas que sentirme intrigado y decidí aceptar el reto.

Meme generado en: imgflip.com

En lo que resta de esta entrada del blog comentaré los detalles más importantes de la nueva certificación de Microsoft así como mi experiencia personal presentando este examen.

Información general sobre el examen

NOTA: La información que se presenta a continuación fue recopilada durante los meses de febrero y marzo de 2018. Algunos datos podrían diferir en el futuro. Recomiendo consultar el sitio oficial de Microsoft para obtener la información actualizada.

El examen 98-381 (Introducción a la programación usando Python) está basado en la versión 3.6 (o superior) de Python y va dirigido en particular al siguiente público:
  • Profesionales de TI
  • Desarrolladores de software
  • Trabajadores de la información (information workers)
El sitio oficial además agrega esto:
Los candidatos a este examen deben poder reconocer y escribir de forma sintácticamente correcta código de Python, reconocer tipos de datos compatibles con Python y poder reconocer y escribir código de Python que resuelva lógicamente un problema concreto.

Se espera que los candidatos hayan tenido, como mínimo, clases y/o experiencia práctica de aproximadamente 100 horas con el lenguaje de programación Python, estén familiarizados con sus funciones y capacidades, y comprendan cómo escribir, depurar y mantener código de Python bien formado y documentado.
Específicamente se evalúan las siguientes habilidades:
  • Realizar operaciones usando tipos de datos y operadores.
  • Controlar el flujo con decisiones y ciclos.
  • Realizar operaciones de entrada y salida.
  • Documentar y estructurar código.
  • Diagnosticar problemas y gestionar errores.
  • Realizar operaciones usando módulos y herramientas.
En mi trabajo como profesor en el Tecnológico de Monterrey he impartido varias veces el curso de Fundamentos de programación usando Python, en el que cubrimos una gran porción de los temas mencionados arriba. Así que la mayor parte del contenido del examen ya lo manejaba bastante bien. Solo tuve que concentrarme en estudiar la parte del API de Python, específicamente los módulo math, datetime, io, sys, os, os.path y random. En total le habré dedicado unas tres o cuatro horas de estudio.

Al acreditar el examen 98-381 se obtiene la certificación MTA (Microsoft Technology Associate). Su costo varía según el país. Para México y otros países de Latinoamérica el costo del examen es de $62.00 USD. En Estados Unidos el examen cuesta $127.00 USD. El costo del examen en España y otros países de la Unión Europea es de €127.00 EUR. El examen se lleva a cabo por computadora y es necesario acudir a un centro de evaluación autorizado de Pearson VUE o Certipoint para presentarlo.

Distintivo (badge) MTA
(Microsoft Technology Associate)

El examen se ofrece en varios idiomas, incluyendo inglés y español. Yo hice mi examen en inglés, pues me inquieta la idea de no poder entender completamente las traducciones que luego se emplean para ciertos términos técnicos. Por ejemplo, en el mismo sitio en español de Microsoft usan la palabra “operarios” como traducción de operators en inglés. Sin embargo, la mayoría de la gente de habla hispana usamos el término “operadores”. De forma similar, yo uso el término “operaciones de rebanadas” como traducción de slicing operations, pero en el sitio de Microsoft le llaman “operaciones de troceado”. No dudo que otros autores traduzcan estos y otros términos de manera muy distinta. Para no tener que estar adivinando, prefiero presentar este tipo de exámenes siempre en inglés.

Fuente: www.trialinteractive.com

El estilo de las preguntas del examen es variado. Hay una serie de videos (en inglés) en los que se muestran todos los posibles tipos de pregunta. A mí principalmente me tocaron preguntas de opción múltiple o de arrastrar y soltar. En total, el examen consta de 40 preguntas, las cuales se deben responder en 45 minutos como máximo. Esto significa que se tiene, en promedio, un poco más de un minuto para responder cada pregunta. Estoy acostumbrado a terminar este tipo de exámenes con bastante tiempo de sobra, incluso alcanzo a repasar con relativa calma todas mis respuestas antes de darlo por terminado. Pero esta vez no fue así. Por primera vez no alcancé a terminar un examen de certificación en el tiempo designado. Me quedé sin poder responder las últimas dos preguntas.

Fuente: naturalsociety.com

Debo confesar que durante la recta final del examen comencé a sentirme agobiado y con dudas sobre mi capacidad para concluirlo de manera exitosa. Afortunadamente, todo salió bien al final. Se requieren 70 de un total de 100 puntos para pasar el examen. En mi caso obtuve 90 puntos, así que logré acreditarlo con bastante holgura, aún a pesar del par de preguntas que me faltaron responder.

El resultado del examen está disponible inmediatamente al terminar, el cual se proporciona en forma de un reporte como el que se muestra a continuación:


El reporte muestra el desempeño de cada una de las seis habilidades evaluadas en el examen usando barras horizontales. El desempeño es mejor entre más larga sea la barra.

Una vez acreditado el examen, el sitio de certificación de Microsoft proporciona la opción de descargar en formato electrónico el certificado correspondiente.


Y a final de cuentas, ¿conviene certificarse?

El tema de las certificaciones en TI puede llegar a ser controvertido. Los detractores de las certificaciones consideran que éstas son solo un negocio para las compañías que las emiten, que no garantizan que alguien realmente domina el material examinado, y que la experiencia práctica obtenida en el trabajo y/o proyectos FOSS (software libre y de código abierto) es mucho más valiosa. A mi parecer estas críticas son bastante válidas, pero hay que considerarlas en su justa dimensión, pues de otra forma podríamos caer en el error de usarlas también en contra de cualquier esquema de educación formal.

El sitio de Microsoft enuncia las siguientes motivaciones para obtener una certificación profesional en el área de TI:
Las certificaciones le proporcionan una ventaja profesional al ser una prueba respaldada y mundialmente reconocida por la industria del dominio de unas habilidades, demostrando su capacidad y voluntad para aceptar las nuevas tecnologías. Verifique sus habilidades, consiga más oportunidades.
Para un joven recién graduado de una carrera profesional, alguien que posiblemente tenga poca o nula experiencia laboral, una certificación puede ser un factor importante para diferenciarse de otros candidatos a un mismo puesto de trabajo. Sin embargo, para alguien que ya tiene varios años de experiencia trabajando en la industria, las certificaciones pueden ser irrelevantes, aunque esto también depende del área de especialidad. Por ejemplo, las certificaciones en el área de seguridad, redes y administración de proyectos son más trascendentes que las del área de programación. El siguiente artículo (en inglés) escrito por Bob Violino hace una reflexión interesante sobre todo este asunto: The real dirt on programming certifications.

Para mí, en lo particular, las certificaciones han sido un medio para el desafío y la superación personal. Con ellas he podido validar y complementar mis habilidades y conocimientos, ya que me han motivado a prepararme en temas particulares que de otra forma difícilmente hubiera revisado por mi cuenta. Considero que las certificaciones han sido una buena inversión de mis recursos.

Fuente: emojiisland.com

31 de diciembre de 2017

4° Congreso Internacional de Innovación Educativa

Del 11 al 13 de diciembre de 2017 se llevó a cabo en la ciudad de Monterrey, Nuevo León, México, el 4° Congreso Internacional de Innovación Educativa (CIIE). Este congreso tiene como objetivo principal que los participantes conozcan las tendencias y prácticas que están revolucionando la educación en el mundo. Esta edición del congreso logró juntar a más de tres mil profesores de 17 países.

Fuente: observatorio.itesm.mx

En el marco de este congreso tuve la oportunidad de fungir como coordinador de un panel titulado “Enseñando a programar usando el lenguaje Python”. Este es su resumen:
El lenguaje de programación Python se ha popularizado en el ámbito educativo en años recientes. Guo (2014) reportó que 8 de las 10 universidades más importantes en el área de ciencia de la computación en los Estados Unidos están actualmente utilizando Python en sus cursos de introducción a la programación. Algunos profesores del Tecnológico de Monterrey también están usando este lenguaje para enseñar a programar a sus estudiantes de diversas carreras profesionales, desde aquellas en el área de TI e ingeniería hasta las de arte y medios digitales. Este panel tiene como intención permitir a varios de estos profesores compartir sus experiencias y reflexiones en el uso de Python en los cursos de Fundamentos de programación (Tc1014) y Solución de problemas con programación (Tc1017). Python provee muchas ventajas como primer lenguaje de programación: tiene una sintaxis y semántica sencilla y consistente, viene con “baterías incluidas” (extensa biblioteca estándar), su naturaleza interactiva lo hace ideal para llevar a cabo experimentación y desarrollo rápido, es software libre y corre en múltiples plataformas (Windows, macOS y Linux). Sin embargo, Python no es un lenguaje perfecto, por lo que también abordaremos en este panel algunas de sus fallas y limitaciones.
El panel estuvo conformado, además de mí, por los siguientes cuatro destacados profesores del Tecnológico de Monterrey:
  • Alma Patricia Chávez Cervantes (Campus Estado de México)
  • Irma María García Barranco (Campus Estado de México)
  • Kenneth William Bauer (Campus Guadalajara)
  • Eduardo Daniel Juárez Pineda (Campus Querétaro)

Los integrantes del panel “Enseñando a programar usando el
lenguaje Python”. Atrás: Patricia Chávez y Ken Bauer. En frente:
Irma García, Ariel Ortiz y Eduardo Juárez.

En el panel se discutieron las ventajas y desventajas que tiene Python como primer lenguaje para enseñar a programar y cómo se compara con otros lenguajes (por ejemplo C, C++ o Java). Así mismo, se presentaron ejemplos de cómo se puede utilizar Python y bibliotecas de terceros para resolver problemas de dominios variados, como son: cómputo científico e ingenieril, procesamiento de medios y programación de microcontroladores. Finalmente, se compartieron experiencias, sugerencias, prácticas y recursos que seguramente resultarán útiles a otros maestros interesados en adoptar Python en sus clases.

Fuente: www.ezlearning.co.uk

El panel fue recibido de manera bastante favorable por el público asistente, compuesto por más de una veintena de personas. En particular, varios profesores de nivel preparatoria se mostraron muy interesados en los temas tratados.


Se pueden consultar las siguientes ligas para encontrar más información sobre este panel y el CIIE 2017 en general:

31 de julio de 2017

pyboard: Python en un microchip

A finales del año 2013, el físico y programador australiano Damien George arrancó desde el Reino Unido una campaña en Kickstarter para recaudar fondos con el fin de desarrollar una plataforma de hardware libre basada en una placa con un microcontrolador que soportara directamente el lenguaje Python. Esencialmente quería diseñar algo parecido a un Arduino, pero que pudiera programarse de manera eficiente en Python en lugar de los lenguajes comúnmente disponibles para programar microcontroladores (C/C++ y ensamblador). La meta inicial de George era recaudar 15,000 GBP (aproximadamente equivalente a 25,000 USD de aquel entonces) para elaborar su proyecto, pero al finalizar la campaña había recaudado 97,803 GBP (más de 160,000 USD). Y así fue como surgió el pyboard.

Damien P. George, creador del pyboard.
Fuente: dpgeorge.net

El software

Central en el proyecto del pyboard fue el desarrollo de MicroPython, un subconjunto de Python 3 elaborado también por Damien George. Al re-escribir este intérprete desde cero, George logró que fuera suficientemente pequeño para poder caber y correr en un microcontrolador.


MicroPython utiliza muy poca memoria RAM e incluye una pequeña fracción de la biblioteca estándar de Python. Aún así, MicroPython soporta características avanzadas como son: enteros de tamaño arbitrario, cerraduras léxicas (closures), listas por comprensión, generadores, manejo de excepciones e incluseo un shell interactivo. Al correr directamente sobre los fierros, MicroPython funge efectivamente como el sistema operativo del pyboard.

Teóricamente, los requisitos mínimos de memoria para que un sistema pueda soportar MicroPython son: 128 kibibytes de ROM y 8 kibibytes de RAM. Gracias a eso ha sido migrado exitosamente a otras plataformas. Además del pyboard, el sitio oficial ofrece el firmware requerido para correr MicroPython en los microchips WiPy, ESP8266, ESP32, Espruino Pico, STM32F4, NUCLEO-L476RG y micro:bit.

El hardware

La placa del pyboard contiene un microcontrolador STM32F405RG de STMicroelectronics con las siguientes características:
  • Procesador RISC de 32 bits ARM Cortex-M4F.
  • Una velocidad de reloj de 168 MHz.
  • Registros de 32 bits: 
    • 16 para valores enteros.
    • 32 para valores de punto flotante de precisión sencilla.
  • 192 kibibytes de memoria RAM para almacenar datos volátiles.
  • 1024 kibibytes de memoria flash ROM para almacenar el código del programa.
  • 13 temporizadores independientes.
  • Soporte de protocolos UART, I2C, SPI y CAN para comunicación con periféricos.
  • Hardware generador de números aleatorios (TRNG, true random number generator).

El pyboard v1.1.
Fuente: MicroPython Store

La placa del pyboard tiene un tamaño de 4.1 cm × 3.2 cm × 0.2 cm y cuenta adicionalmente con los siguientes elementos:
  • Conector micro-USB: sirve como fuente de alimentación y también permite establecer comunicación serial con una computadora anfitriona.
  • Ranura para tarjeta microSD de capacidad estándar (SDSC) y alta capacidad (SDHC).
  • Acelerómetro de tres ejes.
  • Reloj en tiempo real (oscilador de cristal) a 32 kHz.
  • Dos botones: RST (hard reset) y USR (funcionalidad definida por el usuario).
  • Cuatro ledes (colores: rojo, verde, amarillo y azul).
  • 30 pines GPIO (general-purpose input/output).  

Comparando pyboard con Arduino

La principal ventaja de un pyboard sobre un Arduino tiene que ver con la forma en que soportan Python. En diversas entradas de este blog hemos programado el Arduino usando Python, pero no debemos perder de vista que el Arduino debe estar siempre conectado a una computadora anfitriona a través de un cable USB. Esto es así porque el programa de Python corre en el sistema anfitrión y no en el Arduino. El Arduino funge como esclavo que corre un ejecutable (típicamente escrito en C/C++) que implementa el protocolo de Firmata y que le permite establecer una comunicación serial en dos sentidos con el programa que lo controla y que corre en la PC anfitriona. El pyboard, por otro lado, puede correr programas en Python sin necesidad de estar conectado en todo momento a una computadora anfitriona. El pyboard tiene instalado localmente el intérprete de MicroPython y solo basta transferir (vía la conexión USB) a su memoria flash el programa *.py que deseamos correr. Una vez hecho esto, podemos desconectar el pyboard del sistema anfitrión y solo requerimos proveerle a la placa un suministro eléctrico alternativo, por ejemplo un banco de energía (como los que se usan para recargar las pilas de los teléfonos celulares). A partir de ese momento nuestro programa en Python se ejecuta automáticamente al encender o reiniciar el pyboard.

Un pyboard (en su estuche protector)
conectado a un banco de energía.

Cuando el pyboard está conectado a la computadora anfitriona podemos llevar a cabo una sesión interactiva con el shell de MicroPython corriendo directamente sobre la placa. Para lograr lo anterior tenemos que abrir una ventana de línea de comando en el sistema anfitrión y luego correr algún emulador de terminal tonta (por ejemplo screen o picocom) que permita conectarse al pyboard. Cuando corremos el shell podemos jugar y experimentar directamente con todas las facilidades provistas por la placa. El shell también puede ser bastante útil durante el proceso de depuración de nuestros programas. No existe una funcionalidad similar a ésta cuando se programa el Arduino usando C/C++.

El shell de MicroPython corriendo sobre el
pyboard y siendo visualizado en una
ventana de línea de comando en la
computadora anfitriona.

Otra diferencia entre el Arduino y el pyboard son las herramientas de desarrollo que se utilizan. Arduino necesita su propio IDE (ambiente de desarrollo integrado) para editar archivos, compilarlos y transferir los ejecutables a la placa. Para usar el pyboard no necesitamos ningún software especial, salvo el editor de nuestra preferencia. Resulta trivial la transferencia de archivos gracias a que la placa se comporta como una memoria USB al momento de conectarla a la máquina anfitriona, la cual puede estar corriendo Windows, macOS o Linux.

El pyboard tiene otra ventaja sobre Arduino que puede ser benéfica particularmente para principiantes. Al incorporar de fábrica cuatro ledes, un botón y un acelerómetro, es posible elaborar diversos proyectos interesantes en el pyboard sin requerir hardware adicional. Es posible empezar a hacer experimentos sencillos de computación física sin tener la necesidad de conseguir y conectar actuadores, sensores, resistencias y cables a un protoboard.

Caos resultado de un exceso de componentes electrónicos.
Fuente:
Harvard Business Review

Dado que el hardware del pyboard es de mayor capacidad y más sofisticado que la mayoría de los modelos existentes de Arduino, resulta también ser un tanto más costoso. Irónicamente, puede resultar que un programa escrito en C/C++ para Arduino se ejecute más rápido que su equivalente en Python para el pyboard. Esto se debe a que en estas plataformas el código de C/C++ se compila mientras que el de Python se interpreta. Como es bien sabido, los programas interpretados son usualmente más lentos y requieren más memoria que los compilados debido a la necesidad de traducir el código fuente mientras se corre. En la práctica, el impacto en los tiempos de ejecución normalmente no repercute de forma significativa en la mayoría de los programas escritos para el pyboard. Y si esto llegara a ser un problema, existe la opción de escribir porciones limitadas de código en C/C++/ensamblador que pueden ser invocadas desde el código de MicroPython para optimizar los cuellos de botella y obtener así un mejor desempeño pero sin reducir sustancialmente la productividad que se consigue al programar primordialmente en Python.

Comparando pyboard con Raspberry Pi

La Raspberry Pi (RPi) y el pyboard pertenecen a dos categorías diferentes de placas electrónicas. La RPi es una computadora monoplaca (single-board computer) que para fines prácticos es casi una computadora completa. Tiene su propio sistema operativo (usualmente alguna distribución de Linux) y para usarla necesitamos (generalmente) conectarle mouse, teclado y monitor. El modelo 3 de la RPi ya cuenta incluso con Bluetooth y Wi-Fi. Por otro lado, el pyboard (al igual que el Arduino) es un microcontrolador monoplaca (single-board microcontroller). Esto significa que un pyboard es más sencillo y tiene típicamente un propósito más restringido que una RPi. Conviene mencionar que una RPi puede servir de sistema anfitrión para programar a un pyboard.

Por sus características de hardware, una RPi modelo 3 resulta una buena opción para realizar proyectos de IoT (internet de las cosas). En contraste, el pyboard no cuenta con un esquema de comunicación inalámbrica, por lo que no resulta adecuado para este fin.

Al igual que el pyboard y el Arduino (y a diferencia de una PC común y corriente), la RPi cuenta con múltiples pines GPIO (entrada/salida de propósito general) que podemos usar para conectar y controlar diversos componentes, tales como actuadores y sensores. Al momento de programar la RPi podemos usar cualquier lenguaje soportado por su sistema operativo, por ejemplo C, C++, Java, Ruby, Python, Perl, JavaScript, etc. Como ya lo hemos mencionado varias veces, el pyboard está diseñado para programarse en Python.

Fuente: Day Break Tecnologies

Comentarios finales

El pyboard es una opción interesante en el mundo de la computación física. En primera instancia se parece al Arduino pero con el atractivo de que se programa directamente en Python. Lamentablemente es aún poco conocido, y por lo mismo existe menos documentación disponible (comparado con otras plataformas) y resulta complicado adquirirlo en países como México. En Estados Unidos se puede conseguir a través de Amazon.com o Adafruit. La empresa Adafruit realiza envíos de componentes electrónicos a México, pero hay que considerar los impuestos aduanales que se deben pagar al momento en que un producto de este tipo llega al país. En Europa y otras partes del mundo los interesados pueden comprar el pyboard en la tienda oficial de MicroPython. El costo de un pyboard v1.1 varía bastante según el proveedor, pero usualmente comienza en los 35 USD.