0% encontró este documento útil (0 votos)
5 vistas14 páginas

Historia y fundamentos de programación

Resumen de varios libros sobre los fundamentos de la programación.

Cargado por

Jor
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
5 vistas14 páginas

Historia y fundamentos de programación

Resumen de varios libros sobre los fundamentos de la programación.

Cargado por

Jor
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

FUNDAMENTOS DE PROGRAMACIÓN

Brevísima historia de la programación: 1812


Ada Lovelace es considerada la primera programadora de la historia. Colaboró con Charles
Babbage, quien diseñó la máquina analítica, un prototipo de computadora mecánica que
funcionaría con un sistema de tarjetas perforadas y realizaría cálculos matemáticos complejos.
Ada no solo escribió algoritmos para ser ejecutados por esa máquina, sino
que comprendió su capacidad para ir más allá de los cálculos matemáticos,
vislumbrando la posibilidad de que la máquina manipulara símbolos y
ejecutara instrucciones para crear música o procesar texto, lo que la convirtió
en una visionaria de la programación.

La relevancia del trabajo de Lovelace no se comprendió del todo hasta


décadas más tarde, cuando la programación como disciplina comenzó a
tomar forma con el desarrollo de los primeros lenguajes de propósito específico. Puedes
encontrar más detalles sobre su vida y obra en el informe de Historia de National Geographic:
Ada Lovelace, la visionaria hija de Lord Byron.

Primeros lenguajes y el surgimiento de C

El avance hacia la creación de lenguajes de programación se dio con hitos como Fortran y
COBOL en las décadas de 1950 y 1960, que facilitaron la escritura de instrucciones para
computadoras en un formato más cercano al lenguaje humano. Sin embargo, fue en los años
70 cuando Dennis Ritchie, en los laboratorios Bell, desarrolló el lenguaje de programación C, un
verdadero hito en la historia del software. C evolucionó a partir del lenguaje B, creado por Ken
Thompson para el sistema operativo UNIX, y añadió características que ofrecían un control más
preciso sobre el hardware y una manipulación de datos más eficiente.
El diseño de C no solo facilitó la creación de sistemas operativos, como UNIX, sino que también
sentó las bases para la creación de lenguajes modernos como C++, C#, Java, JavaScript y
Python. Estos lenguajes heredan de C muchos de sus conceptos fundamentales, como las
estructuras de control (condicionales y bucles), la gestión de memoria y la sintaxis básica. La
influencia de C en estos lenguajes ha permitido que su simplicidad y eficiencia se traduzcan en
herramientas más avanzadas que, no obstante, conservan sus raíces en este lenguaje pionero.
Por estas razones, es común encontrar numerosos libros y recursos dedicados al lenguaje C aún
en la actualidad, pese a sus años.

Desde los algoritmos pioneros de Ada Lovelace hasta el desarrollo de C, la programación ha


evolucionado de un concepto matemático a una herramienta fundamental en la tecnología
moderna. Esta progresión histórica muestra cómo las ideas visionarias y los avances técnicos se
entrelazan para crear el mundo digital en el que vivimos hoy.

SCRATCH: Es un lenguaje de propósito específico desarrollado por el MIT (Instituto Tecnológico


de Massachusetts, es una de las universidades más avanzadas del mundo, en los campos de
ciencia, ingeniería y tecnología. Scratch sirve para hacer videojuegos, animaciones y contar
historias. No para videojuegos de última generación, sino para juegos más básicos. Está
orientado al aprendizaje, es decir, para aprender a programar. Utiliza el lenguaje de bloques en
vez de utilizar líneas de código. Se puede usar ONLINE. Es heredero de un programa llamado
LOGO también del MIT. En logo se escribían líneas de código sencillo que controlaban el
movimiento de una “tortuga”en la pantalla, mientras dibujaba formas y figuras en la pantalla.

Página de SCRATCH: [Link]

Conceptos básicos de programación


Un ser humano piensa y actúa siguiendo una secuencia lógica de acciones. De manera similar,
este enfoque puede aplicarse al funcionamiento de una computadora, donde cada proceso
sigue una serie ordenada de instrucciones.

La programación es un proceso que permite a las computadoras ejecutar una secuencia lógica
de instrucciones para resolver problemas complejos de manera rápida y precisa, optimizando
tareas que serían demasiado complicadas para un ser humano.

Algoritmo:Un algoritmo es una secuencia finita de pasos ordenados para resolver un problema
o realizar una tarea específica. Su origen proviene del matemático persa Mohammed
al-Khwarizmi, conocido por desarrollar métodos para operaciones aritméticas.

Un ejemplo simple es hacer un sándwich: tengo hambre -> corto pan -> le pongo jamón.

Los algoritmos no están ligados a ningún lenguaje de programación y pueden representarse de


diferentes maneras, como en recetas de cocina.

Los lenguajes de programación:Sirven como un puente entre el lenguaje humano y el lenguaje


de máquina, que es el que realmente entienden las computadoras. Los programas escritos en
un lenguaje de programación deben ser traducidos a lenguaje de máquina mediante un
proceso llamado compilación, realizado por un compilador.
Programa: Es la implementación de uno o más algoritmos en un lenguaje de programación.
Consiste en un conjunto de instrucciones que la computadora ejecuta para resolver un
problema.

Pseudocódigo: Es una forma de expresar algoritmos de manera sencilla, sin utilizar la sintaxis
de un lenguaje de programación específico. Usa palabras comunes y estructuras lógicas como
if, while, y for, facilitando la comprensión de la lógica antes de codificarla en un lenguaje
formal.
Diagrama de flujo: Un diagrama de flujo es una representación gráfica de un proceso o sistema
que muestra de manera visual las etapas o pasos de un algoritmo, junto con las decisiones
necesarias para completar el proceso y resolver un problema. Estos diagramas ayudan a ilustrar
el orden y la secuencia en que se ejecutan las acciones. El término flujo de control se refiere al
orden en el que se ejecutan las instrucciones de un programa. En la mayoría de los casos, el
flujo de control es secuencial, lo que significa que las instrucciones se ejecutan de forma
ordenada, una después de la otra, en el mismo orden en que están escritas dentro del
programa. Sin embargo, el flujo de control puede modificarse mediante estructuras de control
como condicionales y bucles, que permiten tomar decisiones y repetir acciones en función de
ciertas condiciones.

Los elementos que componen un diagrama de flujo son:

Inicio/Fin (Oval): Para indicar el inicio y el final del proceso


Proceso (Rectángulo): Para representar una acción o actividad.
Decisión (Rombo): Para representar una pregunta o una decisión que necesita ser tomada.
Conector de flujo (Flechas): Para conectar y mostrar la dirección del flujo entre las formas.
Cada forma representa un tipo de acción o decisión diferente.
Los símbolos del gráfico anterior son los que más se usan, pero hay otros:

Estructuras de control
El teorema de Böhm y Jacopini, formulado en 1966, fue un descubrimiento clave en la
programación. Este teorema establece que cualquier algoritmo puede ser expresado usando
únicamente tres estructuras básicas de control:

1. Secuencia: La ejecución de instrucciones en orden, una tras otra.


2. Condicionales: La toma de decisiones para elegir entre diferentes caminos basados en
condiciones específicas.
3. Bucles: La repetición de instrucciones hasta que se cumpla o deje de cumplirse una
condición.
Este hallazgo simplificó la creación de programas, demostrando que estas tres estructuras son
suficientes para desarrollar programas complejos. Las condicionales y los bucles son esenciales
para que los programas sean flexibles y adaptables, ya que permiten realizar tareas repetitivas
y reaccionar a diferentes situaciones.

Gracias a este teorema, los lenguajes de programación han evolucionado hacia formas más
claras y accesibles, influenciando cómo se escribe y comprende el código en la actualidad. Las
estructuras de control son, por tanto, fundamentales para determinar el flujo de ejecución y
permitir que los programas resuelvan problemas de manera efectiva y dinámica.

1-Secuencia:
Es simplemente una acción o instrucción detrás de otra.

Con la programación secuencial podemos crear programas lineales que comienzan con la
primera instrucción y terminan con la última. Ejecutándose cada una de ella una sola vez y una
por vez. En el ejemplo se muestra un diagrama de flujo de una secuencia.

En Scratch una secuencia por pasos o instrucciones, como la del diagrama de flujo de arriba,
podría ser así:

Una estructura secuencial es aquella en la que una acción (instrucción) sigue a otra en
secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente
y así sucesivamente hasta el final del proceso. Sin embargo, muchas veces los programas
necesitan alterar o modificar el flujo de control en un programa y allí entran en juego las
condicionales y los bucles.

2 -Condicionales:
Las condicionales son el fundamento de la lógica de control en los programas, permitiendo que
el flujo del programa se bifurque dependiendo de ciertas condiciones. Son decisiones, donde
se hace una pregunta con dos posibles salidas (tiene que ser preguntas directas que se puedan
responder con sí o no), si la respuesta es si (verdadero) tomaría un camino y si es no, (false)
tomaría otro camino.
Por ejemplo, podríamos decir que los pasos para hacer un huevo frito planteado de forma
secuencial podrían ser estos:

Sartén -> Echar aceite -> romper huevos -> lo ponemos en la sartén -> hasta que esté frito

La secuencia anterior está bien, pero puede tener problemas. Ya que no contempla si el aceite
está caliente o no. Entonces, una forma mejorada sería poniendo una condición que
compruebe si el aceite está caliente (en este caso sería un bucle que se repetirá hasta que la
condición se cumpla):

Podemos pensar que la condición es como un semáforo, si la condición se cumple, se pone en


verde, y se ejecuta el código. Si no se pone en rojo y el código no se ejecuta.

Existen varios tipos de condicionales:

En Scratch hay 2 básicamente:

Condicionales simples (if - then) (si - entonces)

Los condicionales en SCRATCH son el bloque de color naranja. (CONTROL).

Este bloque es una condicional simple; ejecuta las instrucciones si la


condición se cumple.
Esta es una condicional simple (alternativa simple). Si la condición es verdadera, entonces se
ejecuta la acción, pero si la condición es falsa, entonces no hacer nada.

Condicional doble (if - then - else) (si - entonces - sino)


La estructura anterior es muy limitada y puede ser que se necesite una estructura que permita
elegir entre dos opciones o alternativas posibles, en función del cumplimiento o no de una
determinada condición.

Este contiene dos bloques de código que son excluyentes. Es decir, se


ejecuta el primero o se ejecuta el segundo, pero nunca los dos.

En un lenguaje de programación por línea de código esto sería el


comando if/ else

If / else constituye la vía más utilizada para controlar el flujo de un proceso dentro de la
programación estructurada. Si tuviéramos que usar una metáfora, diríamos que es como una
persona que camina y se encuentra ante una bifurcación del camino. Esta persona tiene que
decidir cuál de los dos caminos tomar, sabiendo que, después de seguir cualquiera de las dos
rutas, ambas se unirán en un mismo punto al final de cada tramo.

Si examinamos con detenimiento nuestra particular comparativa, hay algo que aún no hemos
explicado. ¿Qué es lo que mueve a la persona a elegir uno u otro camino?

La decisión sería lo que, informáticamente hablando, denominaremos condición, la cual debe


ser evaluada por el propio programa. Así, si la condición se cumple, el programa elegirá la
primera rama de la bifurcación, ejecutando las instrucciones que se encuentren en dicho
bloque, mientras que en caso contrario, el flujo virara hacia la segunda opción, haciendo lo
propio con las instrucciones allí colocadas.
En lenguaje C sería así:

if (condición)

bloque de instrucciones ruta 1

else

bloque de instrucciones ruta 2

En Python esto sería así:

if condición:

bloque de instrucciones ruta 1

else:

bloque de instrucciones ruta 2

Evidentemente, son similares, (esto es, porque la mayoría de los lenguajes de programación
están basados en C, como JavaScript) pero Python busca ser más legible y conciso, utilizando
menos signos de puntuación y reglas de sintaxis más simples. Esto lo hace más accesible,
especialmente para quienes están empezando a programar.

3 - Bucles (repeticiones, loops):


Podemos encontrarnos con la necesidad de repetir instrucciones, varias veces, para esto
existen los bucles. En Scratch los bucles comparten el mismo color que las condiciones, ya que
ambos son bloques dentro de la etiqueta control.

Bucle: Un bucle ejecuta repetidas veces una o varias instrucciones. Al utilizar bucles se
simplifican los programas al evitar repetir líneas de código.

Repite el N ° de veces que pongamos.

Bucle infinitos:

No exigen fin.

Repite instrucciones una y otra vez mientras se ejecuta el código.


Repetir HASTA que se cumpla la condición:
En función de una decisión repetimos para del programa HASTA que se cumple una condición.
Si la condición no se cumple se repetirá y si se cumple dejará de repetirse. Entonces el bucle
“repetir hasta” se repetirá mientras el valor booleano sea falso.

Repite instrucción hasta que se cumple la condición del hexágono.

Estructura Bucle mientras (“while”)


La estructura repetitiva mientras (while) es aquella en la que el cuerpo del bucle se repite
mientras se cumple una determinada condición. Cuando se ejecuta esta condición, la primera
cosa que sucede es que se evalúa la condición (una expresión booleana). Si se evalúa falsa, no
se toma ninguna acción y el programa prosigue en la siguiente instrucción del bucle. Si la
expresión booleana es verdadera, entonces se ejecuta el cuerpo del bucle, después de lo cual
se evalúa de nuevo la expresión booleana. Esto se repite una y otra vez mientras sea
verdadero. Es opuesto al bucle repetir hasta visto anteriormente.

Repetir MIENTRAS se cumple una condición: (este tipo de bucle no


existe en Scratch)

Otra opción seria hacer la pregunta al principio y después ejecutar la


acción. Entonces preguntará al principio si se cumple la condición, si
es que si se repetirá MIENTRAS se cumpla la condición, si no se
cumple saldrá del bucle.

Variables
Contenedor que almacena información a la que se puede acceder. Existe prácticamente en
todos los lenguajes de programación. Podemos ver qué hay en esa variable o modificar su
contenido. Puede almacenar números, o cadenas de textos.
Las variables son un valor mutable. Cada variable almacena un solo valor. La información
guardada en las variables, se borran cada vez que el programa finaliza su ejecución. Las
variables no guardan su valor una vez que el programa deja de usarse.
Una variable es una memoria nombrada en la memoria del PC (RAM) que sirve para almacenar
un valor.
Las variables tienen un nombre y un valor. De esta manera, un valor impredecible puede ser
accedido por medio de un nombre predeterminado. Impredecible porque hay cálculos de un
valor que no podemos saber por adelantado. Como la puntuación de un juego, donde los
puntos de cada jugador son las variables.

En Scratch los bloques de variables son de color naranja oscuro.

Tipos de datos (que podemos almacenar en las variables con Scratch).

1º, números: pueden ser enteros o decimales.

2º, cadenas de texto: almacenan grupo de caracteres como palabras o frases.

Persona = “Mario”
Variable el valor que se le asigna a la variable.
Ámbito de una variable:
El ámbito de una variable es simplemente la parte del código donde esa variable se puede
usar. Piensa en una variable como un objeto que guardas en una caja. El ámbito es el espacio
donde esa caja está accesible.

Por ejemplo:

● Si pones la caja en tu habitación (un ámbito pequeño), solo tú en tu habitación puedes


usarla.
● Si la pones en la sala de tu casa (un ámbito más grande), cualquiera en la casa puede
usarla.

En programación, las variables pueden tener distintos ámbitos:

● Ámbito local: La variable solo se puede usar dentro de una función o bloque de código
donde fue creada, como si estuviera en una habitación cerrada.
● Ámbito global: La variable se puede usar en cualquier parte del programa, como si
estuviera en un lugar público accesible para todos.

Esto ayuda a organizar y proteger la información, evitando qué variables se usen o cambien en
partes del programa donde no deberían.

En el caso de SCRATCH tendremos que definir si va a ser visible para todos los objetos o solo
para un objeto.
Podemos decir que hay dos tipos de variables dependiendo de su ámbito:
Variables globales: pueden ser leídas y modificados por cualquier objeto.
Variables locales: solo pueden ser modificados por su propietario, pero puede ser leído por
otros objetos con el bloque de sensores (en SCRATCH)
Las variables de ámbito local se usan para guardar información única de un objeto del juego
que no se debe compartir con otros. Por ej. el número de vidas que le quedan a nuestro
protagonista o los puntos marcados.
Las variables de ámbito global se suelen utilizar para temas de configuración del juego como la
dificultad o el número de jugadores.

Funciones
Todos los lenguajes de programación tienen funciones incorporadas, funciones internas y
funciones creadas por el usuario. Estas se utilizan escribiendo sus nombres como por ejemplo:

En Python una función muy sencilla es:


print(“Hola”)
Esto mostrará: hola
Cada función se evoca utilizando su nombre en una expresión con los argumentos actuales o
reales encerrados entre paréntesis.
Las funciones que ya vienen con el sistema se llaman funciones internas o intrínsecas. Y las
definidas por el usuario se llaman funciones externas.
Una función interna muy simple en Scratch es “mover 10 pasos” ya viene como bloque y no
tenemos que escribir código ni crearla.
Y una función externa en Scratch, es la última sección de Scratch “Mis bloques” en color rojo.

Crear una función en Scratch es muy simple. Solo creamos un bloque en mis bloques y le
ponemos lo que queremos que haga añadiendo bloques.

Entonces, cuando se presione la bandera, se activará el bloque producido llamado pasos, el


cual contiene un deslizamiento a un punto de la pantalla para luego aparecer más abajo.

Booleanos
¿Qué son los valores booleanos?

Los valores booleanos son como un interruptor que tiene dos posiciones: encendido y
apagado. En programación, estas posiciones se representan como “verdadero” (TRUE) y
“falso”(FALSE). Son importantes porque ayudan a los programas a tomar decisiones.

¿Por qué usamos valores booleanos?

1. Hacemos preguntas: Cuando programas, a veces necesitas saber cosas. Por ejemplo,
“¿Está lloviendo?”.
2. El programa busca la respuesta: Dependiendo de la respuesta, el programa tendrá que
decidir. Si la respuesta es “sí”(está lloviendo), se guarda “verdadero”. Si la respuesta es
“no” (no está lloviendo), se guarda “falso”.
3. Guardamos la respuesta en una variable: Imagina que una variable es como una caja
donde guardas la respuesta. Si está lloviendo, escribes “verdadero”en la caja. Si no está
lloviendo, escribes “falso”. Así, el programa sabe qué hacer después.
4. El programa toma decisiones: Si la respuesta guardada es “verdadero” el programa
puede decidir "Voy a llevar un paraguas”. Si es “falso”, puede decidir “No necesito
paraguas”.

Cómo funcionan en Scratch

En Scratch, no puedes guardar directamente “verdadero” o “falso” en una variable como en


otros lenguajes. Pero puedes usar bloques especiales que te permiten hacer preguntas. Por
ejemplo, puedes preguntar: “¿Es este número mayor que 5?” Scratch te dirá si la respuesta es
“verdadera” o “falsa”.

Operadores en Scratch
Operadores
En SCRATCH son verdes y hay de dos tipos de operadores:

1- Operadores Matemáticos:Están los que se usan para programar operaciones numéricas y


manejar cadenas de texto. (en el caso de un texto el operado de suma me permite sumar
dos oraciones de texto)
Suma, resta, multiplicación, división, resto de dividir, redondeo, decimal. Nos va a devolver un
número.
Son los que tiene forma redondeada.

2- Operadores Booleanos (o Lógicos):


Estos operadores se utilizan para realizar comparaciones y evaluar condiciones, devolviendo
valores verdaderos (TRUE) o falsos (FALSE). Ejemplos de operadores booleanos son Y, O, y NO.
Tienen un diseño con forma hexagonal y alargada.

La relación entre los operadores matemáticos y booleanos en Scratch se da en las


comparaciones. Para evaluar condiciones, frecuentemente se utilizan expresiones matemáticas
junto con operadores de comparación, que son un tipo de operadores booleanos.

Diferencia entre valores booleanos y expresiones booleanas

Valores Booleanos: Son un tipo de dato que solo puede ser verdadero (TRUE) o falso (FALSE).
Por ejemplo, el estado de una luz puede ser encendida (verdadero) o apagada (falso).
Expresiones Booleanas: Son combinaciones de valores y operadores que, al evaluarse,
devuelven un valor booleano (verdadero o falso). Por ejemplo, la expresión 6 > 3 se evalúa
como verdadero porque 6 es mayor que 3.
En programación, usamos valores booleanos para tomar decisiones basadas en las respuestas
de expresiones booleanas.

Operadores booleanos en Scratch

Scratch también tiene operadores booleanos que ayudan a hacer comparaciones:

● Y: Devuelve “verdadero” si ambas afirmaciones son ciertas. Por ejemplo, “La luna es un
satélite de la Tierra Y la luna no tiene atmósfera” es verdadero porque ambas son
correctas.
● O: Devuelve “verdadero” si al menos una afirmación es cierta. Por ejemplo, “La luna es
un satélite de la Tierra O la luna está hecha de queso” es verdadero porque la primera
afirmación es cierta.
● NO: Devuelve el valor opuesto. Por ejemplo, “NO es verdad que la luna es un satélite
de la Tierra” sería falso porque sí lo es.

Condicionales en Scratch
Los condicionales permiten que un programa tome decisiones basadas en condiciones. En
Scratch, usamos valores booleanos (verdadero o falso) para controlar cuándo se ejecutan
ciertas instrucciones.

1. Evaluación de Condiciones:
○ Hacemos una pregunta: “¿La puntuación es mayor que 10?" Esto es una
expresión booleana que puede ser verdadera o falsa.
2. Ejecutar Sentencias:
○ Si la condición es verdadera, se ejecutan las instrucciones dentro del bloque.
○ Si es falsa, no se ejecutan.

Sentencias de Control
Las sentencias de control, que son controladas con booleanos en SCRATCH son:

● "Si" (if): Ejecuta acciones si la condición es verdadera.


● "Si...sino" (if...else): Acciones para verdadero y falso.
● "Repetir hasta" (repeat until): Repite hasta que la condición sea verdadera.
Esas sentencias solo se ejecutaran si la expresión booleana es evaluada como verdadera.

Programación Orientada a Objetos: Conceptos Clave


La programación orientada a objetos (POO) es un método que organiza el código
usando clases y objetos, lo que facilita la creación de programas al modelar elementos
del mundo real.

¿Qué es una Clase?


Una clase es como una plantilla que define un tipo de objeto. Incluye:

● Propiedades: características que tiene el objeto (ej. nombre, raza, edad).


● Comportamientos: acciones que puede realizar (ej. ladrar, correr, comer).

La clase establece qué características y acciones tendrán los objetos creados a partir de ella,
pero no es un objeto en sí.

¿Qué es un Objeto?
Un objeto es un ejemplo específico de una clase. Cuando creas un objeto a partir de
una clase, defines un caso concreto. Por ejemplo, de la clase Perro, puedes crear un
objeto llamado "Fido", que es un Labrador de 3 años. Puedes tener múltiples objetos
de la misma clase, como:

● Objeto 1: Fido, Labrador, 3 años.


● Objeto 2: Toby, Beagle, 2 años.

Relación con Scratch


En Scratch, los sprites son similares a los objetos en POO. Cada sprite tiene
propiedades (como su posición y apariencia) y puede realizar acciones (como moverse
o girar). Aunque
Scratch no usa clases como otros lenguajes, los conceptos de objetos y la definición de
comportamientos y características están presentes.

Bibliografía:
Joyanes Aguilar, L. (2020). Fundamentos de programación: Algoritmos, estructura de datos y
objetos (5.ª ed.). McGraw-Hill.
Maestre Torreblanca, J. M., & Relinque Pérez, J. (2017). A programar se aprende jugando.
Editorial Paraninfo.
Zavala López, R. A., & Llamas Avalos, R. (2013). Fundamentos de programación para
principiantes.

También podría gustarte