Esta es una versión casi completa, del libro PENSAMIENTO ALGORÍTMICO del Ingeniero Jorge Johnson, aún no disponible en una editorial.
Si usted es profesor de algoritmos o de programación, tómese la libertad de usar los problemas en sus cursos. Si usted es estudiante y desea aprender algoritmos, déjeme saber si le ha sido útil en el email jorge punto johnson arroba gmail punto com Si requiere alguna solución a algún problema de los muchos disponibles en cada uno de los capítulos, puede escribirme al email jorge punto johnson arroba gmail punto com |
Tabla de Contenido |
Lea esto primero
Es probable que, si estás leyendo estas páginas, sientas algún interés o necesidad por el pensamiento algorítmico. Sin importar en qué tipo de relación andas con las computadoras, la invitación es a que hagas tuyo este recorrido que de alguna manera podrás encontrar muy diferente a muchos libros de apoyo para iniciarse en el interesante universo de la lógica algorítmica útil para la programación. Y si no conoces otros libros del tema, creo que estás de suerte por estar precisamente frente a este, dado que el objetivo en este caso es intentar que tu camino se abra con buenos fundamentos, sin llevarte por rutas poco efectivas.
Este texto comienza a estructurar su mente desde el pseudocódigo (código falso), usando un lenguaje ficticio que el autor denominó papercode. La idea del pseudocódigo papercode es escribir programas directamente en el papel (editor de textos si se quiere), que, aunque más flexible que los lenguajes reales, tiene cierto grado de formalismo y rigor con el propósito de adquirir disciplina y usarlos de forma agnóstica en diferentes contextos, como por ejemplo cuando se quiere documentar un algoritmo en detalle, sin caer en el rigor de hacerlo en un lenguaje específico.
En general, el lenguaje de pseudocódigo papercode permite formalizar algoritmos que se quieren llevar a un computador bajo un lenguaje en paradigma de programación imperativa, y sirve para documentar una estrategia de solución sin considerar un lenguaje concreto, útil por ejemplo en libros o artículos de investigación que no deseen demarcar su código en algún lenguaje, o cuando se quiere programar en un tablero o en el papel.
Los primeros capítulos de este texto cubren aspectos básicos y generales en lenguajes de programación imperativa, como los tipos de datos comunes que se reconocen en los lenguajes de programación (caracteres, strings, enteros, reales, complejos, racionales, y tipos de datos compuestos, como clases, estructuras, tuplas, arreglos, sets y mapas).
Capítulos posteriores abordan expresiones que manipulan datos, mezcladas ya con estructuras de control que le dan vida al algoritmo, como bifurcaciones condicionadas o no condicionadas, y ladrillos funciones que permiten construir soluciones conceptuales.
Es de aclarar que, aunque este no es un texto de programación en Python, se entrega como si fuera una segunda parte varios capítulos denominados “Workshop”, los cuales contienen conceptos y ejemplos en Python. Estos capítulos pueden ser vistos también como una guía de programación Python que permite omitir la parte conceptual, y brincar directamente a ejemplos concretos para programar.
Este texto comienza a estructurar su mente desde el pseudocódigo (código falso), usando un lenguaje ficticio que el autor denominó papercode. La idea del pseudocódigo papercode es escribir programas directamente en el papel (editor de textos si se quiere), que, aunque más flexible que los lenguajes reales, tiene cierto grado de formalismo y rigor con el propósito de adquirir disciplina y usarlos de forma agnóstica en diferentes contextos, como por ejemplo cuando se quiere documentar un algoritmo en detalle, sin caer en el rigor de hacerlo en un lenguaje específico.
En general, el lenguaje de pseudocódigo papercode permite formalizar algoritmos que se quieren llevar a un computador bajo un lenguaje en paradigma de programación imperativa, y sirve para documentar una estrategia de solución sin considerar un lenguaje concreto, útil por ejemplo en libros o artículos de investigación que no deseen demarcar su código en algún lenguaje, o cuando se quiere programar en un tablero o en el papel.
Los primeros capítulos de este texto cubren aspectos básicos y generales en lenguajes de programación imperativa, como los tipos de datos comunes que se reconocen en los lenguajes de programación (caracteres, strings, enteros, reales, complejos, racionales, y tipos de datos compuestos, como clases, estructuras, tuplas, arreglos, sets y mapas).
Capítulos posteriores abordan expresiones que manipulan datos, mezcladas ya con estructuras de control que le dan vida al algoritmo, como bifurcaciones condicionadas o no condicionadas, y ladrillos funciones que permiten construir soluciones conceptuales.
Es de aclarar que, aunque este no es un texto de programación en Python, se entrega como si fuera una segunda parte varios capítulos denominados “Workshop”, los cuales contienen conceptos y ejemplos en Python. Estos capítulos pueden ser vistos también como una guía de programación Python que permite omitir la parte conceptual, y brincar directamente a ejemplos concretos para programar.
Dispositivos
En un mundo controlado por dispositivos electrónicos, hoy es complicado encontrar profesionales que no demanden que gran parte de su tiempo requieran un computador. Pero suponiendo que algún extraño profesional no demande ninguna actividad computacional para agilizar o para optimizar una de sus tareas, y suponiendo que todos sus registros o cálculos los haga en un cuadernillo, ¿cómo podría negarse a usar dispositivos electrónicos?
Se ven profesionales que han evitado toda su vida el uso de un celular (extraños seres que es posible encontrar por ahí...), pero que posiblemente sí ven una serie de Netflix o una película. Hoy ni siquiera es curioso ver un televisor inteligente (‘smart tv’) pidiendo permiso para actualizar sus aplicaciones, o pidiendo permiso para permitir que un celular se conecte a él para transmitir algún contenido, aunque muchas personas no entienden qué dice el mensaje de actualización y simplemente pulsan ‘ok’ con el control remoto para aceptarla (¡si lo pide mi tv, debe ser que lo necesita…cómo negarme!).
Nuestros celulares son computadores poderosos con sensores diversos; sin embargo, damos por sentado dicho poder computacional y sus sensores: localización geográfica precisa, sensor de movimiento, brújula, cambio en la orientación, uso de la huella digital, y hasta reconocimiento facial). No miramos detalles: simplemente nos interesa que funcione, y que lo haga bien. Hoy la computación es ubicua, y se encuentra en gran cantidad de accesorios para el hogar, y, aunque cada día es más claro para todos que esto está sucediendo, cada día es también menos evidente, y nuestro comportamiento se integra al comportamiento de los dispositivos, y no podemos vivir sin ellos.
En este recorrido, se pretende introducir al lector al arte de la lógica de programación y los algoritmos, de tal modo que pueda entender los fundamentos, y pueda crear programas que podrían convertirse en sus propias aplicaciones. Eso es artesanía: el arte de hacer sin mucha intervención de automatización.
El alcance del texto puede ser cualquiera: preuniversitario, universitario, o de uso personal, y no pretende que sea una guía para construir aplicaciones para un celular, tableta o televisor, aunque podrías construir aplicaciones de línea de comandos en tu pc usando los “workshop en Python Básico”. Pero definitivamente ayuda a entender de qué trata el mundo de la programación imperativa y aprovecharla en su beneficio.
El texto, de otro lado y muy a pesar de los “workshops de Python”, no pretende enseñar un lenguaje específico, y encontrará suficientes bases conceptuales ejemplificadas en pseudocódigo papercode; el uso de Python como lenguaje de apoyo, es circunstancial, ya que se ve más práctico que el texto pueda ser utilizado para comenzar a escribir programas directamente en el pc.
Se ven profesionales que han evitado toda su vida el uso de un celular (extraños seres que es posible encontrar por ahí...), pero que posiblemente sí ven una serie de Netflix o una película. Hoy ni siquiera es curioso ver un televisor inteligente (‘smart tv’) pidiendo permiso para actualizar sus aplicaciones, o pidiendo permiso para permitir que un celular se conecte a él para transmitir algún contenido, aunque muchas personas no entienden qué dice el mensaje de actualización y simplemente pulsan ‘ok’ con el control remoto para aceptarla (¡si lo pide mi tv, debe ser que lo necesita…cómo negarme!).
Nuestros celulares son computadores poderosos con sensores diversos; sin embargo, damos por sentado dicho poder computacional y sus sensores: localización geográfica precisa, sensor de movimiento, brújula, cambio en la orientación, uso de la huella digital, y hasta reconocimiento facial). No miramos detalles: simplemente nos interesa que funcione, y que lo haga bien. Hoy la computación es ubicua, y se encuentra en gran cantidad de accesorios para el hogar, y, aunque cada día es más claro para todos que esto está sucediendo, cada día es también menos evidente, y nuestro comportamiento se integra al comportamiento de los dispositivos, y no podemos vivir sin ellos.
En este recorrido, se pretende introducir al lector al arte de la lógica de programación y los algoritmos, de tal modo que pueda entender los fundamentos, y pueda crear programas que podrían convertirse en sus propias aplicaciones. Eso es artesanía: el arte de hacer sin mucha intervención de automatización.
El alcance del texto puede ser cualquiera: preuniversitario, universitario, o de uso personal, y no pretende que sea una guía para construir aplicaciones para un celular, tableta o televisor, aunque podrías construir aplicaciones de línea de comandos en tu pc usando los “workshop en Python Básico”. Pero definitivamente ayuda a entender de qué trata el mundo de la programación imperativa y aprovecharla en su beneficio.
El texto, de otro lado y muy a pesar de los “workshops de Python”, no pretende enseñar un lenguaje específico, y encontrará suficientes bases conceptuales ejemplificadas en pseudocódigo papercode; el uso de Python como lenguaje de apoyo, es circunstancial, ya que se ve más práctico que el texto pueda ser utilizado para comenzar a escribir programas directamente en el pc.
Encuentros con la programación
Usted y la realidad del mundo de la informática se encuentran desde su temprana edad; en el hogar desde pequeño como usuario de computadoras, tabletas y celulares, y más adelante en el entorno académico de su colegio, pregrado o postgrado, y en particular, de forma permanente en su vida laboral. Y es en el ambiente colegial y universitario donde se promueve el uso de lenguajes de programación para solucionar problemas que requieren capacidades computacionales dentro de algunas materias, aunque muchos padres ayudan a sus hijos a hacerlo desde temprana edad, e incluso la industria del software lo anima con juegos que ayudan a estructurar el pensamiento algorítmico.
La dificultad de una realidad sobre las habilidades requeridas de programación se ve en un principio y de forma más evidente, en programas académicos universitarios, que muchas veces pasan por alto la necesidad del estudiante de tener buenas bases de lógica de programación para que puedan solucionar más fácilmente problemas de distintas materias del currículo.
La universidad implícitamente asume que el aprendizaje sobre el uso de las herramientas de programación se puede dar a la par con la solución de los problemas que requieren de dichas herramientas.
Aunque eso es posible, va en contra de la misma calidad de las soluciones, pues al no tener las bases adecuadas, da como resultado visible que en vez que el estudiante se concentre en resolver computacionalmente un problema, dedique mucho de su tiempo a intentar aprender el lenguaje de programación ‘de turno’ sugerido por su tutor, guía o profesor, y no resuelva adecuadamente el problema en cuestión que se pretende debe resolver.
El estudiante muchas veces se ve obligado a dejar de lado el verdadero propósito de concentrarse en el problema real al intentar aprender la herramienta que necesita para poder lograrlo. Es allí donde el tiempo se vuelve adverso por la inexperiencia, y deja al estudiante con una alta probabilidad de hacer alguna de las dos tareas bien (aprender el lenguaje o resolver el problema), pero no necesariamente las dos.
La problemática anterior sería diferente si en todas las carreras universitarias (o incluso preuniversitarias), dedicáramos un tiempo en los primeros niveles a materias para que los estudiantes aprendan a pensar algorítmicamente y con lógica de programación, antes de enfrentarse a sus proyectos en distintas materias universitarias. Aunque hoy se hace esto en algunas instituciones preuniversitarias, muchas veces no se hace de la forma adecuada: no se trata simplemente de aprender un lenguaje de programación: se trata de aprender a pensar ‘algorítmicamente’ y con lógica para la programación.
Esta actividad de pensar con lógica y de forma algorítmica adecuada antes de ir a un computador, es necesaria para poder definir una buena aproximación a la antes de pasar a programar en un computador; dicho simple, primero hay que pensar en una estrategia de solución, antes de pasar a programar la solución. Esto es lo que normalmente no se aprende en una materia que enseñe a usar un lenguaje de programación, pues nos enseñan que hay herramientas de programación sin contarnos sobre el aprendizaje algorítmico, lo que sesga en alguna medida la forma de pensar. Y no es que no se pueda aprender a programar directamente con un lenguaje: simplemente es que se debe entender que primero está la solución conceptual que el mismo lenguaje.
Hay que conseguir los elementos básicos que permitan fundar adecuadamente la habilidad de programación. La programación es una habilidad que se adquiere: si no sabemos programar, lo aprendemos haciendo y viendo cómo otros que ya lo hacen se enfrentan a dicha actividad intelectual. Es una tarea estrictamente artesanal que exige el hacer y aprender de otros el arte de hacer código. El artista podría salir de entre esos artesanos. Pero esos artistas derrochan mucha creatividad, y eso sólo se logra con mucho trabajo. Programar es muy fácil, pero programar bien es difícil.
Tenemos la necesidad de que el estudiante cree sus primeros algoritmos basados en estrategias acertadas, seguidas de una programación con buenos hábitos y una buena calidad.
La dificultad de una realidad sobre las habilidades requeridas de programación se ve en un principio y de forma más evidente, en programas académicos universitarios, que muchas veces pasan por alto la necesidad del estudiante de tener buenas bases de lógica de programación para que puedan solucionar más fácilmente problemas de distintas materias del currículo.
La universidad implícitamente asume que el aprendizaje sobre el uso de las herramientas de programación se puede dar a la par con la solución de los problemas que requieren de dichas herramientas.
Aunque eso es posible, va en contra de la misma calidad de las soluciones, pues al no tener las bases adecuadas, da como resultado visible que en vez que el estudiante se concentre en resolver computacionalmente un problema, dedique mucho de su tiempo a intentar aprender el lenguaje de programación ‘de turno’ sugerido por su tutor, guía o profesor, y no resuelva adecuadamente el problema en cuestión que se pretende debe resolver.
El estudiante muchas veces se ve obligado a dejar de lado el verdadero propósito de concentrarse en el problema real al intentar aprender la herramienta que necesita para poder lograrlo. Es allí donde el tiempo se vuelve adverso por la inexperiencia, y deja al estudiante con una alta probabilidad de hacer alguna de las dos tareas bien (aprender el lenguaje o resolver el problema), pero no necesariamente las dos.
La problemática anterior sería diferente si en todas las carreras universitarias (o incluso preuniversitarias), dedicáramos un tiempo en los primeros niveles a materias para que los estudiantes aprendan a pensar algorítmicamente y con lógica de programación, antes de enfrentarse a sus proyectos en distintas materias universitarias. Aunque hoy se hace esto en algunas instituciones preuniversitarias, muchas veces no se hace de la forma adecuada: no se trata simplemente de aprender un lenguaje de programación: se trata de aprender a pensar ‘algorítmicamente’ y con lógica para la programación.
Esta actividad de pensar con lógica y de forma algorítmica adecuada antes de ir a un computador, es necesaria para poder definir una buena aproximación a la antes de pasar a programar en un computador; dicho simple, primero hay que pensar en una estrategia de solución, antes de pasar a programar la solución. Esto es lo que normalmente no se aprende en una materia que enseñe a usar un lenguaje de programación, pues nos enseñan que hay herramientas de programación sin contarnos sobre el aprendizaje algorítmico, lo que sesga en alguna medida la forma de pensar. Y no es que no se pueda aprender a programar directamente con un lenguaje: simplemente es que se debe entender que primero está la solución conceptual que el mismo lenguaje.
Hay que conseguir los elementos básicos que permitan fundar adecuadamente la habilidad de programación. La programación es una habilidad que se adquiere: si no sabemos programar, lo aprendemos haciendo y viendo cómo otros que ya lo hacen se enfrentan a dicha actividad intelectual. Es una tarea estrictamente artesanal que exige el hacer y aprender de otros el arte de hacer código. El artista podría salir de entre esos artesanos. Pero esos artistas derrochan mucha creatividad, y eso sólo se logra con mucho trabajo. Programar es muy fácil, pero programar bien es difícil.
Tenemos la necesidad de que el estudiante cree sus primeros algoritmos basados en estrategias acertadas, seguidas de una programación con buenos hábitos y una buena calidad.
Lenguajes de Programación
Hay muchos lenguajes de programación: ¡cientos! Algunos lenguajes de programación son mucho más simples que otros cuyas curvas de aprendizaje son más pendientes: lenguajes que han sido diseñados para que sea más fácil programar. Esto los hace altamente llamativos para la academia porque permiten que muchos estudiantes practiquen y programen de forma simple, y por eso la misma academia los vuelve populares.
Este texto intentará llevarlo de la mano evitando aspectos que pueden temporalmente obviarse, pero trayendo muchos otros que se tienen que considerar para lograr dejar bien sentadas las bases de programación. Si usted nunca ha programado y está dispuesto a comenzar a hacerlo y tiene la disciplina, estas páginas pueden serle muy útiles. El problema de si tiene el tiempo o no para hacerlo no se lo puede resolver el texto; este no es un texto de aprender programación en 10 minutos, ni en 10 horas, ni 10 días. Posiblemente necesitará mínimo 10 semanas para comenzar a ver los primeros resultados.
Este texto intentará llevarlo de la mano evitando aspectos que pueden temporalmente obviarse, pero trayendo muchos otros que se tienen que considerar para lograr dejar bien sentadas las bases de programación. Si usted nunca ha programado y está dispuesto a comenzar a hacerlo y tiene la disciplina, estas páginas pueden serle muy útiles. El problema de si tiene el tiempo o no para hacerlo no se lo puede resolver el texto; este no es un texto de aprender programación en 10 minutos, ni en 10 horas, ni 10 días. Posiblemente necesitará mínimo 10 semanas para comenzar a ver los primeros resultados.
¿Es este libro para mi?
Se estructuró este contenido para el estudiante de cualquier nivel en bachillerato, pregrado o postgrado universitario, o para cualquier persona común que quiera comenzar a aprender a programar. Sirve a cualquier propósito, y cualquier ámbito académico. De alta utilidad también es este texto para profesores que requieran extraer problemas para sus cursos de programación, o para extraer problemas para sus exámenes o prácticas, ya que todos los problemas son básicos para programación.
Aunque el enfoque es hacia estudiantes de programas de ciencias e ingenierías, puede ser perfectamente abordado por estudiantes de programas de administración, finanzas, artes, y derecho, entre otros. En particular, le será muy útil a todo aquel que comience a ver en la programación de computadores una herramienta más de su cinturón de herramientas, y quiera hacerlo con el rigor mínimo necesario, y basados en una táctica algorítmica de entender primero el problema, para luego ir al papel antes a diseñar una estrategia, y finalmente sentarse frente al computador.
El texto también podrá ser muy útil para muchos profesionales que no tuvieron la formación algorítmica y de programación, y que quieran darle espacio y tiempo a la intención de aprender a programar, además de disciplina. Muchos profesionales que no profundizaron en el ámbito de la programación durante sus pregrados, a veces la encuentran necesaria durante el desarrollo de su profesión e investigaciones.
En definitiva, el texto requiere energía mental y compromiso si quieres lograr un buen resultado. Programar solo se aprende haciendo, por lo que es mejor que asuma que toda esta aventura es una invitación a hacer.
Aunque el enfoque es hacia estudiantes de programas de ciencias e ingenierías, puede ser perfectamente abordado por estudiantes de programas de administración, finanzas, artes, y derecho, entre otros. En particular, le será muy útil a todo aquel que comience a ver en la programación de computadores una herramienta más de su cinturón de herramientas, y quiera hacerlo con el rigor mínimo necesario, y basados en una táctica algorítmica de entender primero el problema, para luego ir al papel antes a diseñar una estrategia, y finalmente sentarse frente al computador.
El texto también podrá ser muy útil para muchos profesionales que no tuvieron la formación algorítmica y de programación, y que quieran darle espacio y tiempo a la intención de aprender a programar, además de disciplina. Muchos profesionales que no profundizaron en el ámbito de la programación durante sus pregrados, a veces la encuentran necesaria durante el desarrollo de su profesión e investigaciones.
En definitiva, el texto requiere energía mental y compromiso si quieres lograr un buen resultado. Programar solo se aprende haciendo, por lo que es mejor que asuma que toda esta aventura es una invitación a hacer.
Tipos de usuarios de computadora
La posibilidad que hoy tenemos de interactuar con los computadores no se compara con el poder que tiene a la mano una persona que sabe programarla para llevar a cabo alguna tarea. En el primer caso seremos usuarios tradicionales en muchas categorías: desde usuarios de computadora a los que un pc embiste porque solo entran al buscador de Google y a su cuenta Facebook o Instagram usando un explorador de internet. Otros usuarios superan ese umbral básico y son más hábiles y usan un conglomerado importante de aplicaciones de escritorio. Por último, tenemos los usuarios avanzados, que son capaces de sumergirse en la terminal de línea de comandos y dar órdenes a la máquina para que lleve a cabo alguna tarea.
Hay un caso muy especial de usuarios de computadora: el de aquellos que aprenden un lenguaje o varios lenguajes de programación, y se sientan literalmente a dejarse llevar por una fluida creatividad artesanal para construir software que les permita a ellos y a otros usuarios resolver ciertos tipos de problemas personales o comunes. Este caso es el de los programadores, los cuales dedican largas horas de su vida a crear productos útiles para ellos mismos, para otros usuarios, para su empresa, o para otras empresas. De entre estos usuarios salen aquellos que generan la industria del software.
Como en el caso de algunas artes marciales que usan colores para identificar el nivel de experiencia y conocimiento en un arte marcial concreta (algunas artes marciales usan cinturones de colores para identificar los distintos niveles del arte. En programación de computadores se usan a veces estas metáforas de niveles informalmente: en general en la empresa se les conoce como ‘juniors’ a los principiantes, y ‘seniors’ a los de mayor experiencia y conocimientos), en programación pasa algo similar: se requiere mucha práctica para poder decir que pasamos a otro escalón del arte de la programación.
Hay que aclarar que programar va mucho más allá de hacer un par de líneas de código en algún lenguaje, y es por eso por lo que debe tomarse muy en serio: hay especializaciones completas de desarrollo de software, y la industria del desarrollo de software genera soluciones a las necesidades de las empresas, o de lo usuarios en general.
Este texto le dará un primer empujón a su mente para que pueda comenzar a resolver sus necesidades informáticas, si nunca lo ha hecho. Entonces imagínese que es cinturón blanco y que está intentando avanzar a cinturón amarillo. De su perseverancia dependerá todo.
Hay un caso muy especial de usuarios de computadora: el de aquellos que aprenden un lenguaje o varios lenguajes de programación, y se sientan literalmente a dejarse llevar por una fluida creatividad artesanal para construir software que les permita a ellos y a otros usuarios resolver ciertos tipos de problemas personales o comunes. Este caso es el de los programadores, los cuales dedican largas horas de su vida a crear productos útiles para ellos mismos, para otros usuarios, para su empresa, o para otras empresas. De entre estos usuarios salen aquellos que generan la industria del software.
Como en el caso de algunas artes marciales que usan colores para identificar el nivel de experiencia y conocimiento en un arte marcial concreta (algunas artes marciales usan cinturones de colores para identificar los distintos niveles del arte. En programación de computadores se usan a veces estas metáforas de niveles informalmente: en general en la empresa se les conoce como ‘juniors’ a los principiantes, y ‘seniors’ a los de mayor experiencia y conocimientos), en programación pasa algo similar: se requiere mucha práctica para poder decir que pasamos a otro escalón del arte de la programación.
Hay que aclarar que programar va mucho más allá de hacer un par de líneas de código en algún lenguaje, y es por eso por lo que debe tomarse muy en serio: hay especializaciones completas de desarrollo de software, y la industria del desarrollo de software genera soluciones a las necesidades de las empresas, o de lo usuarios en general.
Este texto le dará un primer empujón a su mente para que pueda comenzar a resolver sus necesidades informáticas, si nunca lo ha hecho. Entonces imagínese que es cinturón blanco y que está intentando avanzar a cinturón amarillo. De su perseverancia dependerá todo.
Lo que no es este libro
Ya se dijo quién puede aprovechar el libro. También es justo decir qué no es el libro.
El libro no está orientado a escribir un mejor Python, a pesar de que contiene muchos ejercicios de Python. Por lo tanto, Python es solamente usado como una alternativa para aproximarse a la programación práctica. Los “Workshops de Python” hacen introducción a temas Python y allí encontrará ‘tips’ interesantes, pero sólo con la idea de empezar un proceso de aprendizaje.
El libro tampoco puede ser visto como un fuente de referencia en Python, ya que es poco lo que se ahonda en el lenguaje de cara las librerías, que son bastantes y muy buenas.
El libro no está orientado a escribir un mejor Python, a pesar de que contiene muchos ejercicios de Python. Por lo tanto, Python es solamente usado como una alternativa para aproximarse a la programación práctica. Los “Workshops de Python” hacen introducción a temas Python y allí encontrará ‘tips’ interesantes, pero sólo con la idea de empezar un proceso de aprendizaje.
El libro tampoco puede ser visto como un fuente de referencia en Python, ya que es poco lo que se ahonda en el lenguaje de cara las librerías, que son bastantes y muy buenas.
Un comentario sobre los ejercicios del libro
El libro contiene ejercicios de práctica en pseudocódigo, y en Python. Los ejercicios fueron, unos, ideados por el autor, y otros, seleccionados o adaptados por el autor desde otras fuentes, de tal forma que el nivel sea introductorio. En el caso de las selecciones o las adaptaciones, se dará la referencia a la fuente.
Frente a la complejidad, ningún problema exige conocimientos de estructuras especiales algorítmicas más allá de arreglos. Si bien es cierto que a medida que se avanza en los capítulos se pueden encontrar problemas más complejos, es un resultado natural de la evolución de la temática del texto, y los problemas sólo pretenden motivar una práctica de programación con un previo análisis del problema.
No hay problemas altamente demandantes. Si en algún momento encuentra un problema que aparentemente es complejo, reléalo de nuevo, e intente darle solución. Si el problema persiste, intente entender qué es lo que hace el problema difícil desde su perspectiva, ya que puede tratarse de una base teórica que se omitió.
Si aun así el problema es muy complicado, pase a otro problema.
Si definitivamente no entiende de que se trata o cómo resolver un problema, busque a su asesor, o converse sobre el problema con un compañero que guste de resolver problemas de programación.
Frente a la complejidad, ningún problema exige conocimientos de estructuras especiales algorítmicas más allá de arreglos. Si bien es cierto que a medida que se avanza en los capítulos se pueden encontrar problemas más complejos, es un resultado natural de la evolución de la temática del texto, y los problemas sólo pretenden motivar una práctica de programación con un previo análisis del problema.
No hay problemas altamente demandantes. Si en algún momento encuentra un problema que aparentemente es complejo, reléalo de nuevo, e intente darle solución. Si el problema persiste, intente entender qué es lo que hace el problema difícil desde su perspectiva, ya que puede tratarse de una base teórica que se omitió.
Si aun así el problema es muy complicado, pase a otro problema.
Si definitivamente no entiende de que se trata o cómo resolver un problema, busque a su asesor, o converse sobre el problema con un compañero que guste de resolver problemas de programación.
Pseudocódigo versus lenguajes de programación
¿Aprender con pseudocódigo o con programación?
La programación es una actividad mental que demanda creatividad, y la creatividad no debería ser afectada por las restricciones de algunos lenguajes.
Es por lo que, en un comienzo, se debe recurrir a programar en el papel (o editor de texto) sin mucha restricción, pero manteniendo la filosofía de la programación la cual debe ser estricta frente al paradigma.
Mantenga una hoja de papel a su lado y un lápiz. Escriba cosas que salen de su cabeza, ideas, o simplemente, escriba una(o varias) estrategias de solución. Dibuje sus estructuras de datos, por ejemplo, y busque la mejor forma de aproximarse a ellas algorítmicamente.
El pseudocódigo es un lenguaje no estricto que permite mucha libertad manteniendo la formalidad, si se le compara con cualquier lenguaje de programación real. Al comienzo, piense mejor en pseudocodificar.
Si el pseudocódigo no es para usted, siempre hay la posibilidad que razone su estrategia con diagramas de flujos de datos sin tener que recurrir al lenguaje.
Recurra al lenguaje sólo después de haber razonado en su estrategia de solución.
La programación es una actividad mental que demanda creatividad, y la creatividad no debería ser afectada por las restricciones de algunos lenguajes.
Es por lo que, en un comienzo, se debe recurrir a programar en el papel (o editor de texto) sin mucha restricción, pero manteniendo la filosofía de la programación la cual debe ser estricta frente al paradigma.
Mantenga una hoja de papel a su lado y un lápiz. Escriba cosas que salen de su cabeza, ideas, o simplemente, escriba una(o varias) estrategias de solución. Dibuje sus estructuras de datos, por ejemplo, y busque la mejor forma de aproximarse a ellas algorítmicamente.
El pseudocódigo es un lenguaje no estricto que permite mucha libertad manteniendo la formalidad, si se le compara con cualquier lenguaje de programación real. Al comienzo, piense mejor en pseudocodificar.
Si el pseudocódigo no es para usted, siempre hay la posibilidad que razone su estrategia con diagramas de flujos de datos sin tener que recurrir al lenguaje.
Recurra al lenguaje sólo después de haber razonado en su estrategia de solución.
Paradigma de programación
En este libro usted aprenderá a programar con paradigma imperativo, que es uno de los paradigmas más utilizados alrededor del mundo para programar. El paradigma imperativo usa instrucciones para cambiar el estado de un programa y promueve la programación procedural, donde los programas se estructuran con bloques denominados funciones o subrutinas. Otros paradigmas de programación, como los declarativos y los funcionales estrictos, no serán considerados en este libro.
Debido a que Python permite expresarnos con programación estructurada y programación orientada a objetos, y dado que es un lenguaje bastante simple de aprender y bastante útil al momento de experimentar y hacer prototipos de soluciones, se eligió como lenguaje experimental para el aprendizaje. Hoy Python es un lenguaje de propósito general muy utilizado en la universidad por estudiantes e investigadores, y, a pesar de no ser un lenguaje científico per se, está siendo ampliamente utilizado para hacer ciencia, o para ser aplicado en cualquier otro ámbito. Python fue pensado como lenguaje de propósito general de muy fácil aprendizaje, y es por eso por lo que se hace adecuado para experimentar.
En este texto, desde los conceptos más básicos que se plantean se sugiere trabajar con pseudocódigo, y en la segunda parte durante los “workshops” se presenta teoría y ejemplos en Python, lo que hará que el estudiante se anime a trabajar también en ellos y haga sus propios experimentos para reconocer la sintaxis del lenguaje, y para adquirir familiaridad con ambientes de programación.
Otro aspecto para la selección del lenguaje Python, es la accesibilidad a ambientes de trabajo. Por ejemplo, Python puede ser usado sin instalación prácticamente en todos los sistemas operacionales y Google tiene dentro de sus herramientas de documentos gratuitas la posibilidad de activar un ambiente online de programación con acceso a una amplia gama de librerías científicas y de aprendizaje de máquina (Google Colab). Adicionalmente, hay muchos sitios web online que te brindan un entorno de trabajo para trabajar en Python.
Todo lo anterior no significa que Python sea el lenguaje clave para aprender a programar. Simplemente es uno adecuado.
Debido a que Python permite expresarnos con programación estructurada y programación orientada a objetos, y dado que es un lenguaje bastante simple de aprender y bastante útil al momento de experimentar y hacer prototipos de soluciones, se eligió como lenguaje experimental para el aprendizaje. Hoy Python es un lenguaje de propósito general muy utilizado en la universidad por estudiantes e investigadores, y, a pesar de no ser un lenguaje científico per se, está siendo ampliamente utilizado para hacer ciencia, o para ser aplicado en cualquier otro ámbito. Python fue pensado como lenguaje de propósito general de muy fácil aprendizaje, y es por eso por lo que se hace adecuado para experimentar.
En este texto, desde los conceptos más básicos que se plantean se sugiere trabajar con pseudocódigo, y en la segunda parte durante los “workshops” se presenta teoría y ejemplos en Python, lo que hará que el estudiante se anime a trabajar también en ellos y haga sus propios experimentos para reconocer la sintaxis del lenguaje, y para adquirir familiaridad con ambientes de programación.
Otro aspecto para la selección del lenguaje Python, es la accesibilidad a ambientes de trabajo. Por ejemplo, Python puede ser usado sin instalación prácticamente en todos los sistemas operacionales y Google tiene dentro de sus herramientas de documentos gratuitas la posibilidad de activar un ambiente online de programación con acceso a una amplia gama de librerías científicas y de aprendizaje de máquina (Google Colab). Adicionalmente, hay muchos sitios web online que te brindan un entorno de trabajo para trabajar en Python.
Todo lo anterior no significa que Python sea el lenguaje clave para aprender a programar. Simplemente es uno adecuado.