En este desafío harémos un proyecto de software todos los días para mejorar nuestras habilidades técnicas como desarrolladores BACKEND y FRONTEND, lograrémos estos objetivos practicando todos los días porque la práctica hace al maestro.
Important
Si quieres añadir un reto a los proyectos abre un issue con el titulo del proyecto y las especificaciones del mismo Es importante que coloques bien los requisitos para saber en que número lo colocamos
Binary Brains es un club de desarrollo de software que se dedica a proporcionar un entorno propicio para el crecimiento profesional de los entusiastas del desarrollo de software. Su misión abarca la creación de un ambiente seguro y respetuoso que valore a todos los miembros en su viaje de aprendizaje, ofreciendo recursos de alta calidad, capacitación y tutoría para mejorar habilidades técnicas, fomentar la innovación y promover la participación activa en eventos colaborativos.
Además, el club busca inculcar valores de integridad, ética y responsabilidad en la tecnología, inspirando a sus miembros a alcanzar metas sobresalientes en sus carreras y contribuir al avance de la tecnología, destacando el compromiso con la excelencia y el constante deseo de superar desafíos en busca de nuevos horizontes tecnológicos.
Usaremos este repositorio para enseñar desarrollo de software en el club Binary Brains , se seguirá esta ruta y para practicar realizarán los proyectos.
Tip
Te recomiendo que revises los recursos adicionales para complementar los temas vistos de cada bloque
También revisa nuestra misión y visión , junto con nuestro código de conducta
- Identificar los elementos clave que constituyen la infraestructura de Internet.
- Explorar cómo los datos se transmiten a través de la red global.
- Familiarizarse con el protocolo HTTP y su importancia en la comunicación web.
- Explorar la diversidad de servidores web y sus características distintivas.
1.1 ¿Como funciona el internet?
1.2 Protocolos HTTP
1.3 Servidores
1.4 Browser
1.5 Host
- Comprender la importancia de un gestor de versiones: Reconocer las ventajas de utilizar un sistema de control de versiones como Git.
- Instalación de GIT: El alumno deberá de saber instalar git y configurarlo correctamente para su funcionamiento.
- Comandos básicos: El alumno debe de conocer los comandos básicos para el manejo correcto de un gestor de versiones.
- Trabajando en equipo: Saber trabajar en equipo con uso de ramas y PR's para poder realizar diferentes funcionalidades a la vez.
2.1 Gestor de versiones
2.2 Instalango GIT
2.2.1 Configuración de GIT
2.2.2 Claves SSH
2.2.3 Conectando con Github
2.2.3.1 Personalizando tu perfil de Github
2.3 Comandos básicos
2.3.1 git init
2.3.2 git status
2.3.3 git add
2.3.4 git commit
2.3.5 git log
2.3.6 git checkout
2.4 Fichero .gitignore
2.5 Trabajando con ramas
2.5.1 git checkout -b
2.5.2 git branch
2.5.3 git checkout
2.5.4 git rebase
2.5.5 git merge
2.5.6
2.6 Pull Request
2.6.1 git push
2.6.2 git pull
2.6.3 Creando una pull request
- 🔓 Día 0 : Crea tu Github Readme 👋
- Identificar y aplicar la sintaxis básica de HTML, incluyendo etiquetas de apertura y cierre.
- Diferenciar entre elementos, atributos y valores en el contexto de HTML.
- Comprender el propósito y la aplicación de estas etiquetas en la estructura de una página web.
- Definir qué es el doctype y su papel en la declaración del tipo de documento.
- Conocer los principios fundamentales de la accesibilidad web.
- Comprender los conceptos básicos de SEO y su relevancia para la visibilidad en los motores de búsqueda.
- Organizar el contenido de la página de manera clara y efectiva para facilitar la navegación.
3.1 Básicos de HTML
3.1.1 ¿Qué es HTML?
3.1.2 Etiquetas básicas
3.1.3 Elementos, atributos y valores
3.1.4 ¿Qué es el DOCTYPE?
3.2 Accesibilidad
3.2.1 Importancia de la accesibilidad web
3.2.2 Atributos de accesibilidad
3.2.3 Voice browser para la accesibilidad
3.3 Encontrabilidad
3.3.1 ¿Qué es UX/UI?
3.3.2 Principios del UX/UI
3.3.3 ¿Qué es la encontrabilidad?
3.3.4 Ejemplo práctico de encontrabilidad
3.4 SEO
3.4.1 ¿Qué es el SEO?
3.4.2 ¿Cómo funciona el SEO?
3.4.3 Implementando el SEO en el HTML
- Identificar y aplicar la sintaxis básica de CSS, incluyendo reglas, propiedades y valores.
- Comprender cómo enlazar hojas de estilo externas e internas.
- Aplicar el selector universal y selectores básicos como elemento, clase e ID.
- Comprender cómo afectan estos selectores a los elementos en una página.
- Comprender el concepto del box model y sus componentes: margen, borde, relleno y contenido.
- Comprender los conceptos básicos de Flexbox y Grid.
- Utilizar Flexbox para crear diseños flexibles y alinear elementos en un contenedor.
- Entender las propiedades de position, como static, relative, absolute y fixed.
4.1 Básicos de CSS
4.1.1 ¿Qué es CSS?
4.1.2 Agregando una hoja de estilos a tu web
4.1.3 Sintaxis básica
4.2 Selectores
4.2.1 Para que sirven los selectores
4.2.2 El selector universal
4.2.3 Tipos de selectores
4.3 Box model
4.3.1 ¿Qué es el box model?
4.3.2 Elementos del box model
4.3.3 Posicionando elementos
4.4 Flex y Grid
4.4.1 ¿Qué es flex?
4.4.2 ¿Qué es Grid?
4.4.3 ¿Cuándo utilizar flex y cuando grid?
4.4.4 Centrando un div
4.5 Position
4.5.1 Propiedades
4.5.2 Absolute vs Relative
4.5.3 Centrando un div
- 🔓 Día 1: Hola mundo! 👋
- 🔓 Día 2: Tarjeta de presentación 💳
- Comprender el concepto de Java y su posición en el entorno de desarrollo; Maquina virtual, compilador y lenguaje
- Versiones de Java: Identificar las ediciones de java, centrandoce en las diferencias entre Java SE y Java EE
- Conocer las versiones de JDK: Diferencias entre las versiones LTS y no LTS y comprender su impacto en el desarrollo
- Comprender los paquetes de Java: Familiarizarse con el concepto de paquetes en Java y su papel en la organización de código
- Entender como ejecutar correctamente una aplicación de Java
- Comprender el concepto de variables: Saber identificar que es una variable y su función en el almacenamiento de datos, saber con que tipo de datos trabaja Java por defecto y como aplicar técnicas de casting
- Manejar operaciones de Java: Conocer los diferentes operadores de Java y como aplicarlos a diferentes tipos de datos.
5.1 Java como entorno de desarrollo
5.1.1 ¿Qué es Java?
5.1.2 Java como lenguaje interpretado y compilado
5.1.3 Qué es la máquina virtual de Java
5.1.4 Ediciones de Java: Java SE y Java EE
5.1.5 versiones de JDK LTS y no LTS
5.2 Básicos de Java
5.2.1 Paquetes
5.2.2 Método Main
5.2.3 Comentarios y documentación con Javadoc
5.2.4 Variables
5.2.4.1 Tipos de datos
5.2.4.2 Constantes
5.2.4.3 Literales
5.2.4.4 Sistemas numéricos
5.2.4.5 Casting
5.2.5 Operadores
5.2.5.1 Aritméticos
5.2.5.2 Asignación
5.2.5.3 Incremento y decremento
5.2.5.4 Relacionales
5.2.5.5 Booleanos
5.2.5.6 Booleanos con valores no booleanos
- Comprender que es la Programación Orientada a Objetos: Conocer los principios fundamentales de la Programación Orientada a Objetos: Clases, Objetos, Encapsulamiento, Polimorfismo.
- Diferenciar entre instancia y clase: Que es lo que ocurre cuando creas un objeto
- Saber que es el encapsulamiento: Saber como aplicar encapsulamiento y comprender su importancia del mismo.
- Saber como aplicar Polimorfismo: Comprender la herencia como mecanismo de POO, distinguir entre
this
ysuper
y explirar la sobreescritura y sobrecarga de métodos como método de polimorfismo.
5.3 Introducción a Programación orientada a objetoss
5.3.1 Que es la programación orientada a objetos
5.3.2 Clases y Objetos
5.3.3 Métodos y Atributos
5.3.4 Referencias a objetos (Instancias)
5.3.5 `this`y estándares de construcción de clases
5.3.6 Encapsulamiento
5.3.6.1 ¿Qué es encapsulamiento?
5.3.6.2 Como lograrlo
5.3.6.3 Modificadores de acceso
5.3.6.4 Métodos get
5.3.6.5 Métodos set
5.2.7 Polimorfismo
5.2.7.1 Herencia
5.2.7.2 Diferencias entre this y super
5.2.7.3 Sobre escritura de métodos
5.2.7.4 Sobre carga de métodos
5.2.7.5 Polimorfismo
5.2.7.6 Simplicidad de código gracias al polimorfismo
5.4 Interfaces gráficas básicas con JavaFX
- Comprender el uso de modificadores Final y Static
- Saber utilizar Wrapper clases para convertir tipos primitivos en objetos y aprovechar sus métodos.
- Entender el concepto de excepciones y su clasificación. Sabiendo como manejar excepciones mediante bloques try, catch y finally, además de utilizar throw y throws para gestionar y lanzar excepciones.
5.5 Uso de Final
5.6 Uso de Static
5.7 Wrapper Classes
5.7.1 Métodos de las Wrapper Classes
5.8 Exceptions
5.8.1 Stack Tree
5.8.2 ¿Qué es una exception?
5.8.2.1 Tipos de exception
5.8.2.2 RuntimeException
5.8.2.3 IOException
5.8.3 Como manejar exceptions
5.8.3.1 try y catch
5.8.3.2 finally
5.8.4 Como arrojar exceptions
5.8.4.1 throw
5.8.4.2 throws
5.8.5 Como crear una exception personalizada
5.8.5.1 Herencia de Throwable
5.8.6 ¿Qué es un Error?
- Objetivo 1
5.9 Más sobre polimorfismo
5.9.1 Clases abstractas
5.9.2 Sobre escritura de métodos abstractos
5.9.3 Herencia múltiple
5.9.4 Interfaces
5.9.5 Interfaces vs Clases abstractas
5.9.6 Polimorfismo con interfaces y herencia
- Comprender la Jerarquía de Colecciones: Familiarizarse con la jerarquía de interfaces y clases en la API Collection. Esto incluye entender la relación entre interfaces como
List
,Set
yMap
, y las clases que las implementan, comoArrayList
,HashSet
yHashMap
. - Uso de
Generics
yWildCards
: Comprender la importancia de la utilización deGenerics
yWildCards
. - Dominar Operaciones Básicas: Aprender a realizar operaciones fundamentales en colecciones, como agregar, eliminar y buscar elementos. Se hará énfasis en la eficiencia y complejidad de estas operaciones en diferentes implementaciones.
- Manejar Iteradores: Adquirir habilidades para trabajar con iteradores, lo que facilitará la navegación a través de los elementos de una colección de manera segura y eficiente.
- Seleccionar la Implementación Adecuada: Entender las diferencias entre las implementaciones de la interfaz
Collection
y aprender a seleccionar la estructura de datos adecuada para escenarios específicos. Se pondrá especial énfasis en conocer cuándo utilizarList
,Set
oMap
, dependiendo de las necesidades del problema.
5.10 Collections
5.10.1 Introducción a Collections y Generics
5.10.1.1 Generics
5.10.1.1.1 Clases parametrizadas
5.10.1.1.2 Métodos parametrizados
5.10.1.1.3 Convenciones
5.10.1.2 Wildcards
5.10.2 API Collection
5.10.2.1 Métodos
5.10.2.2 List
5.10.2.2.1 ArrayList
5.10.2.2.2 Vector
5.10.2.2.2.1 Stack
5.10.2.3 Queue
5.10.2.3.1 LinkedList
5.10.2.4 Set
5.10.2.4.1 HashSet
5.10.2.4.2 TreeSet
5.10.2.4.3 LinkedHashMap
5.10.2.4.4 EnumSet
5.10.3 Lugares donde utiliza Collection
5.10.3.1 Map
5.10.3.2 HashMap
5.10.3.3 LinkedHashMap
5.10.3.4 TreeMap
5.10.3.5 EnumMap
6. Programación Funcional
6.1 Lamdas
6.2 Stream
6.2.1 Operaciones de filtrado
6.2.1.1 Mapeo
6.2.1.2 Reducción
5.2.1.3 Recolección
6.3 Metodos de Referencia
- 🔓 Día 3: Conversor de divisas 💵
- 🔓Día 4: Conversor de Binario a Decimal 📟
- Dominar la creación y validación de formularios HTML, junto con la comprensión de los métodos de peticiones HTTP asociados (POST y GET).
- Entender los conceptos básicos de la arquitectura cliente-servidor.
- El alumno se familiarizará con un gestor de dependencias, comprendiendo su utilidad y el como trabajar correctamente con el
- Desarrollar habilidades integrales en el manejo de Servlets en Java, abarcando la configuración de proyectos web con Apache Tomcat, la implementación de Java Server Pages (JSP), y la gestión avanzada de sesiones, cookies, parámetros, y configuraciones de servlets, asegurando un dominio completo del ciclo de vida de un Servlet
7.1 Repaso de protocolos HTTP
7.2 Formularios HTML
7.2.1 Métodos de peticiones HTTP
7.2.1.1 POST
7.2.1.2 GET
7.2.2 Etiquetas HTML
7.3 Arquitectura Cliente Servidor
7.4 Gestor de dependencias
7.4.1 Maven
7.4.1.1 Archivo pom.xml
7.4.1.2 Ciclo de vida y fases de Maven
7.4.1.3 Comandos Maven
7.4.1.4 Plugins, artefactos, dependencias, versiones y repositorios
7.5 Servlets
7.5.1 Java Server Pages
7.5.1.1 Etiquetas JSP
7.5.1.2 Etiquetas Personalizadas
7.5.2 Apache Tomcat
7.5.3 Sesiones y Cookies
7.5.4 Ciclo de vida de un Servlet
7.5.5 Configurar un proyecto web con Servlets
7.5.6 WEB.xml
7.5.6.1 Notaciones HttpServlet, HttpServletRequest y HttpServletResponse
7.5.6.1 Mapeo de Servlets
7.5.6.2 Páginas por defecto y error
7.5.6.3 Seguridad
7.5.7 Manejo de parámetros en Servlets
7.5.8 Manejo de sesiones
7.5.8.1 Crear y obtener una sesión en un Servlet.
7.5.8.2 Almacenar y recuperar datos en la sesión.
7.5.8.3 Invalidar una sesión.
7.5.9 Trabajo con cookies en Servlets:
7.5.9.1 Crear y enviar cookies desde un Servlet.
7.5.9.2 Recuperar y utilizar cookies en un Servlet.
7.5.9.3 Eliminar cookies en un Servlet.
- 🔓 Día 5 : Calcuadora de propinas 💸
- Comprender los principios fundamentales del diseño responsivo y su importancia en la experiencia del usuario.
- Implementar media queries para adaptar la presentación de la interfaz de usuario a diferentes dispositivos y tamaños de pantalla.
- Estudiar la propiedad @keyframes para crear animaciones fluidas y personalizadas.
- Entender cómo optimizar el rendimiento de las animaciones y utilizar las propiedades de aceleración y desaceleración.
- Estudiar la importancia del rendimiento y las mejores prácticas, como la minimización y combinación de archivos CSS para reducir la carga de la página.
8.1 Responsive
8.1.1 Principios del diseño responsive
8.1.2 Importancia del diseño adaptativo en la UX/UI
8.1.3 Implementación de media queries para diferentes dispositivos
8.2 Flexbox y Grid para diseños avanzados
8.2.1 Repaso de flex y grid
8.2.2 Flexbox avanzado
8.2.3 Grid Avanzado
8.2.4 Layouts avanzados
8.3 Animaciones
8.3.1 Conceptos de animaciones en CSS
8.3.2 Creación de animaciones personalizadas con @keyframes
8.3.3 Mejora de rendimiento en animaciones
8.3.4 Propiedades de aceleración y desaceleración
8.4 Temas avanzados
8.4.1 Especificidad
8.4.2 Selectores y pseudo-elementos avanzados
8.4.3 Implementación de variables en CSS
8.4.4 Temas personalizados con variables
8.4.5 Minimización de combinaciones para mayor rendimiento
- Comprender la importancia de JavaScript en el desarrollo web.
- Entender los conceptos de declaración de variables y su scope.
- Dominar la creación de llamadas de funciones.
- Comprender el concepto de hoisting.
- Comprender y explorar el concepto de ciudadanos de primera clase.
- Entender la creación y manipulación de objetos en JavaScript.
- Aplicar el operador spead operator para simplificar la manipulación de objetos.
- Repasar los principios básicos de la programación funcional
- Implementar el manejo de errores mediante try-catch.
- Comprender la programación asíncrona.
- Entender el concepto de generadores e iteradores.
- Comprender el manejo de eventos en el navegador.
- Explorar las capacidades del almacenamiento local y de sesión.
- Utilizar fetch y axios para realizar peticiones web.
6. Javascript
6.1 ...
OK pero no voy a hacer 100 carpetas para guardar los proyectos a mano, para eso mejor hice este pequeño bash scritp:
#!/bin/bash
for i in {1..100}
do
mkdir "DAY$i"
done
# | Challenge | Status | Para portafolio |
---|---|---|---|
1 | Hello World | ✅ | |
2 | Business Card | ✅ | |
3 | Currency Calculator | ✅ | |
4 | Binary and Decimal Converter | ✅ | |
5 | Tips calculator | ✅ | |
6 | Calculator | ||
7 | Color visualizer | ||
8 | Password Generator | ||
9 | Pomodoro Timer | ||
10 | Encryptor | ||
11 | Digital Clock | ||
12 | Landing page | ||
13 | Crush web <3 | ||
14 | Catalogue | ||
15 | To-Do List | ||
16 | Quiz | ||
17 | Personality test | ||
18 | Dice simulator | ||
19 | Rulet | ||
20 | Tick tack toe | ||
21 | Paper scissors rock | ||
22 | Snake | ||
23 | Memory | ||
24 | Puzze | ||
25 | Sudoku | ||
26 | Tetris | ||
27 | Minesweeper | ||
28 | Battleship game | ||
29 | Pacman | ||
30 | Paint | ||
31 | Chess | ||
32 | ORM architecture | ||
33 | API REST | ||
34 | Notion widget | ||
35 | Discord bot | ||
36 | Telegram bot | ||
37 | Guess the word | ||
38 | Programming languages Dashboard | ||
39 | Notes App | ||
40 | Login system | ||
41 | Voting System | ||
42 | ATM System | ||
43 | Personal Blog | ||
44 | Browser | ||
45 | Charity Finder | ||
46 | Library System | ||
47 | News web | ||
48 | Racking movies app | ||
49 | Real-time chat | ||
50 | Twitter clone | ||
51 | Pinterest Clone | ||
52 | Kahoot | ||
53 | Speed typing test | ||
54 | Habit tracker | ||
55 | Trello clone | ||
56 | Calendar App | ||
57 | E-commerce | ||
58 | Travels reservations app | ||
59 | E-learning | ||
60 | Pokemon battle | ||
61 | Coding Battle | ||
62 | Portfolio |
# | Challenge | Status | Para portafolio |
---|---|---|---|
Snippet | |||
Sistema de Automatización de Mensajes | |||
Filtro para TikTok | |||
Minecraft Mod | |||
Wiki "Recetas de Crafteo Minecraft" | |||
Endless Runner | |||
Among Us para Programadores | |||
Extensión de Google Chrome |