Introducción a la Programación

La programación, en su esencia, es el acto de instruir a una máquina sobre cómo realizar una tarea específica. Es como si le estuvieras enseñando a tu perro a buscar la pelota, pero en este caso, el perro es tu computadora y la pelota es, por ejemplo, mostrar una foto en tu pantalla.

Ahora, es posible que pienses que programar es simplemente escribir líneas de código. En realidad, la programación es un proceso más amplio que incluye no solo escribir código, sino también resolver problemas, diseñar sistemas y pensar lógicamente.

En el universo de la programación, hay lenguajes de alto nivel y lenguajes de bajo nivel. Un lenguaje de bajo nivel, como el ensamblador, está más cerca de lo que la máquina entiende, mientras que un lenguaje de alto nivel, como Python o JavaScript, es más amigable para nosotros, los humanos. Imagina tener una conversación: los lenguajes de alto nivel son como charlar con un amigo en un café, mientras que los lenguajes de bajo nivel son como intentar comunicarte con alguien que habla un dialecto muy particular y localizado.

Además, algunos lenguajes de programación son compilados y otros son interpretados. Si un lenguaje es compilado, significa que se traduce a un lenguaje que la máquina entiende antes de ser ejecutado. Por otro lado, los lenguajes interpretados son traducidos en tiempo real, mientras se ejecutan.

Breve historia de la programación

La programación no es un concepto nuevo. De hecho, ha estado con nosotros desde mucho antes de que las computadoras existieran en la forma que las conocemos hoy. Dispositivos como el ábaco y el astrolabio son ejemplos tempranos de herramientas que usamos para realizar cálculos complejos.

Pero fue con la llegada de las máquinas mecánicas, como la Máquina Analítica de Charles Babbage, que se sentaron las bases para la programación moderna. ¡Estamos hablando del siglo XIX!

Con el paso del tiempo, nacieron lenguajes que marcaron hitos, como Fortran y COBOL. Estos lenguajes sentaron las bases para las revoluciones tecnológicas que vendrían. Con la evolución de los lenguajes, también surgieron nuevos paradigmas: primero el Procedural, luego el Orientado a Objetos y más recientemente, el Funcional.

Hoy, estamos en una era moderna, dominada por la programación para la web, móviles y la nube. Cada vez que deslizas tu dedo por la pantalla de tu celular o compras algo online, hay líneas y líneas de código trabajando detrás de escena.

La programación hoy

La programación es el motor de nuestra sociedad moderna. Desde aplicaciones para pedir comida hasta sistemas avanzados de inteligencia artificial que ayudan en investigaciones médicas, la programación está en todas partes.

Además de simplificar nuestras vidas cotidianas, la programación tiene un impacto profundo en la sociedad. Ha permitido avances en la automatización, el análisis de datos y el entretenimiento. Y lo que es aún más emocionante, es que apenas estamos rasguñando la superficie. Con los avances en inteligencia artificial, computación cuántica y el Internet de las Cosas (IoT), ¿quién sabe qué maravillas nos esperan en mundo de la programación?

1 - La Computadora

En el mundo actual, donde las tecnologías digitales se han convertido en una extensión de nuestras vidas diarias, resulta esencial comprender los cimientos sobre los que se construyen nuestras herramientas digitales. En esta ocasión, nos sumergiremos en el corazón de las computadoras para entender cómo funcionan y por qué son esenciales en nuestra sociedad moderna.

Si alguna vez te has preguntado qué es lo que hace “tictac” dentro de esa caja metálica que llamamos computadora, estás en el lugar indicado. En esencia, una computadora es una combinación de hardware y software que trabajan juntos para llevar a cabo tareas específicas.

El hardware es toda la parte física de la computadora: el CPU (que es como el cerebro de la máquina), la RAM (donde la computadora guarda la información con la que está trabajando en un momento determinado), dispositivos de almacenamiento (donde se guardan los datos de forma permanente) y periféricos (como el teclado, el mouse o la pantalla)1.

Por otro lado, el software es el conjunto de instrucciones que le dice al hardware qué hacer. Hay varios tipos de software, desde el software del sistema, como el sistema operativo que coordina todas las acciones de la máquina, hasta software de aplicación que nos permite hacer cosas como escribir documentos o jugar videojuegos2.

El papel del sistema operativo es crucial. Es el mediador entre el usuario y el hardware, asegurando que todo funcione armónicamente. Si el hardware fuera una orquesta, el sistema operativo sería el director que asegura que cada instrumento toque en el momento y de la manera correcta.


El sistema binario: el lenguaje secreto de las computadoras

A diferencia de nosotros, que usamos un sistema decimal basado en diez dígitos (del 0 al 9), las computadoras usan el sistema binario, que solo tiene dos dígitos: 0 y 1. ¿Por qué? Bueno, en el nivel más básico, una computadora está hecha de millones de transistores que pueden estar en uno de dos estados: encendido o apagado. Estos estados se representan con esos dígitos: 0 para apagado y 1 para encendido3.

Los términos “bit” y “byte” son fundamentales aquí. Un bit es la unidad más pequeña de datos en una computadora y puede tener un valor de 0 o 1. Un byte, por otro lado, es un conjunto de 8 bits y puede representar 256 valores diferentes (desde \(00000000\) hasta \(11111111\) en binario)4.

Este sistema binario no solo representa números, sino también texto, imágenes y cualquier tipo de dato. Por ejemplo, en el código ASCII (un estándar de codificación de caracteres), la letra “A” se representa como \(01000001\) en binario.

En un artículo posterior, vamos a hablar en detalle acerca del sistema binario y otro sistema muy utilizado en el ambiente de la computación, el hexadecimal.


Memoria y almacenamiento: donde residen nuestros datos

La memoria y el almacenamiento son dos conceptos cruciales en la informática. Si bien a menudo se usan indistintamente, tienen roles muy diferentes.

La memoria, específicamente la RAM, es volátil. Esto significa que la información se pierde cuando apagamos la computadora. La RAM es esencialmente el “espacio de trabajo” de la computadora, donde almacena datos e instrucciones mientras está en uso. Hay varios tipos de RAM, siendo DRAM y SRAM los más comunes5.

Por otro lado, tenemos la ROM (Memoria de Solo Lectura). A diferencia de la RAM, la ROM no es volátil y se utiliza para almacenar firmware, es decir, software que está íntimamente ligado al hardware y que no necesita cambios frecuentes.

En cuanto al almacenamiento, dispositivos como discos duros, SSDs y unidades flash nos permiten guardar información de manera permanente. Estos dispositivos forman parte de lo que se conoce como la jerarquía de memoria, que va desde la memoria caché (rápida pero pequeña) hasta el almacenamiento secundario (más lento pero con gran capacidad)6.



Referencias


  1. Patterson, D. & Hennessy, J. (2014). Arquitectura de Computadoras. Buenos Aires: Ediciones Omega. ↩︎

  2. Silberschatz, A., Galvin, P. B., & Gagne, G. (2009). Fundamentos de Sistemas Operativos. Buenos Aires: Ediciones M. ↩︎

  3. Tanenbaum, A. (2012). Estructura de Computadoras. Buenos Aires: Prentice Hall. ↩︎

  4. Brookshear, J. G. (2011). Ciencia de la Computación: Una visión general. Buenos Aires: Pearson Educación. ↩︎

  5. Jacob, B., Ng, S. W., & Wang, D. T. (2007). Arquitecturas de memoria en sistemas de computadoras. Buenos Aires: Wiley-Interscience. ↩︎

  6. Siewiorek, D. P. & Swarz, R. S. (2017). Principios de diseño de sistemas computacionales. Buenos Aires: Morgan Kaufmann. ↩︎

2 - Sistemas de Numeración

En nuestro día a día, estamos rodeados de números. Desde la hora que marca el reloj cuando suena la alarma por la mañana, hasta el precio del café que compramos en la esquina. Pero, ¿alguna vez te detuviste a pensar en la naturaleza de esos números? En este artículo, nos sumergiremos en el fascinante mundo de los sistemas de numeración y aprenderemos cómo, dependiendo del contexto, un número puede tener múltiples representaciones.

El sistema decimal: la base de nuestra cotidianidad

Desde pequeños, nos enseñan a contar usando diez dígitos: del 0 al 9. Este sistema, conocido como decimal, es la base de casi todas nuestras actividades matemáticas y financieras, desde sumar cuentas hasta calcular intereses en el banco1. Tiene su origen en la cantidad de dedos que tenemos en las manos, lo que lo convierte en el sistema más intuitivo y natural para nosotros. Pero lo que lo hace especial es su naturaleza posicional.

Para comprender este concepto, consideremos el número 237:

  • El 7, situado a la derecha, está en la posición de las unidades. Es decir, \(7 \times 10^0\) (cualquier número elevado a la potencia de 0 es 1). Por lo tanto, su valor es simplemente 7.
  • El 3, en la posición del medio, representa las decenas, es decir, \(3 \times 10^1 = 3 \times 10 = 30\).
  • El 2, el número más a la izquierda, está en la posición de las centenas, traduciéndose a \(2 \times 10^2 = 2 \times 100 = 200\).

Si sumamos estos valores,

$$2 \times 10^2 + 3 \times 10^1 + 7 \times 10^0 = 200 + 30 + 7 = 237$$

El sistema binario: el lenguaje secreto de las computadoras

Si bien el sistema decimal domina nuestra vida cotidiana, las máquinas que usamos todos los días, desde nuestros celulares hasta las computadoras, operan en un mundo completamente diferente: el mundo binario. En este sistema, solo existen dos dígitos: 0 y 1. A primera vista, puede parecer limitante, pero este sistema es la esencia de la electrónica digital. Los dispositivos electrónicos, con sus millones de transistores, operan usando estos dos estados: encendido (1) y apagado (0)2.

A pesar de su aparente simplicidad, el sistema binario puede representar cualquier cantidad o información que el sistema decimal pueda expresar. Por ejemplo, el número decimal 5 se representa como 101 en binario.

El sistema binario, con sus unos y ceros, opera de manera similar al sistema decimal, pero en lugar de potencias de 10, usa potencias de 2.

Tomemos el número binario 1011:

  • El bit más a la derecha representa \(1 \times 2^0 = 1\)
  • El siguiente bit representa \(1 \times 2^1 = 2\)
  • Luego viene \(0 \times 2^2 = 0\)
  • El bit más a la izquierda en este número representa \(1 \times 2^3 = 8\)

Entonces, 1011 en binario se traduce a decimal de la siguiente manera:

$$1011 = 1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 = 8 + 0 + 2 + 1 = 11$$

El sistema hexadecimal: un puente entre humanos y máquinas

Mientras que el sistema binario es perfecto para las máquinas, puede ser un poco engorroso para nosotros, especialmente cuando tratamos con números binarios largos. Aquí es donde entra el sistema hexadecimal, que utiliza dieciséis dígitos distintos: 0-9 y A-F, donde A representa 10, B es 11, y así sucesivamente hasta F que es 153.

El hexadecimal es especialmente útil porque proporciona una forma más compacta de representar números binarios. Cada dígito hexadecimal corresponde a exactamente cuatro dígitos binarios (bits). Por ejemplo pensemos en la representación en binario del número 41279 y como el sistema hexadecimal consigue una representación más compacta:

$$41279 = 1010 0001 0011 1111 = A13F$$

Pero el sistema hexadecimal es más que una representación compacta de números binarios, es un sistema de numeración posicional como el decimal o binario con base 16 en lugar de 10 o 2. Veamos como conseguir la representación decimal del número del ejemplo anterior (A13F).

  • El dígito más a la derecha representa \(F \times 16^0 = 15 \times 16^0 = 15\)
  • El siguiente representa \(3 \times 16^1 = 48\)
  • Luego viene \(1 \times 16^2 = 256\)
  • El dígito más a la izquierda en este número representa \(A \times 16^3 = 10 \times 16^3 = 40960\)

Entonces, A13F en hexadecimal se traduce a decimal de la siguiente manera:

$$A13F = A \times 16^3 + 1 \times 16^2 + 3 \times 16^1 + F \times 16^0 = 10 \times 4096 + 1 \times 256 + 3 \times 16 + 15 \times 1 = 40960 + 256 + 48 + 15 = 41279$$

Conclusión

Los sistemas de numeración son como lentes a través de los cuales vemos y entendemos el mundo de las matemáticas y la computación. Aunque en nuestra vida diaria el sistema decimal sea el rey, es esencial apreciar y comprender los sistemas binario y hexadecimal, especialmente en esta era digital.

Así que, la próxima vez que estés frente a tu computadora o usando una app en tu celular, recordá que detrás de esa interfaz amigable, hay un mundo binario en pleno funcionamiento, y que el sistema hexadecimal actúa como un traductor entre ese mundo y nosotros.



Referencias


  1. Ifrah, G. (2000). Historia universal de las cifras. Buenos Aires: Editorial Taurus. ↩︎

  2. Tanenbaum, A. (2012). Estructura de Computadoras. Buenos Aires: Prentice Hall. ↩︎

  3. Knuth, D. (2007). El Arte de Programar Computadoras: Sistemas de numeración. Buenos Aires: Ediciones Omega. ↩︎

3 - Lógica Booleana

En la vida, a menudo buscamos certezas. ¿Es cierto o falso que va a llover mañana? ¿Es correcto o incorrecto actuar de cierta manera? Esta dicotomía, esta división entre dos estados opuestos, se encuentra en el núcleo mismo de una rama esencial de las matemáticas y la informática: la lógica booleana.

La lógica booleana, nombrada en honor a George Boole, un matemático inglés del siglo XIX, es un sistema matemático que se ocupa de operaciones que tienen solo dos resultados posibles: verdadero o falso, representados generalmente como 1 y 0, respectivamente1. En su obra “An Investigation of the Laws of Thought”, Boole estableció las bases de esta lógica, presentando un sistema algebraico que podría utilizarse para representar estructuras lógicas.

Operaciones Booleanas

Dentro de la lógica booleana, existen operaciones fundamentales que permiten manipular y combinar estas expresiones binarias:

  1. AND (Y): Esta operación devuelve verdadero (1) solo si ambas entradas son verdaderas. Por ejemplo, si tenemos dos interruptores, ambos deben estar en la posición encendido para que una luz se encienda.

  2. OR (O): Devuelve verdadero si al menos una de las entradas es verdadera. Siguiendo con el ejemplo de los interruptores, con que uno de ellos esté encendido, la luz se iluminará.

  3. NOT (NO): Es una operación unaria, lo que significa que solo tiene una entrada. Simplemente invierte el valor de entrada. Si le das un 1, devuelve un 0 y viceversa.

  4. NAND (NO Y): Es la negación de AND. Solo devuelve falso si ambas entradas son verdaderas.

  5. NOR (NO O): Es la negación de OR. Devuelve verdadero solo si ambas entradas son falsas.

  6. XOR (O exclusivo): Devuelve verdadero si las entradas son diferentes. Si ambas son iguales, devuelve falso.

  7. XNOR (NO O exclusivo): Es la negación de XOR. Devuelve verdadero si ambas entradas son iguales.

La importancia de esta lógica en computación y programación

La computación moderna, en su esencia, es la manipulación de bits, esos unos y ceros que mencionamos. Cada operación que realiza una computadora, desde simples cálculos hasta la renderización de gráficos complejos, implica operaciones booleanas en algún nivel2.

En programación, la lógica booleana se utiliza en estructuras de control, como condiciones (if, else) y bucles, permitiendo a los programas tomar decisiones basadas en ciertas condiciones.

Tablas de verdad: el mapa de la lógica Booleana

Una tabla de verdad es una representación gráfica de una operación booleana. Enumera todas las combinaciones posibles de entradas y muestra el resultado de la operación para cada combinación3.

Por ejemplo,

ABA AND BA OR BA XOR BA NOR BA NAND BNOT AA NXOR B
111100001
100110100
010110110
000001111

Conclusiones

La lógica booleana es mucho más que un conjunto de reglas matemáticas abstractas. Es el lenguaje fundamental de las máquinas, el código que subyace a la era digital en la que vivimos. Al comprender sus principios, no solo nos volvemos más adeptos a trabajar con tecnología, sino que también adquirimos una apreciación más profunda de las estructuras que sustentan nuestro mundo digital.



Referencias


  1. Boole, G. (1854). An Investigation of the Laws of Thought. Londres: Walton and Maberly. ↩︎

  2. Tanenbaum, A. (2012). Estructura de Computadoras. Buenos Aires: Prentice Hall. ↩︎

  3. Minsky, M. (1967). Computation: Finite and Infinite Machines. Buenos Aires: Prentice-Hall. ↩︎

4 - Configura tu Entorno de Desarrollo

Adentrarse en el mundo de la programación puede parecer una tarea titánica, especialmente cuando te encuentras frente a la decisión inicial: ¿por dónde empezar? Este artículo te guiará a través de los pasos esenciales para configurar tu entorno de programación, garantizando una base sólida para tu viaje codificador.

Elegir un lenguaje de programación

La elección del lenguaje de programación es el primer y quizás el más crucial paso en el proceso de aprendizaje. Hay varios factores a considerar al seleccionar un lenguaje, incluyendo:

  1. Propósito: ¿Para qué quieres programar? Si es para desarrollo web, JavaScript o PHP podrían ser buenas opciones. Si estás interesado en la ciencia de datos, R o Python podrían ser más adecuados.
  2. Comunidad: Un lenguaje con una comunidad activa puede ser esencial para los principiantes. Una comunidad vibrante generalmente significa más recursos, tutoriales y soluciones disponibles en línea.
  3. Curva de aprendizaje: Algunos lenguajes son más fáciles de aprender que otros. Es fundamental elegir uno que coincida con tu nivel de experiencia y paciencia.
  4. Oportunidades de trabajo: Si estás buscando una carrera en programación, investigar la demanda del mercado para diferentes lenguajes puede ser útil.

Aunque hay muchos lenguajes valiosos y poderosos, para este curso, hemos elegido Python. Este lenguaje es conocido por su simplicidad y legibilidad, lo que lo hace ideal para aquellos que están empezando. Además, Python cuenta con una comunidad activa y una amplia gama de aplicaciones, desde desarrollo web hasta inteligencia artificial1.

Instalación de Python

Para usuarios de Windows:

  1. Descargar el instalador:
  2. Ejecuta el instalador:
    • Una vez completada la descarga, localiza y ejecuta el archivo instalador .exe.
    • Asegúrate de marcar la casilla que dice “Agregar Python al PATH” durante la instalación. Este paso es crucial para hacer que Python sea accesible desde el Símbolo del Sistema.
    • Sigue las indicaciones de instalación.
  3. Verifica la instalación:
    • Abre el Símbolo del Sistema y escribe:
      python --version
      
    • Esto debería mostrar la versión de Python que acabas de instalar.

Para usuarios de Mac:

  1. Descargar el instalador:
  2. Ejecuta el instalador:
    • Una vez descargado, localiza y ejecuta el archivo .pkg.
    • Sigue las indicaciones de instalación.
  3. Verifica la instalación:
    • Abre la Terminal y escribe:
      python3 --version
      
    • Esto debería mostrar la versión de Python que acabas de instalar.

Para usuarios de Linux (Ubuntu/Debian):

  1. Actualiza los paquetes:
    sudo apt update
    
  2. Instala Python:
    sudo apt install python3
    
  3. Verifica la instalación:
    • Después de la instalación, puedes comprobar la versión de Python instalada escribiendo:
      python3 --version
      

Entornos de Desarrollo Integrado (IDEs)

Un IDE es una herramienta que facilita el desarrollo de aplicaciones al combinar comúnmente utilizadas en un solo software: editor de código, compilador, depurador, entre otros. Elegir el IDE adecuado puede hacer que el proceso de programación sea más fluido y eficiente.

Al evaluar IDEs, considera:

  1. Compatibilidad con el lenguaje: No todos los IDEs son compatibles con todos los lenguajes de programación.
  2. Características: Algunos IDEs ofrecen funcionalidades como autocompletado, resaltado de sintaxis y herramientas de depuración.
  3. Extensiones y plugins: La posibilidad de personalizar y extender tu IDE a través de plugins puede ser muy útil.
  4. Precio: Hay IDEs gratuitos y otros de pago. Evalúa si las características adicionales de un IDE de pago justifican el costo.

Para este curso, hemos seleccionado Visual Studio Code (VS Code). Es un IDE popular que es gratuito y de código abierto. Es conocido por su interfaz sencilla, amplia gama de plugins y capacidad para manejar múltiples lenguajes de programación2. Su comunidad activa garantiza actualizaciones regulares y una amplia gama de recursos de aprendizaje.

Instalación de Visual Studio Code

Para usuarios de Windows:

  1. Descargar el instalador:
  2. Ejecuta el instalador:
    • Una vez completada la descarga, localiza y ejecuta el archivo instalador .exe.
    • Sigue las indicaciones de instalación, incluyendo aceptar el acuerdo de licencia y elegir la ubicación de instalación.
  3. Inicia VS Code:
    • Tras la instalación, puedes encontrar VS Code en tu menú de inicio.
    • Lánzalo, ¡y estarás listo para comenzar a programar!

Para usuarios de Mac:

  1. Descargar el instalador:
  2. Instala VS Code:
    • Una vez descargado, abre el archivo .zip.
    • Arrastra la aplicación Visual Studio Code .app a la carpeta Aplicaciones, para que esté disponible en el Launchpad.
  3. Inicia VS Code:
    • Usa la búsqueda de Spotlight o navega hasta tu carpeta de Aplicaciones para iniciar VS Code.

Para usuarios de Linux (Ubuntu/Debian):

  1. Actualiza los paquetes e instala las dependencias:
    sudo apt update
    sudo apt install software-properties-common apt-transport-https wget
    
  2. **Descarga e instala la claves necesarias:
    wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
    
  3. Añade el repositorio de VS Code:
    sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
    
  4. Instala Visual Studio Code:
    sudo apt update
    sudo apt install code
    
  5. Inicia VS Code:
    • Puedes iniciar VS Code desde la terminal escribiendo code o encontrarlo en tu lista de aplicaciones instaladas.

Escribe y ejecuta tu primer programa

Una vez que hayas configurado tu entorno de programación, es hora de sumergirse en la codificación.

¡Hola mundo!

Este es posiblemente el programa más icónico para principiantes. Es simple, pero te introduce al proceso de escribir y ejecutar código.

print("¡Hola mundo!")

Ejecución del programa Hola Mundo Ejecución del programa Hola Mundo

Cálculo de área y perímetro de un triángulo

Este programa es un poco más complejo. No solo imprime un mensaje, sino que también realiza cálculos matemáticos.

# Entrada del usuario
lado1 = float(input("Introduce la longitud del primer lado: "))
lado2 = float(input("Introduce la longitud del segundo lado: "))
lado3 = float(input("Introduce la longitud del tercer lado: "))

# Cálculo del perímetro
perimetro = lado1 + lado2 + lado3

# Cálculo del área usando la fórmula de Herón
s = perimetro / 2
area = (s*(s-lado1)*(s-lado2)*(s-lado3)) ** 0.5

print(f"El perímetro del triángulo es: {perimetro}")
print(f"El área del triángulo es: {area:.2f}")

Ejecución del programa Triangulo Ejecución del programa Triangulo


Conclusión

Configurar un entorno de programación puede parecer desalentador al principio, pero con las herramientas y recursos adecuados, se convierte en una tarea manejable y gratificante. Esperamos que este artículo te haya proporcionado una base sólida para comenzar tu viaje en programación. ¡Feliz codificación!



Referencias


  1. Lutz, M. (2013). Learning Python. O’Reilly Media. ↩︎

  2. Microsoft. (2020). Visual Studio Code Documentation. Microsoft Docs. ↩︎