¿Qué es un lenguaje de programación? 

Un lenguaje de programación es un sistema de escritura que los programadores usan para indicar instrucciones de tal manera que una computadora pueda entenderlas y ejecutarlas. 

Un lenguaje de programación no solo es escribir las instrucciones y ya, para que una computadora pueda entender el lenguaje, este necesita tener ciertas características que lo ayudan desde la escritura hasta la ejecución en la computadora. 

Características de un lenguaje de programación 

Sintaxis

Es un conjunto de reglas que definen la estructura de la escritura, palabras reservadas, el uso de punto y coma ( ; ), indentación, ortografía, etc. Cada lenguaje tiene sus propias normas que seguir para su correcto funcionamiento. 

Semántica

Se refiere al comportamiento de la escritura del código, aunque la sintaxis sea correcta, la estructura en el proceso de ejecución del código tiene que ser claro. 

Tipado

El manejo de los datos en la ejecución del programa, es la forma en que se le indica a una variable cuál es el tipo de dato que va a manejar. 

Cuando un lenguaje es fuertemente tipado no permite conversiones entre diferentes tipos, un tipado débil si permite este tipo de conversiones. 

Un lenguaje con tipado estático verifica el tipo de dato en la compilación mientras que un tipado dinámico lo hace en tiempo de ejecución. 

Paradigma de programación

Se puede clasificar en diferentes paradigmas como el Imperativo, el Orientado a Objetos, Funcional, Estructurado, etc. 

Portabilidad

La posibilidad de que el programa pueda ejecutarse en diferentes plataformas con pocas o ninguna modificacion como windows, android, web, ios, etc. 

Eficiencia

Es la velocidad conla que puede ejecutarse el codigo del lenguaje, por ejemplo los lenguajes como ensamblador de bajo nivel son mas eficientes respecto a los recursos, pero los lenguajes de alto nivel sacrifican algo de eficiencia a cambio de la facilidad y desarrollo mas rapidos. 

Abstracción

Permite a los programadores trabajar con conceptos de alto nivel como variables, objetos,funciones, etc.  

Librerias y Frameworks

Los lenguajes cuentan con librerias y frameworks con tareas comunes para facilitar su uso y no tener que escribirlas desde cero 

Herramientas de desarrollo

Los lenguajes de programación suelen estar acompañados de herramientas y entornos de desarrollo integrados (IDEs) que facilitan tareas como la compilacion, la depuracion, uso de control de versiones y el desarrollo en si, generalmente son los lenguajes compilados que generan un archivo de instalcion los que son acompañados por su propio IDE, otros lenguajes que son interpretados pueden escribirse practicamente en cualquier editor de texto. 

Compilacion

En realidad existen los lenguajes compilados , lenguajes interpretados y lenguajes semi-compilados 

  • Lenguajes compilados: el codigo se traduce completamente al lenguaje máquina antes de ejecutarse. 
  • Lenguajes interpretados:  el codigo se interpreta linea por linea mediante un interprete
  • Lenguaje semi-compilado: combinan ambas caracteristicas 

Comunidad y Soporte:

otra cosa a tener en cuenta cuando se elige un lenguaje de programación es la disponibilidad de recursos, documentacion y soporte de la comunidad que hay disponible, existen lenguajes con grandes cantidades de recursos en donde buscar, pero tambien hay otros que tienen muy poca documentacion haciendo dificil la curva de aprendizaje. 

    Loading

    ¿Qué es la programación?

    La programación es el proceso de crear y desarrollar todo tipo de software por medio de la escritura de un código de programación que es un conjunto de instrucciones que le dicen a una computadora cómo realizar una tarea, el código se tiene que escribir, probar, depurar y mantener, el código se puede escribir en uno de los variados lenguajes de programación.

    Se puede crear software para diferentes fines y plataformas que van desde aplicaciones de escritorio, aplicaciones web, aplicaciones móviles, videojuegos, sistemas operativos, etc.

    El proceso de la creación de un programa tiene varias fases entre ellas

    Análisis del programa

    • Análisis del programa
    • Diseño
    • Codificación
    • Depuración
    • Mantenimiento

    La programación tiene varios componentes clave de los que hay que tener algún conocimiento.

    Lenguaje de programación: Son herramientas que permiten expresar instrucciones en un formato comprensible para los sistemas.

    Algoritmos: Conjunto de instrucciones lógicas que siguen la resolución de una tarea especifica.

    Estructuras de datos: Formas de organizar y almacenar los datos en memoria de manera eficiente (arreglos, listas, colas, etc.)

    Paradigmas de programación: Enfoques o estilos de programación para estructurar el código

    Ciclo de vida del Software: Todas las fases por las que pasa el software desde su concepción

      Loading

      Arreglos

      Los arreglos en programación o array en ingles son estructuras de datos que permiten almacenar y manipular de manera ordenada un conjunto de datos del mismo tipo, enteros, texto, booleanos, incluso otros arreglos, etc. 

      Características de un arreglo:

      1. Tamaño: los arreglos tienen un tamaño fijo que se define al momento de declarar la variable del arreglo por la manera en que se guarda en la memoria como veremos en la siguiente característica, en algunos lenguajes de programación como Python o JavaScript el número de posiciones si se puede modificar durante la ejecución del programa.
      2. Almacenamiento: los datos del arreglo se almacenan en memoria de manera consecutiva lo que permite que el acceso a los elementos sea rápido y eficiente, ya que las posiciones se pueden calcular fácilmente a partid del índice.
      3. Orden: los elementos del arreglo tienen un orden que se mantiene desde que se declaran los valores a menos que se ejecuten algoritmos de ordenamiento como burbuja, quicksort, mergesort, entre otros.
      4. Índices: los índices del arreglo se determinan en orden con el número de posición en que fueron creados los espacios del mismo y siempre se empieza a contar desde el número cero hasta el final, es decir desde la posición 0 hasta la posición n-1 y se puede acceder directamente a cualquier posición
      5. Homogeneidad: esta característica hace referencia a que todos los datos que se van a guardar en el arreglo sean del mismo tipo y esto se indica cuando se declara el mismo arreglo.

      Operaciones con arreglos

      Declaracion e inicializacion 

      //
      // Declaración e inicialización de un arreglo de enteros 
              int[] numeros = new int[5]; // Arreglo de 5 elementos 
       
             
      
      // Inicialización directa de un arreglo con valores 
              string[] nombres = { "Juan", "Ana", "Luis", "Maria" }; 
      //

      Acceso 

      //
      // Acceso a los elementos del arreglo 
              Console.WriteLine("Elemento en la posición 2: " + numeros[2]); // Imprime 30 
      //
      

      Recorrido 

      //
      // Recorrido del arreglo usando un bucle for 
              Console.WriteLine("Recorriendo el arreglo:"); 
              for (int i = 0; i < numeros.Length; i++) 
              { 
                  Console.WriteLine("Elemento en la posición " + i + ": " + numeros[i]); 
              } 
      
      // Recorrido del arreglo usando un bucle foreach 
              Console.WriteLine("Recorriendo el arreglo de nombres:"); 
              foreach (string nombre in nombres) 
              { 
                  Console.WriteLine(nombre); 
              } 
      //

      Búsqueda  

      //
              int[] numeros = { 10, 20, 30, 40, 50 }; 
              int valorBuscado = 30; 
       
              // Buscar el valor usando Array.IndexOf 
              int indice = Array.IndexOf(numeros, valorBuscado); 
       
              if (indice != -1) 
              { 
                  Console.WriteLine($"Valor {valorBuscado} encontrado en la posición {indice}."); 
              } 
              else 
              { 
                  Console.WriteLine($"Valor {valorBuscado} no encontrado en el arreglo."); 
              } 
      //

      Modificación 

      //
        numeros[0] = 10; 
        numeros[1] = 20; 
        numeros[2] = 30; 
        numeros[3] = 40; 
        numeros[4] = 50; 
      //

      Loading

      Abstracción

      La abstracción en programación es una manera de reducir, simplificar y encapsular la complejidad de un sistema o proceso que permite a los desarrolladores trabajar con un nivel de detalle basada en el principio de “ocultamiento de informacion” o “principio de ocultacion”, uno de los pilares de la programación orientada a objetos.

      Se puede aplicar a diferentes niveles de programación, desde el diseño de clases y objetos hasta el uso de lenguajes de alto nivel que permiten expresar las soluciones de forma mas natural y cercana a modelos conceptuales que representan las caracteristicas esenciales de las entidades o procesos del mundo real.

      Por ejemplo podemos definir una clase abstracta llamada Automovil que presente el concepto general de un vehículo de cuatro ruedas que se mueve por medio de un motor.

      Esta clase tendría propiedades como: marca, modelo, color, año, kilometraje, etc. y métodos como: encender, apagar, acelerar, frenar, etc.

      A partir de la clase abstracta podemos crear clases especificas que hereden sus propiaedades y métodos, pero que también tengan sus propias caractéristicas especificas. Por ejemplo, podríamos crear una clase llamada Deportivo que hereda de Automovil y que tenga propiedades adicionales como: velocidadMaxima, tipoDeMotor, numeroDePuertas, etc. y métodos adicionales como: turbo, drift, etc.

      De esta manera, podemos crear objetos de la clase Deportivo que sean instancias de la clase Automovil y que compartan sus características y comportamientos generales, pero que también tengan sus propias particularidades, por ejemplo, podríamos crear un objeto llamado miDeportivo que tenga los siguientes valores:
      marca: “Ferrari”
      modelo: “F8 Spider”
      color: “Rojo”
      año: 2023
      kilometraje: 0
      velocidadMaxima: 340
      tipoDeMotor: “V8”
      numeroDePuertas: 2

      El objetivo principal de la abstraccion en el area de programacion es simplificar el desarrollo y el mantenimiento del software al dividir un sistema en componentes abstraidos y los programadores pueden trabajar en partes especificas sin preocuparse de cómo funcionan otras partes. Esto facilita la colaboracion en equippos de desarrollo, ya que cada miembro del equipo puede centrarse en su area de experiencia sin necesidad de comprender los detalles de todo el sistema.

      El ejemplo anterior podria estar representado de la siguiente manera en lenguaje C#

          // Clase abstracta Automovil
          public abstract class Automovil
          {
              // Propiedades comunes a todos los automóviles
              public string Marca { get; set; }
              public string Modelo { get; set; }
              public string Color { get; set; }
              public int Año { get; set; }
              public double Kilometraje { get; set; }
      
              // Métodos comunes a todos los automóviles
              public void Encender()
              {
                  Console.WriteLine("El automóvil se ha encendido");
              }
      
              public void Apagar()
              {
                  Console.WriteLine("El automóvil se ha apagado");
              }
      
              public void Acelerar()
              {
                  Console.WriteLine("El automóvil ha acelerado");
              }
      
              public void Frenar()
              {
                  Console.WriteLine("El automóvil ha frenado");
              }
      
              // Método abstracto que debe ser definido por las clases derivadas
              public abstract void MostrarInformacion();
          }
      
          // Clase concreta Deportivo que hereda de Automovil
          public class Deportivo : Automovil
          {
              // Propiedades específicas de los deportivos
              public int VelocidadMaxima { get; set; }
              public string TipoDeMotor { get; set; }
              public int NumeroDePuertas { get; set; }
      
              // Métodos específicos de los deportivos
              public void Turbo()
              {
                  Console.WriteLine("El deportivo ha activado el turbo");
              }
      
              public void Drift()
              {
                  Console.WriteLine("El deportivo ha hecho un drift");
              }
      
              // Método abstracto que se define en esta clase
              public override void MostrarInformacion()
              {
                  Console.WriteLine($"Este es un deportivo de marca {Marca}, modelo {Modelo}, color {Color}, año {Año}, kilometraje {Kilometraje}, velocidad máxima {VelocidadMaxima}, tipo de motor {TipoDeMotor} y número de puertas {NumeroDePuertas}");
              }
          }
      
          // Creación de un objeto de la clase Deportivo
          Deportivo miDeportivo = new Deportivo();
          miDeportivo.Marca = "Ferrari";
          miDeportivo.Modelo = "F8 Spider";
          miDeportivo.Color = "Rojo";
          miDeportivo.Año = 2023;
          miDeportivo.Kilometraje = 0;
          miDeportivo.VelocidadMaxima = 340;
          miDeportivo.TipoDeMotor = "V8";
          miDeportivo.NumeroDePuertas = 2;
      
          // Invocación de los métodos heredados de la clase Automovil
          miDeportivo.Encender();
          miDeportivo.Apagar();
          miDeportivo.Acelerar();
          miDeportivo.Frenar();
      
          // Invocación de los métodos propios de la clase Deportivo
          miDeportivo.Turbo();
          miDeportivo.Drift();
      
          // Invocación del método abstracto definido en la clase Deportivo
          miDeportivo.MostrarInformacion();

      Loading

      Algoritmo

      En informática un algoritmo es un conjunto de reglas, instrucciones o procesos que le indican a una computadora los pasos a seguir para realizar una tarea y obtener un resultado específico, el algoritmo garantiza que un sistema realice una tarea de modo que el usuario obtenga el resultado esperado, a menudo se suele comparar con una receta de cocina ya que es el ejemplo perfecto por tener las características propias de un algoritmo como lo son: Factible, Finito, Sin dependencia del lenguaje, Sin ambigüedad, Entradas bien definidas, Salidas bien definidas.
      Existe una gran variedad de algoritmos para realizar las tareas mas variadas por ejemplo hay algoritmos para búsqueda, para ordenamiento, para bucles, etc.

      Ejemplo:

      En este ejemplo veremos el algoritmo de ordenamiento de tipo burbuja o bubble sort, el cual se encarga de ordenar un arreglo de numeros ya sea en orden ascendente o descendente.

      El algoritmo de burbuja recorre el arreglo comparando el valor de cada posicion con el de la posición siguiente y en caso de estar desordenados, los ordena de manera adecuada

      Aqui tenemos un arreglo desordenado 37, 91, 12, 68, 49, 23, 75, 4

      int[] areglo = { 37, 91, 12, 68, 49, 23, 75, 4 };
      int n = areglo.Length;
      
      for (int i = 0; i < n - 1; i++)
      {
          Console.WriteLine("Iteracion - " + (i+1));
          for (int j = 0; j < n - i - 1; j++)
          {
              if (areglo[j] > areglo[j + 1])
              {
                  int temp = areglo[j];
                  areglo[j] = areglo[j + 1];
                  areglo[j + 1] = temp;
              }
          }
      }
      

      Todas las iteraciones que se realizaron

      Iteracion 1 – 37 12 68 49 23 75 4 91
      Iteracion 2 – 12 37 49 23 68 4 75 91
      Iteracion 3 – 12 37 23 49 4 68 75 91
      Iteracion 4 – 12 23 37 4 49 68 75 91
      Iteracion 5 – 12 23 4 37 49 68 75 91
      Iteracion 6 – 12 4 23 37 49 68 75 91
      Iteracion 7 – 4 12 23 37 49 68 75 91

      y aquí el resultado ordenado 4, 12, 23, 37, 49, 68, 75, 91

      Conclusión

      Como podemos apreciar, sin importar cuantos elementos tenga el arreglo o cual sea al valor o si estan ordenados o desordenados, el algoritmo siempre ejecutara la misma tarea y siempre regresara el mismo resultado, en este caso es el arreglo ordenado.

      Loading

      .NET

      .NET (2020)

      Para finalizar con la evolución del framewor de .NET se creó ésta versión para unificar lo mejor de las versiónes anteriores.

      Su nombre es solamente .NET y comienza desde la versión 5 para evitar confuciones con las versiones 4.8 de .NET Framework y 3.1 de .NET Core

      .NET Standard

      Es una especificación de reglas que se tienen que cumplir para que .NET framework y .NET Core sean interoperables, aclarando que este no es un framework, solo un conjunto de especificaciones

      .NET Core (2014)

      Con la necesidad de adaptarse a los cambios en las diferentes tecnologías Microsoft evolucionó .NET Framework y según dicen para evitar confución con las versiónes decidió llamarlo .NET Core haciendolo completamente Open Source y pensado para microservicios.

      Con este nuevo framework .NET Core se pueden hacer aplicaciones multiplataforma, aplicaciones en la nube además de todas las caracteristicas de su predecesor como los lenguajes de programación C#, F# y Visual Basic se pueden crear aplicaciones, juegos, IoT, Windows, Web, Android e iOS.

      .net Core es modular lo que significa que puedes instalar las bibliotecas o funciónes que necesitas distribuidos en paquetes NuGet sin la necesidad de instalar la totalidad de las librerias

      Sus versiones van desde la 1.0 hasta la 3.1

      .NET Framework (2002)

      Framework creado por Microsoft en el año 2002 intentando de reemplazar a Java y la Java Virtual Machine (JVM) para desarrollo en entorno de Windows que incluye un conjunto de bibliotecas de clases y funciones juntas, lo que lo hace un framework monolitico y pesado que los desarrolladores puedan usar para crear aplicaciones Windows usando diferentes lenguages de programación como C#, F# y Visual Basic, también es importante mencionar que para poder instalar una aplicación creada con este framework y necesario instalar la versión del framewok con la que se creo dicha aplicación que si no se tiene instalado, al momento de hacer la instalación de la aplicación se indica la versión y si se quiere instalar en la computadora.

      Incluye un entorno de tiempo de ejecución (CLR) para administrar el proceso de ejecución de las aplicaciones, también es compatible con la interoperabilidad entre lenguages y plataformas, lo que permite a los desarrolladores integrar fácilmente diferentes tecnologias en sus aplicaciones.

      Su última versión es la 4.8 y mientras exista Windows se podra desarrollar en .Net Framework pero ya no evolucionará mas allá de esta versión.

      Loading