1 Conceptos de La Programacion
1 Conceptos de La Programacion
Nivel inicial
Conceptos de la programación
Es un lenguaje con reglas gramaticales bien definidas que permite al programador escribir
instrucciones en formas de algoritmos para controlar el comportamiento de un sistema en
general.
Imperativo: es el paradigma más antiguo, crea una secuencia de instrucciones definiendo todo
paso por paso.
Procedimentales: consiste en escribir línea por línea para formar una instrucción.
0- Lenguaje maquina: es el lenguaje que entiende las maquinas pero que al mismo tiempo es
ilegible al ser humano.
1- Lenguaje ensamblador : copila la información en forma de código del programador y lo
transforma a lenguaje de maquina
2- Bajo nivel: están directamente relacionados con las características del hardware y la
arquitectura (aquí también estarían incluidos el lenguaje de máquina y el ensamblador)
3- Medio-bajo nivel: tienen capacidades de alto nivel, C, C++ por ejemplo tiene acceso a la
memoria del procesador que estemos utilizando, son lenguajes modernos que tienen la
capacidad de relacionar con el propio hardware con el que estén tratando.
4- Medio-alto nivel: son lenguajes modernos por ejemplo java scrip, C#, php, python, etc.
5- Alto nivel: son frameworks, paradigmas y librerías basados en lenguajes de medio nivel.
1.4- proceso de conversión.
1.5- IDEs.
Entorno de desarrollo integrado IDE: son programas especialmente diseñados para escribir código
ya que cuanta con herramientas específicas para un mejor desempeño alguno de los más usados
son; visual studio code, atom, sublime text, pycharm, notepad++.
1.6- Control de versiones: es una manera de editar código tanto individuamente o como equipo,
consiste en copiar un bloque de código identificarlo para diferenciarlo del otro y escribir o editar
sobre la copia, hay plataformas que son más ideales para estas tareas como por ejemplo SVN
(SubVersion), CVS (Concurret Version System), Git, GitHub & GitLab, siendo estos últimos los más
usados.
2- Lenguajes de programación
3- paradigmas de la programación
En la programación Los paradigmas son maneras diferentes de resolver un problema, hay dos
tipos de paradigmas, imperativos y declarativos, una programación imperativa es aquella que se
basa en instrucciones detalladas, mientras que la declarativa se basa en dar instrucciones no
detalladas con una intención especifica
3.2- Programación orientada a objetos: consiste en establecer funciones a objetos específicos que
se relacionen entre si dentro de un sistema, estos poseen dos propiedades, datos > atributos
(nombre, nombre de usuario, apellido, edad, Email, etc) funcionalidad > métodos (login, registro,
editar perfil, logout, comprar, etc).
Nota: Como se crean los objetos? Tomando y uniendo atributos y métodos creamos un plantilla y
en función de esta podemos crear objetos diferentes.
Encapsulamiento: reúne todos los atributos y métodos dentro de un mismo objeto para tratar ese
objeto como una variable o un registro dentro de una memoria mientras que cada uno de ellos
tienen sus propios atributos y sus propios métodos.
Herencia: toma un objeto para sacar de este otro igual y añadirle nuevos atributos que no tendrá
el primero.
Polimorfismo: significa que una misma función puede tener distintas formas en función del
atributo del propio objeto
Funciones sin estado: no poseen variables internas o estado interno que se estén utilizando dentro
de las mismas funciones.
4- Desarrollo Web
Back End: es el lado del servidor, encargado de proveer la información que necesite el Front End.
Lenguajes del lado del servidor: los más comunes son los siguientes: Java, Ruby, PHP, Python, C#,
ASP.NET, perl, node JS.
Lenguajes del lado del cliente: los más utilizados JavaScrip, HTML, CSS, TypeScrip, AJAX.
Es un software que tiene funciones de FrontEnd y BackEnd, se crearon para volver más fácil la
creación de ciertas categorías de páginas web bastante comunes, como blogs o tiendas de
Ecomerce, los más conocidos son los siguientes: WordPress, Joomla. Drupal, Magento, Prestashop,
Shopify, odoo, todos ellos programados en PHP y JS.
4.4 Frameworks
Los frameworks son propios de cada lenguaje, de manera que como existen gran variedad de
lenguajes también existen gran variedad de frameworks, por ejemplo AngularJS, VueJS, y reactJS
son frameworks de JavaScript.
Frameworks de pruebas unitarias: se usan para realizar pruebas unitarias y asegurarnos que cada
cambio que hagamos dentro del software ni afecte la funcionalidad ya existente. Como ejemplo
tenemos Jest para JS, JUnit para Java, PHP Unit para PHP, N Unit para .NET, Pytest para Python.
4.5 Librerías
Tienen funcionalidades integradas para que no Eres libre de usar las librerías que desees en la
necesites librerías externas. estructura que quieras
La compatibilidad de sus funcionalidades está Debes controlar la compatibilidad de cada
asegurada. librería con las demás.
El framework define la forma en la debes Puedes usar varias librerías según tus
desarrollar el proyecto. necesidades
Introducción. Un navegador web es un programa que permite ver la información que contiene
una página web. El navegador interpreta el código, HTML generalmente, en el que está escrita la
página web y lo presenta en pantalla permitiendo al usuario interactuar con su contenido y
navegar. Entre los más conocidos están Edge, Chrome, Firefox, Brave, Opera y Safari exclusivo de
Apple.
4.8 Stacks
5- Desarrollo móvil
-plataformas móviles: al día de hoy android ocupa aproximadamente el 75% de los dispositivos a
nivel mundial y IOS el 23% aproximadamente,
-IDEs y Emuladores para desarrollo móvil: XCode para IOS con Swift como lenguaje y Android
Studio para Android con Kotlin y Java como lenguajes.
-Frameworks y Librerías para desarrollo móvil: IONIC con este framework podemos crear una
aplicación web que se pueda ejecutar en un dispositivo móvil a través de un emulador web
(WebView), usando un puente llamado bridge (apache cordova) para acceder a las funciones
nativas de nuestro móvil. Xamarin que se usa en el entorno de C# y .NET, Flutter en el entorno de
Dart y React Native en el entorno de JavaScript y React.
6- Desarrollo multiplataforma
- Los lenguajes más utilizados para este tipo de desarrollo al día de hoy son los siguientes; Java
Script, Java, Python, C#, Ruby y Dart, al combinar estos lenguajes con librerías de diferentes
frameworks lograremos desarrollar aplicaciones multiplataforma.
-algunos de los frameworks de desarrollo multiplataforma más usados son los siguientes; Cordova,
React Native, Native Script, Appcelerator que se utilizan con JS, Kivy y BeeWare que se usan con
Python, Flutter se usa con Dart, Codename One se usa con Java, y Ruby Motion que se usa con
Ruby.
-a continuación una lista de los frameworks más demandados en el mercado: Flutter, Ionic, React
Native, Xamarin, Native Script, Appcelerator.
7- Code Review
Un Code Review consiste en tomar una versión de código que conlleve una edición y compararla
con la versión anterior para verificar que este siga funcionando y así evitar posibles errores.
Existen Plataformas online que nos ayudan a revisar nuestros códigos tanto de forma manual
como automática algunos de los más conocidos son los siguientes; CodeFactor, Collaborator,
GitLab, CodeStriker, , sonarqube, GitHub y Gerrit, para hacer una revisión de código solo debemos
tener la versión antigua y nueva de nuestro código y a través de ayudas visuales podremos ver si
nuevas líneas se han añadido, modificado o eliminado.
8- Bases de datos
SQL : significa structured query language también conocida como base de datos relacionales, nos
sirve para consultar y escribir información entre otras cosas, dicho lenguaje se divide en 3 más.
DDL (data definition language) que define las estructuras, DML (data manipulation language) con
el cual se usa para llenar de información las tablas, leer, actualizar, borrar datos, etc. DCL (data
control language) con el cual se controla el acceso a la base de datos.
NoSQL: son bases de datos no relacionales, porque no se necesita el modelo entidad relación.
tienen como prioridad la accesibilidad de los datos más que la integridad, las usan las grandes
empresas para acceder rápidamente a millones de datos
Que podemos hacer con un sistema gestor de base de datos?: Podemos crear la estructura de la
base de datos, podemos escribir información y consultarla, asegurar la integridad de la base de
datos e incluso definir los permisos de quien puede acceder a esta información.
continuación veremos cuáles son los pasos a seguir para crear una base de datos
b) Diseño lógico: se trata de escoger las tecnologías necesarias para trasladar el concepto de la
idea a la realidad.
c) diseño físico: se trata de crear cada una de las tablas (modelos) en la plataforma que hayamos
creado la base de datos.
Las bases de datos de datos de SQL son de tipo relacionales ya que podemos crear relaciones en
base a claves con otras tablas
Bases de datos NoSQL: las bases de datos kay-value son usadas comúnmente para aplicaciones
rápidas con bases de datos no muy grandes, las bases de datos NoSQL mas usadas son mongoDB y
Cloud Firestore que trabajan con documentos, cassandra y redis que son tipo key-value, y por
ultimo GrapgQl que se dedica a las bases de datos con grafos .
9- DevOps/CI/CD
Según EDteam DevOps es un conjunto de cultura, procesos y herramientas que permiten entregar
actualizaciones de software a alta velocidad, garantizando la calidad del código, la estabilidad de la
aplicación y evitando el aislamiento de los equipos, a continuación veremos las etapas a seguir
para poner en práctica esta metodología,
a) Planeación: es la etapa donde se analizan los requerimientos del proyecto o de la funcionalidad
que se está solicitando, se planifica como desarrollarla según la metodología que se está
utilizando. Las herramientas más populares para llevar a cabo este paso son Jira, Asana, Trello y
Notion.
b) code: se le asignan las tareas a los programadores para escribir el código según el objetivo
solicitado. . Las herramientas más populares para llevar a cabo este paso son GitHub, GitLab,
c) build: se juntan los códigos de los programadores y se integran en máster para luego hacer una
compilación que entrega un paquete o ejecutable luego de pasar los test de integración, Las
herramientas más populares para llevar a cabo este paso son Apache Maven, Gradle
d) test: se prueba el software para garantizar que funciona según los requerimientos que se
pidieron en el paso inicial. Las herramientas más populares para llevar a cabo este paso son
Selenium, Gremlin
e) release: consiste en que luego de pasar los test de aplicación se cree una imagen, artefacto o
ejecutable (dependiendo de la metodología de desarrollo y el tipo de aplicación) listo para pasar a
producción. Las herramientas más populares para llevar a cabo este paso son Jenkins, GitHub
Actions, Gitlab
f) deploy: consiste en enviar esta imagen, paquete o ejecutable a los servidores de producción
para ser usado por los usuarios finales. Las herramientas más populares para llevar a cabo este
paso son Jenkins, GitHub Actions, Gitlab
h) monitor: consiste en usar herramientas que están siempre mirando la aplicación para saber si
está en riesgo de caerse o fallar, para atender la falla y resolverla lo más rápido posible, Las
herramientas más populares para llevar a cabo este paso son New Realy, amazon cloub watch,
graphana y prometeus
DevOps es un marco de trabajo y una filosofía en constante evolución que promueve un mejor
desarrollo de aplicaciones en menos tiempo y la rápida publicación de nuevas o revisadas
funciones de software o productos para los clientes.
9.2 CI/CD es un conjunto de técnicas que nos permiten pasar por el siclo de vida DevOps de
manera automática.
CI (Continuous Integratión) consiste en crear pruebas automatizadas, que cada vez que un
programador envíe su código este corra de manera automática revisando que este cumpla con
ciertos estándares o políticas establecidas previamente, y si no entra en conflicto con otro código
ya existente será aprobado.
9.4 Herramientas y servicios más conocidos en el mercado que brindan el soporte CI/CD
Ansible, Helms, Jenkins, GitLab (CI), GitHub (GitHub Actions) y Bitbucket Pipelines.
10.1 contenedores: es un entorno de ejecución para un software que contiene todas las
dependencias que necesita dicho software, contiene todo lo que necesita el sistema operativo
para funcionar, lo interesante es que es un paquete aislado del sistema que puede tener versiones
distintas de múltiples aplicaciones sin que hagan conflicto con las que tenemos en nuestro
ordenador.
Docker File: es un documento de texto que contiene todos los comandos e instrucciones para
instalar todas las dependencias de una aplicación, con ese docker file se crea una imagen.
Docker Image: básicamente es un ejecutable que ya contiene todas las dependencias y el software
que vamos a correr allí, a partir de esa imagen se puede crear un contenedor.
Tomando en cuenta que la imagen se crea a partir de un docker file que es un documento de texto
nosotros podemos llevar el registro de versiones utilizando Git, a esta acción se le llama registro
de docker y es la manera en la que podemos asegurarnos que nuestro equipo de desarrollo y
nosotros estamos en la versión correcta del contenedor cada quien en su entorno.
11- Cloud
lo que conocemos como cloud (nube) básicamente es computación por internet, es decir que en
lugar de usar la velocidad, almacenamiento y procesamiento de nuestra computadora usaremos
los recursos de otro ordenador al cual nos conectaremos vía internet.
Existen diferentes servicios que se entregan a través de la nube algunos de los más comunes son
los siguientes
12 Testing
b) Tipos de test:
Funcionales:
Funcionalidad
Test de errores
Apoyo en los requerimientos del usuario final/cliente
Test no Funcionales:
Rendimiento
Tiempos de carga
Stress test
Escalabilidad
Accesibilidad
UX/UI
Test de seguridad
Modelo en cascada (lineal): se caracteriza por testear cada fase con respecto a la anterior
Modelo iterativo – repetitivo: se caracteriza por tratar cada fase del testing como un incremento
cada fase suele estar definidas por sprints.
Modelo de testing en V: este modelo es una especie de evolución del testing en cascada.
La cola de mensajes o Message Queuing (en ingles) consiste en establecer una conexión desde el
FrondEnt al BackEnd pare hacer una solicitud esperando una respuesta con la información
solicitada, como todos sabemos los servidores a los que está conectado el BackEnd tienen recursos
finitos, y en un uso masivo de nuestra aplicación donde tendríamos múltiples solicitudes del
FrontEnd al BackEnd estos recursos llegarían a su límite, ¿que tendríamos que hacer si los recursos
del BackEnd llegaran a colapsar? En ese caso la solución sería hacer una cola de mensajes la cual es
una interfaz intermedia que nos permite almacenar en cache los mensajes que van llegando y
después llevarlos de forma ordenada al BackEnd para no colapsar el sistema.
14- Cliente-Servidor
14.1 Definiciones: consiste en conectar un dispositivo a través de internet con un servidor para
solicitar una información específica, la página a solicitar se conecta con sus servidores, accede a
una base de datos, realiza una serie de cálculos y devuelve la información al dispositivo que la
solicito previamente.
Una aplicación cliente es un sistema a través del cual podemos visitar distintas páginas web e
interpretar esos HTML, CSS y JavaScript que nos envían los servidores que alojan esas páginas
web. Las aplicaciones cliente más usadas a día de hoy son los navegadores chrome de google y
safari de Apple, sin embargo algunas aplicaciones como PhotoShop también acceden a internet
tanto para hacer actualizaciones, descargar recursos, etc, eso también se consideraría una
aplicación cliente.
* Estructuras de 1 nivel: consiste en tener todo en un mismo dispositivo (cliente, servidor, base de
datos
* estructura N niveles: consiste en acceder desde el dispositivo cliente a todos los niveles que haga
falta para obtener la información solicitada incluso a múltiples servidores.
Servidores Web: son aquellas aplicaciones de servidor que nos sirven todos los archivos necesarios
para que podamos renderisar una web a través de una navegador moderno.
File Servers o FTP (file transfer protocole): la información que se intercambia en este tipo de
servidores son solo archivos, MEGA o Google Drive son de este tipo.
Email Servers: como su nombre lo indica son aplicaciones que nos permiten tener un servicio de
Email.
VPN Servers: Significa Virtual Points of Network, nos permiten acceder a diferentes servicios que
están alojados de forma local pero remota.
Proxy Servers: es similar al VPN con la diferencia que este nos permite acceder a ciertas
direcciones haciéndonos pasar como si estuviéramos en otra dirección IP.
15- MVC
Se trata del patrón de diseño y arquitectura de aplicaciones más utilizado actualmente sobretodo
en desarrollo web, cada sigla representa una función específica dentro del desarrollo de nuestra
aplicación
V (vista): su función es mostrar los datos del modelo y proporcionar la interactividad al usuario.
¿Porque es importante conocer los protocolos HTTP? Todas las peticiones de web necesitan un
protocolo. La web se basa en el protocolo HTTP y es este protocolo el que nos permite
intercambiar información en esta.
¿Qué es un protocolo? Es un conjunto de reglas que tenemos que seguir para obtener un
resultado.
16.1 Introducción a HTTP: son las siglas de Hyper Text Transfer Protocol y es el estándar de
comunicaciones vía Web, hace referencia a la conexión vía internet para obtener Datos, permite la
transferencia de HTML, CSS y JS para el comportamiento visual de la web, archivos, videos, etc
A continuación veremos un ejemplo con el método GET de cómo obtenemos diferentes partes que
conforman nuestra página web, incluso partes que no son indispensables pero si complementarias
como podría ser una imagen, un video incluso un anuncio:
Mensaje y estructura
17 API RESTFul
17.1 API: La interfaz de programación de aplicaciones, conocida también por la sigla API, en inglés,
application programming interface, es un conjunto de subrutinas, funciones y procedimientos que
ofrece cierta biblioteca para ser utilizada por otro software como una capa de abstracción. A
continuación veremos una serie de términos que se usan en esta área de las APIs.
* Interfaz: es una capa de abstracción para que dos sistemas se comuniquen entre ellos.
* API: es una interfaz para que se comuniquen aplicaciones y programas de software para
compartir datos entre ellos.
* Arquitectura de software: es la forma en la que está diseñado un sistema, su organización,
comunicación y las funciones que cumplen cada uno de ellos.
* Servicio Web: es un sistema que permite la comunicación entre equipos que estén en una red,
tienen que seguir ciertos estándares, seguir el protocolo HTTP y es la base de las APIS remotas.
* Rest: es una arquitectura, las APIs pueden ser de varios tipos uno de estos es la APIRest, la
arquitectura Rest significa Representational State Transfer (representación de transferencia de
estado) con esta arquitectura podemos guardar datos en cache, impedir que el estado se envíe en
las peticiones, definir qué datos permitimos que otra aplicación acceda, revise o manipule de
nuestra aplicación, cuando se crea un servicio web usando la arquitectura Rest se está hablando
de ResteFul .
* XML: significa Extensible Markup Language, es un formato para enviar datos que se ha usado
casi siempre ya que es un formato tradicional.
* JSON: son las siglas de JavaScript Object Notation, es el formato más usado a día de hoy para
transferir información ya que es fácil de entender y manipular.
* Token: es un objeto que contiene todos los datos de autenticación que se le otorgan cuando
iniciamos sesión en alguna web por medio de una APIRest privada por primera vez. Cada vez que
iniciemos sesión la API nos devolverá este objeto y cada vez que solicitemos una información
adicional el servidor verificara si el token está vigente y ya no nos pedirá una nueva autenticación,
el formato más común para los tokens en APIs Rests es JWT.
Tipos de API
Desarrollar una API Rest
18 SOAP
18.1 significa Simple Object Acces Protocol (protocolo de acceso simple a objetos) es un protocolo
bien definido, es stateless es decir que no funciona con sesiones dentro del servidor aunque
puede configurarse a stateful para que mantenga ciertas sesiones dentro del propio servidor.
a diferencia de Rest aquí solo podemos manejar archivos XML, al ser un protocolo bien definido
este tipo de reglas los hace que sea menos flexible y solicite más recursos para enviar y recibir
datos.
A diferencia de Rest que solo usa el protocolo HTTP Soat usa HTTP, SMPT, UDP y otros
19 introducciones a gRPC
19.1 gRPC significa Google Remote Procedure Call es una arquitectura y/o un framework de
comunicación entre diferentes servicios a contunuacion veremos unas características de esta
tecnología
El Stub es una parte de nuestra aplicación que nos proporciona los mismos métodos y/o funciones
que nos brinda el servidor gRPC
20 licencias
20.1 licencias de software es un contrato a través del cual una persona que es el titular de los
derechos de explotación de un determinado software, establece las condiciones a través de las
cuales otra u otras personas pueden acceder a usar ese software de acuerdo con las condiciones
que el mismo estableció.
Licencias de código abierto permisivas: se puede crear una obra derivada sin que esta
sin que esta tenga obligación de protección alguna. Como ejemplo tenemos las
licencias de Apache, PHP, BSD, PSFL (Python Software Fundation License), MIT
(Massachusetts Institute of Technology)
Licencias de código abierto robustas débiles: contiene una clausula que obliga a que
las obras derivadas o modificaciones que se realicen al software original se deban
licenciar bajo los mismos términos y condiciones de la licencia original Pero NO OBRAS
DERIVADAS. Como ejemplo tenemos MPL (Mozilla Public License), CDDL (Common
Development and Distribution License) y APSL (Apple Source License).
Licencias de código abierto robustas fuertes: contiene una clausula que obliga a que
las obras derivadas o modificaciones que se realicen al software original se deban
licenciar bajo los mismos términos y condiciones de la licencia original. Como ejemplos
tenemos las licencias de EPL (Eclipse Public License), GPL (GNU Public License) y AGPL
(GNU Affero General Public License)
21- Proteccion de Datos
21.1 MD5 SHA: son algoritmos sifrados de hash seguro, nos sirven para codificar mensajes
El MD5 se creo en 1991 reemplazando al MD4 pero fue vulnerado ese mismo año y hasta el dia de
hoy se considera inseguro por lo tanto no se utiliza salvo en algunos casos para asegurar la
integridad de alicaciones que descarguemos.
El SHA es el mas utilizado a dia de hoy, ha tenido varias verciones, SHA-0, SHA-1, SHA-2. SHA-3
pero el que se usa a dia de hoy es el SHA-256.
SSL/TLS significan Secure Sockets Layer y Transport Layer Security siendo la segunda su version
mas moderna. Utiliza certificados X 509 y Criptografia asimetrica, es un protocolo de seguridad
que se utiliza en internet para conexiones entre cliente-servidor o servidor-servidor.
SSH significa Secure Shell es el protocolo que usamos hoy en dia para conectarnos con un servidor
remoto y ya esta cifrado por defecto.
PGP significa Pretty Good Privacy es un software que se suele utilizar en la dark wed para
intercambiar datos personales, es sistema tambien usa criptografia asimetrica.