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.
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
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. |