Bueno, ¡están programando! Sin embargo, la respuesta a esta pregunta no es tan corta y sencilla. Para ver por qué es así, comencemos con la programación.
PROGRAMACIÓN
La programación podría explicarse de manera más simple como escribir instrucciones muy detalladas en una máquina (computadora de escritorio, teléfono móvil, robot). Por ejemplo, si queremos que un robot nos traiga un vaso de agua de la mesa, primero tendremos que decirle que se acerque a la mesa, luego levantar una mano, girarla hacia la mesa, extender los dedos o agarrar, mover hasta que llegue unos milímetros por delante del objeto que queremos traernos, y así sucesivamente.
La conclusión es que al escribir instrucciones, tenemos que ser muy precisos porque las computadoras (todavía) no pueden pensar por sí mismas. Para darle una mejor idea, aquí hay una pequeña extensión de nuestro ejemplo.
Si le dice a su muy obediente hermano o hermana menor que le traiga un vaso de agua, lo hará. No tenemos que decirles dónde está el grifo, dónde está el vaso o cuánto tiempo deben llenarlo. Con las computadoras, sin embargo, es un poco diferente: es necesario explicar cada paso en detalle.

PROGRAMADORES
Quizás alguien, en base a lo que hemos escrito, pensará que solo aquellos que calculan bien todos los pasos pueden dedicarse a la programación, o simplemente son genios. Ciertamente, estos rasgos ayudan, pero no son cruciales. Lo más importante es ser bueno en el pensamiento lógico y pensar correctamente sobre los problemas que desea resolver con la programación.
¿Significa eso que los desarrolladores necesitan saber cómo reparar computadoras? Por supuesto no. Conocer el hardware que compone las computadoras en las que trabajamos todos los días no es un requisito previo para la programación. Por ejemplo, no necesitas conocer ningún hardware para programar tu juego usando Scratch o ClickTeam Fusion.
"Está bien", dirá alguien, "entonces los desarrolladores deben conocer todos los lenguajes de programación". Bueno, no del todo. Aunque hay personas que conocen y hablan una gran cantidad de idiomas del mundo, son muy pocos los que se ocupan de la escritura de calidad en cada uno de los idiomas que conocen. Es similar a los lenguajes de programación. La elección de un lenguaje de programación depende de lo que desee programar, si desea tener en cuenta lo que sucede con el procesador y la memoria mientras se ejecuta el programa, etc.
USUARIOS DEL PROGRAMA
Antes de que los desarrolladores comiencen a escribir programas, deben consultar con quienes los usarán. Allí conocerán los requisitos de los usuarios finales del programa. Este paso realmente determina cómo se verá el programa, qué funciones tendrá, si brindará total libertad a sus usuarios, etc. En otras palabras, el diseño del programa depende en gran medida de las conversaciones con los usuarios finales.

LOCO
Si pasa un poco más de tiempo en la computadora, probablemente haya oído hablar de errores. En pocas palabras, es un comportamiento inesperado de un programa: una interrupción inesperada del trabajo, un atasco, una imposibilidad imprevista de guardar el trabajo anterior, etc. La aparición de errores y su solución es algo que todo programador encuentra.
¿Por qué ocurren los errores? Aquí hay algunas razones:
el código (en qué consiste un programa) está mal escrito en algunos lugares
el desarrollador no tuvo en cuenta ningún posible comportamiento de un usuario
el programa no puede manejar el trabajo simultáneo de una gran cantidad de usuarios (por ejemplo, un juego MMO no está diseñado para más de 100 jugadores simultáneos)
JORNADA DE TRABAJO DE UN PROGRAMADOR
Teniendo en cuenta todo lo que hemos escrito hasta ahora, finalmente podemos responder a la pregunta del título.
Desarrolladores:
programas de dispositivo (diseño)
escribir las líneas de programa que componen cada programa
prueban los programas que han escrito y corrigen errores
escribir la documentación del programa (instrucciones para los usuarios finales, pero comentarios relacionados con las partes del código)
mantener programas escritos previamente (agregar nuevas características y opciones, corregir nuevos errores)
trabajar en equipo con otros desarrolladores
reunirse con sus jefes (desarrolladores senior) y clientes (aquellos para quienes está escrito un programa)
encuentran obstáculos que no siempre pueden resolver de inmediato
molestarse (bueno, sí, no puedo prescindir de él)

Por supuesto, este es el día laboral de un programador que trabaja en una empresa de software. Aquellos desarrolladores que trabajan de forma independiente, y al mismo tiempo desarrollan y programan sus juegos de forma independiente, deben saber dibujar y componer si no quieren utilizar las obras de otras personas.
Finalmente, aquí hay algunas preguntas para todos aquellos que dudan después de este texto si la programación es para ellos (una infografía que contiene estas preguntas, y que sirvió de inspiración para este texto, se puede encontrar en el sitio web de Karl Che).
1.¿Está interesado en problemas lógicos y acertijos?
2. ¿Quieres aprender cosas nuevas (la mayoría, por tu cuenta)?
3. ¿Tiene suficiente paciencia y perseverancia para resolver problemas complejos?
4. ¿Está interesado en cómo funcionan las cosas a su alrededor?
Si ha respondido afirmativamente a estas preguntas al menos dos (¡o tres!) Veces (en total, ¡no solo una de ellas!), ¡Felicitaciones! Ha cumplido uno de los requisitos previos para comenzar a programar.
So sweet