Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=421b556e-0746-48aa-aab0-3183714aca71

Las herramientas de un programador ciego

Laberinto sin callejones sin salida
Imagen CC-AT-SA por Purpy Pupple en Wikimedia

Nota: este artículo es una traducción de un post de Parham Doustdar, un programador iraní ciego, con su permiso. El énfasis (negritas) es nuestro. Su historia nos ha apasionado y seguro que traducimos algún otro artículo de los suyos en el futuro.

Cuando publiqué la Autobiografía de un Programador Ciego, recibí muchas preguntas sobre cómo uso el ordenador, cómo escribo código, y sobre cómo comprendo conceptos abstractos.

Cuando empecé a escribir este post me iba por las ramas todo el rato. Empezaba a escribir sobre cosas de mi pasado que no tenían nada que ver con las herramientas que uso. Daba mi preferencias, y luego explicaba cómo llegué a formar dichas preferencias... pero ¿por qué os cuento esto?

Es para animaros a que le echéis un vistazo al enlace de la primera línea de este post, es decir a Autobiografía de un Programador Ciego. Si ahora aún no te apetece, al menos tenlo en cuenta si quieres saber más sobre mi pasado.

Habiendo dicho esto, dejémonos de marear la perdiz y vayamos al grano para explicar lo que dice el título de este post.

Herramientas para todos los días

Lectores de pantalla

Los usuarios de ordenador con discapacidad visual o baja visión usan lo que se denomina un lector de pantalla (adivina para qué) que les lee la pantalla. Estos programas tienen funcionalidades muy potentes. Por ejemplo, con él puedo controlar el ratón, ver los elementos en la pantalla jerárquicamente (como entrar en un menú, o desplazarme por los elementos dentro de una barra de herramientas, etc). Sin embargo, una de las funcionalidades más impresionantes de cualquier lector de pantalla en general es cómo maneja el contenido web. La funcionalidad más rudimentaria es que es capaz de desplazarse entre diferentes tipos de elementos como listas, títulos, botones, campos de texto, y así sucesivamente. El nivel más avanzado es la granularidad, como ser capaz de saltar a un título de primer nivel (un elemento h1) y demás. Por último, ser capaz de manejar WAI-ARIA es una de las funcionalidades que se ha vuelto más importante en los últimos tiempos, ya que cada vez más páginas web adoptan su uso (por ejemplo Google Docs, Twitter, Facebook y demás).

Los lectores de pantalla, al igual que otros programas, ofrecen diferentes funcionalidades en función del que estés utilizando. Por ejemplo, yo uso NVDA porque tiene una calidad altísima, está escrito por personas ciegas, y no tengo que estar buscando copias piratas porque es gratuito. Sin embargo, hay otros lectores de pantalla. Jaws (también conocido como Job Access With Speech) es muy popular, pero su uso va cayendo tras muchos años de hegemonía. También está Window-Eyes, que está creciendo en uso. Si quieres ver una encuesta de tendencias (navegador, lector de pantalla, y combinación de navegador/lector de pantalla), échale un vistazo a los resultados de la Encuesta de los Usuarios de Lectores de Pantalla #6 hecha por WebAIM. Es un recurso muy útil para conocer las tendencias a nivel estadístico entre una minoría de usuarios.

Lo malo es que todos estos son solo para Windows. En Mac e iOS hay un lector de pantalla incorporado llamado VoiceOver. En Linux, hay un lector de pantalla que viene con Gnome de escritorio llamado Orca. Para aquellas personas que no tienen un entorno de escritorio está el proyecto Speakup. Para los usuarios de Android, Google ofrece Google Talkback.

Para hacer la lista lo más completa posible, las personas que usan Chrome normalmente usan una extensión llamada ChromeVox, que es una forma de interactuar con Chrome, y que se diseñó para ser el lector de pantalla de Chrome OS.

Yo personalmente uso Windows y Android, así que mis lectores de pantalla son NVDA y Google Talkback.

Lenguajes de programación

Me encanta aprender lenguajes de programación, así que no tengo uno que use para todo. Sin embargo, cuando hablamos de lenguaje de programación con los que he trabajado, esta es la lista:

  • PHP (lo uso en mi trabajo)
  • Go (lo uso en mi trabajo, pero no tanto como PHP)
  • Elixir (trasteo con este en casa)
  • Scala (siempre he querido poder trastear con este en casa también, pero el gran número de funcionalidades de lenguaje me intimida y siempre lo dejo para otro momento)

Por supuesto, he experimentado con otros lenguajes, pero estos cuatro son los que más he usado.

IDEs

Primero, voy a definir lo que yo espero de un entorno de desarrollo integrado.

Un buen IDE tiene que ofrecer autocompletar, la capacidad de ir a la declaración de la función/clase/variable y ver la documentación de una funcionalidad (esto podría ser un DocBlock, o documentación para funcionalidades incluidas de serie). Por supuesto, el refactoring es fundamental: extraer variables locales y métodos, mover funciones de aquí para allá, renombrarlas y demás.

Cosas que están bien tener pero que no me preocupan mucho serían por ejemplo, obtener dependencias de proyectos (usando el gestor de paquetes de un lenguaje como composer, go get, npm y demás) desde el propio IDE, porque así puedo ejecutarlos desde una línea de comando. Obviamente, crear y ejecutar binarios directamente desde el IDE puede ser muy útil, pero como para mí la alternativa es simplemente hacer Alt+Tab para acceder a mi terminal, pulsar flecha arriba para obtener el último comando, y luego pulsar Intro para ejecutarlo de nuevo... me da igual si un IDE no incluye dicha funcionalidad.

La mayor parte del tiempo uso Eclipse e IDEs basados en Eclipse. Al estar en Irán, tengo que usar copias piratas de copias de pagos (como Zend Studio). Sin embargo, las funcionalidades de accesibilidad de Eclipse le ganan a aquellas ofrecidas por otros IDEs sin líneas de comando (sí, ya llegaremos al punto en el que explique por qué no uso la línea de comando).

Ya he publicado un análisis en profundidad sobre accesibilidad en herramientas PHP en mi artículo SitePoint llamado El Estado de la Accesibilidad en Herramientas PHP. De todos modos, aquí va un breve resumen:

  • PHPStorm solía ser malísimo, pero los tiempos están cambiando. La plataforma IntelliJ, hasta hace muy poco, era muy inaccesible. Ahora Android Studio está cambiando eso, hasta el punto de que Android Studio se puede casi comparar con IDEs basados en Eclipse. Propuse una sugerencia sobre este tema y dado al gran número de votos recibidos, lo subieron en sus prioridades dentro de su lista de mejoras por hacer (su to-do list, gracias desarrolladores de IntelliJ) y empezaron a trabajar en algunos puntos.
  • SublimeText es malísimo. Sus desarrolladores no responden a peticiones de mejora en accesibilidad, así que está fuera de mi atención.
  • NetBeans ha empezado a trabajar con las personas que están detrás del Lenguaje de Programación Quorum. No lo he usado últimamente, pero he oído que las cosas están mucho mejor con Sodbeans, el IDE Quorum.
  • Notepad++ simplemente funciona. Obviamente, funciones tipo autocompletar y demás no funcionan con lectores de pantalla, pero Notepad++ es muy ligero y compatible con finales de línea tipo Unix, así que lo uso encantado para cosas rápidas.

Sistemas Operativos

Uso Windows tanto en casa como en el trabajo. Tengo un viejo portátil con Linux, para trastear con Emacs y Emacspeak, para ver si soy capaz de dominar sus casi infinitos atajos. Sin embargo, dado que navegar en Linux no está tan bien como navegar con Windows en términos de accesibilidad, me quedo con Windows por el momento.

Actualmente no hay suficientes usuarios de ordenadores ciegos como para justificar una mejor accesibilidad en muchas aplicaciones. Imagina que solo un 1% de las personas con discapacidad visual usan el sistema operativo Linux. Al final los lectores de pantalla no son muy avanzados, los entornos de escritorio (como KDE) no son ni de lejos tan accesibles como sus homólogos en otros sistemas operativos, y el ritmo del cambio es muy, muy lento. A ver, se puede usar, pero es que la experiencia de usuario no es, a falta de una palabra mejor, tan limpia como la experiencia que obtienes con Mac OS X o Windows.

A priori, puedes pensar que Linux es más accesible para las personas con discapacidad visual que Windows, y esta creencia es básicamente verdad. ¿Por qué pensamos que Linux es más accesible? Pues porque cuando pensamos en Linux, nos viene a la cabeza una imagen de caracteres que van desplazándose rápidamente por la pantalla. "Si es todo texto", piensa la mayoría, "entonces tiene que ser un sistema operativo perfecto para que trabajen las personas con discapacidad visual". Y esto es verdad, pero hasta un punto.

El problema se pone de manifiesto cuando hablamos de Internet. Necesitas un navegador capaz de ejecutar JavaScript para navegar por Internet hoy en día, y esto implica que no puedes usar una línea de comando. Entonces tienes que empezar a gestionar temas de navegador, acceso a navegador, y cosas como Adobe Flash Player que es inaccesible en Linux y que no tiene una alternativa accesible en esa plataforma. Igual que lo expuesto en el post sobre PHP llamado PHP: un fractal de mal diseño, hay muchos pequeños problemas. Todo funciona más o menos, pero no encajan las piezas tan bien como en otras soluciones.

Nota: no me estoy metiendo con PHP aquí. Solo cito este post por su famoso ejemplo sobre la caja de herramientas que muchos desarrolladores conocen.

Todos sabemos que Linux es una parte indispensable de cualquier juego de herramientas de un desarrollador web. Yo he solucionado ese problema creando mis entornos de desarrollo con Vagrant, que me ofrece la ventaja de usar Windows para escribir código, y la línea de comandos en Linux para montar y ejecutar la aplicación. No estoy usando Docker porque han bloqueado la descarga de imágenes en Irán.

Con estas explicaciones, os estaréis preguntando por qué no uso Mac. Después de todo, su objetivo es ofrecer una interfaz gráfica de usuario amigable y fácil de usar, a la vez que mantiene la potencia de un terminal, a tu disposición. Esto también es verdad. Sin embargo mi problema con Mac OS X es algo mucho más sencillo, ya que VoiceOver es un lector de pantalla bastante bueno. Mi problema con OS X es que es cerrado. En Linux y Windows, puedes instalar cualquier lector de pantalla, con cualquier sintetizador de voz que quieras. Sin embargo, en OS X, solo puedes usar su lector de pantalla, su sintetizador, y nada más. Eso implica que no puedo usar eSpeak, que es un software texto-a-voz de código abierto en el que un par de amigos y yo contribuimos, para que pudiera soportar el idioma persa. Así que, sin este texto-a-voz disponible en esa plataforma, no tengo forma de comunicarme con muchas personas en mi propio idioma.

Herramientas de productividad

Muchas personas usan diferentes aplicaciones para visualizar cosas. Tienes los tablones Kanban, herramientas de mapas mentales, apps para gestionar las finanzas personales, y muchas más. En el mundo de la programación hay muchas tablas, gráficos y otros tipos de ilustración. ¿Las uso?

Normalmente no.

Cuando estaba en la universidad mis profesores usaban diagramas UML para trasladar conceptos de bases de datos. Usaban formas visuales de representar y calcular datos, como álgebra lineal. Esto suponía un sobre-esfuerzo por mi parte para entender los conceptos en esas asignaturas. Esa presión constante, junto con la poca voluntad que mostraban los profesores que simplemente querían dar su clase e irse a casa, me hizo caer en la cuenta de que no me merecía la pena padecer un sistema educativo con el que me tenía que pelear todo el rato. Ahí fue cuando lo dejé.

Este tipo de problemas no se circunscriben solo al ámbito universitario. Me he matriculado en un curso llamado Las Bases del Machine Learning: Un Enfoque desde un Supuesto Práctico. Hay partes del curso que se basan en técnicas similares, como la regresión lineal. Por supuesto, mi incapacidad de entender estos conceptos ha inspirado la ya famosa pregunta: ¿se puede hacer regresión lineal sin usar gráficas y álgebra lineal? No se trata de que necesite tocar las cosas para ser capaz de visualizarlas. Simplemente es que no entiendo por qué estos conceptos, que en principio no tienen nada que ver con líneas y gráficos, se solucionan de esa manera. Puedo entender que la visualización de los datos te permite ver cómo los puntos de los datos están diseminados, pero ¿tener una solución que resuelve un problema estadístico usando líneas con pendientes e intersecciones? Puf!.

En la actualidad estoy trabajando en un artículo intentando explicar el concepto de regresión lineal sin usar gráficos y, hasta que no esté finalizado, no puedo explicar de manera práctica lo que quiero decir. Sin embargo, muchos conceptos como este, que al parecer se hacen de manera más compleja de lo necesario normalmente me aturden y me confunden. Súmale el hecho de que las líneas y los gráficos y demás no son para nada intuitivos para mí, y ya entiendes el sentido general de lo que quiero decir.

Cuando amplías esto al mundo de las aplicaciones Web, muchas funcionalidades semejantes también pierden el sentido. Por ejemplo, no puedo usar Google Analytics de manera efectiva porque no hay ninguna manera sencilla de ver los datos en bruto en el interfaz, sin poner el ratón encima de varias cosas. Por esta razón he empezado a trabajar en una aplicación en JavaScript para extraer datos de mi Google Analytics y mostrarla en una tabla sencilla, para poder comparar datos, y luego fundirlos y emparejarlos en función de lo que necesite.

Al margen de toda esta negatividad, esto es lo que me funciona.

Uso Trello para crear listas de las cosas que tengo que hacer. La interfaz no es muy fácil de usar ya que no tiene estándares WAI-ARIA. Aunque puede ser usado con teclado, no te informa de muchas cosas. Por ejemplo, cuando navegas en el listado de tarjetas usando j y k, la navegación funciona. Sin embargo, no le deja saber a mi lector de pantalla qué tarjeta ha adquirido foco. Esto implica que aunque puedo usar el teclado para navegar a diferentes tarjetas, no puedo, porque no sé en qué tarea estoy. Google Mail tiene una mejor implementación de esto, donde j y k te desplazan a diferentes emails, pero también de permiten mover el foco a una nueva elección. Lo que esto quiere decir es que mi lector de pantalla te anuncia el nuevo foco, de hecho me permite saber si estoy en el email deseado.

Para redes sociales uso TWBlue para Twitter y Facebook. Voy a Quora a contestar preguntas aunque no forma parte de mi rutina diaria.

Mi proceso creativo es bastante diferente. Desafortunadamente no tengo acceso a personas buenas en cosas como la programación neuro-lingüística para averiguarlo por mis propios medios. El problema está en que el tipo de estimulación que ofrece un mapa mental para alguien que sí ve, no se me ofrece a mí cuando simplemente anoto cosas.

No estoy tan a gusto con las herramientas de productividad que he elegido como con mis herramientas de programación. Tengo que darle más vueltas ya sea para encontrar, probar o crear la solución perfecta para mí.

Conclusión

Hay unas cuantas cosas que me encantan de ser ciego. Una de ellas es que te obliga a labrar tu propio camino la mayor parte del tiempo. No puedes simplemente hacer las cosas como las hacen los demás, porque no te valen. Tienes que entender las cosas desde un nivel muy básico, y seguir experimentado hasta encontrar tu zona de confort. Por ejemplo, cuando alguien da diez razones para ser autónomo, muchas personas simplemente ven la lista, la contrastan con sus objetivos vitales o la visión del futuro y deciden si ser autónomo es lo que les pega más. Sin embargo, yo tengo que pensar todo el rato si tener una discapacidad visual supone ser más un activo o una debilidad si escojo ese camino. Para seguir con mi ejemplo anterior, cuando analizo la lista de las diez razones, barrunto, "¿tendré que crear una interfaz de usuario por mí mismo? La respuesta es, en este momento de la película, un "sí" rotundo. Por eso no soy autónomo.

Pero estoy en un nivel muy básico. Las personas a las que les va bien en la vida asumen estas situaciones y empiezan a ponerse a jugar con ellas en serio, le dan forma, las moldean hasta que están contentos con ellas. Así es como los programadores rediseñan su código hasta que alcanza la forma que habían imaginado. Así es como los canteros tallan una pieza de mármol y le dan forma en su mente hasta lo que tiene que ser en realidad.

Eso es lo que tengo que ser. Es lo que quiero ser.

Fecha de publicación:
campusMVP campusMVP es la mejor forma de aprender a programar online y en español. En nuestros cursos solamente encontrarás contenidos propios de alta calidad (teoría+vídeos+prácticas) creados y tutelados por los principales expertos del sector. Nosotros vamos mucho más allá de una simple colección de vídeos colgados en Internet porque nuestro principal objetivo es que tú aprendas. Ver todos los posts de campusMVP
Archivado en: DevFacts | General

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Comentarios (12) -

Me alegra mucho leer este artículo, me abre una serie de oportunidades para buscar herramientas que ayuden a las personas invidentes que quieran seguir una carrera de programación. En mi caso, tengo una sobrina con esta discapacidad, ella es muy hábil y quiero que tenga las herramientas necesarias para su desarrollo y aprendizaje. Agradezco el que hayas publicado este artículo.

Responder

Hola, me ha gustado mucho tu artículo. Yo soy docente de analistas programadores y hoy me ofrecieron el desafío de ser tutora de una alumno no vidente. La verdad es que aún no sé como ayudarla, pero tu artículo me anima a pensar que si se puede. Gracias

Responder

hola yo soy un chico de Colombia
soy ciego como mi lector de pantalla utilizo el NVDA y antes utilizaba el Jaws
y como lenguaje de programacion utilizo el visual basic.net, C#, java

Responder

Hola Camilo, saludos de otro programador desde Uruguay.
Te animo a que sigas programando cada vez mejor!

Responder

gary muñoz
gary muñoz

hola amigo que programa utilizas para programar en java que sea legible por el lector Nvda?  me ncuentro en aprietos con eso, nose si me podrias ayudar un poco. saludos desde chile

Responder

Gracias Carlos

Responder

Jobian Gutierrez
Jobian Gutierrez

Un cordial saludo! He llegado a este artículo por una mera curiosidad mientras trabajo a las 3 am intentando entender un código en python (aún soy algo novato debo acotar). Me parece increíble que la curiosidad por una ciencia como la computación sea motivación para tantos, incluso con esa barrera visual que se presenta en este caso, de verdad inspira.

Me he detenido a comentar por un motivo particular, soy matemático teórico, y me llamó la atención tu comentario sobre un tópico como la regresión lineal. Entiendo totalmente tu pelea con el sistema educativo pues son pocos los profesores capaz de inspirar la curiosidad en los estudiantes, pero te animo a continuar estudiando y peleando contra el sistema, ya que siempre conseguirás personas que al igual que tú quieren mejorar las cosas. En particular, te comento que tratandose de matemática no se necesita una visualización gráfica para poder entender los conceptos, al inicio se suele explicar por ser más común una familiaridad geométrica en el espacio, pero te digo que como matemático el aprendizaje real llega cuando aprendes a dejar de imaginar las formas, ya que es un conjunto muy limitado el que somos capaz de imaginar, solo 3 dimensiones y tal vez una cuarta si consideramos el movimiento en el tiempo. Así, por ejemplo cuando intentas entender una regresión multilineal, está se debe entender desde el punto de vista analítico, comprendiendo la estructura de la combinación lineal como un objeto abstracto, es decir, imaginar una recta es solo para personas que comienzan a aprender. Te animo a seguir intentándolo. Un gran saludo desde Perú.

Responder

ADA PEÑALOZA AGUILAR
ADA PEÑALOZA AGUILAR

Es un trabajo admirable y como escribieron más arriba,  motiva a seguir trabajando por sentirnos y estar cómo en lo que hacemos. En estos momentos me encuentro investigando para diseñar una página web que sea de acceso universal.
Escribo con la certeza que los cambios son posibles.
Saludos desde Santiago de Chile ;)

Responder

gary muñoz
gary muñoz

buenas tardes, soy estudiante ciego de informatica y llege a tu post en busca de ayuda y de consejos. me encuentro con aprietos con java mi lector nvda no me lee bluej, nose como programar en jaba en una manera de que mi lector si sea compatible con el programa, nose si me puedas ayudar. muchas gracias saludos desde chile.

Responder

luis pinilla
luis pinilla

soy ingeniero de sistemas ciego, en estos momentos quiero retomar la programación y me gustaría saber con que lenguaje puedo iniciar mi proceso como programador, mi fuerte es el analisis y veo buenas alternativas como programador de nucleo, gracias.

Responder

campusMVP.es
campusMVP.es

Hola Luis:

Pues si lo tuyo es el análisis, quizá Python y R, los lenguajes de Machine Learning y Ciencia de Datos sean lo que más te pueda interesar. Es un campo en pleno auge con cada vez más demanda y seguramente te irían muy bien.

Saludos.

Responder

Para el caso de UML, que tal te funciona plantuml?
Con el texto se genera un diagrama en varios formatos como png o svg (que tampoco tengo muy claro que tan accesible es):

por ejemplo yo edité hace poco este diagrama

www.plantuml.com/.../SyfFKj2rKt3CoKnELR1Io4ZDoSa70000

con mínimas correcciones por mi parte de lo que chatGPT me genera.

Si te funciona, hice este post para explicar como ir de una pregunta para obtener requerimientos a un diagrama UML: javapro.org/.../

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.