1. Prefacio

Para nosotros, el equipo docente de la asignatura Informática, la informática que necesita un ingeniero es fundamentalmente una introducción a la programación. El objetivo es uno: desarrollar el pensamiento computacional del alumno. Este objetivo se divide en el desarrollo de tres capacidades:

Lo que más tiempo te llevará es el desarrollo de esta tercera capacidad. Solo hay una forma de desarrollarla, con práctica. Esta asignatura tiene poca materia que estudiar, pero necesita mucha práctica.

1.1. Acerca de la asignatura

Desgraciadamente esta asignatura tiene una tasa de éxito baja, pero no se debe a una dificultad intrínseca, sino a abandono temprano. Los contenidos de la asignatura son accesibles para niños de 12 años y no se requieren conocimientos previos, pero necesita práctica.

El perfil del alumno típico es el de un usuario de computadores ocasional, con escasos conocimientos previos de tecnología y muy poca experiencia previa en programación. Es posible que hayas hecho ya algún programa en el instituto en Scratch, en C o en Visual Basic. Eso sería fantástico, porque casi cubre las dos primeras capacidades que tienes que desarrollar, pero no te confíes, la tercera capacidad (elaborar algoritmos) es mucho más costosa en tiempo y esfuerzo.

Probablemente ahora que estás lejos del examen piensas que exagero. Si es así déjame que te cuente lo que te va a pasar, porque les ha pasado ya a muchos compañeros.

  • Al principio verás cosas muy simples y comprobarás que los ejercicios te salen con cierta facilidad. La asignatura la llevarás al día y empezarás a catalogarla como una maría.
  • La carga de trabajo de Física, Álgebra y Cálculo te hará aparcar la asignatura justo en el momento en el que las cosas cambian. Justo en el momento en el que pasamos de hablar de cómo se escriben los programas a cómo se solucionan problemas con un ordenador.
  • Cuando vayas a retomar la asignatura será demasiado tarde, y la sensación de agobio, de no entender nada, te hará aparcar la asignatura definitivamente hasta el siguiente semestre. Es el momento en que dejas de considerarla maría para considerarla hueso.
  • Pero en el siguiente cuatrimestre tendrás otras cinco asignaturas además de ésta y encima no tendrás el apoyo de las clases. Incluso yendo a tutorías descubrirás que por tí solo avanzas mucho más lentamente y, lo que es peor, en algunos momentos tendrás la sensación de que retrocedes. Es el momento del abandono definitivo hasta el curso siguiente.
  • En los cursos siguientes descubres la importancia de las clases, pero las incompatibilidades de horarios hacen que no puedas asistir con regularidad. Cuando el peso de las sucesivas matrículas se haga insoportable decidirás ir a clase, ir a tutorías y llevarla al día, pero a costa de no asistir a las clases que solapen.
  • Todo el esfuerzo que pondrás en esta asignatura hará que te repugne todo lo relacionado con ella. Lo malo es que toda tu vida profesional se verá afectada, porque la programación de computadores es la herramienta más efectiva del ingeniero moderno.

Advertencia

Destina 6 horas a la semana a practicar, a programar. No dejes pasar ninguna semana con menos de 4.5 horas de dedicación a la asignatura y compensa las semanas que dedicas menos de 6 horas dedicando más horas en la siguiente.

Es esencial practicar. Es igual si se trata de los ejercicios, el trabajo en grupo u otros retos que encuentres en Internet. Lee el libro a toda velocidad y practica. Ya volverás al libro cuando lo necesites.

Los ejercicios no son escoyos que hay que superar, sino instrumentos para desarrollar y mejorar tu pensamiento computacional. Piensa en ellos como ejercicios de gimnasia. Por tanto no se trata de entregarlos cuando funcionan, sino de re-elaborarlos hasta que creas que están como deben. No dudes en rehacer ejercicios que funcionan si crees que no han quedado suficientemente claros y, especialmente, cuando aprendas nuevas técnicas o construcciones.

Un último consejo. Hay una infinidad de recursos para aprender a programar pero los mejores están en inglés. Si eso es un problema para tí arréglalo cuanto antes. Un ingeniero necesita el inglés.

1.2. Informática en la ingeniería

Un computador es una de las máquinas más flexibles que se han inventado. Su flexibilidad, unido a la bajada de los costes de producción derivada de la producción en masa, han dado lugar a un fenómeno sumamente interesante, la comoditización de la electrónica.

Ese palabro no es más que un calco léxico del inglés commoditization, la progresiva transformación en una commodity. Una commodity es un tipo de producto en el que no es fácil apreciar diferencias significativas entre diferentes productores. Piensa en el pan, el agua, la energía eléctrica, etc. En esas circunstancias el consumidor no está dispuesto a pagar más por una marca frente a otra. Es decir, lo único que determina la demanda es el precio de venta y a la larga en una economía no intervenida el precio tiende a cero. Imposible competir con circuitos electrónicos a medida.

Efectivamente, hoy puedes comprar un ordenador por 15€, que es entre 40 y 80 veces más potente que los ordenadores que comprábamos nosotros por 1200€ cuando empezamos a estudiar. Por unos 3€ es posible comprar un pequeño computador con capacidades de comunicación inalámbrica (WiFi). Y esto es con volúmenes de pedido de una unidad e incluyendo los gastos de envío. Esto implica que cada vez más se usan computadores para el diseño de la inmensa mayoría de los equipos electrónicos, una simple bombilla, un televisor, un punto de acceso WiFi, un termostato, un despertador, el control electrónico de la inyección de un automóvil, el control electrónico de una planta de fabricación, o el control electrónico de una línea de transmisión. El ingeniero que participa en el diseño de cualquier equipo electrónico tendrá que lidiar con computadores.

Pero es que además el computador es la mejor herramienta de trabajo para el ingeniero. Hoy en día es posible encontrar ingenieros que no saben ni siquiera lo que es una regla de cálculo, pero es imposible encontrar un ingeniero en activo que no use computadores a diario. Esta asignatura también pretende ampliar el rango de aplicaciones de los computadores en la ingeniería, capacitando al alumno para automatizar los procesos y los cálculos repetitivos, así como para analizar grandes volúmenes de información.

La informática es una rama de las matemáticas. Como tal tiene asociado un aparato formal muy importante. Sin embargo éste es un curso de introducción. Estoy seguro de que no te explicaron los grupos abelianos cuando te enseñaron a sumar. Tampoco nosotros usaremos el aparato formal. Casi todo tendrá un componente de intuición que debes aprovechar. Experimenta, busca la regularidad, las similitudes, explora lo que crees que puede tener sentido. Ésto es muy importante en tu proceso de aprendizaje. No se aprende a montar en bicicleta si no tomas un rol activo en el proceso de aprendizaje. Puedes caerte, pero incluso eso colabora en tu aprendizaje.

De todas formas ten presente que este curso empiezas a conocer una nueva rama de las matemáticas. Hay mucho más, y una buena parte de ello tendrás que aprenderlo por tu cuenta a lo largo de tu vida profesional. En el último capítulo te contaremos las áreas que en nuestra opinión tendrás que fortalecer poco a poco.

1.3. Estructura del libro

Este pequeño libro evoluciona día a día de las notas de clase. No era nuestra intención crear un nuevo libro, hay muchos y algunos muy buenos. El problema es que nuestro alumno típico no sabe inglés, y hay poca literatura técnica en castellano. Empezamos a colgar notas de clase pero un número significativo de estudiantes jamás llegaron a descargarlas todas. Tal vez en un bloque monolítico sea más difícil que eso pase.

Este pequeño libro recoge las notas de clase elaboradas durante varios años. La estructura responde aproximadamente al libro de John Guttag, Introduction to Computation and Programming Using Python con clara influencia de Composing Programs de John DeNero. La forma en que resolvemos los casos de estudio está inspirada en Clean Code de Robert C. Martin, uno de los libros más influyentes de los últimos años. Cuando el inglés deje de ser un problema para ti consulta los originales, están maravillosamente escritos, contienen mucha más información y están ampliamente revisados.

No vamos a describir un lenguaje de programación de principio a fin. Para eso hay muchos libros, incluso en castellano. Déjame recomendarte algunos:

  • Tutorial de Python 3.x es la traducción al castellano del tutorial oficial de Guido van Rossum. Es un tutorial muy completo, que cubre la mayoría del lenguaje.
  • Introducción a la programación con Python 3 es un libro de la Universitat Jaume I muy completo que empieza desde cero y describe un amplio abanico de características con gran detalle. Es muy útil como libro de referencia si no entiendes algo del lenguaje.

Este libro pretende ir un poquito más allá del lenguaje porque queremos que desarrolles tu pensamiento computacional. Por eso hemos querido centrarlo en la solución de problemas. Trataremos de darte un conjunto de consejos que te garantizarán el éxito en la mayoría de tus proyectos. Te describimos un proceso sistemático y un abanico de métodos para resolver problemas.

El libro consta de tres materias relativamente independientes que se entrelazan para impartirse de forma concurrente. Aunque hemos puesto cuidado de respetar las dependencias entre ellas es posible que en algún punto tengamos que anticipar aspectos que serán descritos más adelante.

  1. En primer lugar hay un bloque de capítulos dedicados a la programación en Python. Nuestro objetivo es ir tan rápido como podamos en la primera parte del curso para llegar al punto en el que podemos trabajar con los tres elementos básicos de la programación de computadores: primitivas, composición y abstracción. Introducimos las funciones mucho antes que la mayoría de los textos sobre Python, porque es el mecanismo de abstracción básico sobre el que vamos a construir. En cambio estructuras de datos, iteradores y generadores quedan relegados hasta que tenemos bien establecida la metodología de resolución de problemas. Si te confunde esta forma de enfocarlo lee antes uno de los libros de Python que te recomendamos.
  2. De forma concurrente vemos un conjunto de métodos de resolución de problemas con un computador. Entre los métodos que veremos está la enumeración exhaustiva, la búsqueda por bisección, el método de Newton-Raphson, el método de divide y vencerás, programación dinámica, programación orientada a objetos, métodos voraces, backtracking, etc. Ilustraremos los métodos con algoritmos de todo tipo (aritméticos, de ordenación, de búsqueda, de clasificación, etc.)
  3. También de forma concurrente y repartido por el texto intentamos plasmar nuestra visión de cómo debes programar. Vamos a insistir mucho en diseño top-down, descomponer en funciones muy pequeñas, usar nombres con sentido y evitar los problemas potenciales con programación defensiva, con pruebas unitarias y con funciones sin efectos de lado. Te enseñaremos a encontrar los errores de tus programas pero esto funcionará especialmente bien si sigues el resto de consejos.

1.4. Organización del curso

El curso se organiza en tres sesiones de una hora en clase a la semana y una sesión de dos horas en laboratorio cada dos semanas. Se estima que por cada hora de clase el alumno deben invertir 1.5 horas de estudio en casa. Si en otras asignaturas es posible concentrar el trabajo de varios días en un día de estudio intensivo no pienses que con esta asignatura también ocurre.

La asignatura Informática pretende desarrollar destrezas, no simplemente adquirir conocimientos. Por tanto es muy importante una dedicación suficiente y prolongada. No se aprende a montar en bicicleta en un día, aunque dediques las 24 horas del día a experimentar.

Estudiar Informática no consiste en leer o memorizar, sino en resolver problemas con ayuda de un ordenador. Al principio los problemas que podemos resolver son muy simples, pero no te confíes, los problemas aumentan de complejidad rápidamente y la gama de opciones disponibles puede causar cierto desbordamiento si no se lleva al día.

Si tienes ordenador portátil no dudes en usarlo durante las clases. Puedes probar los ejemplos durante la clase e interrumpir la clase con cualquier duda. Es más importante entenderlo todo que avanzar según la planificación.

1.4.1. Trabajo en clase

Tu trabajo en clase consiste en entender todo lo explicado. Todas las clases tienen un material asociado, que se intentará poner a disposición de los alumnos con suficiente antelación, y que puede constar de uno o varios de los siguientes recursos:

  1. Transparencias. Se usan como guía y refuerzo de la exposición del profesor. No las imprimas, ojéalas si lo deseas antes de la clase pero por sí mismas no tienen por qué tener sentido. En la medida de lo posible intentaremos que las transparencias tengan notas asociadas a modo de guión de la exposición. En esos casos las puedes considerar como una transcripción de la parte correspondiente de la clase.
  2. Libro de texto. El libro también recoge los ejemplos de clase ordenados secuencialmente y con alguna propuesta de trabjo adicional. Lee los capítulos correspondientes antes de la clase e intenta reproducir por tí mismo los ejemplos.
  3. Documentación adicional. A veces es conveniente complementar la clase con alguna información no esencial que puede simplificar la vida del estudiante. Normalmente se tratará de textos complementarios, pero también pueden ser vídeos o artículos disponibles en Internet.

Es muy conveniente comprobar frecuentemente la documentación disponible en el Campus Virtual de la UCLM, sobre todo el día antes de cada clase y cuando así se diga en las clases. Todas aquellas personas que no pueden asistir con regularidad a las clases deberían ver el video correspondiente a cada clase [1], si está disponible, para un seguimiento óptimo de la asignatura.

[1]Estamos en proceso de grabación de las clases en vídeo. Es posible que algunas clases no estén todavía disponibles. Comprueba el progreso en nuestro canal de YouTube.

1.4.2. Trabajo en el laboratorio

En general las actividades de laboratorio consistirán en la realización de pequeños programas. La evaluación y/o corrección se realizará de forma prácticamente automática a través de una actividad del Campus Virtual. El profesor no está, por tanto, para deciros si un programa está bien o mal, sino para orientaros sobre formas alternativas de resolver problemas o para indicaros las mejores formas de expresar conceptos en vuestro programa. Pensad en él como en un experto que está a vuestra disposición como consultor tecnológico. No espereis que el profesor os diga a cada momento lo que teneis que hacer, eso ya lo teneis por escrito en Campus Virtual.

La mecánica del laboratorio pretende simular en la medida de lo posible la mecánica de los exámenes de Informática. También en los exámenes vas a tener que resolver problemas y también en los exámenes vas a tener que entregar tu solución utilizando una actividad de Campus Virtual. Debes adquirir toda la familiaridad posible con la forma de trabajo y con las herramientas que elijas para que en el exámen no pierdas el tiempo innecesariamente.

1.4.3. Trabajo en casa

El trabajo en casa tiene dos partes bien diferenciadas:

  1. Por un lado hay que asimilar los (escasos) conocimientos teóricos de la asignatura. Tienes un libro de texto, tienes las clases con su material asociado y tienes Internet. Úsalos, no te quedes en las transparencias, busca lo que no entiendas, lee ejemplos de otra gente y pregunta en clase o en tutorías todo lo que te sigue planteando dudas. En este orden, primero busca por tí mismo, luego pide ayuda. El motivo es simple, la búsqueda activa de respuestas contribuye a tu aprendizaje. La recepción pasiva de información solo contribuye a que vayas pasando las actividades de Campus Virtual, pero no podrá ayudarte con los exámenes, que son una parte importante de la calificación final, y mucho menos con tu actividad profesional como ingeniero.
  2. Por otro lado tienes que poner en práctica estos conocimientos. Para ello tienes que hacer dos actividades: leer programas de otros, y escribir programas para resolver pequeños problemas. No te quedes en la segunda parte, es muy importante leer programas de otros. Puedes aprender a nadar con estilo perrito pero cuando ves nadar a un profesional te das cuenta que tu estilo puede y debe mejorar. Hay belleza en los programas, aprende a apreciarla, descubre qué propiedades son deseables y cuáles no, aprende a escribir programas para que otros los entiendan.

Con gran diferencia la parte práctica (leer y escribir programas) es la que más tiempo te debe consumir. Python tiene solo 40 palabras y la mayoría son vocablos comunes en inglés, que ya deberías conocer. Si estás consumiendo mucho tiempo en la primera parte (asimilar conocimientos teóricos) reacciona pronto, porque la propia práctica de la programación también te ayuda a asimilar los conceptos y lo contrario no ocurre nunca. Leyendo un manual de técnica de natación no se aprende a nadar.

Para ayudarte en esta labor te proponemos una serie de ejercicios muy simples adicionales en Campus Virtual. La mecánica es igual que la de los ejercicios del laboratorio o de los exámenes, pero no contribuyen a la calificación de la asignatura. Hazlos si te resultan útiles para estudiar, ignóralos si ves que los ejercicios del laboratorio o los programas de ejemplo te resultan muy fáciles.

1.5. Política de copias

En esta asignatura hay y habrá tolerancia cero a la copia y el engaño. Es un comportamiento totalmente inaceptable para cualquier profesional cualificado y será perseguido con la máxima dureza que permita la reglamentación interna de la UCLM. Se utilizarán herramientas estado del arte para la detección automática de copias en todas las actividades.

Advertencia

El curso pasado 12 alumnos fueron detectados intentando diversos tipos de engaño. No es solo una conducta infantil y poco ética, es un comportamiento muy poco profesional.

Si te esfuerzas siempre tendrás al equipo docente como aliado, incluso cuando busques empleo. Una carta de recomendación o un badge (distinción) puede ser lo que te distinga de los demás aspirantes.

Si intentas engañar es mejor que no pidas ayuda al equipo docente. Ni ahora ni en el futuro.

Si se detecta el plagio se castigará de la forma más dura posible. Actualmente cualquier plagio, incluso en una práctica, implica suspender la asignatura con 0 puntos.

Es triste comprobar que hay alumnos que intentan justificar su copia diciendo que han modificado el original. Si no lo has hecho tú es plagio.

Es muy simple evitar el plagio. Lee lo que quieras, comenta la solución con quien quieras, toma notas. Ahora vacía la página completamente y escribe el programa.

Intenta engañarte a ti mismo y seguirá siendo plagio.

  • Si intentas memorizar lo que lees para luego reproducirlo estarás cometiendo plagio.
  • Si copias un programa para luego modificarlo y adaptarlo a lo que se pide será también plagio.
  • Si el software que has copiado es software libre también será plagio.
  • Si el software que has copiado es de dominio público el plagio no será delito, pero seguirá siendo plagio.
  • Si has traducido a Python un programa ajeno que estaba escrito en otro lenguaje también estás cometiendo plagio.
  • Si pagas 60€ a un profesor de academia para que te haga las prácticas estás tirando el dinero, yo te las haría por menos aunque el resultado seguirá siendo el mismo. Si dices que has hecho lo que no has hecho estás engañando.

Ahora es tu turno, disfruta la asignatura y buena suerte en los exámenes.

Toledo, 10 de septiembre de 2017

Francisco Moya

Next Section - 2. Introducción