Bienvenidos a Introducción a la programación. Aprender a programar hoy es fundamental para aquellas personas que deseen abrirse campo tanto en el sector tecnológico como en el mundo hacker, puesto que la demanda en el desarrollo y manejo de sistemas, tanto en el ámbito laboral como social, es cada vez mayor. Por lo tanto, la formación apropiada de profesionales con conocimientos en la materia es inminente. Razón por la cual, con el fin de sentar las bases del conocimiento vamos a enseñar a programar en seudocódigo y en algunos lenguajes como Jva, Python, PHP, JS, etc y dar así los primeros pasos en el uso correcto de aprendizajes de lenguajes de programación, algoritmos y la estructura de datos. En este artículo Introducción a la programación es solo el primero de una serie que te guiará a través del mundo de la programación.

Las computadoras funcionan por la unión del hardware, sus componentes físicos, circuitos, discos, memoria, pantalla, teclado y mouse, entre otros, con el software, que son los programas que le dan indicaciones a los anteriores para que funcionen de la manera en que lo hacen. Existen distintos tipos de programas que necesitan comunicarse entre sí, el sistema operativo, que es el programa principal que se comunica a través de drivers con los dispositivos. El sistema operativo, drivers, y aplicaciones son los tipos de programas vistos desde una clasificación inicial del software y que están escritos en algún lenguaje de programación como C, C++, Java, etc. 

Tabla de contenidos

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Una breve historia de la programación

la primera programadora de computadoras fue Ada Byron, condesa de Lovelace. Autodidacta en matemáticas. Trabajo con Charles Babbage, mientras este se concentraba en diseñar el hardware de la máquina analítica, una calculadora mecánica que fue diseñada para realizar cálculos complejos. Ada Byron se convirtió en la primera persona en desarrollar un conjunto de instrucciones para la máquina analítica de Babbage, que luego se llamó programa de computadora.

Dada la época de este suceso, Ada nunca pudo ver funcionar un programa en una computadora. A medida que el hardware evolucionó desde los primeros prototipos a las máquinas rápidas y potentes de hoy en día, las formas en que la información y las instrucciones fueron preparadas para la computadora también cambiaron radicalmente.

El énfasis paso de hacer las instrucciones lo suficientemente simples para que la computadora entendiera, a hacerlas lo suficientemente parecida a la lengua hablada para que las personas lo pudieran escribir y fueran ejecutados por una computadora. Computadoras como ENIAC y EDVAC almacenaban información, tanto números como instrucciones de programa, como grupos de dígitos binarios 0 y 1.

Cada instrucción se compone a menudo de dos partes, un grupo de bits (dígitos binarios) que representan la operación a realizar, y un grupo que representa el operando, es decir, la dirección de máquina de los datos a ser operados. Un programa consistía en una serie de instrucciones escritas en este lenguaje de máquina que requería que se escribieran series muy largas de instrucciones numeradas y con los códigos binarios para los diferentes comandos que tenía el set de instrucción de la máquina.

También se debía llevar un registro de las direcciones de almacenamiento de los datos y las instrucciones. Como resultado, un solo programa, a menudo, tomaba meses para escribirse y no eran raro que tuvieran errores difíciles de encontrar.

Lenguajes de ensamblaje:

1950. permite al programador escribir instrucciones usando símbolos y letras en lugar de códigos de operación binarios en un programa fuente. El ensamblador luego traduce estas instrucciones escritas simples en lenguaje de máquina en un programa objeto”

son más fáciles:

  • y rápidos en ser escritos;
  • de depurar (encontrar y corregir errores);
  • de cambiar en una fecha posterior.

tienen un inconveniente importante. Debido a que la comunicación se lleva a cabo directamente con la máquina, cada lenguaje de ensamblaje está diseñado para una marca específica y el modelo de procesador de la computadora. un programa escrito para ejecutarse en una computadora no funcionará en otra. Por lo tanto, se dice que los lenguajes de ensamblaje están orientados a la máquina. El direccionamiento simbólico implicaba el uso de símbolos para representar la asignación de direcciones de almacenamiento a datos.  Los programadores podían crear nombres simbólicos para representar los elementos de datos y estos nombres podían ser utilizados a lo largo de un programa. Los programadores ya no tenían que asignar direcciones de máquina reales a elementos de datos simbólicos.

El procesador asigna automáticamente esas ubicaciones de almacenamiento cuando el programa es ejecutado.

Lenguajes de alto nivel

un programa escrito en un lenguaje de alto nivel todavía necesitaba ser traducido al código de la máquina. incluían su propio software de traducción para realizar esta tarea. El programa de traducción se denomina compilador. Los compiladores a menudo generan muchas instrucciones de máquina para cada instrucción de código fuente. Hoy en día muchas computadoras personales utilizan un intérprete en lugar de un compilador.  Un compilador traduce el programa fuente en código objeto y luego lo ejecuta. El intérprete convierte cada instrucción de programa de origen en lenguaje de máquina cada vez que se ejecuta la instrucción. No guarda el código objeto.  · liberan de preocupaciones acerca de los detalles de máquina de bajo nivel, como el direccionamiento de memoria y la dependencia de la máquina;

  • se pueden ejecutar en diferentes marcas de ordenadores;
  • son más fáciles de usar que los lenguajes de ensamblaje;
  • son más fáciles de aprender para los programadores.

Ejemplo de una instrucción simple que muestra el lenguaje de alto nivel, el lenguaje ensamblador y las versiones binarias.

En los 50 las computadoras todavía se usaban para el cálculo matemático y científico. Las computadoras utilizaron la aritmética binaria y no fue hasta que las máquinas fueron desarrolladas para usar la aritmética decimal que comenzaron a ser prácticas para los cálculos de negocio.

Un poco de historia sobre la programación

La programación en los primeros días era un trabajo largo y difícil y los programas a menudo no funcionaban. la evolución de los lenguajes de programación modernos, que se volvieron más fáciles de desarrollar, usar y modificar.

En 1954, John Backus dirige un comité patrocinado por IBM para desarrollar un nuevo lenguaje de programación científico-matemático.

En 1957, introdujo un nuevo lenguaje de alto nivel denominado FORTRAN (formula translator) para la computadora IBM 704. FORTRAN ganó amplia aceptación, especialmente entre los científicos y los estadísticos, debido a su utilidad para expresar las ecuaciones matemáticas.

En 1957, John McCarthy desarrolló LISP, que fue diseñado para apoyar la investigación en el campo de la inteligencia artificial (Al).

1959, Grace Murray Hopper ayudó a crear COBOL (Common business-oriented language). fue diseñado para procesar datos de negocios y durante muchos años fue utilizado por los seguros y la industria bancaria, entre otros.

En 1960 LOGO fue desarrollado por Seymour Papert en el Instituto de Tecnología de Massachusetts. Serbia para ayudar a los niños pequeños a explorar un entorno matemático utilizando una tortuga en la pantalla para dibujar figuras y crear animaciones sencillas.

En 1964 BASIC fue creado John George Kemeny y Thomas Eugene Kurtz para permitir a los estudiantes escribir programas usando terminales de computador de tiempo compartido. se quiso hacer un lenguaje de programación mucho más sencillo que los que existían por aquel entonces.

1970 En Bell Labs, Dennis Ritchie y Brian Kernighan, desarrollaron un lenguaje de programación llamado C. Este lenguaje permitía un fácil acceso al hardware y era muy eficiente. Fue diseñado para programar sistemas grandes, por lo que se convirtió en el lenguage de programación favorito de los programadores de sistemas operativos y drivers de dispositivos. Se utilizó para producir el sistema operativo UNIX y su derivado Linux. 

Consideraciones generales sobre los lenguajes de programación

Los lenguajes de programación son formas de comunicación universal que mantienen, en general, criterios modelo y que son empleados por aquellas personas que desarrollan e interpretan productos informáticos.

Los lenguajes naturales son los que hablamos y escribimos los seres humanos: inglés, español, italiano, etc. Son dinámicos, ya que, constantemente, incorporan nuevas variaciones, palabras y significados. Por el contrario, los lenguajes formales son rígidos y se construyen a partir de un conjunto de símbolos (alfabeto) unidos por un conjunto de reglas (gramática). Los lenguajes de programación son lenguajes formales.

En este sentido, los lenguajes de programación responden a escenarios en los cuales se genera una serie de códigos e instrucciones que pueden ser leídos e interpretados en la medida en la que cumplen una serie de requisitos y estilos, previamente establecidos por sus desarrolladores. Por cuanto en general, los lenguajes de programación deben responder a lo siguiente:

El lenguaje de programación debe ser universal

Es decir, cualquier problema debe tener una solución que pueda ser programada en el lenguaje y dicha solución ser implementada en cualquier computador. Este requisito es uno de los más fuertes y pocos lenguajes lo poseen. Se dice que cualquier lenguaje en el cual pueden definirse funciones recursivas se considera universal. Del otro lado, un lenguaje sin recursión ni iteración no puede ser universal. Existen ciertos lenguajes de aplicación que no son universales, pero sí podrían ser razonablemente descritos así mismos como lenguajes de programación.

El lenguaje de programación debe ser implementable en una computadora, es decir, debe ser posible ejecutar un programa en términos del lenguaje en cualquier máquina. La notación matemática generalmente no es implementable porque en su notación es posible formular problemas que no pueden ser resueltos por cualquier computador. Los lenguajes naturales tampoco son implementables por razones totalmente diferentes: ellos son tan imprecisos y tienden a ser muy ambiguos.

Desarrollo histórico de los lenguajes de programación

Lenguajes de máquina:

Conjunto de instrucciones que determinado procesador es capaz de entender y ejecutar.  Es el único lenguaje que entiende realmente la computadora, de manera que cualquier otro  tiene que traducirse a lenguaje máquina o lenguaje binario (de dos dígitos, «0» y «1 «)

El único que entiende directamente la CPU de la computadora

  • Depende del modelo de la computadora
  • Repertorio de instrucciones reducido (operaciones muy elementales)
  • Muy difícil programar en él (en binario, con cadenas de ceros y unos)

Lenguaje ensamblador (Assembler)

Puede considerarse de bajo nivel porque está orientado al lenguaje máquina. Sus instrucciones son muy similares a las de lenguaje máquina, pero en lugar  de códigos y números en binario, utiliza símbolos mnemotécnicos.

Equivalente al lenguaje máquina, cada línea de código se traduce en una instrucción para la máquina.

  • Le asocia mnemónicos a las operaciones que entiende la CPU
  • Repertorio de instrucciones reducido (operaciones muy elementales)
  • Programas difíciles de entende

lenguaje de bajo nivel, los programas eran hechos para una máquina, no eran transportables, es decir eran dependientes de la máquina. Ejm. add

Lenguajes simbólicos: utilizan símbolos para la creación de sentencias Lenguaje de bajo nivel  Las instrucciones se representan por mnemotecnicos, sus nombres  se referencian por MOV 7, SP, ADD X, dependen del ordenador

Lenguaje de alto nivel : Lenguajes más naturales, no dependen de una máquina,  programas legibles, corrección de errores más sencilla, repertorio  de instrucciones amplio.

segunda generación:  Fortran: Ingeniería y científico, Cobol:  Procesamiento de datos, Algol: Predecesor de  lenguaje, Basic: para enseñar a programar

Tercera generación: Lenguaje de programación estructurada y de datos 

De propósito general:  Pascal: datos estructurados, C; Sistemas con  gran flexibilidad Ada: Aplicación en tiempo  real

Orientados a objetos  Smalltalk, Eiffel, C++, Java

Especializados: LISP: Demostración de teoremas, Prolog:  Inteligencia artificial, API: Vectores y matrices 

Cuarta generación:  Alto nivel de abstracción, no son necesarios los algoritmos

Sistemas de procesamiento de información:

Para solucionar un problema mediante un sistema informático una secuencia de instrucciones es comunicada a la computadora. Para lograr esta comunicación, se han desarrollado lenguajes de programación.

Programa: conjunto de instrucciones escritas en un lenguaje de programación

El hardware de una computadora puede entender instrucciones solamente a través de un lenguaje binario de ceros y unos (lenguaje de bajo nivel.)

Ante esta dificultad, se han desarrollado lenguajes de alto nivel, los cuales permiten el uso de expresiones literarias y algebraicas interpretadas por el ser humano, que facilitan la comprensión y el entendimiento de la lógica involucrada en un programa.

En el desarrollo de una solución que usa lenguajes de alto nivel, se le da importancia al desarrollo de un algoritmo o modelo que permita obtener la solución deseada. Un algoritmo es el conjunto de pasos necesarios para resolver un problema.

Para escenarios complejos, los algoritmos de resolución tienen una mayor dificultad para su desarrollo, dando lugar a distintas formas de encarar los modelos de resolución.

¿Qué entiende una computadora? Una computadora recibe un input a calcular (la entrada), almacena la información y le solicitamos las operaciones que necesitamos; luego con una serie de pasos, previamente definidos, nos entrega el resultado (la salida).

Comunicación.

La comunicación es un proceso complejo que requiere una serie de reglas simples, pero indispensables para poderse llevar a cabo. Las dos principales son las siguientes:

* Los mensajes deben correr en un sentido a la vez.

* Debe forzosamente existir 4 elementos: Emisor, Receptor, Medio de Comunicación y Mensaje.

Lenguajes de programación vs Lenguaje natural

Un lenguaje es un Estilo y modo de hablar y escribir de cada persona en particular.  Es una serie de símbolos que sirven para transmitir uno o más mensajes (ideas) entre dos entidades diferentes. Un lenguaje lo usamos entre humanos para comunicarnos, expresar nuestros sentimientos, o incluso de forma colaborativa para llegar a un fin. En las computadoras, nosotros usamos un lenguaje de programación para decirle qué hacer, cómo hacerlo, a través de qué recursos. Algunos lenguajes permiten ser especifico con las instrucciones.

Gramática

Responde al qué palabras o frases son correctas.  Analiza cómo están estructuradas las oraciones, palabras/tokens, para que el intérprete las pueda entender correctamente.

  • Secuencias y símbolos que forman palabras validas
  • Sintaxis para formar frases del lenguaje

Sintaxis

La sintaxis de un lenguaje de programación está relacionada con la forma de los programas; por ejemplo, cómo es que las expresiones, comandos, declaraciones, etc. son puestos juntos en un programa. La sintaxis de un lenguaje influye en cómo los programas son escritos por el programador, leídos por otro programador y traducidos por la computadora. Los lenguajes siguen reglas que determinan la validez de las sentencias. Este conjunto de reglas define la sintaxis y está determinada por:

  • Reglas sintácticas: definen reglas de mayor complejidad a partir de construcciones más complejas mediante la combinación de elementos léxicos (por ejemplo: a = a + 1).
  • Elementos: Alfabeto, identificadores, palabras reservadas; espacios en blanco; símbolos de operadores; expresiones; delimitadores de código; comentarios.
  • Metalenguajes: se encargan de definir las reglas que establecen cómo se deben combinar los símbolos y elementos de un lenguaje de programación.
  • Es deseable que la sintaxis de un lenguaje sea de fácil lectura, escritura y análisis en busca de errores, y que no posea ambigüedades.
    • Responde a crear frases correctas para  expresar la receta.

Semántica

La semántica de un lenguaje de programación está relacionada con el significado de los programas; por ejemplo, cómo ellos se comportarán cuando se ejecuten en una computadora. La semántica de un lenguaje determina cómo los programas son compuestos por el programador, entendidos por otros programadores e interpretados por la computadora. La sintaxis es importante; pero la semántica es más importante aún. Responde a : ¿qué es una receta?  y está determinada por:

  • Reglas léxicas: definen el conjunto de caracteres del lenguaje y la forma en la que se combinan para formar sentencias válidas.
  • El significado que toma cada uno de los elementos de un lenguaje de programación de acuerdo al contexto define la semántica del lenguaje. La sintaxis no tiene en cuenta el contexto, mientras que la semántica sí lo hace.
  • Las variables, los valores y las expresiones son algunos de los elementos principales. Estos elementos tienen una semántica que indica cómo debe definírselos.
  • chequeo de tipos de datos en expresiones. Este depende del contexto, porque debe conocerse el tipo de dato esperado y el que actualmente se recibe de la expresión, y determinar si son compatibles.
  • si se utiliza el operador aritmético suma en una expresión, entonces el tipo de dato esperado es numérico y los operandos deben ser valores numéricos también.

En programación son los ciclos, las variables, etc. Una vez que hemos comprobado que está correctamente escrita, vemos si lo que está escrito es una operación correcta. No podemos dividir dos frases, pero si podemos sumarlas (concatenarlas) Esto viene a ser que escribamos cosas que podamos interpretar. Si la función que creamos es para hacer el cuadrado de un número, no vamos a poner que se divida ese número.

Al leerlo no sabríamos realmente que esta haciendo ese programa.

  • Variables
  • Funciones
  • Clases
  • Ciclos

Semántica en Java

En este contexto, se puede referir que existen diversos lenguajes, tales como Java, JavaScript, Python, C#, PHP, C/C++, entre otros. Cada uno con características y aplicaciones diversas, ofrecen una inmensa gama de oportunidades a los desarrolladores para dar respuesta a las necesidades de la sociedad actual.

En el caso específico de Java —uno de los lenguajes de programación más ampliamente utilizados en el mundo por sus características de uso genérico y fácil adaptabilidad a diversos escenarios—, este es, en principio, un lenguaje de programación orientado a objetos, que data de los años 90. En un principio, pertenecía a Sun Microsystems, y luego fue adquirido por Oracle Corporation. Un objetivo clave de Java es poder escribir programas que se ejecuten en una gran variedad de sistemas computacionales y dispositivos controlados por computadora. A esto se le conoce como «escribir una vez, ejecutar en cualquier parte»

Pragmática

Responde al cómo lo usamos: Esto viene a ser que escribamos cosas que podamos interpretar. Codificamos o escribimos un programa. Estamos usando o implementando el lenguaje que hemos elegido para que la computadora haga lo que queremos. Responde a:  ¿Cómo utilizamos una  oración significativa?  «Hay sopa en la mesa»

  • Interpretación y significado de las instrucciones dadas, cómo un cocinero interpreta la receta.

Implementación

La forma en que se transforman dichas instrucciones en acciones

la forma en que se transforma la receta a los ingredientes.

Lenguajes de Programación

Un lenguaje de programación es un idioma artificial diseñado para ser usado en las computadoras. Son capaces de controlar el  comportamiento físico y lógico de una máquina y además obran de  interface con el usuario.  Las computadoras solo entienden sentencias escritas en lenguaje maquina ( cadenas de 0 y 1). por ende  los lenguajes de alto nivel requieren:

Intérpretes:  traducen los lenguajes de alto nivel a código de  máquina a  medida que  encuentran las  instrucciones. El intérprete más utilizado es el navegador

Copiladores:  traducen en  programa  completo previo  a ejecutar las  instrucciones. 

Un lenguaje de programación es un formalismo artificial en el cual los algoritmos pueden ser expresados.  Es un conjunto de símbolos, caracteres y reglas (programas) que le permiten a las personas comunicarse con la computadora. Los lenguajes de programación tienen un conjunto de instrucciones que nos permiten realizar operaciones de entrada/salida, calculo, manipulación de textos, lógica/comparación y almacenamiento/recuperación.

Lenguaje de alto nivel:

Utiliza sintaxis y estructuras que resultan fáciles de entender. Se emplean palabras del lenguaje natural. necesitan de un intérprete o compilador para traducir las instrucciones a lenguaje de bajo nivel. C++ y Java.  Luego del surgimiento del lenguaje ensamblador, los programadores comenzaron a desarrollar sus propios lenguajes de programación abstrayendo código para poder centrarse más en el problema a resolver que en el hardware sobre el cual tiene que programar. Esto, además, incremento la eficiencia de los programadores ya que permitió que se puedan desarrollar sistemas enteros en mucho menos tiempo de lo que llevaba hacerlo en un lenguaje de bajo nivel.

En Fortran, Cobol, Pascal, Basic, Python, Perl, PHP, Java, C++, C#, la mera lectura del código puede ser entendida por cualquier persona ya que se asimila más al lenguaje natural humano que al lenguaje de máquina, y que están orientados a objetos, los cuales emergen de procedimientos. Utiliza sintaxis y estructuras que resultan fáciles de entender. Se emplean palabras del lenguaje natural. necesitan de un intérprete o compilador para traducir las instrucciones a lenguaje de bajo nivel. C++ y Java.

Traductores de lenguajes

Al momento de ejecutar un programa, los procesadores entienden únicamente instrucciones en lenguaje máquina (0 y 1).  su código fuente debe ser traducido a lenguaje máquina. La computadora solo entiende ceros y unos por lo tanto si no se le indica que ordenes realizar en forma de ceros y unos no va a entender lo que se le quiere transmitir. este elemento es de vital importancia ya que sin él la máquina no entendería el código de programación que escribimos.

Esto es porque se programa en un lenguaje más cercano al lenguaje natural humano y no en el lenguaje que maneja la máquina. incluso si se programara en ensamblador no se estaría programando en ceros y unos, sino que en el medio se ponen palabras que indican operaciones, y valores que por lo general no están en binario sino en hexadecimal. Tanto el compilador como el intérprete son programas que traducen el código que se programa en algún lenguaje a código de máquina.

Intérprete

Lee e interpreta las instrucciones de un programa fuente a medida que son encontradas y las ejecuta. Bash, clásico intérprete del sistema operativo Unix. Basic como ejemplo de un lenguaje interpretado. Python, PHP, Js. El intérprete es un programa que traduce el programa que se codificó con un cierto lenguaje de programación a código de máquina. 

El compilador traduce todo el programa de una sola vez y genera un archivo ejecutable mientras que el intérprete es un programa que reside en memoria y va traduciendo el programa a medida que se vaya necesitando. este intérprete no genera ningún archivo ejecutable, y por tanto el mismo seguirá cargado en memoria hasta que finalice el programa. el programa que sea traducido por un intérprete podrá ejecutarse en cualquier plataforma sin necesidad de recompilar como sucede con el compilador.

un programa que es interpretado puede correr en WindowsLinuxMacAndroid, celularescomputadorastelevisoresconsolas de videojuegos, y en cualquier dispositivo que tenga un sistema operativo. Un ejemplo de programas que usan un intérprete son los navegadores web. Se puede programar una página web sin preocuparse en que plataforma debe correr ya que la misma se ejecutará sin ningún problema en cualquier dispositivo.

Compilador:

traduce el código fuente de un programa (alto nivel) en lenguaje máquina para que el procesador pueda ejecutar sus instrucciones. El código escrito en lenguaje de alto nivel se denomina código fuente y el traducido se denomina código objeto. C, Pascal y Cobol.  El compilador toma el código de fuente escrito en algún lenguaje de programación, lo traduce entero a código de máquina, y luego lo guarda en un archivo ejecutable.

La traducción la realiza de una sola vez, y al mismo tiempo se encarga de detectar errores. Si existen errores en el código, el programa no compilará y en vez de eso se mostrarán mensajes indicando que errores hay en el programa para poder corregirlos y volver a pedir al compilador que haga la traducción del código. Una vez que el programa compila y genera el archivo ejecutable se va a poder correr el programa sobre la plataforma para la cual se programó.

El compilador genera un archivo ejecutable que solo sirve para la plataforma sobre la cual se hizo el programa. Si quisiera que el programa se ejecutara sobre otra plataforma tendría que encargarme de compilarlo nuevamente pero esta vez para esa plataforma.

El programa objeto

que resulta luego de compilar no se corresponde con el lenguaje ensamblador. Para obtener el programa en lenguaje máquina, debe utilizarse un enlazador-montador. 

Montador: sirve para obtener el programa en lenguaje máquina. Este módulo junta los paquetes de código objeto generados junto con  recursos que pueda necesitar (librerías), obtiene el programa objeto en lenguaje máquina.

Para ejemplificar un proceso de compilación, mencionaremos los siguientes pasos para la ejecución de un programa escrito en lenguaje C++:

1) Escritura del código fuente mediante un editor de texto.

2) Compilación del código fuente.

3) Verificación y corrección de errores de compilación.

4) Obtención del código objeto.

5) Ejecución del enlazador o montador para obtener el programa en lenguaje máquina.

6) Ejecución del programa.

Visibilidad del código fuente

Finalmente hay un detalle que es importante aclarar, y que hace a la diferencia si un programa se compila o lo interpreta. Este detalle tiene que ver con el acceso al código fuente del programa. Un programa que es compilado evita que una persona tenga acceso al código original del programa, mientras que un programa que es interpretado, necesita disponer del código fuente para ir traduciéndolo cuando se lo necesite, este código estará visible para todo el mundo y volviendo al ejemplo de los navegadores web, es de público conocimiento que se puede acceder al código fuente de la página que se está viendo (o por lo menos de lo que se conoce como front end).

Compilador vs intérprete

el programa que sea compilado será más rápido que uno interpretado, ya que en este caso la traducción se encuentra hecha y la computadora solo tiene que leerla, el intérprete, al traducir código solo cuando es necesario, se mantiene siempre en memoria y esto tiene un costo que justamente es el tiempo de ejecución del programa.

un programa compilado solo va a poder ejecutarse en la plataforma para la cual se compiló y si se deseara ejecutar en otra plataforma habría que recompilar el código para la plataforma destino sobre la cual se quiera ejecutar.

Un programa interpretado se podrá ejecutar sobre cualquier plataforma. Por último un programa que es compilado genera un ejecutable en código de máquina por lo cual el código fuente estará fuera de las manos de cualquier persona que no sea la propietaria del programa. Un programa interpretado tendrá siempre el código fuente a disposición de cualquiera.

Elementos del lenguaje

Entidad: subprograma, variable, sentencia… tiene atributos (nombre, valor, tipo, ubicación en memoria, tiempo de vida)

Los atributos son asociados a una entidad por medio del mecanismo de ligadura.

Ligadura: es una asociación entre dos cosas (atributo y una entidad). una variable tiene un nombre, un tipo de dato, una ubicación en memoria, un tiempo de vida…  El momento en el cual se crea la ligadura se denomina tiempo de ligadura.

estática: la asociación se produce antes de la ejecución del programa, por lo que puede darse en tiempo de compilación o de diseño. Características:

  • Menor flexibilidad.
  • Mayor seguridad (detección temprana de errores).
  • Mayor eficiencia.
  • Aplicable a lenguajes compilados.

dinámica: la asociación se produce durante la ejecución del programa, no puede realizarse en un paso anterior. Características:

  • Mayor flexibilidad.
  • Menor seguridad.
  • Mayor costo de ejecución.

Ejemplo: la asignación de un valor a una variable tipo referencial. Antes de la ejecución del programa se desconoce la ubicación en memoria de la variable referencial, entonces no se asignar. SE conoce en tiempo de ejecución y ahí se realiza la ligadura.

Introducción a los algoritmos

Un algoritmo (del griego y latín, dixit algorithmus y este a su vez en honor del matemático persa Al-Juarismi ) se defne como un método aplicable con el fn de obtener la solución a un problema genérico.  El pensamiento lógico permite encontrar soluciones óptimas a problemas simples y complejos. el pensamiento lógico en programación y la vida diaria es fundamental ya que nos da el poder de crear soluciones óptimas a todo tipo de problemas. 

El Pensamiento Lógico es fundamental a la hora de programar, nos permite reconocer el problema que vamos a solucionar, buscar una solución que podamos programar y analizar las salidas que tenemos para llegar a conclusiones.  Debe presentarse como una secuencia ordenada de pasos que siempre se ejecutan en tiempo finito y con una cantidad de esfuerzo también fnito o al menos que pueda detectar cuando el método se hace inviable e informarlo.

Los algoritmos tienen un inicio y un fnal, son únicos y deben ser fácilmente identifcables. Para su mejor claridad y aprovechamiento en la etapa de codifcación, es

conveniente que los algoritmos tengan ciertas características:

Características de un algoritmo:

  • Preciso: paso a paso en un orden lógico. el algoritmo debe indicar el orden de realización de cada paso.  Es decir d Debe ser secuencial, cada paso se debe ejecutar en una forma ordenada y no debe comenzar a ejecutarse un paso sin haber concluido de ejecutar

el paso anterior. Cuando se hace el diagrama del algoritmo, a esta secuencialidad se la denomina flujo de proceso.

  • Definido: todas las veces que pasemos por el da el mismo resultado. no importa cuántas veces se ejecute el algoritmo, se debe obtener el mismo resultado en cada ejecución.
  • Finito: tenemos un proceso de inicio y de cierre. el algoritmo debe tener un número finito de pasos que permiten resolver el problema.
  • Deben ser Efcientes, entendiéndose por esto que ocupen la cantidad mínima y necesaria de variables para que al codifcar genere un programa que utilice la mínima cantidad de memoria y además minimizar el tiempo de ejecución evitando procesos redundantes o innecesarios.
  • Deben ser Legibles, se busca que el texto que lo describe debe ser claro, de forma que permita entenderlo y leerlo fácilmente, eligiendo nombres de variables y de procesos que hagan referencia clara a su función dentro del código.
  • Deben ser Modifcables, o sea que deben enunciarse de modo que sus posteriores modifcaciones u ampliaciones sean fáciles de realizar, incluso por programadores diferentes a sus propios autores.
  • Deben ser Modulares, la flosofía utilizada para su diseño debe favorecer la división del problema en módulos pequeños. haciendo que procesos y cálculos complejos se descompongan en cálculos más simples.

Los algoritmos los podemos representar de manera:

Gráfica: a través de diagramas de flujo.

No gráfica: se usa un lenguaje de programación, o de manera textual.

Descripción: se puede representar mediante los pasos en lenguaje natural, diagrama de flujo, pseudocódigo y lenguajes de programación. Puede tener distintos niveles de detalle.

  • Se puede comenzar con la descripción en alto nivel, en la que se utiliza lenguaje natural y se establece cuál es el problema, cuáles serían los datos de entrada, el proceso que se aplicaría y el resultado o salida de información que se espera.
  • Las técnicas formales de descripción de algoritmos (diagramas de flujo y pseudocódigos) son más estructuradas en comparación con el uso del lenguaje natural pero son independientes de los lenguajes de programación.
  • se tiene que traducir la representación formal del algoritmo a una implementación en algún lenguaje de programación.

Tipos de Algoritmos

Cualitativos: Son aquellos en los que se describen los pasos utilizando palabras.

Cuantitativos: Son aquellos en los que se utilizan cálculos numéricos para definir los pasos del proceso.

Lenguajes Algorítmicos

Es una serie de símbolos y reglas que se utilizan para describir de manera explícita un proceso.

Tipos de lenguaje Algorítmico: la manera gráfica es a través de diagramas de flujo, y la manera no gráfica es cuando utilizamos lenguajes de programación y/o lenguaje natural para la descripción de los pasos del algoritmo.

Graficos: Es la representación gráfica de las operaciones que realiza un algoritmo (diagrama de flujo).

No Graficos: Representa en forma descriptiva las operaciones que debe realizar un algoritmo (pseudocódigo).

Metodología para la solución de problemas por medio de computadora

Qué es un programa?

Conjunto de instrucciones que entiende una computadora para realizar una actividad. Todo programa tiene un objetivo bien definido: un procesador de texto es un programa que permite cargar, modificar e imprimir textos, un programa de ajedrez permite jugar al ajedrez. La actividad fundamental del programador es resolver problemas empleando el ordenador como herramienta fundamental. Para la resolución de un problema hay que plantear un algoritmo. Algoritmo: Son los pasos a seguir para resolver un problema.

son la serie de instrucciones que le damos a la computadora para que esta pueda llevar a cabo los procesos. El flujo que todo programa va a seguir es el de tener un input (entrada), un CPU y memoria que van a procesar y almacenar la información hasta obtener un resultado final.

El sistema Binario

El tipo de señales que existen dentro la computadora es código binario (0,1). A través del código binario podemos representar dos estados  de  una  lámpara,  por ejemplo, 0  es  apagado y  1  es encendido. Así podemos representar true/false, on/off.  Dentro de la computadora tenemos millones de dispositivos llamados transistores, que van a almacenar estos 0 o 1.

A este dato que pude valer 0 o 1 se le conoce en computación como un bit, y es la unidad mínima de información que podemos manejar.  En el sistema binario solo vamos a trabajar con 0 y 1; en este sistema la primera posición vale 1, y se van multiplicando por 2 cada vez.  la segunda posición vale 2, la tercera posición vale 4 y la cuarta posición vale 8. Teniendo en cuenta que el orden es de derecha a izquierda tenemos: 1111 = 8 + 4 +2 +1 =15. Y para el proceso inverso, veamos cómo se convierte 34 a binario. 34 = 34 100010

Para las letras en binario, tenemos algo llamado el código ASCII, así, cada letra tiene asociado un número.  la letra T se forma a partir del número escrito en sistema binario= 1010100. Un documento de texto es una colección de caracteres, que son 0 y 1 que la computadora puede entender. 

Una imagen es la representación en pixeles. Si una imagen tiene x megapíxeles, eso significa tantos millones de pixeles, y cada uno de esos millones de pixeles va a ser información en binario que pintan la imagen de un color. La colección de todos los colores forma la imagen.

Suma

Para sumar debes tener en cuenta 4 arreglos posibles: 0 + 0 = 0; 0 + 1 = 1; 1 + 0 = 1; 1 + 1 = 10.

Por lo tanto, el resultado de sumar 1 0 0 1 1 0 0 0 y 0 0 0 1 0 1 0 1 es 1 0 1 0 1 1 0 1

Resta

Para llevar a cabo una resta también hay 4 combinaciones posibles: 0 – 0 = 0; 1 – 0 = 1; 1 – 1 = 0; 10 – 1 = 1.

Si restas los mismos números que usamos para la suma quedaría de la siguiente forma: 1 0 0 1 1 0 0 0 – 0 0 0 1 0 1 0 1 = 1 0 0 0 0 0 1 1

Acarreo

Si lo notaste, hay dos casos especiales en los que utilizamos más de un dígito: 1 + 1 = 1 0 y 1 0 – 1 = 1. Esto se debe al acarreo y es algo que ya conoces del sistema decimal, la diferencia es que en el sistema binario también se puede acarrear de forma negativa. La resta de 0 – 1 no es posible, es por esto que el 0 pide la ayuda de su compañero de la izquierda y le quita un 1 que le permite operar. Entonces, el 0 se convierte en 1 0 y al restarle 1 nos da como resultado 1 0 – 1 = 1. Si el compañero que cedió es un 0, hará el mismo proceso de pedir valores a la izquierda, en cambio, si es un 1, entonces se va a convertir en 0.

Multiplicación y división

Funcionan bajo las mismas condiciones que en el sistema decimal, todo número multiplicado por 0 es igual a 0 y solo es 1 cuando se multiplica por 1.

Código ASCII completa:  https://elcodigoascii.com.ar/

En el día a día solemos referirnos a la velocidad de internet, tamaños de archivos, capacidad de dispositivos de almacenamiento, dispositivos móviles y muchos elementos tecnológicos que están dados en términos de bits, bytes, gigabytes, megabytes, etc. Pero, ¿sabemos en realidad a qué estamos haciendo referencia? Estos términos hacen referencia a medidas de almacenamiento de datos y parten inicialmente de un “bit”, que es la unidad de información más pequeña de una computadora que puede tener solo un estado: 1 o 0. De ahí en adelante seguimos hablando de bits, pero, en mayor medida, con mayor capacidad y mayor magnitud.

¿Qué es un bit?

En la clase de sistema binario estudiamos sobre verdaderos y falsos, cuando hay carga y cuando no hay carga, y aprendimos que esto lo representamos con 1 y 0. En realidad, el término “bit” es el acrónimo de “binary digit”, que hace referencia a los dígitos binarios que le indican a nuestro ordenador que hay o no carga de corriente. Sin embargo, este es solo el punto de partida porque desde aquí, pero en cargas mayores, empezamos a expresar otras medidas más grandes e incluso más comunes. “El elemento de datos más pequeño en una computadora puede asumir el valor 0 o el valor 1. A dicho elemento de datos se le denomina bit (abreviación de «dígito binario»: un dígito que puede asumir uno de dos valores).

¿Qué son bytes?

La definición de bytes concluye que un byte son el conjunto de 8 bits y que a su vez representan el valor de una letra. Sin embargo su valor y significado va más allá de eso, porque de estos 8 bits, 7 son de información y uno adicional es de control. De esta manera, cuando hablamos de velocidad de internet, por ejemplo, podemos referirnos a 200 kilobits, pero hablar de 200 kilobytes será más adecuado porque esta última cantidad es 8 veces mayor a los primeros 200 kilobits.

Definición de términos básicos

Algoritmo Llamamos «algoritmo» al conjunto finito y ordenado de acciones con las que podemos resolver un determinado problema.

Aplicación “Una aplicación Java es un programa de computadora que se ejecuta cuando usted utiliza el comando java para iniciar la máquina virtual de Java (JVM).

Archivo: Un archivo es un grupo de registros relacionados. Nota: dicho de forma más general, un archivo contiene datos arbitrarios en formatos arbitrarios. En algunos sistemas operativos, un archivo se ve tan solo como una secuencia de bytes: cualquier organización de esos bytes en un archivo, como cuando se organizan los datos en registros, es una vista creada por el programador de la aplicación.

Caracteres: Los dígitos, letras y símbolos especiales utilizados para escribir programas y representar elementos de datos. Por ejemplo: Los dígitos decimales (0-9), letras (A-Z y a-z) y símbolos especiales (por ejemplo, $, @, %, &, *, (, ), -, +, “, ? y /). (p. 7).

Campo: “Así como los caracteres están compuestos de bits, los campos lo están por caracteres o bytes. Un campo es un grupo de caracteres o bytes que trasmiten un significado”

Clase: “La palabra clave class introduce una declaración de clase, que debe ir seguida de inmediato por el nombre de la clase (Nombredeclase)”

Consola:

lamamos «consola» al conjunto compuesto por el teclado y la pantalla de la computadora en modo texto. Cuando hablemos de ingreso de datos por consola, nos estaremos refiriendo al teclado y, cuando hablemos de mostrar datos por consola, estaremos hablando de la pantalla, siempre en modo texto.

Hardware: Es la parte física de una computadora (dispositivos electrónicos)

Identificador: “El nombre de una clase es un identificador: una serie de caracteres que pueden ser letras, dígitos, guiones /, bajos (_) y signos de moneda ($), que no comience con un dígito ni tenga espacios.”

Máquina virtual: “Una máquina virtual (VM) es una aplicación de software que simula a una computadora, pero oculta el sistema operativo y el hardware subyacente de los programas que interactúan con esta.”

Método: “Los paréntesis después del identificador main indican que este es un bloque de construcción del programa, al cual se le llama método. Las declaraciones de clases en Java, por lo general, contienen uno o más métodos.”

Operadores: “Los operadores básicos son aquellos empleados para formar expresiones.”

Problema: Llamamos «problema» a una situación que se nos presenta y que, mediante la aplicación de un algoritmo, pretendemos resolver. Los algoritmos están presentes en nuestra vida cotidiana y, aún sin saberlo, aplicamos algoritmos cada vez que se nos presenta un problema sin importar cuál sea su grado de complejidad.

Registro: “Un registro es un grupo de campos relacionados, el cual se implementa como una clase en Java.”

Software: Es la parte lógica de una computadora (programas)

Variable: Las variables representan un espacio de la memoria de la computadora. A través de una variable, podemos almacenar temporalmente datos para tenerlos disponibles durante la ejecución del programa. Para utilizar una variable, tenemos que especificar un nombre y un tipo de datos.

Lenguajes Ensamblados:

Se refieren al lenguaje ensamblador, que viene a ser una representación simbólica de las instrucciones correspondientes al lenguaje ensamblador de alguna arquitectura específica casi siempre, la correspondencia entre las instrucciones de este lenguaje, y las del lenguaje máquina son de 1 a 1, si bien existen algunas excepciones, que dan lugar a lo que se conoce como lenguajes macro-ensambladores

Lenguajes Compilados:

Son aquellos, que son traducidos de un lenguaje de alto nivel (como FORTRAN o PASCAL) a lenguaje máquina o bien a lenguaje ensamblador, produciendo un programa objeto permanente.

Lenguajes Interpretados:

 no producen código objeto, sino que cada instrucción es analizada y ejecutada a la vez, lo que ofrece mucha interacción con los usuarios, pero a la vez resultan ineficientes, cuando se desea ejecutar repetitivamente un programa.

Lenguajes Preprocesador:

Son lenguajes que son traducidos primeramente a un lenguaje intermedio de más bajo nivel, para posteriormente volverlos a traducir y producir el programa objeto.  Este tipo de lenguajes fueron creados, con la idea de proporcionar un lenguaje más potente que el lenguaje intermedio, mediante la implementación de algunas macroinstrucciones.

Lenguajes de cuarta generación 4GL:

se distinguen por formar parte de un entorno de desarrollo, que comprende el manejador de una base de datos, y todo lo que de esto se deriva: como la administración de un diccionario de datos, el control de accesos, el manejo de la consistencia de la información y otras características enfocadas a facilitar los programas de acceso y explotación de la información.  podemos citar a los 4 grandes: PROGRESS, SYSBASE, INFORMIX, y ORACLE.

Lenguajes Visuales.

Se les llama de esta manera a los lenguajes que forman parte de una aplicación dotada de una Interfase gráfica, la cual por medio de iconos y otras herramientas visuales y simbólicas, pretenden facilitar las tareas rutinarias de los programadores, como son el diseño y desarrollo de formularios e informes. Los ejemplos más comerciales de estos lenguajes son: VISUAL BASIC, VISUAL CAFE, VISUAL FOX, etc.

Metalenguajes:

XML, SGML y HTML que sirven para definir otros lenguajes, cuyo objetivo es llevar a cabo la estructuración de textos mediante un conjunto de etiquetas, de manera tal, que puedan ser entendidos por los humanos y también procesado por los ordenadores.

Estos lenguajes están teniendo un gran auge sobre la plataforma de Internet, en la cual son usados para la creación de documentos, y el intercambio o transferencia de información.

Lenguajes de propósito específico:

con la finalidad de resolver problemas de una naturaleza muy determinada, tal como SPSS para problemas estadísticos, MATLAB para cálculos científicos y de ingeniería, CAD/CAM para el diseño de piezas y programación de máquinas de control numérico, como tornos y fresadoras, GPSS para simulación de sistemas, CORBA para el manejo de interfaces en ambientes cliente-servidor, etc.

Lenguajes Script:

JAVASCRIPT, VBSCRIPT, PERLSCRIPT, que se utilizan en ambientes clientes servidor, mediante la incrustación de código en las páginas HTML, y así permitir la programación del lado del cliente, buscando hacer más atractivos los interfaces gráficos de las páginas.

No te detengas, sigue avanzando

Aquí tienes un propósito para este 2024 que debes considerar seriamente: si has querido mejorar tus habilidades en hacking, Ciberseguridad y programación ahora es definitivamente el momento de dar el siguiente paso. ¡Desarrolla tus habilidades aprovechando nuestros cursos a un precio increíble y avanza en tu carrera!

Python Practicando. Desde 0 hasta Desarrollador en Python

Aprende Python, donde iniciamos desde 0, sin conocimientos previos hasta desarrollar aplicaciones con mucha practica!

Calificación: 4,6 de 5 (20.833 calificaciones) 249.493 estudiantes Creado por Alvaro Chirou • 1.800.000+ Enrollments WorldwideWalter Coto || +450,000 Estudiantes Español.

Lo que aprenderás

  • Ejercitar la lógica de programación
  • Comprender cómo la vida cotidiana puede ser fácilitada o simulada con código
  • Aprender programación desde cero
  • Usar Visual Studio Code como Editor de Código
  • Conocer y aprender el lenguaje de programación Python
  • Ser un programador desde cero, sin conocimiento en otro lenguaje o con algo previo
  • Mejorar las habilidades de programación, mejorar procesos y fácilitar la comprensión de código
  • Preparar un entorno dónde programar en Python
  • Operaciones aritméticas y jerarquía de Python
  • Manejo de cadenas en Python
  • Digitar datos por teclado con Python
  • Mostrar Datos por Pantalla al usuario en Python
  • Operadores Relacionales de Python
  • Operadores Lógicos de Python
  • Condicionales en Python
  • Estructuras de Datos: Listas, Tuplas y Diccionarios
  • Iteraciones y bucles repetitivos de Python
  • Segmentar Código y hacerlo más eficaz con las Funciones en Python
  • Gestionar posibles errores que puedan dar tus programas
  • Programación Orientada a Objetos
  • HTML y CSS
  • Selenium Web Driver con Python
  • Ejercitar todo lo Aprendido con Ejercicios

Este curso incluye:

  • 25,5 horas de vídeo bajo demanda
  • 21 artículos
  • 148 recursos descargables
  • Acceso en dispositivos móviles y TV
  • Certificado de finalización

Python es Hoy uno de los lenguajes más utilizados por Excelencia.

Esto se debe por su simpleza al momento de Desarrollar aplicaciones.

Por su capacidad de procesamiento a altas velocidades con grandes volúmenes de información.

Es un increíble lenguaje con el cual si no sabes programar, podrás aprender.

Y si ya sabes desarrollar, te aconsejo aprenderlo ya que en el mercado cada vez se solicitan más desarrolladores en Python.

Aspirar al trabajo que desean, o mejorar sus ingresos con un aumento de salario.

Python se utiliza para muchisimas cosas como:

  • Machine Learning
  • Data Science
  • Inteligencia Artificial.
  • Y mucho más!

En este curso te acompañare en el proceso por el cual aprenderás las bases del lenguaje, para luego determinar qué camino quieres seguir.

Te invito que me acompañes a conocer este Gran Lenguaje!

Aprende con nuestros más de 100 cursos que tenemos disponibles para vos

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Sobre los autores

Álvaro Chirou

Yo soy Álvaro Chirou, tengo más de 20 Años de experiencia trabajando en Tecnología, eh dado disertaciones en eventos internacionales como OWASP, tengo más de 1.800.000 estudiantes en Udemy y 100 formaciones profesionales impartidas en la misma. Puedes serguirme en mis redes:

Laprovittera Carlos

Soy Laprovittera Carlos. Con más de 20 años de experiencia en IT brindo Educación y Consultoría en Seguridad de la Información para profesionales, bancos y empresas. Puedes saber más de mi y de mis servicios en mi sitio web: laprovittera.com y seguirme en mis redes:

¿Quieres iniciarte en hacking y ciberseguridad pero no sabes por dónde empezar? Inicia leyendo nuestra guia gratuita: https://achirou.com/como-iniciarse-en-ciberseguridad-y-hacking-en-2024/ que te lleva de 0 a 100. Desde los fundamentos más básicos, pasando por cursos, recursos y certificaciones hasta cómo obtener tu primer empleo.

SIGUE APRENDIENDO GRATIS CON NUESTRAS GUIAS

Cómo Iniciarse en Hacking y Ciberseguridad en 2024

Curso Gratis Linux – Capitulo 1 – Introducción a Linux

Curso Gratis de Redes – Capitulo 1 – Tipos de redes y servicios

Como iniciarse en TRY HACK ME – Complete Beginner #1

OSINT #1 Más de 200 Search Tools