¿Qué significa “saber programar”? ¿Entendemos todos lo mismo?

“Hay que enseñar a programar a los niños”. “Un jefe de proyectos debe saber programar”. “¿Has programado alguna vez?”. “¿Sabes programar?”. Cuando salen frases como las anteriores, siempre tengo la sensación de que no hay dos personas en la conversación que tengan en la cabeza el mismo significado de qué es “saber programar”.
Si leiste los comentarios del post de ¿debe un jefe de proyecto saber programar (o haber sido programador)? verías un buen ejemplo de ello.
Para algunos programar es saber algoritmica, es decir, describir en pasos la solución a un problema. Para algunos, con saber hacerlo en pseudocodigo (lenguage generico, pensado para “escribir en papel” un algoritmo), o incluso en excel, les vale. Siendo así, podrias saber programar sin haber usado nunca un lenguaje de programación.
Para otros, “saber programar” requiere conocer algún lenguaje de programación (Java, Ruby, c#, etc.). Claro que haber programado en Java no da ninguna garantía de que por ello sepas programar en, por ejemplo, Haskell. Entonces… una persona que decimos que “sabe programar” porque sabe programar en Java… ¿no sabría programar si entra en un proyecto en Haskell?
Por otro lado está la parte de la palabra “saber”. ¿Qué significa “saber” programar? ¿Significa haberlo hecho alguna vez? ¿Significa hacerlo regularmente? ¿Significa entenderlo (con la duda de si se puede entender algo como “programar” sin haberlo hecho alguna vez)?
Pero es más, lo de “saber” conlleva ocultas algo más que dudas relativas al “tiempo” habiendo programado. Algo que puede ser aún más siniestro… ¿“saber” programar entendemos que significa “saber programar bien”?. Porque claro, en este punto alguno estareis pensando, “tirar líneas de código de aquella manera no es lo que yo entiendo por saber programar”.
Pero claro, se me hace difícil pensar que alguien “sepa programar bien” sin saber algo de diseño. ¿Se puede programar bien sin conocer diseño OO? ¿Sin conocer patrones? Pero ¿se puede programar bien sin conocer qué es la complejidad cilomática? ¿y sin saber pruebas unitarias? Pero entonces… saber programar (entendiendo “saber programar bien”) no es sólo conocer un lenguaje, es saber diseño, calidad, pruebas, etc. La cosa parecía fácil, pero entonces “saber programar (bien)” es realmente saber ingeniería del software ¿no?
Y en cualquier caso… ¿es, en la construcción y mantenimiento de un sistema de información, saber programar garantía de algo que vaya más allá de saber programar? Muchas veces, preguntamos a alguien que si “sabe programar” buscando una respuesta afirmativa que nos diga que esa persona sabe cómo se crea y mantiene un sistema de información.
Pero los sistemas de información de hoy en día necesitan muchos conocimientos más que “saber programar”: sistemas, pruebas, UX, BBDD, arquitectura, soporte, etc.
Uf. ¿Aguien sabe qué significa “saber programar”? ¿Entendemos todos lo mismo?

jgarzas

Ph.D. en informática, Postdoctorado en la Carnegie Mellon (EE.UU) e Ingeniero en Informática.

Primera vez que me tocó hacer una gestión Ágil en una empresa... año 2001. Desde entonces he trabajado en, o para, más de 90. Y he formado a más de 2000 alumnos.

También soy profe de la Universidad Rey Juan Carlos.

4 comentarios en “¿Qué significa “saber programar”? ¿Entendemos todos lo mismo?”

  1. Para mí, saber programar, es transformar unos requisitos concretos a un programa que los satisfaga. La clave está en fijar esos requisitos, y a menudo los clientes no tienen mucha idea de los mismos.
    Lo típico viene después, que hay cambios. El buen programador lo tendrá más fácil (y podrá ofrecer un precio inferior o aumentar su margen) que el mal programador.
    Me gusta normalmente referirme a los ingenieros de software como personas que coordinen y gestionen la mayor parte del proceso de desarrollo de software. Incluyendo en este concepto, la gestión y delimitación de tareas y responsabilidades de los programadores.

  2. Tirar líneas de código no es saber programar, es saber tirar líneas de código.
    Para programar debes tener conocimiento de lo que pretendes hacer. Si tu conocimientos ti es limitado, el resultado es limitado.
    Una persona que escribe código y se lo pasa en un pen drive a su colega para que siga trabajando no tiene ni idea de programar. Detrás de ese ejemplo hay una inconsciencia de lo que se hace.
    Otro ejemplo es mandar algo a producción habiendo hecho pruebas «solo» del caso de uso para que funcionara la primera vez, ¿y las pruebas unitarias y de integración?…
    Lo mismo, si no valoras el testing, tirar líneas de código no te convierten en programador, si no en un tirador de líneas de código.
    Una pregunta Javier:
    ¿cual es la diferencia entre programador, desarrollador, picador y coder? ¿En princio parecen solo etiquetas para nombrar al mismo sujeto no?
    Detrás de esas etiquetas, en mi opinión, hay cambio en la percepción de una persona que programa.
    Saludos y gran post!

  3. Pregunta muy general que puede abrir tema a discusión por mucho tiempo, casi como hablar de política en donde preguntaríamos cual de los candidatos es mejor para el puesto.
    Para mi es que debe ser dedicado a su labor :).
    Saludos.

  4. Interesante debate. Considero que programar es un arte que requiere de gran esfuerzo intelectual, análisis y disciplina y por desgracia, infravalorado.
    La diferencia que veo entre «programar» y «saber programar» es que la primera definición puede ser «funciones de código que ejecutan órdenes a través de una máquina» mientras que lo segundo «elaborar un software inteligente a partir de unos requisitos y análisis previos».
    Sé que las definiciones que pongo son muy insuficientes…

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *