Principios de Programación

  • Fecha tentativa de publicación: Segunda mitad del 2022

  • Editorial: Marcombo

Nota: el prefacio suele ser la pieza de texto que comienza todo texto; en este, marco la hoja de ruta del libro, los temas a tratar, su forma y estructura, y también, para quién –y para quién no– está dirigido este libro. Cabe señalar que podría sufrir cambios para su incorporación final en el libro. Por tanto, acéptelo no como algo definitivo.

Índice (provisional)

  • Prefacio

  • Parte I - El inicio del camino

    • Las matemáticas que necesita un programador

      • Lógica

      • Teoría de conjunto

      • Álgebra de boole

      • Estadística y probabilidades

      • Estructuras discretas

    • Conceptos elementales

      • Código binario

      • Variables

      • Condicionales

      • Bucles

      • Funciones

      • Recursión

    • Algoritmos y estructuras de datos

      • Algoritmos como tecnología

      • Estructuras de datos como complemento

    • Pensamiento computacional

      • Abstracción

      • Descomposición y modularidad

      • Tolerancia a la complejidad

      • Exactitud y heurística

  • Parte II - Principios

    • Diseño

    • Estado

    • Recurso

    • Coordinación

    • Transformación

    • Documentación

    • Evaluación

    • Ethos

  • Parte III - Un mundo de sistemas

    • Teoría de la computación

      • Modelos secuenciales

      • Modelos funcionales

      • Modelos concurrentes

    • Lenguajes de programación

      • Generales

      • Específicos

    • Sistemas operativos

      • MS Windows

      • UNIX

      • macOS

    • Base de datos

      • Relacionales

      • No relacionales

    • Sistemas distribuidos

      • Características claves

      • Sistemas de colas distribuidas

    • Inteligencia artificial

      • Sistemas expertos

      • Autómatas celulares

      • Aprendizaje automático

    • Computación cuántica

      • Puertas cuánticas

      • Modelos de computación

      • Ordenadores cuánticos

      • Corrección de errores

  • Parte IV - Somos humanos

    • Ciclo de vida de un proyecto

      • Requerimiento

      • Especificación

      • Diseño

      • Implementación

      • Pruebas

      • Despliegue

      • Código legado

    • Tipos de proyectos de software

      • De sistemas

      • De aplicación

      • De datos

      • Para la investigación científica

  • Parte V - Buena vida (consejos)

    • Sobre el aprendizaje de la programación

      • Herramientas

      • Buenas prácticas

      • Filosóficos

      • Avanzar en tu carrera

    • Sobre el trabajo en equipo

      • Compartir conocimiento

      • Conversaciones sinceras

    • Sobre la vida personal

  • Epílogo

  • Glosario

  • Referencias

  • Índice alfabético

Prefacio

Fecha: 13/03/2022

Este libro presenta una nueva forma de aprender programación. ¿Cómo? A través de conceptos generales, transversales, incluso adaptativos, que llevan el nombre de: principios; algunos son técnicos: los cuales se encuentran en todas las herramientas, ya sean antiguas o modernas, fáciles o difíciles de usar; y otros son conductuales: presentes en todas las buenas relaciones humanas.

En los siguientes tres párrafos intentaré convencerlo de que esta manera de aprender la programación es más efectiva y productiva y, por qué no decirlo, más intelectualmente estimulante.

Primero, olvídese de los diversos «paradigma de programación» que conoce, ya sea orientado a objeto o funcional, imperativo o lógico, basado en eventos o en aspectos; todos ellos dificultan el aprendizaje de lo más importante en la programación: aprender a resolver problemas.

Segundo, la programación no es una actividad aislada de las relaciones humanas, y mucho menos, de sus consecuencias. Una ética es necesaria y crucial. Un informático debe ser alguien que abrace las humanidades, y no, una persona que se aísle en un entorno únicamente técnico. Este libro intenta aunar ambos mundos.

Tercero, los beneficios de estos dos puntos anteriores son (1) ayudar a transformarlo en una mejor profesional, capaz de resolver problemas complejos técnicamente –independiente de la herramienta de turno–, y (2) más realizado como persona, de nada sirve ser un eficaz creador de código si no puede relacionarse con sus pares o no sabe cómo comunicar su conocimiento. En suma: este libro pretende cambiar la forma que ve la programación. No es un desafío fácil, pero nada grande se construye sin la suma de grandes cantidades de pasos pequeños.

El contenido de este libro tiene una forma y estructura un tanto inusual; es más, única, pues es la primera vez que se emplea en un libro técnico –hasta la fecha– escrito en español. Veamos el porqué:

Forma

Este texto difiere de los tradicionales libros técnicos. Exploro algunos recursos ensayísticos, por un lado, para dar una visión personal de los temas a tratar, y por otro, para enriquecer el texto y hacer de la lectura una labor grata. A su vez, incorporo un recurso literario, pues existe un personaje ficticio que, está a punto de ingresar a estudiar informática, y que utiliza este libro como un punto de partida, a medida que se avanza en el texto se puede ver su evolución profesional e intelectual de nuestro protagonista. Creo que esto último ayudará a usted a divertirse en su aprendizaje, y a hacer, más cercana y personal, la lectura del texto.

Otro aspecto, no menos importante, es que cada ejemplo de código del libro se encuentra escrito en un pseudocódigo. Este lenguaje se llama USL (Un Simple Lenguaje), me ayudará a presentar el contenido técnico [1]. En el apéndice A puede encontrar un tutorial de USL.

Estructura

El libro consta de cinco partes: Las raíces de la programación, Principios, Un Mundo de Sistemas, Somos Humanos y Una Buena Vida. Cada uno se puede percibir como un libro independiente, aunque con algunas interrelaciones que se pueden apreciar en la siguiente Figura:

La segunda parte son los principios –que sería el tema nuclear de este libro–, no obstante, se añaden otras cuatro partes complementarias. La primera: Las raíces de la programación, que dispone del conocimiento necesario para entender los principios; la tercera y cuarta parte es lo qué se puede aprender gracias a los conocimientos de los principios; la última parte, la más independiente, son los Consejos o Una Buena Vida, presenta una serie de sugerencias, no solo profesionales, sino de vida, basadas en mi experiencia profesional y personal de cómo puede construir una carrera que aspire a ser exitosa en la programación.

A continuación dedico una breve reseña de cada parte del libro:

Resumen

Parte I - Las raíces de la programación

¿Cuál es la matemática necesaria que todo programador debe conocer? ¿Cuáles son los conceptos principales de la programación? ¿Por qué los algoritmos y las estructuras de datos son tan importantes para aprender a programar bien? ¿Qué es el pensamiento computacional? Estas son algunas de las preguntas que responde esta primera parte que, en pocas palabras, construye los cimientos de las partes restantes. Es el inicio del camino.

Parte II - Principios

Es el «corazón» del libro. Aquí expongo un conjunto de principios técnicos y conductuales que todo profesional debe tener en cuenta para adentrarse a la programación, sin caer, en la tentación de adoptar las tecnologías como un todo. Una visión agnóstica a las herramientas que espero pueda leer con detenimiento, pues, todo el libro se construye desde aquí. Algunas preguntas que se buscan responder: ¿existen principios generales de la programación? ¿Por qué un enfoque asociado únicamente a las herramientas tiene varios problemas? ¿Cuáles son las conductas que debe adoptar un buen programador para construir software y relacionarse con sus pares?

Parte III - Un mundo de sistemas

La informática es un mundo de sistemas, pero ¿Cuáles son? ¿Cómo están construidos? Algunos ejemplos de sistemas son los modelos de computación, los lenguajes de programación, los sistemas operativos, las base de datos, los sistemas distribuidos; no obstante, hay otros sistemas que en la actualidad han tomado mucha fuerza: la inteligencia artificial y la computación cuántica. Esta parte presenta una síntesis de cada uno de estos sistemas, no solo para responder el qué hacen, sino también, el cómo lo hacen.

Parte IV - Somos humanos

Cualquier software que requiera abarcar grandes cantidades de requerimientos se vuelve intratable para una sola persona. Necesita de un equipo, de una metodología, de una buena comunicación y de buenas prácticas de desarrollo de software. Esta parte advierte la importancia de pasar de ser un programador solitario a uno que es parte de un equipo. En esta situación otras variables entran en juego, pues, la programación no es lo mismo que la ingeniería de software. Por tanto, lo que se busca tratar aquí es dar solución a las siguientes preguntas, ¿Cuál es la diferencia de programar un software pequeño (proyecto personal) a uno extenso (un equipo de decenas de personas)? ¿Qué conocimientos debo tener para desarrollar y mantener grandes proyectos de software?

Parte V - Una buena vida

No todo en la vida son cosas técnicas. En muchas ocasiones, personas brillantes, con grandes conocimientos, ya sean teóricos o prácticos, fracasan en su vida profesional porque no saben relacionarse con sus colegas de trabajo o carecen de habilidades intrapersonales. Otros fracasan porque no saben cómo mantener una vida dedicada al aprendizaje. Esta última parte, importantísima, divide los consejos en las siguientes categorías: aprendizaje, vida personal, mundo laboral y más allá de lo técnico. Quizá, al final de nuestro camino, el sueño de todo humano descansa en aspirar a ser felices, a tener una buena vida, por ello, cierro el libro con esto.

¿Cuál es la audiencia de este libro?

  • Informáticos que les guste programar y quieran ampliar y replantear sus conocimientos. Sean estas personas con pocos años de experiencia, o sean, personas con «muchas batallas» tras sus espaldas

  • Profesionales de otras áreas que se sientan entusiasmados por la programación. Este libro les servirá como apoyo para entender los fundamentos de la programación, y por qué no, que les sirva para comprender cuál es la esencia de la informática

¿Qué no es este libro?

  • No es un libro que le enseñe un lenguaje de programación en particular

  • No es un libro teórico; ni un libro donde hay más código que texto en lenguaje natural. Esto quiere decir que hago uso de esquemas visuales para explicar conceptos, ejemplos, todos ellos de diversa índole, pero no solo código

  • No es un libro para alguien que nunca se ha aproximado a la programación

¿Qué es este libro?

  • Es un libro que le enseña las matemáticas necesarias para ser un mejor programador

  • Es un libro para profundizar en los fundamentos de la programación, entenderlos desde otra óptica, para poder, acceder a técnicas avanzadas

  • Es un libro que contiene consejos para construir una buena carrera profesional en esta área

[1] ¿Por qué no escogí un lenguaje de programación conocido? Por dos motivos, uno derivado del otro: al tratar de presentar conceptos tan generales se hubiera vuelto confuso intentar explicarlo todo con un único lenguaje, lo cual, me hubiera llevado a usar múltiples lenguajes, esto último provocaría lo siguiente: una confusión al lector, pues iría cambiado de lenguaje en cada nuevo capítulo. Sería un caos. Por ello, teniendo en mente la simplicidad y la unificación es que opté por un lenguaje agnóstico.