Tutorial Fundamentos de la programación.

OP

RuDaHeee

Life before death~
Supporter
Mensajes
936
Reacciones
625
Puntos
582
Ubicación
Sevilla, España
¡Buenas!

Este guía tratará esos puntos teóricos que son necesarios conocer antes de empezar a aprender a programar, y entender mejor que estamos haciendo al programar.

¿En que lenguaje vamos a trabajar en esta guía?
En ninguno. Vamos a trabajar con diagramas de flujo y pseudo-código inventado por mi. Ya que lo importante es el concepto de la explicación teórica y no el lenguaje en concreto. Estos conceptos son aplicables para cualquier lenguaje de programación.

¿Qué conocimientos necesito para esta guía?
Ninguno, el publico objetivo es aquel que no tiene ningún conocimiento sobre programación.. Lo único que debes tener, es ganas de comerte la chapa tremenda que voy a soltar.

Notas:
  • El lenguaje que voy a usar es medianamente técnico, por tanto, el glosario se irá actualizando junto al tutorial. Si hay un termino que creéis que debe estar, podéis comentarlo y lo agrego.
  • Las imágenes las pondré dentro de spoilers para hacer el texto mas legible.
  • Al final de cada post, si es conveniente, habrá algunos ejercicios prácticos o algunas preguntas para responder. Con esto podéis evaluar vuestra comprensión de la guía. Los podéis postear en este mismo tema y yo os los corregiré.
  • Al final de cada post, dejare los documentos o videos en los que me he basado.

Índice del Temario:
  1. Introducción
    1. Hardware y software
    2. Algoritmos
    3. Tipos de lenguajes de programación
    4. Ejemplos de lenguajes de programación
  2. Historia de la programación
  3. Variables y Constantes
    1. Operadores lógicos y de comparación.
  4. Condicionales
  5. Bucles
  6. Comentarios
  7. Paradigmas de programación
    1. Programación funcional
    2. Programación orientada a objetos
    3. Otros paradigmas
  8. Frameworks y APIs
  9. ¿Qué lenguaje de programación elegir?
  10. Glosario
 
Última edición:
OP

RuDaHeee

Life before death~
Supporter
Mensajes
936
Reacciones
625
Puntos
582
Ubicación
Sevilla, España

1. Introducción


Para empezar este curso, lo primero es responder a la primera pregunta que os surgirán a la mayoría: ¿Qué son fundamentos de la programación?

Son las bases de conocimientos comunes que necesitamos para aprender a programar. Estos fundamentos nos deben dar la capacidad de aplicar un pensamiento lógico a través del cual crear algoritmos para la resolución de problemas a través de la programación.

Así que lo primero que debemos aprender es la base de como funciona un PC o un Móvil.



1.1 Hardware y Software


Un ordenador o un móvil no son mas que dispositivos electrónicos que son capaces de ejecutar una serie de instrucciones para procesar información. Y estos dispositivos electrónicos tienen dos partes fundamentales: Hardware y software.
  • Hardware
El hardware es la parte física del dispositivo. La parte que incluye la CPU, la memoria RAM, la placa base o los periféricos como pueden ser el teclado o una pantalla táctil.
  • Software
El software es el conjunto de programas que le facilitan al hardware instrucciones y datos. El software se puede subdividir en dos tipos: Software de sistemas, encargado de ser el administrado principal del dispositivo y facilita la gestión de recursos, administración de los datos y la ejecución de otros programas. También tenemos el software de aplicación, que son programas con una tarea especifica, como puede ser un juego o una calculadora.

El software es una pieza fundamental para el funcionamiento del hardware, ya que proporciona las instrucciones necesarias para que el ordenador realice tareas específicas. Además, el software permite a los usuarios comunicarse con la máquina. Sin el software, el hardware sería solo un conjunto de componentes inactivos, incapaces de ejecutar ninguna función útil.



1.2 Algoritmos


Un algoritmo es un conjunto detallado y bien definido de instrucciones diseñadas para realizar una tarea específica. En términos simples, es una guía paso a paso para resolver un problema o lograr un objetivo específico. Un ejemplo sencillo de un algoritmo podría ser una receta de cocina:
  1. Reúne los ingredientes necesarios (harina, huevos, azúcar, leche).
  2. Precalienta el horno a 180 grados.
  3. Mezcla los ingredientes en un tazón.
  4. Vierte la mezcla en un molde.
  5. Hornea durante 30 minutos.

Pero este algoritmo, llevado a la informática tiene un problema fundamental, y es que es realmente poco especifico. Cuando programamos debemos pensar de la forma mas detallada posible. Un ejemplo de esto lo podemos ver en este video humorístico, pero realmente ejemplificador:
Está en ingles pero los subs en Español funcionan realmente bien.

Como se puede ver en el video, si no especificas incluso que parte del cuchillo debes introducir en el tarro, podrás introducirlo al revés y esto es causa de que cuando nos comunicamos con otra persona, hay una parte que no es directamente hablada, además de que usamos nuestros conocimientos previos para realizar esa tarea. Un ejemplo de esto es cuando un anciano tiene que jugar con un mando de Xbox, a veces es incapaz de cogerlo correctamente debido a que no tiene una experiencia previa jugando con un mando.

Teniendo en cuenta esto, debemos pensar que cuando hagamos un algoritmo para una maquina, este debe contener una serie de pasos absolutamente explícitos, concretos y no deben inducir a la duda o el error. Si puedes forzar el malinterpretar un paso del algoritmo, no funcionará.

Crear este tipo de algoritmos, aunque sea en Español, es algo muy parecido a programar, y por eso vamos a usar pseudo-código, ya que nos da la opción de crear algoritmos para resolver problemas de forma realmente legible, pero con las reglas de un lenguaje de programación real, para irnos adaptando poco a poco.

Una gran ventaja de usar pseudo-código es que este pseudo-código nos va a valer para cualquier lenguaje de programación. Si tu creas un algoritmo en pseudo-código para resolver una multiplicación, después solo tendrás que volver a escribir el código con las particularidades de un lenguaje de programación en concreto, pero la mayor parte del trabajo (crear la lógica funcional) ya la tienes creada. Y por tanto, el trabajo de portar el mismo software entre distintos lenguajes será mucho mas sencillo y rápido.



1.3 Tipos de lenguajes de programación​


Hoy en día existen una infinidad de lenguajes de programación, pero si lo único que debemos hacer es darle instrucciones al ordenador ¿Para que tantos?
Pues esto es necesario debido a que cada lenguaje de programación ha evolucionado para adaptarse a ciertas necesidades que han ido surgiendo, por tanto, podemos encontrar distintos tipos de lenguajes de programación que comparten una serie de características comunes.

Los tipos que podemos diferenciar son los siguientes:
  • Tipos según su nivel de abstracción.
Los lenguajes de bajo nivel que interactúan directamente con el hardware, otorgando al desarrollador un control mucho mayor de este, pero haciendo la tarea de programar mucho mas complicada. Por otra parte tenemos los lenguajes de alto nivel que ofrecen mayor simplicidad y productividad, aunque no tenemos un acceso directo al hardware, y por tanto un menor control del equipo.

  • Tipos según su paradigma de programación.
Los paradigmas ofrecen enfoques únicos para la resolución de problemas, por tanto elegir un paradigma correcto nos aportará una mejor estructura y organización del código, así como un diseño mas acertado y simple. También será mucho mas simple resolver el problema al ofrecernos herramientas especializadas para este.
Algunos de los paradigmas mas comunes son: Programación Orientada a Objetos (El código se organiza alrededor de "objetos" que encapsulan datos e instrucciones) y la Programación Funcional (centrada en el uso de funciones puras, que contienen instrucciones, donde los datos son inmutables).
También existen lenguajes que soportan múltiples paradigmas.

  • Tipos según su dominio de aplicación.
Hoy en día, hay lenguajes que tienen un dominio especifico para los que son diseñados específicamente, estos pueden estar enfocados para ciencia de datos, desarrollo web, sistemas embebidos, etc. También tenemos lenguajes que no tienen un dominio de aplicación especifico.

  • Tipos según su método de ejecución.
Esta clasificación se refiere al enfoque que toma un lenguaje de programación a la hora de ejecutar y procesar el código. Tenemos 3 tipos fundamentales:
Los lenguajes compilados (el código fuente se traduce completamente a código de máquina u otro código ejecutable antes de la ejecución, proporcionando mayor eficiencia), los lenguajes interpretados (El código fuente se traduce y ejecuta línea por línea por un intérprete durante el tiempo de ejecución, proporcionando mayor portabilidad) o los lenguajes mixtos (Combina elementos de compilación e interpretación, que proveen mayor rendimiento sin renunciar a la portabilidad)

Con esto podemos ver que existen distintos tipos que nos pueden ayudar a encontrar el lenguaje de programación especifico que mas se adecue a nuestras necesidades.



1.4 Ejemplos de lenguajes de programación​


Tomando en cuenta las descripciones anteriores, vamos a dar unas pequeñas descripciones de los lenguajes mas comunes según el Índice Tiobe para tener una visión mas completa cuando escuchemos hablar de ciertos lenguajes.
  • C/C++: Un lenguaje multiparadigma, de dominio general, de bajo nivel y compilado.
  • JAVA: Un lenguaje orientado a objetos , de dominio general, alto nivel y su método de ejecución es mixto.
  • C#: Un lenguaje orientado a objetos , de dominio general, alto nivel y compilado.
  • Python: Un lenguaje multiparadigma, de dominio general, alto nivel e interpretado.
  • JavaScript: Un lenguaje multiparadigma, enfocado en el desarrollo web, alto nivel e interpretado.
  • PHP: Un lenguaje multiparadigma, enfocado en el desarrollo web, alto nivel e interpretado.
  • SQL: Un lenguaje procedural, enfocado en la gestión de bases de datos, e interpretado.
  • R: Un lenguaje funcional, enfocado a la ciencia de datos, de alto nivel e interpretado.


2. Historia de la programación​


Esta historia la empezamos en la primera mitad del siglo XIX, donde vamos a destacar a la primera programadora de la historia: Ada Lovelace.

Lovelace se considera la primera programadora al diseñar el primer algoritmo diseñado para ser procesado por la maquina analítica diseñada por Charles Babbage. Ella fue la primera persona en promover la distinción entre los datos y el procesamiento, algo que fue fundamental y revolucionario en su época. Su trabajo sentó las bases de la programación de computadoras en gran parte del siglo XX y hasta la actualidad. Estos avances hacen que muchas personas la conozcan como la madre de las ciencias de la computación.

De aquí vamos a dar un salto gigantesco hasta los años 40 del siglo pasado, durante la Segunda Guerra Mundial, donde se desarrollan las primeras computadoras electrónicas donde se empiezan a programar a través de interruptores y conexiones de cables, que hacía el proceso mucho mas ágil (para los estándares de la época). En el caso de la ENIAC, que fue la computadora mas importante de la época, era operada por un grupo de seis mujeres que se consideran las inventoras del primer lenguaje de programación mientras trabajaban con la ENIAC.

Después llegamos a los años 50, donde se desarrollan los primeros lenguajes de programación de alto nivel como FORTRAN y LISP, que permitieron desprenderse un poco de la dependencia del hardware. Estos lenguajes también eran mucho mas legible, lo que facilitaba y agilizaba los desarrollos. Aquí aun se programaba en tarjetas perforadas, junto al alto coste de los ordenares lo que impedía que llegara al publico común.

En la década de los 60 aparecen lenguajes como COBOL y BASIC, que impulsaron la informática empresaria y la informática personal, pudiendo programar en ordenadores personales de forma sencilla por primera vez.

En las décadas de los 70 y los 80 se desarrolla C, uno de los lenguajes mas importantes incluso a día de hoy, permitiendo la creación de sistemas operativos como UNIX, también se empezaron a ver nuevos paradigmas de programación como la Programación Orientada a Objetos con el lenguaje C++. A mediados de los 80 empiezan a aparecer las primeras interfaces graficas de usuario (GUI), impulsando la creación de sistemas operativos Linux, Mac y Windows.

En los años 90 y 2000, con el auge de internet, surgen lenguajes enfocados específicamente al desarrollo web, que siguen siendo fundamentales a día de hoy como HTML, JavaScript y PHP. También empiezan a aparecer los primeros lenguajes considerados modernos como Python o Java. Posteriormente también se empiezan a crear los primeros frameworks especializados de uso común como Ruby on Rails y Node.js

Durante la década de 2010 empieza el auge de la inteligencia artificial y la nube, haciendo que los lenguajes como Python o R ganen mucha popularidad.

Actualmente la programación continua evolucionando enfocada en la automatización, la inteligencia artificial, la computación cuántica y la ciberseguridad entre muchos otros campos.
 
Última edición:
OP

RuDaHeee

Life before death~
Supporter
Mensajes
936
Reacciones
625
Puntos
582
Ubicación
Sevilla, España

3. Variables y Constantes

Con las explicaciones dadas podemos empezar a ver conceptos de programación, y vamos a empezar con lo mas básico: Almacenar información.


Para guardar información lo que vamos a hacer es reservar un espacio de memoria en
78Ezbrk.png

la memoria RAM y después asignamos un valor de un tipo concreto a ese espacio de la RAM
que habíamos reservado previamente.

Cuando accedemos a los datos lo que hacemos es acudir a esa dirección (ese espacio) de la
memoria y leemos lo que habíamos guardado en ese espacio.

En el pseudo-lenguaje que vamos a trabajar los datos serán fuertemente tipados. Esto quiere
decir, que cuando asignemos en memoria un tipo de dato (por ejemplo, un numero entero) este
tipo de dato no podrá cambiar jamás, aunque el valor si podrá cambiar cualquier cantidad de veces.


En nuestro pseudo-lenguaje vamos a usar Definir NOMBRE como TIPO; para declarar una variable y haga todo el proceso explicado arriba de forma automática. NOMBRE se refiere al nombre que asignamos a la variable para poder acceder a ella sin tener que escribir direcciones de memoria y el TIPO se refiere a que cosa vamos a guardar (un numero entero, un texto, etc...) en la variable.

Para definir un valor vamos a usar el símbolo = de la siguiente forma: NOMBRE = VALOR. Vamos a ver un pequeño ejemplo en código y en un diagrama de flujo, además de una guía de buenas practicas de programación.

    CódigoDiagrama de FlujoGuía de buenas practicas


    • El código no es JavaScript. Pero nos permite colorear el código y facilita la lectura.
      JavaScript:
      Algoritmo VaribalesYConstantes
          // Definimos un entero
          Definir num1 Como Entero
      
          // También podemos definir dos variables en la misma instrucción.
          // En este caso el alto y ancho de un rectángulo.
          Definir alto, ancho Como Entero
      
          // En este caso necesitamos usar decimales, así que usamos el tipo Real.
          Definir precio Como Real
          Definir nombre, apellidos Como Cadena
          Definir esDeDia Como Lógico
      
          // Asignamos valores.
          num1 = 123
          alto = 10
          ancho = 15
          precio = 15.95
          nombre = 'John'
          apellidos = 'Doe'
          esDeDia = Falso
       
          // Ahora reasignamos otros valores.
          num1 = 987654321
          esDeDia = Verdadero
      FinAlgoritmo

    • xGA5soK.png


    • Buenas practicas

Podemos ver algunas variables en funcionamiento en el código de arriba y habéis visto todos los tipos con los que vamos trabajar. Esto no es muy complicado, pero aun así voy a dar una pequeña explicación de los tipos y sus características para los que necesitéis esa aclaración extra.
  • Entero
Un tipo entero representa un numero que no lleva decimales, que puede ser positivo y negativo. El valor por defecto será 0.
  • Real
Un tipo real representa un numero con decimales, que puede ser positivo o negativo. Este tipo de dato consume mas memoria, por tanto es aconsejable usarlo cuando vayamos a trabajar con números que vayan a usar los decimales y no para cualquier numero. El valor por defecto será 0.00.
  • Texto
Un tipo Cadena o Texto nos permite guardar texto, a la hora de iniciar la variable el texto debe ir entre comillas dobles o simples. El valor por defecto será una cadena de texto vacía: "".
  • Lógico
Un tipo lógico solo puede tomar dos valores, Verdadero o Falso. El valor por defecto será Falso.

Ahora nos queda un punto por tratar: Las constantes.

Si os fijáis, todo el rato hice referencias a las variables, pero nunca a las constantes. Esto se debe a que todo el conocimiento de una variable es aplicable a una constante. En nuestro pseudo lenguaje de programación, una constante solo se diferencia de una variable en que se define en mayúsculas, y que su característica principal es ser inmutable (que su valor no puede cambiar).

Por tanto para definir el numero pi como constante escribiríamos lo siguiente: Definir NUMERO_PI Como Real; y lo inicializamos NUMERO_PI = 3.1415; y jamás podrá tomar otro valor distinto del ya asignado.



3.1 Operadores lógicos y de comparación.​


Escribiendo
 
Última edición:
OP

RuDaHeee

Life before death~
Supporter
Mensajes
936
Reacciones
625
Puntos
582
Ubicación
Sevilla, España
OP

RuDaHeee

Life before death~
Supporter
Mensajes
936
Reacciones
625
Puntos
582
Ubicación
Sevilla, España
OP

RuDaHeee

Life before death~
Supporter
Mensajes
936
Reacciones
625
Puntos
582
Ubicación
Sevilla, España
OP

RuDaHeee

Life before death~
Supporter
Mensajes
936
Reacciones
625
Puntos
582
Ubicación
Sevilla, España
OP

RuDaHeee

Life before death~
Supporter
Mensajes
936
Reacciones
625
Puntos
582
Ubicación
Sevilla, España

10. Glosario


 
Última edición:
Arriba Pie